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:02] nanakibrouillon10 [2026/04/29 13:54] (Version actuelle) nanaki
Ligne 1: Ligne 1:
 +
 <html> <html>
 <head> <head>
Ligne 10: Ligne 11:
 select,input { margin:3px;} select,input { margin:3px;}
 button { padding:8px; margin:5px; background:gold; border:none;} button { padding:8px; margin:5px; background:gold; border:none;}
-.error { color:red; } 
 </style> </style>
 </head> </head>
Ligne 16: Ligne 16:
 <body> <body>
  
-<h1>Simulateur Build</h1>+<h1>Simulateur</h1>
  
 <div class="box"> <div class="box">
-Race :+Race
 <select id="race"></select> <select id="race"></select>
 </div> </div>
  
 <div class="box"> <div class="box">
-Stats :+Stats
 <div id="stats"></div> <div id="stats"></div>
 </div> </div>
  
 <div class="box"> <div class="box">
-Équipement +Équipement<br> 
-<br>Tête <select id="head"></select> +Tête <select id="head"></select><br> 
-<br>Cou <select id="neck"></select> +Cou <select id="neck"></select><br> 
-<br>Dos <select id="cape"></select> +Dos <select id="cape"></select><br> 
-<br>Main droite <select id="rightHand"></select> +Main droite <select id="rightHand"></select><br> 
-<br>Main gauche <select id="leftHand"></select> +Main gauche <select id="leftHand"></select><br> 
-<br>Corps <select id="body"></select> +Corps <select id="body"></select><br> 
-<br>Anneau <select id="ring"></select> +Anneau <select id="ring"></select><br> 
-<br>Pieds <select id="feet"></select>+Pieds <select id="feet"></select>
 </div> </div>
  
 <div class="box"> <div class="box">
-Compétences (max 15) :+Compétences
 <div id="skills"></div> <div id="skills"></div>
 </div> </div>
Ligne 47: Ligne 47:
 <button onclick="calculate()">Calculer</button> <button onclick="calculate()">Calculer</button>
 <button onclick="exportWiki()">Export Wiki</button> <button onclick="exportWiki()">Export Wiki</button>
- 
-<div id="error" class="error"></div> 
  
 <pre id="result"></pre> <pre id="result"></pre>
Ligne 54: Ligne 52:
 <script> <script>
  
-// ================= DATA ================= +// ===== DATA =====
- +
-// races+
 const races = { const races = {
 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}, 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,p:4,mvt:4,pv:50,pm:15,r:5,rm:4,fm:10,m:3}, +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,p:4,mvt:5,pv:65,pm:20,r:5,rm:5,fm:6,m:5}, +
-Olympien:{cc:10,ct:9,f:10,e:5,agi:8,p:4,mvt:5,pv:60,pm:30,r:5,rm:6,fm:7,m:5}, +
-HS:{cc:8,ct:9,f:7,e:3,agi:11,p:5,mvt:6,pv:45,pm:40,r:3,rm:7,fm:9,m:5}+
 }; };
  
-// coûts 
 const costTable = { const costTable = {
-cc:[100,50,30], ct:[110,50,30], f:[120,55,30], e:[120,55,30], +cc:[100,50,30], f:[120,55,30], e:[120,55,30], m:[110,55,35], 
-agi:[95,45,25], m:[110,55,35], pv:[4,2,1], pm:[5,3,1], +pv:[4,2,1], mvt:[100,50,30]
-fm:[100,50,30], rm:[50,40,20], r:[40,30,15], mvt:[100,50,30], p:[110,85,78]+
 }; };
  
-// équipements (exemples + structure) 
 const equipments = [ const equipments = [
- +{name:"Lance elfe",race:"Elfe",slot:"weapon",stats:{cc:1,f:1},magicBlock:true}, 
-/* ================= COMMUNS ================= */ +{name:"Targe",race:"Nain",slot:"defensive",stats:{cc:1,pv:10},magicBlock:true}, 
- +{name:"Armure elfe",race:"Elfe",slot:"torse",stats:{e:2,mvt:-1},magicBlock:true}, 
-{name:"Arc",race:"all",slot:"weapon2h",stats:{cc:-1,ct:1}}, +{name:"Arc long",race:"all",slot:"weapon2h",stats:{ct:2}}
-{name:"Armure matelassée",race:"all",slot:"body",stats:{e:1,agi:-2}}, +
-{name:"Bâton de marche",race:"all",slot:"weapon",stats:{mvt:1}}, +
-{name:"Bottes de marche",race:"all",slot:"feet",stats:{mvt:1}}, +
-{name:"Bouclier Parma",race:"all",slot:"offhand",stats:{e:1,agi:-2}}, +
-{name:"Fustibale",race:"all",slot:"weapon",stats:{cc:-2,ct:1}}, +
-{name:"Gladius",race:"all",slot:"weapon",stats:{cc:1}}, +
-{name:"Sceptre",race:"all",slot:"weapon",stats:{fm:1}}, +
-{name:"Lance",race:"all",slot:"weapon",stats:{ct:1,cc:-1}}, +
-{name:"Targe",race:"all",slot:"offhand",stats:{cc:1,agi:-1}}, +
-{name:"Visière",race:"all",slot:"head",stats:{p:1,cc:-1,fm:-1}}, +
-{name:"Cape de chasse",race:"all",slot:"cape",stats:{ct:1}}, +
-{name:"Collier tressé",race:"all",slot:"neck",stats:{pv:5,pm:5}}, +
-{name:"Couronne d'Adonis",race:"all",slot:"head",stats:{rm:1}}, +
-{name:"Ceinture",race:"all",slot:"body",stats:{r:1}}, +
-{name:"Arc long",race:"all",slot:"weapon2h",stats:{ct:2,f:-1,cc:-2}}, +
-{name:"Targe renforcée",race:"all",slot:"offhand",stats:{cc:1,pv:10}}, +
- +
-/* ================= ELFES ================= */ +
- +
-{name:"Bâton du Pèlerin",race:"Elfe",slot:"weapon",stats:{mvt:1,fm:1}}, +
-{name:"Bottes Tâlroval",race:"Elfe",slot:"feet",stats:{mvt:2}}, +
-{name:"Cuirasse",race:"Elfe",slot:"body",stats:{e:1,r:2}}, +
-{name:"Lance de garde Sylvestre",race:"Elfe",slot:"weapon",stats:{cc:1,f:1}}, +
-{name:"Sceptre de mage",race:"Elfe",slot:"weapon2h",stats:{m:1,fm:1}}, +
-{name:"Arc Ensorcelé",race:"Elfe",slot:"weapon2h",stats:{ct:1,rm:2,cc:-1}}, +
-{name:"Armure de garde Sylvestre",race:"Elfe",slot:"body",stats:{e:2,mvt:-1},magicBlock:true}, +
-{name:"Toge de feuillage",race:"Elfe",slot:"body",stats:{fm:1,agi:1,pv:5}}, +
-{name:"Marque Forestière",race:"Elfe",slot:"neck",stats:{pm:10,r:1}}, +
-{name:"Capuche du chasseur",race:"Elfe",slot:"head",stats:{ct:1,r:1}}, +
- +
-/* ================= NAINS ================= */ +
- +
-{name:"Cotte de mailles",race:"Nain",slot:"body",stats:{e:2,agi:-4}}, +
-{name:"Labrys",race:"Nain",slot:"weapon",stats:{cc:1,f:1}}, +
-{name:"Marteau de guerre",race:"Nain",slot:"weapon2h",stats:{f:2,cc:-1}}, +
-{name:"Targe renforcée naine",race:"Nain",slot:"offhand",stats:{cc:1,pv:10}}, +
-{name:"Armure runique",race:"Nain",slot:"body",stats:{e:1,pm:8}}, +
-{name:"Cape dorée",race:"Nain",slot:"cape",stats:{m:1,fm:1},magicBlock:true}, +
-{name:"Solerets",race:"Nain",slot:"feet",stats:{mvt:1,pm:5,pv:5}}, +
-{name:"Casque grossissant",race:"Nain",slot:"head",stats:{ct:2,p:-1}}, +
- +
-/* ================= GÉANTS ================= */ +
- +
-{name:"Bouclier Clipeus",race:"Géant",slot:"offhand",stats:{e:1,pv:10}}, +
-{name:"Masse d'arme",race:"Géant",slot:"weapon",stats:{cc:1,f:1}}, +
-{name:"Hallebarde de pierre",race:"Géant",slot:"weapon",stats:{cc:2,f:-1}}, +
-{name:"Bâton de shaman",race:"Géant",slot:"weapon2h",stats:{fm:2,pv:-5}}, +
-{name:"Javelot lourd",race:"Géant",slot:"weapon",stats:{f:2,ct:-1,cc:-1}}, +
-{name:"Broigne",race:"Géant",slot:"body",stats:{e:2,f:-1}}, +
-{name:"Fétiche de shaman",race:"Géant",slot:"offhand",stats:{r:2,pm:5}}, +
-{name:"Bottes incandescentes",race:"Géant",slot:"feet",stats:{mvt:1,r:1,pv:5}}, +
-{name:"Médaillon hanté",race:"Géant",slot:"neck",stats:{cc:1,ct:1}}, +
- +
-/* ================= HS ================= */ +
- +
-{name:"Bâton de sage",race:"HS",slot:"weapon2h",stats:{m:1,agi:1}}, +
-{name:"Orbe de mana",race:"HS",slot:"weapon2h",stats:{m:1,rm:1}}, +
-{name:"Cape de mage",race:"HS",slot:"cape",stats:{fm:1,rm:1}}, +
-{name:"Armure de fourrure",race:"HS",slot:"body",stats:{e:2,rm:-3}}, +
-{name:"Ceste",race:"HS",slot:"weapon",stats:{f:1,cc:1}}, +
-{name:"Collier d'apaisement",race:"HS",slot:"neck",stats:{pv:10,pm:5}}, +
-{name:"Bottes de voleur",race:"HS",slot:"feet",stats:{mvt:1,agi:1}}, +
-{name:"Sarbacane",race:"HS",slot:"weapon",stats:{ct:1,f:10,cc:-1}}, +
-{name:"Bouclier en lianes",race:"HS",slot:"offhand",stats:{cc:1,agi:1}}, +
- +
-/* ================= OLYMPIENS ================= */ +
- +
-{name:"Armure hoplitique",race:"Olympien",slot:"body",stats:{e:1,m:1}}, +
-{name:"Bouclier Ancile",race:"Olympien",slot:"offhand",stats:{e:1}}, +
-{name:"Diadème",race:"Olympien",slot:"head",stats:{r:1,rm:2}}, +
-{name:"Pilum",race:"Olympien",slot:"weapon",stats:{ct:1,f:1,cc:-1}}, +
-{name:"Spatha",race:"Olympien",slot:"weapon",stats:{cc:1,f:1}}, +
-{name:"Sceptre de puissance",race:"Olympien",slot:"weapon",stats:{m:1,pm:8}}, +
-{name:"Lame Sainte",race:"Olympien",slot:"weapon",stats:{cc:1,m:1}}, +
-{name:"Tiare d'Oracle",race:"Olympien",slot:"head",stats:{fm:1,p:1}}, +
-{name:"Cnémides",race:"Olympien",slot:"feet",stats:{mvt:1,rm:1,r:1}}, +
- +
-/* ================= ANNEAUX ================= */ +
- +
-{name:"Anneau Caprice",race:"all",slot:"ring",stats:{fm:1}}, +
-{name:"Anneau Férocité",race:"all",slot:"ring",stats:{f:1}}, +
-{name:"Anneau Horizon",race:"all",slot:"ring",stats:{p:1}}, +
-{name:"Anneau Prétention",race:"all",slot:"ring",stats:{ct:1}}+
-{name:"Anneau Souplesse",race:"all",slot:"ring",stats:{agi:1}}, +
-{name:"Anneau Tenacité",race:"all",slot:"ring",stats:{e:1}}, +
-{name:"Anneau Puissance",race:"all",slot:"ring",stats:{m:1}}, +
-{name:"Anneau Finesse",race:"all",slot:"ring",stats:{cc:1}} +
 ]; ];
  
-// compétences +const skills = ["Fulgurance","Duelliste","Encaisser","Anguille"];
-const skillsList = [ +
-"Fulgurance","Duelliste","Couverture","Encaisser","Anguille"+
-"Maître bretteur","Inépuisable","Coup d'épaule","Croc-en-jambe", +
-"Arme infusée","Attaque drainante","Frappe à la tempe", +
-"Attaque violente","Attaque précise","Bousculade" +
-]; +
- +
-// ================= DOM =================+
  
 +// ===== DOM =====
 const raceSelect = document.getElementById("race"); const raceSelect = document.getElementById("race");
 const statsDiv = document.getElementById("stats"); const statsDiv = document.getElementById("stats");
 const skillsDiv = document.getElementById("skills"); const skillsDiv = document.getElementById("skills");
-const errorDiv = document.getElementById("error"); 
  
-const slots +const head = document.getElementById("head"); 
-head:document.getElementById("head"), +const neck document.getElementById("neck"); 
-neck:document.getElementById("neck"), +const cape document.getElementById("cape"); 
-cape:document.getElementById("cape"), +const rightHand document.getElementById("rightHand"); 
-rightHand:document.getElementById("rightHand"), +const leftHand document.getElementById("leftHand"); 
-leftHand:document.getElementById("leftHand"), +const body document.getElementById("body"); 
-body:document.getElementById("body"), +const ring document.getElementById("ring"); 
-ring:document.getElementById("ring"), +const feet document.getElementById("feet");
-feet:document.getElementById("feet") +
-};+
  
-// ================= INIT =================+// ===== INIT =====
  
-// races+// race
 for(let r in races){ for(let r in races){
 raceSelect.innerHTML += `<option>${r}</option>`; raceSelect.innerHTML += `<option>${r}</option>`;
Ligne 203: Ligne 95:
 // stats // stats
 for(let s in costTable){ for(let s in costTable){
-statsDiv.innerHTML += `${s.toUpperCase()} <input type="number" id="${s}" value="0"><br>`;+statsDiv.innerHTML += `${s} <input type="number" id="${s}" value="0"><br>`;
 } }
  
 // skills // skills
-skillsList.forEach(s=>{+skills.forEach(s=>{
 skillsDiv.innerHTML += `<label><input type="checkbox" class="sk"> ${s}</label><br>`; skillsDiv.innerHTML += `<label><input type="checkbox" class="sk"> ${s}</label><br>`;
 }); });
  
-// reset slots+// slots reset
 function resetSlots(){ function resetSlots(){
-Object.values(slots).forEach(sel=>+[head,neck,cape,rightHand,leftHand,body,ring,feet].forEach(sel=>
-sel.innerHTML = `<option value="">-- Aucun --</option>`;+sel.innerHTML = `<option value="">--</option>`;
 }); });
 } }
  
 // remplir équipements // remplir équipements
-function populateEquip(){+function fillEquip(){
 let r = raceSelect.value; let r = raceSelect.value;
  
-equipments.forEach((item,i)=>{ +equipments.forEach((e,i)=>{ 
-if(item.race!=="all" && item.race!==r) return;+if(e.race!=="all" && e.race!==r) return;
  
-if(item.slot==="weapon"||item.slot==="weapon2h") +if(e.slot==="weapon"||e.slot==="weapon2h") rightHand.innerHTML += `<option value="${i}">${e.name}</option>`; 
-slots.rightHand.innerHTML += `<option value="${i}">${item.name}</option>`; +if(e.slot==="defensive") leftHand.innerHTML += `<option value="${i}">${e.name}</option>`; 
- +if(e.slot==="torse") body.innerHTML += `<option value="${i}">${e.name}</option>`;
-if(item.slot==="offhand") +
-slots.leftHand.innerHTML += `<option value="${i}">${item.name}</option>`; +
- +
-if(item.slot==="body") +
-slots.body.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==="ring"+
-slots.ring.innerHTML += `<option value="${i}">${item.name}</option>`; +
- +
-if(item.slot==="feet"+
-slots.feet.innerHTML += `<option value="${i}">${item.name}</option>`;+
 }); });
 } }
  
 +// update
 raceSelect.addEventListener("change", ()=>{ raceSelect.addEventListener("change", ()=>{
 resetSlots(); resetSlots();
-populateEquip();+fillEquip();
 }); });
  
 resetSlots(); resetSlots();
-populateEquip();+fillEquip();
  
 // 2 mains // 2 mains
-slots.rightHand.addEventListener("change", ()=>{ +rightHand.addEventListener("change", ()=>{ 
-let val slots.rightHand.value; +let = rightHand.value; 
- +if(v===""){ leftHand.disabled=false; return;}
-if(val===""){ slots.leftHand.disabled=false; return;} +
- +
-let item = equipments[val];+
  
 +let item = equipments[v];
 if(item.slot==="weapon2h"){ if(item.slot==="weapon2h"){
-slots.leftHand.value=""; +leftHand.value=""; 
-slots.leftHand.disabled=true;+leftHand.disabled=true;
 }else{ }else{
-slots.leftHand.disabled=false;+leftHand.disabled=false;
 } }
 }); });
  
-// ================= CALCUL ================= +// ===== CALCUL =====
 function calculate(){ function calculate(){
- 
-errorDiv.innerText=""; 
  
 let char = {...races[raceSelect.value]}; let char = {...races[raceSelect.value]};
-let totalPi = 0+let total = 0;
-let itemCount = 0; +
-let magicBlocked = false;+
  
 // stats // stats
Ligne 290: Ligne 159:
  
 // equip // equip
-for(let key in slots){ +[rightHand,leftHand,body].forEach(sel=>{ 
-let sel = slots[key]; +if(sel.value===""return
- +let = equipments[sel.value]; 
-if(sel.value===""continue; +for(let stat in e.stats){ 
- +char[stat]=(char[stat]||0)+e.stats[stat];
-let item = equipments[sel.value]; +
- +
-if(item.slot !== "ring") itemCount++; +
- +
-if(item.magicBlock) magicBlocked=true; +
- +
-for(let stat in item.stats){ +
-char[stat]=(char[stat]||0)+item.stats[stat]+
-+
-+
- +
-// règles +
-if(itemCount > 3){ +
-errorDiv.innerText="❌ Max 3 objets (hors anneau)"; +
-return; +
-+
- +
-// compétences +
-let sk = document.querySelectorAll(".sk:checked"); +
- +
-if(sk.length > 15){ +
-errorDiv.innerText="❌ Max 15 compétences"; +
-return;+
 } }
 +});
  
 // affichage // affichage
-let txt "=== STATS ===\n"; +result.innerText JSON.stringify(char,null,2);
- +
-for(let k in char)+
-txt += k.toUpperCase()+" : "+char[k]+"\n";+
 } }
  
-txt += "\nCompétences: "+sk.length+"/15"; +// ===== EXPORT =====
-txt += "\nMagie: "+(magicBlocked?"❌ BLOQUÉE":"✔ OK"); +
- +
-document.getElementById("result").innerText = txt; +
-+
- +
-// ================= EXPORT ================= +
 function exportWiki(){ function exportWiki(){
  
-let txt = "==== Build ====\n\n"; +let txt="=== Build ===\n"; 
-txt += "Race : "+raceSelect.value+"\n\n"; +txt+="Race: "+raceSelect.value+"\n\n";
- +
-txt += "=== Équipement ===\n"; +
- +
-for(let k in slots){ +
-let sel = slots[k]; +
-if(sel.value==="") continue; +
-txt += "  * "+k+" : "+equipments[sel.value].name+"\n"; +
-+
- +
-txt += "\n=== Compétences ===\n";+
  
 document.querySelectorAll(".sk:checked").forEach(s=>{ document.querySelectorAll(".sk:checked").forEach(s=>{
-txt += "  * "+s.parentNode.innerText+"\n";+txt+="* "+s.parentNode.innerText+"\n";
 }); });
  
-document.getElementById("result").innerText = txt;+result.innerText=txt;
 } }
  
brouillon10.1777420958.txt.gz · Dernière modification : 2026/04/29 02:02 de nanaki