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 02:21] – nanaki | brouillon10 [2026/04/29 13:54] (Version actuelle) – nanaki | ||
|---|---|---|---|
| Ligne 3: | Ligne 3: | ||
| < | < | ||
| <meta charset=" | <meta charset=" | ||
| - | < | + | < |
| < | < | ||
| - | body{font-family: | + | body { font-family: |
| - | select{width: | + | h1,h2 { color:gold;} |
| - | h2{margin-top:20px} | + | .box { border:1px solid gold; padding: |
| - | .box{background:#2a2a2a; | + | select, |
| + | button { padding: | ||
| </ | </ | ||
| </ | </ | ||
| Ligne 15: | Ligne 16: | ||
| < | < | ||
| - | < | + | < |
| - | <!-- RACE --> | + | <div class="box"> |
| - | < | + | Race |
| - | <select id="raceSelect"> | + | <select id="race"></ |
| - | < | + | </div> |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | < | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- EQUIPEMENT --> | + | |
| - | < | + | |
| - | + | ||
| - | <select id="head"></ | + | |
| - | <select id=" | + | |
| - | <select id=" | + | |
| - | <select id=" | + | |
| - | <select id=" | + | |
| - | <select id=" | + | |
| - | <select id=" | + | |
| - | <select id=" | + | |
| - | + | ||
| - | <!-- FILTRE SKILL --> | + | |
| - | < | + | |
| - | <select id=" | + | |
| - | <option value=" | + | |
| - | <option value=" | + | |
| - | <option value=" | + | |
| - | <option value=" | + | |
| - | </ | + | |
| - | + | ||
| - | <!-- SKILLS --> | + | |
| - | < | + | |
| - | <select id=" | + | |
| - | <!-- RESULT --> | ||
| <div class=" | <div class=" | ||
| - | <h2>Stats finales</ | + | Stats |
| <div id=" | <div id=" | ||
| </ | </ | ||
| <div class=" | <div class=" | ||
| - | <h2>Compétences sélectionnées</h2> | + | Équipement<br> |
| - | <div id="details"></ | + | Tête <select id=" |
| + | Cou <select id=" | ||
| + | Dos <select id=" | ||
| + | Main droite <select id=" | ||
| + | Main gauche <select id=" | ||
| + | Corps <select id=" | ||
| + | Anneau <select id=" | ||
| + | Pieds <select | ||
| </ | </ | ||
| + | |||
| + | <div class=" | ||
| + | Compétences | ||
| + | <div id=" | ||
| + | </ | ||
| + | |||
| + | <button onclick=" | ||
| + | <button onclick=" | ||
| + | |||
| + | <pre id=" | ||
| < | < | ||
| - | /* ================= RACES ================= */ | + | // ===== DATA ===== |
| const races = { | const races = { | ||
| - | Elfe: | + | Elfe: |
| - | Nain: | + | Nain: |
| - | Géant:{cc:9,ct:10,f:12,e:4, | + | |
| - | Olympien: | + | |
| - | HS: | + | |
| }; | }; | ||
| - | /* ================= EQUIPEMENTS ================= */ | + | const costTable |
| + | cc: | ||
| + | pv:[4,2,1], mvt: | ||
| + | }; | ||
| const equipments = [ | const equipments = [ | ||
| - | + | {name:" | |
| - | {name:" | + | {name:" |
| - | {name:" | + | {name:" |
| - | + | {name:" | |
| - | {name:" | + | |
| - | + | ||
| - | {name:" | + | |
| - | + | ||
| - | {name:" | + | |
| - | {name:" | + | |
| - | + | ||
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:"Arc long", | + | |
| - | + | ||
| - | {name:" | + | |
| - | {name:"Bouclier Parma", | + | |
| - | + | ||
| - | {name:" | + | |
| - | {name:" | + | |
| - | + | ||
| - | {name:" | + | |
| ]; | ]; | ||
| - | /* ================= SKILLS ================= */ | + | const skills |
| - | const skills | + | // ===== DOM ===== |
| + | const raceSelect | ||
| + | const statsDiv = document.getElementById(" | ||
| + | const skillsDiv = document.getElementById(" | ||
| - | {name:"Attaque précise",type:"cac",desc:"+4 toucher -3 dégâts"}, | + | const head = document.getElementById("head"); |
| - | {name:"Attaque violente",type:"cac",desc:"-6 toucher +3 dégâts"}, | + | const neck = document.getElementById("neck"); |
| - | {name:"Coup d' | + | const cape = document.getElementById("cape"); |
| - | {name:" | + | const rightHand = document.getElementById("rightHand"); |
| + | const leftHand = document.getElementById("leftHand"); | ||
| + | const body = document.getElementById("body"); | ||
| + | const ring = document.getElementById("ring"); | ||
| + | const feet = document.getElementById("feet"); | ||
| - | {name:" | + | // ===== INIT ===== |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | // race |
| - | {name:" | + | for(let r in races){ |
| - | {name:" | + | raceSelect.innerHTML += `< |
| + | } | ||
| - | ]; | + | // stats |
| + | for(let s in costTable){ | ||
| + | statsDiv.innerHTML += `${s} <input type=" | ||
| + | } | ||
| - | /* ================= SELECT ================= */ | + | // skills |
| + | skills.forEach(s=>{ | ||
| + | skillsDiv.innerHTML += `< | ||
| + | }); | ||
| - | const raceSelect = document.getElementById(" | + | // slots reset |
| - | const filter | + | function resetSlots(){ |
| - | const skillsSelect = document.getElementById(" | + | [head, |
| + | sel.innerHTML = `<option value="" | ||
| + | }); | ||
| + | } | ||
| - | const slots = { | + | // remplir équipements |
| - | head: | + | function fillEquip(){ |
| - | neck: | + | let r = raceSelect.value; |
| - | cape: | + | |
| - | body: | + | |
| - | right: | + | |
| - | left: | + | |
| - | feet: | + | |
| - | ring: | + | |
| - | }; | + | |
| - | /* ================= EQUIPEMENTS ================= */ | + | equipments.forEach((e, |
| + | if(e.race!==" | ||
| - | function populateEquip(){ | + | if(e.slot===" |
| - | + | if(e.slot===" | |
| - | Object.values(slots).forEach(s=> | + | if(e.slot===" |
| - | + | }); | |
| - | equipments.forEach((item, | + | } |
| - | + | ||
| - | if(item.slot===" | + | |
| - | slots.right.innerHTML += `<option value=" | + | |
| - | + | ||
| - | if(item.slot===" | + | |
| - | slots.left.innerHTML += `<option value=" | + | |
| - | + | ||
| - | if(item.slot===" | + | |
| - | slots.body.innerHTML += `<option value=" | + | |
| - | + | ||
| - | if(item.slot===" | + | |
| - | slots.head.innerHTML += `<option value=" | + | |
| - | + | ||
| - | if(item.slot===" | + | |
| - | slots.neck.innerHTML += `<option value=" | + | |
| - | + | ||
| - | if(item.slot===" | + | |
| - | slots.cape.innerHTML += `<option value=" | + | |
| - | + | ||
| - | if(item.slot===" | + | |
| - | slots.feet.innerHTML += `<option value=" | + | |
| - | + | ||
| - | if(item.slot===" | + | |
| - | slots.ring.innerHTML += `<option value=" | + | |
| + | // update | ||
| + | raceSelect.addEventListener(" | ||
| + | resetSlots(); | ||
| + | fillEquip(); | ||
| }); | }); | ||
| - | } | + | resetSlots(); |
| - | + | fillEquip(); | |
| - | /* ================= BLOQUAGE 2 MAINS ================= */ | + | |
| - | slots.right.addEventListener(" | + | // 2 mains |
| - | let item = equipments[slots.right.value]; | + | rightHand.addEventListener(" |
| + | let v = rightHand.value; | ||
| + | if(v==="" | ||
| + | let item = equipments[v]; | ||
| if(item.slot===" | if(item.slot===" | ||
| - | slots.left.disabled | + | leftHand.value="" |
| - | slots.left.innerHTML | + | leftHand.disabled=true; |
| }else{ | }else{ | ||
| - | slots.left.disabled = false; | + | leftHand.disabled=false; |
| - | populateEquip(); | + | |
| } | } | ||
| - | updateStats(); | ||
| }); | }); | ||
| - | /* ================= SKILLS ================= */ | + | // ===== CALCUL |
| + | function calculate(){ | ||
| - | function populateSkills(){ | + | let char = {...races[raceSelect.value]}; |
| + | let total = 0; | ||
| - | skillsSelect.innerHTML=""; | + | // stats |
| - | + | for(let s in costTable){ | |
| - | skills.forEach((s,i)=>{ | + | let v = parseInt(document.getElementById(s).value)||0; |
| - | + | char[s]+=v; | |
| - | if(filter.value!==" | + | |
| - | + | ||
| - | let opt = document.createElement(" | + | |
| - | opt.value | + | |
| - | opt.textContent = s.name + " (" | + | |
| - | opt.title | + | |
| - | + | ||
| - | skillsSelect.appendChild(opt); | + | |
| - | + | ||
| - | }); | + | |
| } | } | ||
| - | /* ================= LIMIT ================= */ | + | // equip |
| - | + | [rightHand, | |
| - | skillsSelect.addEventListener(" | + | if(sel.value==="" |
| - | if(skillsSelect.selectedOptions.length > 15){ | + | let e = equipments[sel.value]; |
| - | alert("Max 15 compétences !"); | + | for(let stat in e.stats){ |
| - | skillsSelect.options[skillsSelect.selectedIndex].selected | + | char[stat]=(char[stat]||0)+e.stats[stat]; |
| } | } | ||
| - | updateDetails(); | ||
| }); | }); | ||
| - | /* ================= STATS ================= */ | + | // affichage |
| - | + | result.innerText | |
| - | function updateStats(){ | + | |
| - | + | ||
| - | let base = {...races[raceSelect.value]}; | + | |
| - | + | ||
| - | Object.values(slots).forEach(sel=>{ | + | |
| - | let item = equipments[sel.value]; | + | |
| - | if(!item || !item.stats) return; | + | |
| - | + | ||
| - | Object.entries(item.stats).forEach(([k,v])=>{ | + | |
| - | base[k]=(base[k]||0)+v; | + | |
| - | }); | + | |
| - | }); | + | |
| - | + | ||
| - | document.getElementById(" | + | |
| - | CC: ${base.cc} | CT: ${base.ct} | F: ${base.f} | E: ${base.e}< | + | |
| - | Agi: ${base.agi} | M: ${base.m} | FM: ${base.fm}< | + | |
| - | PV: ${base.pv} | + | |
| - | `; | + | |
| } | } | ||
| - | /* ================= DETAILS ================= */ | + | // ===== EXPORT |
| + | function exportWiki(){ | ||
| - | function updateDetails(){ | + | let txt=" |
| + | txt+=" | ||
| - | let selected = [...skillsSelect.selectedOptions].map(o=> | + | document.querySelectorAll(".sk: |
| - | + | txt+="* "+s.parentNode.innerText+" | |
| - | let html=""; | + | |
| - | + | ||
| - | selected.forEach(s=> | + | |
| - | html += `< | + | |
| }); | }); | ||
| - | document.getElementById(" | + | result.innerText=txt; |
| } | } | ||
| - | |||
| - | /* ================= INIT ================= */ | ||
| - | |||
| - | raceSelect.addEventListener(" | ||
| - | populateEquip(); | ||
| - | updateStats(); | ||
| - | }); | ||
| - | |||
| - | filter.addEventListener(" | ||
| - | |||
| - | document.querySelectorAll(" | ||
| - | s.addEventListener(" | ||
| - | }); | ||
| - | |||
| - | populateEquip(); | ||
| - | populateSkills(); | ||
| - | updateStats(); | ||
| </ | </ | ||
brouillon10.1777422068.txt.gz · Dernière modification : 2026/04/29 02:21 de nanaki
