brouillon10
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| brouillon10 [2026/04/29 19:25] – nanaki | brouillon10 [2026/04/29 23:56] (Version actuelle) – nanaki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | < | ||
| < | < | ||
| < | < | ||
| Ligne 31: | Ligne 30: | ||
| .result { | .result { | ||
| - | background:# | + | background:# |
| + | color:# | ||
| padding: | padding: | ||
| + | white-space: | ||
| + | } | ||
| + | |||
| + | .small { | ||
| + | font-size: | ||
| + | color:#aaa; | ||
| } | } | ||
| </ | </ | ||
| Ligne 75: | Ligne 81: | ||
| </ | </ | ||
| - | <button onclick=" | + | <button onclick=" |
| <pre id=" | <pre id=" | ||
| Ligne 107: | Ligne 113: | ||
| // ===== PASSIFS ===== | // ===== PASSIFS ===== | ||
| const skills = [ | const skills = [ | ||
| - | " | + | {name:" |
| - | "Anguille"," | + | {name:"Couverture", |
| + | {name:"Réflexes fulgurants",desc:"85% AGI / 15% CC"}, | ||
| + | {name:"Anguille",desc:"Avantage esquive"} | ||
| ]; | ]; | ||
| + | |||
| // ===== ÉQUIPEMENTS ===== | // ===== ÉQUIPEMENTS ===== | ||
| Ligne 206: | Ligne 215: | ||
| ]; | ]; | ||
| - | |||
| - | |||
| - | |||
| - | |||
| // ===== INIT ===== | // ===== INIT ===== | ||
| Ligne 216: | Ligne 221: | ||
| const baseDiv = document.getElementById(" | const baseDiv = document.getElementById(" | ||
| - | // races | ||
| for(let r in races){ | for(let r in races){ | ||
| raceSelect.innerHTML += `< | raceSelect.innerHTML += `< | ||
| Ligne 222: | Ligne 226: | ||
| // stats UI | // stats UI | ||
| - | const statOrder = [" | + | for(let s in costTable){ |
| - | const statNames = { | + | |
| - | cc:" | + | |
| - | agi:" | + | |
| - | p:" | + | |
| - | mvt:" | + | |
| - | }; | + | |
| - | + | ||
| - | statOrder.forEach(s=>{ | + | |
| statsDiv.innerHTML += ` | statsDiv.innerHTML += ` | ||
| <div class=" | <div class=" | ||
| - | < | + | < |
| <input type=" | <input type=" | ||
| </ | </ | ||
| - | }); | + | } |
| // passifs | // passifs | ||
| skills.forEach(s=> | skills.forEach(s=> | ||
| - | document.getElementById(" | + | document.getElementById(" |
| + | < | ||
| + | <input type=" | ||
| + | <b>${s.name}</ | ||
| + | <span class=" | ||
| + | </ | ||
| }); | }); | ||
| Ligne 247: | Ligne 248: | ||
| baseDiv.textContent = JSON.stringify(races[raceSelect.value], | baseDiv.textContent = JSON.stringify(races[raceSelect.value], | ||
| } | } | ||
| - | |||
| raceSelect.addEventListener(" | raceSelect.addEventListener(" | ||
| displayBase(); | displayBase(); | ||
| Ligne 253: | Ligne 253: | ||
| // ===== COST ===== | // ===== COST ===== | ||
| function calcCost(b, | function calcCost(b, | ||
| - | let total=0, last=b; | + | let total=0, |
| for(let i=1; | for(let i=1; | ||
| if(i===1) last=b; | if(i===1) last=b; | ||
| Ligne 261: | Ligne 261: | ||
| } | } | ||
| return total; | return total; | ||
| + | } | ||
| + | |||
| + | function updateCost(){ | ||
| + | let total=0; | ||
| + | for(let s in costTable){ | ||
| + | let v=+document.getElementById(s).value||0; | ||
| + | let [b, | ||
| + | total+=calcCost(b, | ||
| + | } | ||
| + | document.getElementById(" | ||
| } | } | ||
| // ===== SLOTS ===== | // ===== SLOTS ===== | ||
| - | const head = document.getElementById(" | + | const slots = { |
| - | const neck = document.getElementById(" | + | head:head,neck:neck,cape:cape,rightHand:rightHand, |
| - | const cape = document.getElementById(" | + | leftHand:leftHand,body:body,ring:ring,feet:feet |
| - | const rightHand | + | }; |
| - | const leftHand | + | |
| - | const body = document.getElementById(" | + | |
| - | const ring = document.getElementById(" | + | |
| - | const feet = document.getElementById(" | + | |
| - | // reset slots | ||
| function resetSlots(){ | function resetSlots(){ | ||
| - | [head, | + | Object.values(slots).forEach(s=>s.innerHTML="<option value='' |
| - | sel.innerHTML = `<option value="" | + | |
| - | }); | + | |
| } | } | ||
| - | // remplir équipements | ||
| function fillEquip(){ | function fillEquip(){ | ||
| - | let r = raceSelect.value; | + | let r=raceSelect.value; |
| equipments.forEach((e, | equipments.forEach((e, | ||
| + | if(e.race!==" | ||
| - | if(e.race !== " | + | if(e.slot===" |
| - | + | if(e.slot===" | |
| - | // main droite | + | if(e.slot===" |
| - | if(e.slot===" | + | if(e.slot===" |
| - | rightHand.innerHTML += `<option value=" | + | if(e.slot===" |
| - | + | if(e.slot===" | |
| - | // main gauche | + | if(e.slot===" |
| - | if(e.slot===" | + | if(e.slot===" |
| - | leftHand.innerHTML += `<option value=" | + | |
| - | + | ||
| - | // corps | + | |
| - | if(e.slot===" | + | |
| - | body.innerHTML += `<option value=" | + | |
| - | + | ||
| - | // tête | + | |
| - | if(e.slot===" | + | |
| - | head.innerHTML += `<option value=" | + | |
| - | + | ||
| - | // cou | + | |
| - | if(e.slot===" | + | |
| - | neck.innerHTML += `<option value=" | + | |
| - | + | ||
| - | // dos | + | |
| - | if(e.slot===" | + | |
| - | cape.innerHTML += `<option value=" | + | |
| - | + | ||
| - | // pieds | + | |
| - | if(e.slot===" | + | |
| - | feet.innerHTML += `<option value=" | + | |
| - | + | ||
| - | // anneau | + | |
| - | if(e.slot===" | + | |
| - | ring.innerHTML += `<option value=" | + | |
| }); | }); | ||
| } | } | ||
| - | head.addEventListener(" | + | raceSelect.addEventListener(" |
| - | neck.addEventListener(" | + | |
| - | cape.addEventListener(" | + | |
| - | rightHand.addEventListener(" | + | |
| - | leftHand.addEventListener(" | + | |
| - | body.addEventListener(" | + | |
| - | ring.addEventListener(" | + | |
| - | feet.addEventListener(" | + | |
| - | + | ||
| - | // update race | + | |
| - | raceSelect.addEventListener(" | + | |
| resetSlots(); | resetSlots(); | ||
| fillEquip(); | fillEquip(); | ||
| + | autoCalculate(); | ||
| }); | }); | ||
| - | // init | ||
| resetSlots(); | resetSlots(); | ||
| fillEquip(); | fillEquip(); | ||
| + | // ===== BONUS ===== | ||
| + | function displayStats(select, | ||
| + | let v=select.value; | ||
| + | let el=document.getElementById(id); | ||
| + | if(v==="" | ||
| + | let e=equipments[v]; | ||
| + | let txt=""; | ||
| + | for(let s in e.stats){ | ||
| + | let val=e.stats[s]; | ||
| + | txt+=val> | ||
| + | } | ||
| + | el.innerHTML=txt; | ||
| + | } | ||
| - | // ===== AFFICHAGE BONUS ÉQUIPEMENT ===== | + | Object.entries(slots).forEach(([k, |
| - | function | + | s.addEventListener(" |
| - | let id = select.value; | + | displayStats(s,k+" |
| - | let target = document.getElementById(targetId); | + | checkLimit(); |
| + | autoCalculate(); | ||
| + | }); | ||
| + | }); | ||
| - | if(id==="" | + | // ===== LIMIT ===== |
| - | | + | function checkLimit(){ |
| - | | + | let count=0; |
| - | | + | Object.entries(slots).forEach(([k, |
| + | if(k!=="ring"&& | ||
| + | }); | ||
| - | let item = equipments[id]; | + | if(count> |
| + | limitWarn.innerText=" | ||
| + | Object.entries(slots).forEach(([k,s])=>{ | ||
| + | if(k!==" | ||
| + | }); | ||
| + | }else{ | ||
| + | limitWarn.innerText=""; | ||
| + | Object.values(slots).forEach(s=> | ||
| + | } | ||
| + | } | ||
| - | let txt = "< | + | // ===== CALCUL ===== |
| + | function calculate(){ | ||
| - | for(let stat in item.stats){ | + | let char={...races[raceSelect.value]}; |
| - | let val = item.stats[stat]; | + | |
| - | if(val > 0){ | + | // stats investies |
| - | txt += `+${val} ${stat.toUpperCase()} `; | + | for(let s in costTable){ |
| - | } else { | + | let v=+document.getElementById(s).value||0; |
| - | txt += `<span style=" | + | char[s]=(char[s]||0)+v; |
| - | } | + | } |
| - | | + | |
| - | txt += "</span>"; | + | // equip |
| + | Object.values(slots).forEach(sel=>{ | ||
| + | if(sel.value==="") return; | ||
| + | let e=equipments[sel.value]; | ||
| + | for(let s in e.stats){ | ||
| + | char[s]=(char[s]||0)+e.stats[s]; | ||
| + | } | ||
| + | }); | ||
| - | if(item.magicBlock){ | + | // esquive |
| - | txt += " <span style=' | + | let esquive=Math.round(char.agi*0.75+char.cc*0.25); |
| - | } | + | |
| - | target.innerHTML | + | let checked=[...document.querySelectorAll(" |
| - | } | + | |
| + | if(checked.includes(" | ||
| + | esquive=Math.round(char.agi*0.85+char.cc*0.15); | ||
| - | // ===== CALCUL ===== | + | if(checked.includes(" |
| - | function calculate(){ | + | esquive=Math.round(char.cc*0.85+char.agi*0.15); |
| - | let char = {...races[raceSelect.value]}; | + | if(checked.includes(" |
| - | let totalPI | + | esquive+=1; |
| - | // stats | + | // affichage |
| - | for(let s in costTable){ | + | result.textContent = |
| - | let v = +document.getElementById(s).value || 0; | + | "===== STATS =====\n" |
| - | char[s]+=v; | + | JSON.stringify(char,null,2)+ |
| - | let [b, | + | " |
| - | totalPI | + | " |
| + | "\n✨ FM : " | ||
| + | " | ||
| } | } | ||
| - | // résumé | + | // ===== AUTO ===== |
| - | let esquive | + | function autoCalculate(){ |
| + | updateCost(); | ||
| + | calculate(); | ||
| + | } | ||
| - | result.textContent = | + | // events stats |
| - | JSON.stringify(char, | + | document.querySelectorAll("#stats input").forEach(i=> |
| - | + "\n\n💰 PI : "+totalPI | + | i.addEventListener("input", autoCalculate); |
| - | + "\n⚔ CC : "+char.cc | + | }); |
| - | + " | + | |
| - | + "\n✨ FM : " | + | |
| - | + " | + | |
| + | // passifs | ||
| + | document.querySelectorAll(" | ||
| + | s.addEventListener(" | ||
| + | }); | ||
| + | |||
| + | // ===== RESET ===== | ||
| + | function resetAll(){ | ||
| + | |||
| + | document.querySelectorAll("# | ||
| + | |||
| + | Object.values(slots).forEach(s=> | ||
| + | s.value=""; | ||
| + | s.disabled=false; | ||
| + | }); | ||
| + | |||
| + | document.querySelectorAll(" | ||
| + | |||
| + | resetSlots(); | ||
| + | fillEquip(); | ||
| + | displayBase(); | ||
| + | checkLimit(); | ||
| + | autoCalculate(); | ||
| } | } | ||
| - | </script> | + | // init |
| + | autoCalculate(); | ||
| + | </ | ||
| </ | </ | ||
| </ | </ | ||
brouillon10.1777483501.txt.gz · Dernière modification : 2026/04/29 19:25 de nanaki
