Outils pour utilisateurs

Outils du site


brouillon10

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
brouillon10 [2026/04/29 02:21] nanakibrouillon10 [2026/04/29 13:54] (Version actuelle) nanaki
Ligne 3: Ligne 3:
 <head> <head>
 <meta charset="UTF-8"> <meta charset="UTF-8">
-<title>Simulateur Build V4</title>+<title>Simulateur RPG</title>
  
 <style> <style>
-body{font-family:Arial;padding:20px;background:#1e1e1e;color:#eee} +body { font-family: Arial; background:#0b1a13; color:#e0d3a3padding:20px;
-select{width:260px;margin:5px+h1,h2 { color:gold;
-h2{margin-top:20px+.box { border:1px solid gold; padding:10px; margin-bottom:15px;
-.box{background:#2a2a2a;padding:10px;margin-top:10px;border-radius:5px}+select,input { margin:3px;
 +button { padding:8px; margin:5px; background:gold; border:none;}
 </style> </style>
 </head> </head>
Ligne 15: Ligne 16:
 <body> <body>
  
-<h1>Simulateur Build</h1>+<h1>Simulateur</h1>
  
-<!-- RACE --> +<div class="box"> 
-<h2>Race</h2> +Race 
-<select id="raceSelect"> +<select id="race"></select> 
-<option>Elfe</option> +</div>
-<option>Nain</option> +
-<option>Géant</option> +
-<option>Olympien</option> +
-<option>HS</option> +
-</select> +
- +
-<!-- EQUIPEMENT --> +
-<h2>Équipement</h2> +
- +
-<select id="head"></select><br+
-<select id="neck"></select><br> +
-<select id="cape"></select><br> +
-<select id="body"></select><br> +
-<select id="rightHand"></select><br> +
-<select id="leftHand"></select><br> +
-<select id="feet"></select><br> +
-<select id="ring"></select><br> +
- +
-<!-- FILTRE SKILL --> +
-<h2>Filtre compétences</h2> +
-<select id="filter"> +
-<option value="all">Toutes</option> +
-<option value="cac">Corps à corps</option> +
-<option value="dist">Distance</option> +
-<option value="survie">Survie</option> +
-</select> +
- +
-<!-- SKILLS --> +
-<h2>Compétences (max 15)</h2> +
-<select id="skills" multiple size="10"></select>+
  
-<!-- RESULT --> 
 <div class="box"> <div class="box">
-<h2>Stats finales</h2>+Stats
 <div id="stats"></div> <div id="stats"></div>
 </div> </div>
  
 <div class="box"> <div class="box">
-<h2>Compétences sélectionnées</h2+Équipement<br> 
-<div id="details"></div>+Tête <select id="head"></select><br> 
 +Cou <select id="neck"></select><br> 
 +Dos <select id="cape"></select><br> 
 +Main droite <select id="rightHand"></select><br> 
 +Main gauche <select id="leftHand"></select><br> 
 +Corps <select id="body"></select><br> 
 +Anneau <select id="ring"></select><br
 +Pieds <select id="feet"></select>
 </div> </div>
 +
 +<div class="box">
 +Compétences
 +<div id="skills"></div>
 +</div>
 +
 +<button onclick="calculate()">Calculer</button>
 +<button onclick="exportWiki()">Export Wiki</button>
 +
 +<pre id="result"></pre>
  
 <script> <script>
  
-/================= RACES ================= */ +/===== DATA =====
 const races = { const races = {
-Elfe:{cc:9,ct:10,f:9,e:4,agi:9,pv:55,m:6,fm:8}, +Elfe:{cc:9,ct:10,f:9,e:4,agi:9,p:5,mvt:5,pv:55,pm:30,r:4,rm:6,fm:8,m:6}, 
-Nain:{cc:11,ct:8,f:11,e:6,agi:6,pv:50,m:3,fm:10}, +Nain:{cc:11,ct:8,f:11,e:6,agi:6,p:4,mvt:4,pv:50,pm:15,r:5,rm:4,fm:10,m:3}
-Géant:{cc:9,ct:10,f:12,e:4,agi:7,pv:65,m:5,fm:6}, +
-Olympien:{cc:10,ct:9,f:10,e:5,agi:8,pv:60,m:5,fm:7}, +
-HS:{cc:8,ct:9,f:7,e:3,agi:11,pv:45,m:5,fm:9}+
 }; };
  
-/* ================= EQUIPEMENTS ================= */+const costTable 
 +cc:[100,50,30], f:[120,55,30], e:[120,55,30], m:[110,55,35], 
 +pv:[4,2,1], mvt:[100,50,30] 
 +};
  
 const equipments = [ const equipments = [
- +{name:"Lance elfe",race:"Elfe",slot:"weapon",stats:{cc:1,f:1},magicBlock:true}, 
-{name:"Visière",slot:"head"}, +{name:"Targe",race:"Nain",slot:"defensive",stats:{cc:1,pv:10},magicBlock:true}, 
-{name:"Capuche du chasseur",slot:"head"}, +{name:"Armure elfe",race:"Elfe",slot:"torse",stats:{e:2,mvt:-1},magicBlock:true}, 
- +{name:"Arc long",race:"all",slot:"weapon2h",stats:{ct:2}}
-{name:"Collier tressé",slot:"neck"}, +
- +
-{name:"Cape de chasse",slot:"cape"}, +
- +
-{name:"Armure matelassée",slot:"body",stats:{e:1,agi:-2}}, +
-{name:"Armure de garde Sylvestre",slot:"body",stats:{e:2,m:-999}}, +
- +
-{name:"Gladius",slot:"weapon",stats:{cc:1}}, +
-{name:"Lance de garde Sylvestre",slot:"weapon",stats:{cc:1,f:1}}, +
-{name:"Arc long",slot:"weapon2h",stats:{ct:2,cc:-2}}, +
- +
-{name:"Targe",slot:"offhand",stats:{cc:1}}, +
-{name:"Bouclier Parma",slot:"offhand",stats:{e:1}}, +
- +
-{name:"Bottes de marche",slot:"feet",stats:{mvt:1}}, +
-{name:"Bottes Tâlroval",slot:"feet",stats:{mvt:2}}, +
- +
-{name:"Anneau Puissance",slot:"ring",stats:{m:1}} +
 ]; ];
  
-/* ================= SKILLS ================= */+const skills ["Fulgurance","Duelliste","Encaisser","Anguille"];
  
-const skills [+// ===== DOM ===== 
 +const raceSelect document.getElementById("race"); 
 +const statsDiv = document.getElementById("stats"); 
 +const skillsDiv = document.getElementById("skills");
  
-{name:"Attaque précise",type:"cac",desc:"+4 toucher -3 dégâts"}, +const head = document.getElementById("head"); 
-{name:"Attaque violente",type:"cac",desc:"-6 toucher +3 dégâts"}, +const neck = document.getElementById("neck"); 
-{name:"Coup d'épaule",type:"cac",desc:"Malus"}, +const cape = document.getElementById("cape"); 
-{name:"Croc-en-jambe",type:"cac",desc:"Ralentit"},+const rightHand = document.getElementById("rightHand"); 
 +const leftHand = document.getElementById("leftHand"); 
 +const body = document.getElementById("body"); 
 +const ring = document.getElementById("ring"); 
 +const feet = document.getElementById("feet");
  
-{name:"Tir précis",type:"dist",desc:"+4 toucher"}, +// ===== INIT =====
-{name:"Tir violent",type:"dist",desc:"+ dégâts"}, +
-{name:"Tir ajusté",type:"dist",desc:"Avantage"},+
  
-{name:"Encaisser",type:"survie",desc:"-25% dégâts"}, +// race 
-{name:"Anguille",type:"survie",desc:"Esquive"}, +for(let r in races)
-{name:"Couverture",type:"survie",desc:"Anti tir"}+raceSelect.innerHTML += `<option>${r}</option>`; 
 +}
  
-];+// stats 
 +for(let s in costTable){ 
 +statsDiv.innerHTML += `${s} <input type="number" id="${s}" value="0"><br>`; 
 +}
  
-/* ================= SELECT ================= */+// skills 
 +skills.forEach(s=>{ 
 +skillsDiv.innerHTML +`<label><input type="checkbox" class="sk"> ${s}</label><br>`; 
 +});
  
-const raceSelect = document.getElementById("raceSelect"); +// slots reset 
-const filter document.getElementById("filter")+function resetSlots(){ 
-const skillsSelect = document.getElementById("skills");+[head,neck,cape,rightHand,leftHand,body,ring,feet].forEach(sel=>{ 
 +sel.innerHTML = `<option value="">--</option>`
 +}); 
 +}
  
-const slots = { +// remplir équipements 
-head:document.getElementById("head"), +function fillEquip(){ 
-neck:document.getElementById("neck"), +let r = raceSelect.value;
-cape:document.getElementById("cape"), +
-body:document.getElementById("body"), +
-right:document.getElementById("rightHand"), +
-left:document.getElementById("leftHand"), +
-feet:document.getElementById("feet"), +
-ring:document.getElementById("ring"+
-};+
  
-/* ================= EQUIPEMENTS ================= */+equipments.forEach((e,i)=>{ 
 +if(e.race!=="all" && e.race!==r) return;
  
-function populateEquip(){ +if(e.slot==="weapon"||e.slot==="weapon2h"rightHand.innerHTML += `<option value="${i}">${e.name}</option>`; 
- +if(e.slot==="defensive"leftHand.innerHTML += `<option value="${i}">${e.name}</option>`; 
-Object.values(slots).forEach(s=>s.innerHTML=""); +if(e.slot==="torse") body.innerHTML += `<option value="${i}">${e.name}</option>`; 
- +}); 
-equipments.forEach((item,i)=>+}
- +
-if(item.slot==="weapon"||item.slot==="weapon2h") +
-slots.right.innerHTML += `<option value="${i}">${item.name}</option>`; +
- +
-if(item.slot==="offhand") +
-slots.left.innerHTML += `<option value="${i}">${item.name}</option>`; +
- +
-if(item.slot==="body") +
-slots.body.innerHTML += `<option value="${i}">${item.name}</option>`; +
- +
-if(item.slot==="head"+
-slots.head.innerHTML += `<option value="${i}">${item.name}</option>`; +
- +
-if(item.slot==="neck") +
-slots.neck.innerHTML += `<option value="${i}">${item.name}</option>`+
- +
-if(item.slot==="cape"+
-slots.cape.innerHTML += `<option value="${i}">${item.name}</option>`; +
- +
-if(item.slot==="feet"+
-slots.feet.innerHTML += `<option value="${i}">${item.name}</option>`; +
- +
-if(item.slot==="ring"+
-slots.ring.innerHTML += `<option value="${i}">${item.name}</option>`;+
  
 +// update
 +raceSelect.addEventListener("change", ()=>{
 +resetSlots();
 +fillEquip();
 }); });
  
-} +resetSlots(); 
- +fillEquip();
-/* ================= BLOQUAGE 2 MAINS ================= */+
  
-slots.right.addEventListener("change",()=>+// 2 mains 
-let item equipments[slots.right.value];+rightHand.addEventListener("change", ()=>{ 
 +let rightHand.value; 
 +if(v===""){ leftHand.disabled=false; return;}
  
 +let item = equipments[v];
 if(item.slot==="weapon2h"){ if(item.slot==="weapon2h"){
-slots.left.disabled true+leftHand.value=""
-slots.left.innerHTML "<option>Bloqué (2 mains)</option>";+leftHand.disabled=true;
 }else{ }else{
-slots.left.disabled = false+leftHand.disabled=false;
-populateEquip();+
 } }
-updateStats(); 
 }); });
  
-/================= SKILLS ================= */+/===== CALCUL ===== 
 +function calculate(){
  
-function populateSkills(){+let char = {...races[raceSelect.value]}; 
 +let total = 0;
  
-skillsSelect.innerHTML=""; +// stats 
- +for(let in costTable){ 
-skills.forEach((s,i)=>{ +let parseInt(document.getElementById(s).value)||0
- +char[s]+=v;
-if(filter.value!=="all" && s.type!==filter.value) return; +
- +
-let opt = document.createElement("option")+
-opt.value = i+
-opt.textContent = s.name " ("+s.type+")"; +
-opt.title s.desc; +
- +
-skillsSelect.appendChild(opt); +
- +
-});+
 } }
  
-/* ================= LIMIT ================= *+// equip 
- +[rightHand,leftHand,body].forEach(sel=>{ 
-skillsSelect.addEventListener("change",()=>{ +if(sel.value===""return
-if(skillsSelect.selectedOptions.length > 15){ +let e = equipments[sel.value]
-alert("Max 15 compétences !"); +for(let stat in e.stats){ 
-skillsSelect.options[skillsSelect.selectedIndex].selected false;+char[stat]=(char[stat]||0)+e.stats[stat];
 } }
-updateDetails(); 
 }); });
  
-/* ================= STATS ================= *+// affichage 
- +result.innerText JSON.stringify(char,null,2);
-function updateStats(){ +
- +
-let base = {...races[raceSelect.value]}; +
- +
-Object.values(slots).forEach(sel=>{ +
-let item = equipments[sel.value]; +
-if(!item || !item.stats) return; +
- +
-Object.entries(item.stats).forEach(([k,v])=>{ +
-base[k]=(base[k]||0)+v; +
-}); +
-}); +
- +
-document.getElementById("stats").innerHTML = ` +
-CC: ${base.cc} | CT: ${base.ct} | F: ${base.f} | E: ${base.e}<br> +
-Agi: ${base.agi} | M: ${base.m} | FM: ${base.fm}<br> +
-PV: ${base.pv} +
-`; +
 } }
  
-/================= DETAILS ================= */+/===== EXPORT ===== 
 +function exportWiki(){
  
-function updateDetails(){+let txt="=== Build ===\n"; 
 +txt+="Race: "+raceSelect.value+"\n\n";
  
-let selected = [...skillsSelect.selectedOptions].map(o=>skills[o.value])+document.querySelectorAll(".sk:checked").forEach(s=>
- +txt+="* "+s.parentNode.innerText+"\n";
-let html=""; +
- +
-selected.forEach(s=>+
-html += `<b>${s.name}</b> : ${s.desc}<br>`;+
 }); });
  
-document.getElementById("details").innerHTML html; +result.innerText=txt;
 } }
- 
-/* ================= INIT ================= */ 
- 
-raceSelect.addEventListener("change",()=>{ 
-populateEquip(); 
-updateStats(); 
-}); 
- 
-filter.addEventListener("change",populateSkills); 
- 
-document.querySelectorAll("select").forEach(s=>{ 
-s.addEventListener("change",updateStats); 
-}); 
- 
-populateEquip(); 
-populateSkills(); 
-updateStats(); 
  
 </script> </script>
brouillon10.1777422068.txt.gz · Dernière modification : 2026/04/29 02:21 de nanaki