Outils pour utilisateurs

Outils du site


brouillon6

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
brouillon6 [2026/05/01 23:43] nanakibrouillon6 [2026/05/02 00:09] (Version actuelle) nanaki
Ligne 8: Ligne 8:
   font-family: Arial;   font-family: Arial;
   background:#0b1a13;   background:#0b1a13;
-  color:#e0d3a3;+  color:#7dd3fc;
   padding:10px;   padding:10px;
 } }
Ligne 245: Ligne 245:
 } }
  
 +// stats UI
 for(let s in costTable){ for(let s in costTable){
-statsDiv.innerHTML += `<div class="statLine"><span>${s}</span><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=>{
-skills.innerHTML += `<label><input type="checkbox" class="skill" data-name="${s.name}">${s.name}</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>`;
 }); });
  
-// ===== BASE =====+// base stats
 function displayBase(){ function displayBase(){
 baseDiv.textContent = JSON.stringify(races[raceSelect.value],null,2); baseDiv.textContent = JSON.stringify(races[raceSelect.value],null,2);
Ligne 279: Ligne 290:
 total+=calcCost(b,m1,m2,v); total+=calcCost(b,m1,m2,v);
 } }
-document.getElementById("cost").innerHTML="💰 "+total;+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 
 +}; 
 + 
 +function resetSlots(){ 
 +Object.values(slots).forEach(s=>s.innerHTML="<option value=''>--</option>"); 
 +
 + 
 +function fillEquip(){ 
 +let r=raceSelect.value; 
 + 
 +equipments.forEach((e,i)=>
 +if(e.race!=="all"&&e.race!==r) return; 
 + 
 +if(e.slot==="weapon"||e.slot==="weapon2h") rightHand.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="offhand") leftHand.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="body") body.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="head") head.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="neck") neck.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="cape") cape.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="feet") feet.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +if(e.slot==="ring") ring.innerHTML+=`<option value="${i}">${e.name}</option>`; 
 +}); 
 +
 + 
 +raceSelect.addEventListener("change",()=>
 +resetSlots(); 
 +fillEquip(); 
 +autoCalculate(); 
 +}); 
 + 
 +resetSlots(); 
 +fillEquip(); 
 + 
 +// ===== BONUS ===== 
 +function displayStats(select,id){ 
 +let v=select.value; 
 +let el=document.getElementById(id); 
 +if(v===""){el.innerHTML="";return;
 +let e=equipments[v]; 
 +let txt=""; 
 +for(let s in e.stats){ 
 +let val=e.stats[s]; 
 +txt+=val>0?`+${val} ${s} `:`${val} ${s} `; 
 +
 +el.innerHTML=txt; 
 +
 + 
 +const slotToStatId = { 
 +head:"headStats", 
 +neck:"neckStats", 
 +cape:"capeStats", 
 +rightHand:"rightStats", 
 +leftHand:"leftStats", 
 +body:"bodyStats", 
 +ring:"ringStats", 
 +feet:"feetStats" 
 +}; 
 + 
 +Object.entries(slots).forEach(([k,s])=>
 +s.addEventListener("change",()=>
 +displayStats(s, slotToStatId[k]); 
 +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); 
 +}
 } }
  
Ligne 287: Ligne 385:
 let char={...races[raceSelect.value]}; let char={...races[raceSelect.value]};
  
 +// stats investies
 for(let s in costTable){ for(let s in costTable){
 let v=+document.getElementById(s).value||0; let v=+document.getElementById(s).value||0;
Ligne 292: Ligne 391:
 } }
  
 +// 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];
 +}
 +});
 +
 +// ===== ESQUIVE =====
 let esquive=Math.round(char.agi*0.75+char.cc*0.25); let esquive=Math.round(char.agi*0.75+char.cc*0.25);
  
 +let checked=[...document.querySelectorAll(".skill:checked")].map(e=>e.dataset.name);
 +
 +if(checked.includes("Réflexes fulgurants"))
 +esquive=Math.round(char.agi*0.85+char.cc*0.15);
 +
 +if(checked.includes("Couverture"))
 +esquive=Math.round(char.cc*0.85+char.agi*0.15);
 +
 +if(checked.includes("Fulgurance"))
 +esquive+=1;
 +
 +// ===== MAGIE =====
 let jetFM = char.fm * 2; let jetFM = char.fm * 2;
  
-let sorts=""; +let sorts = ""; 
-for(let lvl=1;lvl<=5;lvl++){ +for(let lvl=1; lvl<=5; lvl++){ 
-let seuil=6+6*lvl; +let seuil = 6 + 6 * lvl; 
-sorts+=`Niv ${lvl} : ${jetFM>=seuil?"✅":"❌"}\n`;+let reussite = jetFM >= seuil ? "✅" : "❌"
 + 
 +sorts += `Niveau ${lvl} → Seuil ${seuil} | Jet ${jetFM} ${reussite}\n`;
 } }
  
 +// ===== AFFICHAGE =====
 result.textContent = result.textContent =
 +"===== STATS =====\n"+
 JSON.stringify(char,null,2)+ JSON.stringify(char,null,2)+
-"\n⚡ A : "+char.a++ 
 +"\n\n⚔ CC : "+char.cc+ 
 +"\n🎯 CT : "+char.ct+ 
 +"\n✨ FM : "+char.fm+
 "\n🛡 Esquive : "+esquive+ "\n🛡 Esquive : "+esquive+
-"\n\n"+sorts;+ 
 +"\n\n===== MAGIE =====\n"
 +"Jet FM (x2) : "+jetFM+"\n\n"+ 
 +sorts;
 } }
 +
 +// ===== 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();
 +
 +
  
 // ===== POUSSEE ===== // ===== POUSSEE =====
brouillon6.1777671825.txt.gz · Dernière modification : 2026/05/01 23:43 de nanaki