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 16:48] nanakibrouillon10 [2026/04/29 23:56] (Version actuelle) nanaki
Ligne 1: Ligne 1:
-<!DOCTYPE html> 
 <html> <html>
 <head> <head>
Ligne 6: Ligne 5:
  
 <style> <style>
-body { font-family: Arial; background:#0b1a13; color:#e0d3a3; padding:20px;}+body { 
 +  font-family: Arial; 
 +  background:#0b1a13; 
 +  color:#e0d3a3; 
 +  padding:10px; 
 +} 
 h1,h2 { color:gold;} h1,h2 { color:gold;}
-.box { border:1px solid gold; padding:10px; margin-bottom:15px;} + 
-select,input { margin:3px;+.box { 
-button padding:8pxmargin:5px; background:goldborder:none;} +  border:1px solid gold; 
-.statBox display:inline-blockwidth:140px;}+  padding:10px; 
 +  margin-bottom:10px; 
 +} 
 + 
 +select { margin:3px; max-width:150px;
 +input { margin:3px; width:50px; } 
 + 
 +.statLine { 
 +  display:flex; 
 +  justify-content:space-between; 
 +  max-width:260px; 
 +
 + 
 +.result { 
 +  background:#000; 
 +  color:#00ffcc; 
 +  padding:10px; 
 +  white-space:pre-wrap; 
 +} 
 + 
 +.small { 
 +  font-size:12px; 
 +  color:#aaa; 
 +}
 </style> </style>
 </head> </head>
Ligne 17: Ligne 45:
 <body> <body>
  
-<h1>Simulateur RPG</h1>+<h1>Simulateur</h1>
  
 <div class="box"> <div class="box">
 Race : Race :
 <select id="race"></select> <select id="race"></select>
-<div id="raceStats"></div>+ 
 +<h3>Stats de base</h3> 
 +<pre id="baseStats"></pre>
 </div> </div>
  
 <div class="box"> <div class="box">
-<h2>Augmentations</h2>+<h3>Améliorations</h3>
 <div id="stats"></div> <div id="stats"></div>
-<div id="piTotal"></div>+<div id="cost"></div>
 </div> </div>
  
 <div class="box"> <div class="box">
-<h2>Équipement</h2>+<h3>Équipement (3 max + 1 anneau)</h3>
  
 Tête <select id="head"></select> <span id="headStats"></span><br> Tête <select id="head"></select> <span id="headStats"></span><br>
Ligne 43: Ligne 73:
 Pieds <select id="feet"></select> <span id="feetStats"></span> Pieds <select id="feet"></select> <span id="feetStats"></span>
  
 +<div id="limitWarn" style="color:red;"></div>
 </div> </div>
  
 <div class="box"> <div class="box">
-<h2>Passifs</h2>+<h3>Passifs</h3>
 <div id="skills"></div> <div id="skills"></div>
 </div> </div>
  
-<button onclick="calculate()">Calculer</button>+<button onclick="resetAll()">Reset</button>
  
-<pre id="result"></pre>+<pre id="result" class="result"></pre>
  
 <script> <script>
Ligne 67: Ligne 98:
 // ===== COST ===== // ===== COST =====
 const costTable = { const costTable = {
-pv:[4,2,1], cc:[100,50,30], ct:[110,50,30], +cc:[100,50,30], ct:[110,50,30], 
-f:[120,55,30], e:[120,55,30], agi:[95,45,25], +f:[120,55,30], e:[120,55,30], 
-mvt:[100,50,30], p:[110,85,78], pm:[5,3,1], +agi:[95,45,25], 
-fm:[100,50,30], m:[110,55,35], r:[40,30,15], rm:[50,40,20]+m:[110,55,35], 
 +fm:[100,50,30], 
 +p:[110,85,78], 
 +pv:[4,2,1], 
 +pm:[5,3,1], 
 +mvt:[100,50,30], 
 +r:[40,30,15], 
 +rm:[50,40,20]
 }; };
  
-// ===== EQUIP =====+// ===== PASSIFS ===== 
 +const skills = [ 
 +{name:"Fulgurance",desc:"+1 esquive"}, 
 +{name:"Couverture",desc:"85% CC / 15% AGI"}, 
 +{name:"Réflexes fulgurants",desc:"85% AGI / 15% CC"}, 
 +{name:"Anguille",desc:"Avantage esquive"
 +]; 
 + 
 + 
 +// ===== ÉQUIPEMENTS =====
 const equipments = [ const equipments = [
 +
 +/* ================= COMMUNS ================= */
 +
 +{name:"Arc",race:"all",slot:"weapon2h",stats:{cc:-1,ct:1}},
 +{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:"Gladius",race:"all",slot:"weapon",stats:{cc:1}},
-{name:"Lance de garde Sylvestre",race:"Elfe",slot:"weapon",stats:{cc:1,f:1}}, +{name:"Sceptre",race:"all",slot:"weapon",stats:{fm:1}}, 
-{name:"Targe renforcée",race:"all",slot:"offhand",stats:{cc:1,pv:10}}, +{name:"Lance",race:"all",slot:"weapon",stats:{ct:1,cc:-1}}, 
-{name:"Armure de garde Sylvestre",race:"Elfe",slot:"body",stats:{e:2,mvt:-1},magicBlock:true}, +{name:"Targe",race:"all",slot:"offhand",stats:{cc:1,agi:-1}}, 
-{name:"Bottes Tâlroval",race:"Elfe",slot:"feet",stats:{mvt:2}},+{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:"Cape de chasse",race:"all",slot:"cape",stats:{ct:1}},
 {name:"Collier tressé",race:"all",slot:"neck",stats:{pv:5,pm:5}}, {name:"Collier tressé",race:"all",slot:"neck",stats:{pv:5,pm:5}},
-{name:"Visière",race:"all",slot:"head",stats:{p:1,cc:-1}},+{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}} {name:"Anneau Finesse",race:"all",slot:"ring",stats:{cc:1}}
-]; 
  
-// ===== PASSIFS ===== 
-const skills = [ 
-"Fulgurance","Couverture","Encaisser", 
-"Duelliste","Maitre bretteur","Anguille","Inépuisable" 
 ]; ];
  
-// ===== DOM =====+// ===== INIT =====
 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 baseDiv = document.getElementById("baseStats");
  
-const slots = { 
-head:document.getElementById("head"), 
-neck:document.getElementById("neck"), 
-cape:document.getElementById("cape"), 
-rightHand:document.getElementById("rightHand"), 
-leftHand:document.getElementById("leftHand"), 
-body:document.getElementById("body"), 
-ring:document.getElementById("ring"), 
-feet:document.getElementById("feet") 
-}; 
- 
-// ===== INIT ===== 
 for(let r in races){ for(let r in races){
 raceSelect.innerHTML += `<option>${r}</option>`; raceSelect.innerHTML += `<option>${r}</option>`;
 } }
  
 +// stats UI
 for(let s in costTable){ for(let s in costTable){
-statsDiv.innerHTML += `<div class="statBox">${s.toUpperCase()} <input type="number" id="${s}" value="0"></div>`;+statsDiv.innerHTML += ` 
 +<div class="statLine"
 +<span>${s}</span> 
 +<input type="number" id="${s}" value="0" min="0"> 
 +</div>`;
 } }
  
 +// passifs
 skills.forEach(s=>{ skills.forEach(s=>{
-skillsDiv.innerHTML += `<label><input type="checkbox"> ${s}</label><br>`;+document.getElementById("skills").innerHTML += ` 
 +<label> 
 +<input type="checkbox" class="skill" data-name="${s.name}"
 +<b>${s.name}</b><br> 
 +<span class="small">${s.desc}</span> 
 +</label><br>`;
 }); });
  
-// ===== RACE DISPLAY ===== +// base stats 
-function displayRaceStats(){ +function displayBase(){ 
-let r = races[raceSelect.value]+baseDiv.textContent JSON.stringify(races[raceSelect.value],null,2);
-let txt="<b>Stats de base :</b><br>"; +
-for(let k in rtxt += k+" : "+r[k]+"<br>"; +
-document.getElementById("raceStats").innerHTML = txt;+
 } }
 +raceSelect.addEventListener("change", displayBase);
 +displayBase();
 +
 +// ===== COST =====
 +function calcCost(b,m1,m2,n){
 +let total=0,last=b;
 +for(let i=1;i<=n;i++){
 +if(i===1) last=b;
 +else if(i<=3) last+=m1;
 +else last+=m2;
 +total+=last;
 +}
 +return total;
 +}
 +
 +function updateCost(){
 +let total=0;
 +for(let s in costTable){
 +let v=+document.getElementById(s).value||0;
 +let [b,m1,m2]=costTable[s];
 +total+=calcCost(b,m1,m2,v);
 +}
 +document.getElementById("cost").innerHTML="💰 PI : "+total;
 +}
 +
 +// ===== SLOTS =====
 +const slots = {
 +head:head,neck:neck,cape:cape,rightHand:rightHand,
 +leftHand:leftHand,body:body,ring:ring,feet:feet
 +};
  
-// ===== EQUIP ===== 
 function resetSlots(){ function resetSlots(){
-for(let s in slots) slots[s].innerHTML=`<option value="">--</option>`;+Object.values(slots).forEach(s=>s.innerHTML="<option value=''>--</option>");
 } }
  
 function fillEquip(){ function fillEquip(){
-let r = raceSelect.value;+let r=raceSelect.value;
  
 equipments.forEach((e,i)=>{ equipments.forEach((e,i)=>{
-if(e.race!=="all" && e.race!==r) return;+if(e.race!=="all"&&e.race!==r) return;
  
-if(e.slot==="weapon"||e.slot==="weapon2h"slots.rightHand.innerHTML+=`<option value="${i}">${e.name}</option>`; +if(e.slot==="weapon"||e.slot==="weapon2h") rightHand.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-if(e.slot==="offhand"slots.leftHand.innerHTML+=`<option value="${i}">${e.name}</option>`; +if(e.slot==="offhand") leftHand.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-if(e.slot==="body"slots.body.innerHTML+=`<option value="${i}">${e.name}</option>`; +if(e.slot==="body") body.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-if(e.slot==="head"slots.head.innerHTML+=`<option value="${i}">${e.name}</option>`; +if(e.slot==="head") head.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-if(e.slot==="neck"slots.neck.innerHTML+=`<option value="${i}">${e.name}</option>`; +if(e.slot==="neck") neck.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-if(e.slot==="cape"slots.cape.innerHTML+=`<option value="${i}">${e.name}</option>`; +if(e.slot==="cape") cape.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-if(e.slot==="feet"slots.feet.innerHTML+=`<option value="${i}">${e.name}</option>`; +if(e.slot==="feet") feet.innerHTML+=`<option value="${i}">${e.name}</option>`; 
-if(e.slot==="ring"slots.ring.innerHTML+=`<option value="${i}">${e.name}</option>`;+if(e.slot==="ring") ring.innerHTML+=`<option value="${i}">${e.name}</option>`;
 }); });
 } }
  
-function displayStats(select, id){ 
-let target = document.getElementById(id); 
-if(select.value===""){target.innerHTML=""; return;} 
-let e = equipments[select.value]; 
-let txt=" → "; 
-for(let s in e.stats){ 
-txt += (e.stats[s]>=0?"+":"")+e.stats[s]+" "+s+" "; 
-} 
-if(e.magicBlock) txt+="❗No Magic"; 
-target.innerHTML=txt; 
-} 
- 
-// ===== EVENTS ===== 
 raceSelect.addEventListener("change",()=>{ raceSelect.addEventListener("change",()=>{
 resetSlots(); resetSlots();
 fillEquip(); fillEquip();
-displayRaceStats(); +autoCalculate();
-}); +
- +
-Object.entries(slots).forEach(([key,sel])=>+
-sel.addEventListener("change",()=>displayStats(sel,key+"Stats"));+
 }); });
  
-displayRaceStats(); 
 resetSlots(); resetSlots();
 fillEquip(); fillEquip();
  
-// ===== COST ===== +// ===== BONUS ===== 
-function calcCost(base,m1,m2,n){ +function displayStats(select,id){ 
-let total=0,last=base+let v=select.value; 
-for(let i=1;i<=n;i++){ +let el=document.getElementById(id)
-if(i===1last=base+if(v===""){el.innerHTML="";return;
-else if(i<=3last+=m1+let e=equipments[v]; 
-else last+=m2+let txt=""; 
-total+=last;+for(let s in e.stats){ 
 +let val=e.stats[s]; 
 +txt+=val>0?`+${val} ${s} `:`${val} ${s} `; 
 +
 +el.innerHTML=txt; 
 +
 + 
 +Object.entries(slots).forEach(([k,s])=>
 +s.addEventListener("change",()=>{ 
 +displayStats(s,k+"Stats"); 
 +checkLimit(); 
 +autoCalculate(); 
 +}); 
 +}); 
 + 
 +// ===== LIMIT ===== 
 +function checkLimit()
 +let count=0
 +Object.entries(slots).forEach(([k,s])=>
 +if(k!=="ring"&&s.value!==""count++; 
 +}); 
 + 
 +if(count>=3){ 
 +limitWarn.innerText="Limite atteinte"; 
 +Object.entries(slots).forEach(([k,s])=>
 +if(k!=="ring"&&s.value==="") s.disabled=true; 
 +})
 +}else
 +limitWarn.innerText=""
 +Object.values(slots).forEach(s=>s.disabled=false);
 } }
-return total; 
 } }
  
Ligne 193: Ligne 352:
 function calculate(){ function calculate(){
  
-let char = {...races[raceSelect.value]}+let char={...races[raceSelect.value]};
-let totalPI=0;+
  
-// stats+// stats investies
 for(let s in costTable){ for(let s in costTable){
-let v = parseInt(document.getElementById(s).value)||0; +let v=+document.getElementById(s).value||0; 
-char[s]+=v; +char[s]=(char[s]||0)+v;
-let [b,m1,m2]=costTable[s]+
-totalPI+=calcCost(b,m1,m2,v);+
 } }
  
Ligne 208: Ligne 364:
 if(sel.value==="") return; if(sel.value==="") return;
 let e=equipments[sel.value]; let e=equipments[sel.value];
-for(let stat in e.stats){ +for(let in e.stats){ 
-char[stat]=(char[stat]||0)+e.stats[stat];+char[s]=(char[s]||0)+e.stats[s];
 } }
 }); });
  
-// ===== COMBAT ===== +// esquive 
-let ct1=char.ct; +let esquive=Math.round(char.agi*0.75+char.cc*0.25);
-let ct2=char.ct; +
-let ct3=char.ct-2; +
-let ct4=char.ct-4;+
  
-let esquive Math.round((char.agi*0.75)+(char.cc*0.25));+let checked=[...document.querySelectorAll(".skill:checked")].map(e=>e.dataset.name);
  
-// ===== DISPLAY ===== +if(checked.includes("Réflexes fulgurants")
-result.innerHTML = +esquive=Math.round(char.agi*0.85+char.cc*0.15);
-"<b>Stats finales</b><br>"+JSON.stringify(char,null,2).replace(/\n/g,"<br>") +
-+"<br><br><b>PI utilisés :</b> "+totalPI +
-+"<br><br><b>Résumé combat :</b><br>" +
-+"CC : "+char.cc+"<br>" +
-+"FM : "+char.fm+"<br>" +
-+"CT 1-2 cases : "+ct1+"<br>" +
-+"CT 3 cases : "+ct3+"<br>" +
-+"CT 4 cases : "+ct4+"<br>" +
-+"Esquive tir : "+esquive;+
  
 +if(checked.includes("Couverture"))
 +esquive=Math.round(char.cc*0.85+char.agi*0.15);
 +
 +if(checked.includes("Fulgurance"))
 +esquive+=1;
 +
 +// affichage
 +result.textContent =
 +"===== STATS =====\n"+
 +JSON.stringify(char,null,2)+
 +"\n\n⚔ CC : "+char.cc+
 +"\n🎯 CT : "+char.ct+
 +"\n✨ FM : "+char.fm+
 +"\n🛡 Esquive : "+esquive;
 } }
  
-</script>+// ===== AUTO ===== 
 +function autoCalculate(){ 
 +updateCost(); 
 +calculate(); 
 +}
  
 +// events stats
 +document.querySelectorAll("#stats input").forEach(i=>{
 +i.addEventListener("input", autoCalculate);
 +});
 +
 +// passifs
 +document.querySelectorAll(".skill").forEach(s=>{
 +s.addEventListener("change", autoCalculate);
 +});
 +
 +// ===== RESET =====
 +function resetAll(){
 +
 +document.querySelectorAll("#stats input").forEach(i=>i.value=0);
 +
 +Object.values(slots).forEach(s=>{
 +s.value="";
 +s.disabled=false;
 +});
 +
 +document.querySelectorAll(".skill").forEach(s=>s.checked=false);
 +
 +resetSlots();
 +fillEquip();
 +displayBase();
 +checkLimit();
 +autoCalculate();
 +}
 +
 +// init
 +autoCalculate();
 +
 +</script>
 </body> </body>
 </html> </html>
brouillon10.1777474139.txt.gz · Dernière modification : 2026/04/29 16:48 de nanaki