brouillon8
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 | ||
| brouillon8 [2026/04/28 18:43] – nanaki | brouillon8 [2026/04/28 19:04] (Version actuelle) – nanaki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | essai | + | Essai 3 |
| < | < | ||
| < | < | ||
| <meta charset=" | <meta charset=" | ||
| - | < | + | < |
| < | < | ||
| - | body { | + | body { font-family: |
| - | | + | h1,h2 { color: |
| - | | + | .box { border:1px solid gold; padding: |
| - | | + | select, |
| - | | + | button { padding: |
| - | } | + | |
| - | h2 { | + | |
| - | | + | |
| - | } | + | |
| - | select, input { | + | |
| - | margin: 5px; | + | |
| - | } | + | |
| - | .box { | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | } | + | |
| </ | </ | ||
| </ | </ | ||
| Ligne 29: | Ligne 17: | ||
| < | < | ||
| - | <h1>🧝 Simulateur | + | < |
| <div class=" | <div class=" | ||
| - | <h2>Race</h2> | + | Race |
| - | <select id=" | + | <select id=" |
| - | <option value=" | + | |
| - | <option value=" | + | |
| - | <option value=" | + | |
| - | <option value=" | + | |
| - | <option value=" | + | |
| - | </ | + | |
| </ | </ | ||
| <div class=" | <div class=" | ||
| - | <h2>Stats à ajouter</ | + | Stats |
| - | CC: <input type=" | + | <div id="stats">< |
| - | F: <input type=" | + | |
| - | E: <input type=" | + | |
| - | Agi: <input type=" | + | |
| - | M: <input type=" | + | |
| - | PV: <input type=" | + | |
| </ | </ | ||
| <div class=" | <div class=" | ||
| - | <h2>Équipement (max 4)</h2> | + | Équipement<br> |
| - | <label><input type="checkbox" | + | Tête <select id=" |
| - | <label>< | + | Cou <select id="neck"></ |
| - | <label>< | + | Dos <select id="cape"></ |
| - | <label>< | + | Main droite |
| + | Main gauche <select id="leftHand"></ | ||
| + | Corps <select id="body"></ | ||
| + | Anneau | ||
| + | Pieds <select id=" | ||
| </ | </ | ||
| <div class=" | <div class=" | ||
| - | <h2>Compétences | + | Compétences |
| - | <input type="checkbox"> | + | <div id="skills">< |
| - | <input type=" | + | |
| - | <input type=" | + | |
| - | <input type=" | + | |
| - | <input type=" | + | |
| </ | </ | ||
| - | <button onclick=" | + | <button onclick=" |
| + | <button onclick=" | ||
| - | <div class=" | ||
| - | < | ||
| <pre id=" | <pre id=" | ||
| - | </ | ||
| < | < | ||
| + | |||
| + | // ===== DATA ===== | ||
| const races = { | const races = { | ||
| - | elfe: {cc:9, f:9, e:4, agi: | + | Elfe:{cc:9,ct:10, |
| - | nain: {cc:11, f:11, e:6, agi: | + | Nain:{cc:11,ct:8, |
| - | geant: {cc:9, f:12, e:4, agi: | + | Géant:{cc:9,ct:10, |
| - | | + | Olympien:{cc:10,ct:9, |
| - | hs: {cc:8, f:7, e:3, agi: | + | HS:{cc:8,ct:9, |
| + | }; | ||
| + | |||
| + | |||
| + | const costTable = { | ||
| + | cc: | ||
| + | pv:[4,2,1], mvt: | ||
| }; | }; | ||
| - | // ========================= | ||
| - | // EQUIPEMENTS COMPLETS | ||
| - | // ========================= | ||
| const equipments = [ | const equipments = [ | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | ]; | ||
| - | /* ================= COMMUNS ================= */ | + | const skills |
| - | { | + | // ===== DOM ===== |
| - | | + | const raceSelect = document.getElementById(" |
| - | | + | const statsDiv = document.getElementById(" |
| - | | + | const skillsDiv = document.getElementById("skills"); |
| - | | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Bouclier Parma", | + | |
| - | | + | |
| - | slot: " | + | |
| - | stats: { e: 1, agi: -2 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { cc: 1, agi: -1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { cc: 1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 1, cc: -1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 1, cc: -1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Arc long", | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 2, f: -1, cc: -2 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { mvt: 1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { mvt: 1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { p: 1, cc: -1, fm: -1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Cape de chasse", | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { pv: 5, pm: 5 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { r: 1 } | + | |
| - | }, | + | |
| - | /* ================= ELFES ================= */ | + | const head = document.getElementById(" |
| + | const neck = document.getElementById(" | ||
| + | const cape = document.getElementById(" | ||
| + | const rightHand | ||
| + | const leftHand | ||
| + | const body = document.getElementById(" | ||
| + | const ring = document.getElementById(" | ||
| + | const feet = document.getElementById(" | ||
| - | { | + | // ===== INIT ===== |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { e: 2, mvt: -1 }, | + | |
| - | magicBlock: true | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Lance de garde Sylvestre", | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { cc: 1, f: 1 }, | + | |
| - | magicBlock: true | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Arc Ensorcelé", | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 1, rm: 2, cc: -1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Arc Elfique (exo)", | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 1, f: 1, cc: -1 }, | + | |
| - | exo: true | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Toge de feuillage", | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { fm: 1, agi: 1, pv: 5 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { mvt: 2 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { pm: 10, r: 1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 1, r: 1 } | + | |
| - | }, | + | |
| - | /* ================= NAINS ================= */ | + | // race |
| + | for(let r in races){ | ||
| + | raceSelect.innerHTML += `< | ||
| + | } | ||
| - | { | + | // stats |
| - | name: "Cotte de Mailles", | + | for(let s in costTable){ |
| - | race: " | + | statsDiv.innerHTML += `${s} <input type="number" |
| - | slot: " | + | } |
| - | | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Targe renforcée", | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: | + | |
| - | magicBlock: true | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Marteau de guerre", | + | |
| - | race: "Nain", | + | |
| - | slot: " | + | |
| - | stats: | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Labrys", | + | |
| - | race: "Nain", | + | |
| - | slot: " | + | |
| - | stats: { cc: 1, f: 1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { e: 1, pm: 8 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { mvt: 1, pm: 5, pv: 5 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 2, p: -1 } | + | |
| - | }, | + | |
| - | /* ================= OLYMPIENS ================= */ | + | // skills |
| + | skills.forEach(s=>{ | ||
| + | skillsDiv.innerHTML += `< | ||
| + | }); | ||
| - | { | + | // slots reset |
| - | name: " | + | function resetSlots(){ |
| - | race: " | + | [head,neck,cape,rightHand,leftHand,body,ring,feet].forEach(sel=> |
| - | slot: " | + | sel.innerHTML = `<option value="" |
| - | stats: | + | }); |
| - | }, | + | } |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { e: 1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: | + | |
| - | }, | + | |
| - | { | + | |
| - | name: "Pilum", | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 1, f: 1, cc: -1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { e: 2, esquive: -2 }, | + | |
| - | exo: true | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { mvt: 1, rm: 1, r: 1 } | + | |
| - | }, | + | |
| - | /* ================= HOMME-SAUVAGE ================= */ | + | // remplir équipements |
| + | function fillEquip(){ | ||
| + | let r = raceSelect.value; | ||
| - | { | + | equipments.forEach((e,i)=>{ |
| - | name: " | + | if(e.race!=="all" |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { e: 2, rm: -3 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | | + | |
| - | slot: " | + | |
| - | stats: { cc: 1, agi: 1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | | + | |
| - | slot: " | + | |
| - | stats: { f: 1, cc: 1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { ct: 1, fFixe: 10, cc: -1 } | + | |
| - | }, | + | |
| - | { | + | |
| - | name: " | + | |
| - | race: " | + | |
| - | slot: " | + | |
| - | stats: { mvt: 1, agi: 1 } | + | |
| - | }, | + | |
| - | /* ================= | + | if(e.slot===" |
| + | if(e.slot===" | ||
| + | if(e.slot===" | ||
| + | }); | ||
| + | } | ||
| - | { | + | // update |
| - | | + | raceSelect.addEventListener("change", |
| - | race: " | + | resetSlots(); |
| - | slot: " | + | fillEquip(); |
| - | | + | }); |
| - | }, | + | |
| - | { | + | resetSlots(); |
| - | name: " | + | fillEquip(); |
| - | | + | |
| - | | + | // 2 mains |
| - | stats: | + | rightHand.addEventListener("change", |
| - | }, | + | let v = rightHand.value; |
| - | { | + | if(v==="" |
| - | | + | |
| - | | + | let item = equipments[v]; |
| - | slot: " | + | if(item.slot==="weapon2h"){ |
| - | | + | leftHand.value="" |
| + | leftHand.disabled=true; | ||
| + | }else{ | ||
| + | leftHand.disabled=false; | ||
| } | } | ||
| - | ]; | + | }); |
| + | // ===== CALCUL ===== | ||
| + | function calculate(){ | ||
| - | function calcul() | + | let char = {...races[raceSelect.value]}; |
| + | let total = 0; | ||
| - | | + | // stats |
| - | let base = {...races[race]}; | + | for(let s in costTable){ |
| + | let v = parseInt(document.getElementById(s).value)||0; | ||
| + | char[s]+=v; | ||
| + | } | ||
| - | base.cc += parseInt(document.getElementById("cc").value); | + | // equip |
| - | | + | [rightHand, |
| - | | + | if(sel.value==="" |
| - | | + | let e = equipments[sel.value]; |
| - | | + | for(let stat in e.stats){ |
| - | base.pv += parseInt(document.getElementById(" | + | char[stat]=(char[stat]||0)+e.stats[stat]; |
| + | } | ||
| + | }); | ||
| + | |||
| + | // affichage | ||
| + | result.innerText | ||
| + | } | ||
| - | let equip = document.querySelectorAll(' | + | // ===== EXPORT ===== |
| - | + | function exportWiki(){ | |
| - | if (equip.length > 4) { | + | |
| - | alert(" | + | |
| - | return; | + | |
| - | } | + | |
| - | equip.forEach(e | + | let txt="=== Build ===\n"; |
| - | if (e.value | + | txt+="Race: "+raceSelect.value+"\n\n"; |
| - | if (e.value | + | |
| - | if (e.value === "e2") base.e | + | |
| - | if (e.value | + | |
| - | }); | + | |
| - | let result = ` | + | document.querySelectorAll(" |
| - | CC : ${base.cc} | + | txt+=" |
| - | F : ${base.f} | + | }); |
| - | E : ${base.e} | + | |
| - | Agi : ${base.agi} | + | |
| - | M : ${base.m} | + | |
| - | PV : ${base.pv} | + | |
| - | `; | + | |
| - | document.getElementById(" | + | result.innerText=txt; |
| } | } | ||
brouillon8.1777394633.txt.gz · Dernière modification : 2026/04/28 18:43 de nanaki
