Outils pour utilisateurs

Outils du site


brouillon8

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
brouillon8 [2026/04/28 18:54] nanakibrouillon8 [2026/04/28 19:04] (Version actuelle) nanaki
Ligne 1: Ligne 1:
-Essai  +Essai 3
  
 <html> <html>
Ligne 8: Ligne 7:
  
 <style> <style>
-body { +body { font-family: Arial; background:#0b1a13; color:#e0d3a3; padding:20px;
-    font-family: Arial; +h1,h2 { color:gold;
-    background: #0b1a13; +.box { border:1px solid gold; padding:10px; margin-bottom:15px;
-    color: #e0d3a3; +select,input { margin:3px;} 
-    padding: 20px; +button { padding:8px; margin:5px; background:gold; border:none;}
-+
-h1,h2 { color: gold; } +
-.box { +
-    border: 1px solid gold; +
-    padding: 12px; +
-    margin-bottom: 15px; +
-+
-select, input { +
-    margin: 5px; +
-+
-button { +
-    padding:10px; +
-    margin:5px; +
-    background:gold; +
-    border:none; +
-    cursor:pointer; +
-}+
 </style> </style>
 </head> </head>
Ligne 35: Ligne 17:
 <body> <body>
  
-<h1>🧝 Simulateur RPG</h1>+<h1>Simulateur</h1>
  
 <div class="box"> <div class="box">
-<h2>Race</h2>+Race
 <select id="race"></select> <select id="race"></select>
 </div> </div>
  
 <div class="box"> <div class="box">
-<h2>Stats à améliorer</h2>+Stats
 <div id="stats"></div> <div id="stats"></div>
 </div> </div>
  
 <div class="box"> <div class="box">
-<h2>Équipement</h2> +Équipement<br>
 Tête <select id="head"></select><br> Tête <select id="head"></select><br>
 Cou <select id="neck"></select><br> Cou <select id="neck"></select><br>
Ligne 57: Ligne 38:
 Corps <select id="body"></select><br> Corps <select id="body"></select><br>
 Anneau <select id="ring"></select><br> Anneau <select id="ring"></select><br>
-Pieds <select id="feet"></select><br> +Pieds <select id="feet"></select>
 </div> </div>
  
 <div class="box"> <div class="box">
-<h2>Compétences (max 15)</h2>+Compétences
 <div id="skills"></div> <div id="skills"></div>
 </div> </div>
  
 <button onclick="calculate()">Calculer</button> <button onclick="calculate()">Calculer</button>
-<button onclick="exportWiki()">📤 Export DokuWiki</button>+<button onclick="exportWiki()">Export Wiki</button>
  
-<div class="box"> 
-<h2>Résultat</h2> 
 <pre id="result"></pre> <pre id="result"></pre>
-</div> 
  
 <script> <script>
  
-// ================= RACES =================+// ===== DATA ===== 
 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},
Ligne 85: Ligne 63:
 }; };
  
-// ================= COST =================+
 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]+
 }; };
  
-function cost(stat,n){ 
-if(n<=0) return 0; 
-let [B,M1,M2]=costTable[stat]; 
-let total=B,prev=B; 
-for(let i=2;i<=n;i++){ 
-if(i<=3) prev+=M1; 
-else prev+=M2; 
-total+=prev; 
-} 
-return total; 
-} 
- 
-// ================= EQUIPEMENTS ================= 
 const equipments = [ const equipments = [
-{name:"Armure sylvestre",race:"Elfe",slot:"torse",stats:{e:2,mvt:-1},magicBlock:true}, 
 {name:"Lance elfe",race:"Elfe",slot:"weapon",stats:{cc:1,f:1},magicBlock:true}, {name:"Lance elfe",race:"Elfe",slot:"weapon",stats:{cc:1,f:1},magicBlock:true},
-{name:"Targe renforcée",race:"Nain",slot:"defensive",stats:{cc:1,pv:10},magicBlock:true}, +{name:"Targe",race:"Nain",slot:"defensive",stats:{cc:1,pv:10},magicBlock:true}, 
-{name:"Bottes Tâlroval",race:"Elfe",slot:"feet",stats:{mvt:2}}, +{name:"Armure elfe",race:"Elfe",slot:"torse",stats:{e:2,mvt:-1},magicBlock:true}, 
-{name:"Arc long",race:"all",slot:"weapon2h",stats:{ct:2,f:-1,cc:-2}}, +{name:"Arc long",race:"all",slot:"weapon2h",stats:{ct:2}}
-{name:"Gladius",race:"all",slot:"weapon",stats:{cc:1}}, +
-{name:"Bouclier Parma",race:"all",slot:"defensive",stats:{e:1,agi:-2}}, +
-{name:"Collier tressé",race:"all",slot:"neck",stats:{pv:5,pm:5}}, +
-{name:"Cape de chasse",race:"all",slot:"cape",stats:{ct:1}}, +
-{name:"Anneau F",race:"all",slot:"ring",stats:{f:1}}+
 ]; ];
  
-// ================= SKILLS ================= +const skills = ["Fulgurance","Duelliste","Encaisser","Anguille"];
-const skills = [ +
-"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" +
-];+
  
-// ================= INIT ================= +// ===== DOM =====
- +
-// race +
-for(let r in races){ +
-race.innerHTML += `<option>${r}</option>`; +
-+
- +
-// stats +
-for(let s in costTable){ +
-stats.innerHTML += `${s.toUpperCase()} <input type="number" id="${s}" value="0"><br>`; +
-+
- +
-// skills +
-skills.forEach(s=>+
-skillsDiv.innerHTML += `<label><input type="checkbox" class="sk"> ${s}</label><br>`; +
-}); +
- +
-// slots +
-const slotMap = { +
-head:"head", neck:"neck", cape:"cape", +
-rightHand:["weapon","weapon2h"], +
-leftHand:"defensive", body:"torse", +
-ring:"ring", feet:"feet" +
-}; +
- +
-function initSlots(){ +
-Object.keys(slotMap).forEach(id=>+
-document.getElementById(id).innerHTML = `<option value="">-- Aucun --</option>`; +
-}); +
-+
- +
-function populateEquip(){ +
- +
-<script> +
- +
-// ================= 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}, +
-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} +
-}; +
- +
-// ================= ELEMENTS DOM =================+
 const raceSelect = document.getElementById("race"); const raceSelect = document.getElementById("race");
 +const statsDiv = document.getElementById("stats");
 const skillsDiv = document.getElementById("skills"); const skillsDiv = document.getElementById("skills");
  
-// slots 
 const head = document.getElementById("head"); const head = document.getElementById("head");
 const neck = document.getElementById("neck"); const neck = document.getElementById("neck");
Ligne 184: Ligne 92:
 const feet = document.getElementById("feet"); const feet = document.getElementById("feet");
  
-// ================= COST ================= +// ===== INIT =====
-const costTable = { +
-cc:[100,50,30], ct:[110,50,30], f:[120,55,30], e:[120,55,30], +
-agi:[95,45,25], m:[110,55,35], pv:[4,2,1], pm:[5,3,1], +
-fm:[100,50,30], rm:[50,40,20], r:[40,30,15], mvt:[100,50,30], p:[110,85,78] +
-};+
  
-// ================= EQUIPEMENTS ================= +// race
-const equipments = [ +
-{name:"Armure sylvestre",race:"Elfe",slot:"torse",stats:{e:2,mvt:-1},magicBlock:true}, +
-{name:"Lance elfe",race:"Elfe",slot:"weapon",stats:{cc:1,f:1},magicBlock:true}, +
-{name:"Targe renforcée",race:"Nain",slot:"defensive",stats:{cc:1,pv:10},magicBlock:true}, +
-{name:"Bottes Tâlroval",race:"Elfe",slot:"feet",stats:{mvt:2}}, +
-{name:"Arc long",race:"all",slot:"weapon2h",stats:{ct:2,f:-1,cc:-2}}, +
-{name:"Gladius",race:"all",slot:"weapon",stats:{cc:1}}, +
-{name:"Bouclier Parma",race:"all",slot:"defensive",stats:{e:1,agi:-2}}, +
-{name:"Collier tressé",race:"all",slot:"neck",stats:{pv:5,pm:5}}, +
-{name:"Cape de chasse",race:"all",slot:"cape",stats:{ct:1}}, +
-{name:"Anneau F",race:"all",slot:"ring",stats:{f:1}} +
-]; +
- +
-// ================= SKILLS ================= +
-const skills = [ +
-"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" +
-]; +
- +
-// ================= INIT ================= +
- +
-// races+
 for(let r in races){ for(let r in races){
-raceSelect.innerHTML += `<option value="${r}">${r}</option>`;+raceSelect.innerHTML += `<option>${r}</option>`;
 } }
  
 // stats // stats
-const statsDiv = document.getElementById("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 (FIX)+// skills
 skills.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>`;
 }); });
  
-// slots mapping +// slots reset 
-const slotMap = { +function resetSlots(){
-head:"head", +
-neck:"neck", +
-cape:"cape", +
-rightHand:["weapon","weapon2h"], +
-leftHand:"defensive", +
-body:"torse", +
-ring:"ring", +
-feet:"feet" +
-}; +
- +
-// reset slots +
-function initSlots(){+
 [head,neck,cape,rightHand,leftHand,body,ring,feet].forEach(sel=>{ [head,neck,cape,rightHand,leftHand,body,ring,feet].forEach(sel=>{
-sel.innerHTML = `<option value="">-- Aucun --</option>`;+sel.innerHTML = `<option value="">--</option>`;
 }); });
 } }
  
-// populate equip +// 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;
  
-for(let slot in slotMap){ +if(e.slot==="weapon"||e.slot==="weapon2h") rightHand.innerHTML += `<option value="${i}">${e.name}</option>`
-let s slotMap[slot]; +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(Array.isArray(s) ? s.includes(item.slot) : s===item.slot){ +
-document.getElementById(slot).innerHTML += `<option value="${i}">${item.name}</option>`; +
-+
-}+
 }); });
 } }
Ligne 269: Ligne 131:
 // update // update
 raceSelect.addEventListener("change", ()=>{ raceSelect.addEventListener("change", ()=>{
-initSlots(); +resetSlots(); 
-populateEquip();+fillEquip();
 }); });
  
-// init +resetSlots(); 
-initSlots(); +fillEquip();
-populateEquip();+
  
-// ================= HAND =================+// 2 mains
 rightHand.addEventListener("change", ()=>{ rightHand.addEventListener("change", ()=>{
-let val = rightHand.value; +let = rightHand.value; 
- +if(v===""){ leftHand.disabled=false; return;}
-if(val===""){ +
-leftHand.disabled=false; +
-return; +
-} +
- +
-let item = equipments[val];+
  
 +let item = equipments[v];
 if(item.slot==="weapon2h"){ if(item.slot==="weapon2h"){
 leftHand.value=""; leftHand.value="";
Ligne 296: Ligne 152:
 }); });
  
-</script> +// ===== CALCUL =====
- +
- +
- +
-// ================= CALCUL =================+
 function calculate(){ function calculate(){
  
-let char = {...races[race.value]}; +let char = {...races[raceSelect.value]}; 
-let totalPi=0+let total = 0;
-let magicBlocked=false;+
  
 // stats // stats
 for(let s in costTable){ for(let s in costTable){
-let v=parseInt(document.getElementById(s).value)||0;+let v = parseInt(document.getElementById(s).value)||0;
 char[s]+=v; char[s]+=v;
-totalPi+=cost(s,v); 
 } }
  
 // equip // equip
-let slots = [head,neck,cape,rightHand,leftHand,body,feet]+[rightHand,leftHand,body].forEach(sel=>{
-let count=0; +
- +
-slots.forEach(sel=>{+
 if(sel.value==="") return; if(sel.value==="") return;
-count++; +let = equipments[sel.value]; 
-let item = equipments[sel.value]+for(let stat in e.stats){ 
-if(item.magicBlock) magicBlocked=true+char[stat]=(char[stat]||0)+e.stats[stat];
-for(let stat in item.stats){ +
-char[stat]=(char[stat]||0)+item.stats[stat];+
 } }
 }); });
- 
-if(count>3){ alert("Max 3 objets !"); return; } 
- 
-if(ring.value!==""){ 
-let item = equipments[ring.value]; 
-for(let stat in item.stats){ 
-char[stat]+=item.stats[stat]; 
-} 
-} 
- 
-// skills 
-let sk = document.querySelectorAll(".sk:checked"); 
-if(sk.length>15){ alert("Max 15 compétences"); return; } 
  
 // affichage // affichage
-result.innerText = +result.innerText = JSON.stringify(char,null,2);
-Object.entries(char).map(([k,v])=>k.toUpperCase()+": "+v).join("\n") + +
-"\n\nPI: "+totalPi + +
-"\nCompétences: "+sk.length+"/15"+
-"\nMagie: "+(magicBlocked?"❌ BLOQUÉE":"✔ OK");+
 } }
  
-// ================= EXPORT =================+// ===== EXPORT =====
 function exportWiki(){ function exportWiki(){
  
-let txt="==== Build ====\n\n"; +let txt="=== Build ===\n"; 
-txt+="=== Race ===\n"+race.value+"\n\n"; +txt+="Race"+raceSelect.value+"\n\n";
- +
-txt+="=== Stats ===\n"; +
-for(let s in costTable){ +
-let v=document.getElementById(s).value; +
-if(v>0) txt+="  * +"+v+" "+s+"\n"; +
-+
- +
-txt+="\n=== Équipement ===\n"; +
- +
-let map = { +
-"Tête":head,"Cou":neck,"Dos":cape, +
-"Main droite":rightHand,"Main gauche":leftHand, +
-"Corps":body,"Anneau":ring,"Pieds":feet +
-}; +
- +
-for(let k in map){ +
-if(map[k].value!==""){ +
-txt+="  * "+k+" : "+equipments[map[k].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";
 }); });
  
brouillon8.1777395266.txt.gz · Dernière modification : 2026/04/28 18:54 de nanaki