simulateur_saison3
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| simulateur_saison3 [2026/09/20 23:59] – nanaki | simulateur_saison3 [2026/09/21 00:22] (Version actuelle) – nanaki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | Voici un simulateur en version beta, n' | ||
| - | |||
| - | |||
| < | < | ||
| < | < | ||
| Ligne 9: | Ligne 6: | ||
| < | < | ||
| body { | body { | ||
| - | | + | |
| - | background:# | + | background:# |
| - | color:# | + | color:# |
| - | padding: | + | padding: |
| + | } | ||
| + | |||
| + | h1,h2 { | ||
| + | color: | ||
| + | } | ||
| + | |||
| + | .box { | ||
| + | border:1px solid gold; | ||
| + | padding: | ||
| + | margin-bottom: | ||
| + | } | ||
| + | |||
| + | select { | ||
| + | margin: | ||
| + | max-width: | ||
| + | } | ||
| + | |||
| + | input { | ||
| + | margin: | ||
| + | width: | ||
| + | } | ||
| + | |||
| + | .statLine { | ||
| + | display: | ||
| + | justify-content: | ||
| + | max-width: | ||
| + | } | ||
| + | |||
| + | .result { | ||
| + | background:# | ||
| + | color:# | ||
| + | padding: | ||
| + | white-space: | ||
| + | } | ||
| + | |||
| + | .small { | ||
| + | font-size: | ||
| + | color:# | ||
| + | } | ||
| + | |||
| + | .equipStats { | ||
| + | margin-left: | ||
| + | } | ||
| + | |||
| + | .bonus { | ||
| + | color:# | ||
| + | } | ||
| + | |||
| + | .malus { | ||
| + | color:# | ||
| + | } | ||
| + | |||
| + | .special { | ||
| + | color:# | ||
| } | } | ||
| - | h1,h2 { color: | ||
| - | .box { border:1px solid gold; padding: | ||
| - | select { margin:3px; max-width: | ||
| - | input { margin:3px; width:60px; } | ||
| - | .statLine { display: | ||
| - | .result { background:# | ||
| - | .small { font-size: | ||
| </ | </ | ||
| </ | </ | ||
| Ligne 29: | Ligne 73: | ||
| <div class=" | <div class=" | ||
| - | Race : | + | |
| - | <select id=" | + | <select id=" |
| - | < | + | |
| - | <pre id=" | + | |
| + | <pre id=" | ||
| </ | </ | ||
| <div class=" | <div class=" | ||
| - | < | + | |
| - | <div id=" | + | <div id=" |
| - | <div id=" | + | <div id=" |
| </ | </ | ||
| <div class=" | <div class=" | ||
| - | < | + | |
| - | Tête <select id=" | + | |
| - | Cou <select id="neck"></ | + | |
| - | Dos <select id=" | + | |
| - | Main droite <select id=" | + | |
| - | Main gauche <select id=" | + | |
| - | Corps <select id=" | + | |
| - | Anneau <select id=" | + | |
| - | Pieds <select id=" | + | |
| - | <div id=" | + | |
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| </ | </ | ||
| <div class=" | <div class=" | ||
| - | < | + | |
| - | <div id=" | + | <div id=" |
| </ | </ | ||
| <div class=" | <div class=" | ||
| - | < | + | |
| - | <div id=" | + | <div id=" |
| - | <div id=" | + | <div id=" |
| </ | </ | ||
| + | <div class=" | ||
| + | < | ||
| + | Force assaillant | ||
| + | <input id=" | ||
| - | <!-- ================= POUSSEE ================= --> | + | Renforcement |
| - | <div class="box"> | + | |
| - | <h3>Simulateur de poussée</h3> | + | <option value="0"> |
| + | <option value=" | ||
| + | | ||
| - | Force assaillant <input id=" | + | |
| - | Renforcement <select id=" | + | |
| - | Endurance <input id=" | + | |
| - | Agilité <input id=" | + | |
| - | PV actuels | + | Agilité |
| + | | ||
| - | Instabilité | + | |
| - | Stabilité <select id=" | + | |
| - | <pre id=" | + | PV actuels |
| + | <input id=" | ||
| + | |||
| + | < | ||
| + | |||
| + | Instabilité | ||
| + | <select id=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |||
| + | Stabilité | ||
| + | <select id=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |||
| + | | ||
| </ | </ | ||
| <button onclick=" | <button onclick=" | ||
| - | |||
| <button onclick=" | <button onclick=" | ||
| <button onclick=" | <button onclick=" | ||
| Ligne 92: | Ligne 187: | ||
| <pre id=" | <pre id=" | ||
| + | |||
| < | < | ||
| - | /// ===== RACES ===== | + | /* ========================================================= |
| + | RACES | ||
| + | ========================================================= */ | ||
| const races = { | const races = { | ||
| + | |||
| Elfe:{ | Elfe:{ | ||
| - | a:2, cc:9, ct:10, f:9, e:4, agi:9, p:5, mvt:5, | + | a:2, |
| - | pv:55, pm:30, r:4, rm:6, fm:8, | + | |
| - | pui:6, res:5 | + | |
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pv:55, | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pui:6, | ||
| + | | ||
| }, | }, | ||
| Nain:{ | Nain:{ | ||
| - | a:2, cc:11, ct:8, f:11, e:6, agi:7, p:4, mvt:4, | + | a:2, |
| - | pv:60, pm:25, r:7, rm:5, fm:10, | + | |
| - | pui:4, res:3 | + | |
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pv:60, | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pui:4, | ||
| + | | ||
| }, | }, | ||
| Géant:{ | Géant:{ | ||
| - | a:2, cc:9, ct:10, f:12, e:4, agi:8, p:4, mvt:5, | + | a:2, |
| - | pv:70, pm:30, r:6, rm:6, fm:6, | + | |
| - | pui:5, res:4 | + | |
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pv:70, | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pui:5, | ||
| + | | ||
| }, | }, | ||
| Olympien:{ | Olympien:{ | ||
| - | a:2, cc:10, ct:9, f:10, e:5, agi:9, p:4, mvt:5, | + | a:2, |
| - | pv:60, pm:30, r:5, rm:6, fm:7, | + | |
| - | pui:5, res:5 | + | |
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pv:60, | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pui:5, | ||
| + | | ||
| }, | }, | ||
| HS:{ | HS:{ | ||
| - | a:2, cc:8, ct:9, f:8, e:3, agi:11, p:5, mvt:6, | + | a:2, |
| - | pv:50, pm:40, r:3, rm:6, fm:9, | + | |
| - | pui:5, res:6 | + | |
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pv:50, | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | pui:5, | ||
| + | | ||
| } | } | ||
| }; | }; | ||
| - | // ===== COST ===== | + | |
| + | /* ========================================================= | ||
| + | COUT DES AMELIORATIONS | ||
| + | ========================================================= */ | ||
| const costTable = { | const costTable = { | ||
| - | a: | ||
| - | cc: | ||
| - | f: | ||
| - | agi: | ||
| - | pui: | ||
| - | res: | ||
| - | fm: | ||
| - | p: | ||
| - | pv:[4,2,1], | ||
| - | pm:[5,3,1], | ||
| - | mvt: | ||
| - | r: | ||
| - | rm: | ||
| - | }; | ||
| - | // ===== PASSIFS ===== | + | a:[800,200,100], |
| - | const skills = [ | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | ]; | + | |
| - | // ===== SORTS ===== | + | cc:[100,50,30], |
| - | const spells = [ | + | ct:[110,50,30], |
| - | {name:" | + | |
| - | {name:"Coup précis" | + | |
| - | {name:" | + | f:[120,55,30], |
| - | {name:" | + | e:[120,55,30], |
| - | {name:" | + | agi:[95,45,25], |
| - | {name:" | + | pui:[110,55,35], |
| - | {name:" | + | res:[110,55,35], |
| - | {name:" | + | fm:[100,50,30], |
| - | {name:" | + | |
| - | {name:" | + | p:[110,85,78], |
| - | {name:" | + | pv:[4,2,1], |
| + | pm:[5,3,1], | ||
| - | {name:" | + | mvt:[100,50,30], |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | ]; | + | |
| + | r: | ||
| + | rm: | ||
| + | }; | ||
| - | const equipments = [ | ||
| /* ========================================================= | /* ========================================================= | ||
| - | COMMUNS | + | EQUIPEMENTS |
| - | | + | ========================================================= |
| - | {name:" | + | Règle |
| - | {name:" | + | - équipement normal = toutes les races |
| - | {name:" | + | - équipement exo = uniquement la race indiquée dans " |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| + | Rappel : | ||
| + | R = r | ||
| + | Rés = res | ||
| + | */ | ||
| - | /* ========================================================= | + | const equipments = [ |
| + | |||
| + | /* ========================= | ||
| + | | ||
| + | ========================= */ | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | |||
| + | /* ========================= | ||
| | | ||
| - | | + | ========================= */ |
| - | {name:" | + | { |
| - | {name:" | + | |
| - | {name:" | + | race:"Olympiens", |
| - | {name:" | + | slot:"rightHand", |
| - | {name:" | + | stats: |
| - | {name:" | + | }, |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| - | /* ========================================================= | + | { |
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | exo:true, | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | |||
| + | /* ========================= | ||
| ELFES | ELFES | ||
| - | | + | ========================= */ |
| - | {name:" | + | { |
| - | {name:" | + | |
| - | {name:" | + | race:"Elfes", |
| - | {name:" | + | slot:"rightHand", |
| - | {name:" | + | stats: |
| - | {name:" | + | }, |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| - | /* ========================================================= | + | { |
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | exo:true, | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | exo:true, | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | |||
| + | /* ========================= | ||
| NAINS | NAINS | ||
| - | | + | ========================= */ |
| - | {name:" | + | { |
| - | {name:" | + | |
| - | {name:" | + | race:"Nains", |
| - | {name:" | + | slot:"rightHand", |
| - | {name:" | + | stats:{cc:1,f:1} |
| - | {name:" | + | }, |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| - | /* ========================================================= | + | { |
| - | GÉANTS | + | |
| - | ========================================================= */ | + | |
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| - | {name:" | + | { |
| - | {name:" | + | |
| - | {name:" | + | race:"Nains", |
| - | {name:" | + | slot:"rightHand", |
| - | {name:" | + | stats: |
| - | {name:" | + | }, |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| - | /* ========================================================= | + | { |
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | exo:true, | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | exo:true, | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | |||
| + | /* ========================= | ||
| + | | ||
| + | ========================= */ | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | exo:true, | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | exo:true, | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | |||
| + | /* ========================= | ||
| HS | HS | ||
| - | | + | ========================= */ |
| - | {name:" | + | { |
| - | {name:" | + | |
| - | {name:" | + | race:" |
| - | {name:" | + | slot:"rightHand", |
| - | {name:" | + | stats:{f:1,cc:1} |
| - | {name:" | + | }, |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| - | /* ========================================================= | + | { |
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | exo:true, | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | exo:true, | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | race:" | ||
| + | slot:" | ||
| + | stats: | ||
| + | }, | ||
| + | |||
| + | |||
| + | /* ========================= | ||
| | | ||
| - | | + | ========================= */ |
| - | {name:" | + | { |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | }, |
| - | {name:" | + | |
| - | {name:" | + | { |
| - | {name:" | + | |
| - | {name:" | + | |
| - | {name:" | + | |
| + | | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | | ||
| + | | ||
| + | exo:true, | ||
| + | | ||
| + | | ||
| + | } | ||
| ]; | ]; | ||
| - | // ===== INIT ===== | + | /* ========================================================= |
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | const skills | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | desc:" | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | desc:" | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | desc:" | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | desc:" | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | desc:" | ||
| + | }, | ||
| + | |||
| + | { | ||
| + | name:" | ||
| + | desc:" | ||
| + | } | ||
| + | |||
| + | ]; | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | const spells = [ | ||
| + | |||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | {name:" | ||
| + | |||
| + | ]; | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| const raceSelect = document.getElementById(" | const raceSelect = document.getElementById(" | ||
| - | const statsDiv = document.getElementById(" | ||
| - | const baseDiv = document.getElementById(" | ||
| - | for(let r in races){ | + | for(const r in races){ |
| - | raceSelect.innerHTML += `<option>${r}</ | + | const o=document.createElement(" |
| + | o.value=r; | ||
| + | o.textContent=r; | ||
| + | raceSelect.appendChild(o); | ||
| } | } | ||
| - | // stats UI | + | |
| - | for(let s in costTable){ | + | /* ========================================================= |
| - | statsDiv.innerHTML += ` | + | STATS AMELIORATIONS |
| - | <div class=" | + | ========================================================= */ |
| - | < | + | |
| - | <input type=" | + | const statsDiv=document.getElementById(" |
| - | </ | + | |
| + | for(const stat in costTable){ | ||
| + | |||
| + | const line=document.createElement(" | ||
| + | line.className=" | ||
| + | |||
| + | const label=document.createElement(" | ||
| + | label.textContent=stat.toUpperCase(); | ||
| + | |||
| + | const input=document.createElement(" | ||
| + | input.type=" | ||
| + | input.id="up_"+stat; | ||
| + | input.value=0; | ||
| + | input.min=0; | ||
| + | |||
| + | input.addEventListener("input", | ||
| + | |||
| + | line.appendChild(label); | ||
| + | line.appendChild(input); | ||
| + | |||
| + | statsDiv.appendChild(line); | ||
| } | } | ||
| - | // passifs | + | |
| - | skills.forEach(s=> | + | /* ========================================================= |
| - | document.getElementById("skills").innerHTML += ` | + | |
| - | < | + | ========================================================= */ |
| - | <input type=" | + | |
| - | <b>${s.name}</ | + | const skillsDiv=document.getElementById(" |
| - | <span class="small">${s.desc}</ | + | |
| - | </label><br>`; | + | skills.forEach((s,i)=>{ |
| + | |||
| + | const label=document.createElement("label"); | ||
| + | |||
| + | const cb=document.createElement(" | ||
| + | cb.type=" | ||
| + | cb.id="skill_"+i; | ||
| + | |||
| + | cb.addEventListener("change", | ||
| + | |||
| + | label.appendChild(cb); | ||
| + | label.appendChild( | ||
| + | document.createTextNode(" | ||
| + | ); | ||
| + | |||
| + | skillsDiv.appendChild(label); | ||
| + | skillsDiv.appendChild(document.createElement(" | ||
| }); | }); | ||
| - | // affichage sorts | + | /* ========================================================= |
| - | spells.forEach(s=> | + | |
| - | document.getElementById("spells").innerHTML += ` | + | ========================================================= */ |
| - | < | + | |
| - | <input type=" | + | const spellsDiv=document.getElementById(" |
| - | <b>${s.name}</ | + | |
| - | <span class="small"> | + | spells.forEach((s,i)=>{ |
| - | </label><br>`; | + | |
| + | const label=document.createElement("label"); | ||
| + | |||
| + | const cb=document.createElement(" | ||
| + | cb.type=" | ||
| + | cb.id="spell_"+i; | ||
| + | |||
| + | cb.addEventListener("change", | ||
| + | |||
| + | label.appendChild(cb); | ||
| + | | ||
| + | document.createTextNode( | ||
| + | " "+s.name+ | ||
| + | " (Dex "+s.dex+" | ||
| + | | ||
| + | ); | ||
| + | |||
| + | spellsDiv.appendChild(label); | ||
| + | spellsDiv.appendChild(document.createElement(" | ||
| }); | }); | ||
| - | // base stats | ||
| - | function displayBase(){ | ||
| - | baseDiv.textContent = JSON.stringify(races[raceSelect.value], | ||
| - | } | ||
| - | raceSelect.addEventListener(" | ||
| - | displayBase(); | ||
| - | // ===== COST ===== | + | /* ========================================================= |
| - | function calcCost(b, | + | EQUIPEMENTS |
| - | let total=0,last=b; | + | ========================================================= */ |
| - | for(let i=1;i<=n;i++){ | + | |
| - | if(i===1) last=b; | + | |
| - | else if(i<=3) last+=m1; | + | |
| - | else last+=m2; | + | |
| - | total+=last; | + | |
| - | } | + | |
| - | return total; | + | |
| - | } | + | |
| - | function updateCost(){ | + | const head=document.getElementById(" |
| - | let total=0; | + | const cape=document.getElementById(" |
| - | for(let s in costTable){ | + | const rightHand=document.getElementById(" |
| - | let v=+document.getElementById(s).value||0; | + | const leftHand=document.getElementById(" |
| - | let [b,m1,m2]=costTable[s]; | + | const body=document.getElementById(" |
| - | total+=calcCost(b,m1,m2,v); | + | const ring=document.getElementById(" |
| - | } | + | const feet=document.getElementById("feet"); |
| - | document.getElementById(" | + | |
| - | } | + | |
| - | // ===== SLOTS ===== | ||
| const slots = { | const slots = { | ||
| - | head:head,neck:neck,cape: | + | |
| - | leftHand: | + | |
| + | | ||
| + | | ||
| + | leftHand: | ||
| + | | ||
| + | | ||
| + | | ||
| }; | }; | ||
| - | function | + | |
| - | Object.values(slots).forEach(s=> | + | /* ========================================================= |
| + | REGLE D' | ||
| + | ========================================================= | ||
| + | |||
| + | Normal : | ||
| + | toutes les races | ||
| + | |||
| + | Exo : | ||
| + | uniquement la race propriétaire | ||
| + | */ | ||
| + | |||
| + | function | ||
| + | |||
| + | if(e.exo === true){ | ||
| + | return e.race === race; | ||
| + | } | ||
| + | |||
| + | return true; | ||
| } | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| function fillEquip(){ | function fillEquip(){ | ||
| - | let r=raceSelect.value; | ||
| - | equipments.forEach((e, | + | const race=raceSelect.value; |
| - | if(e.race!==" | + | |
| - | if(e.slot===" | + | for(const key in slots){ |
| - | if(e.slot===" | + | |
| - | if(e.slot===" | + | |
| - | if(e.slot===" | + | |
| - | if(e.slot===" | + | |
| - | if(e.slot===" | + | |
| - | if(e.slot===" | + | |
| - | if(e.slot===" | + | |
| - | }); | + | |
| - | } | + | |
| - | raceSelect.addEventListener(" | + | const select=slots[key]; |
| - | resetSlots(); | + | |
| - | fillEquip(); | + | |
| - | autoCalculate(); | + | |
| - | }); | + | |
| - | resetSlots(); | + | select.innerHTML="" |
| - | fillEquip(); | + | |
| - | // ===== BONUS ===== | + | const empty=document.createElement(" |
| - | function displayStats(select,id){ | + | empty.value="" |
| - | let v=select.value; | + | |
| - | let el=document.getElementById(id); | + | select.appendChild(empty); |
| - | if(v==="" | + | |
| - | let e=equipments[v]; | + | equipments |
| - | let txt=""; | + | .filter(e => e.slot===key) |
| - | for(let s in e.stats){ | + | |
| - | let val=e.stats[s]; | + | |
| - | txt+=val>0?`+${val} ${s} `:`${val} ${s} `; | + | |
| - | } | + | const o=document.createElement("option"); |
| - | el.innerHTML=txt; | + | |
| + | o.value=equipments.indexOf(e); | ||
| + | |||
| + | o.textContent= | ||
| + | | ||
| + | (e.exo ? " (exo)" : "" | ||
| + | |||
| + | select.appendChild(o); | ||
| + | }); | ||
| + | |||
| + | select.onchange=()=>{ | ||
| + | |||
| + | const statIds = { | ||
| + | head:" | ||
| + | cape:" | ||
| + | rightHand:" | ||
| + | leftHand:" | ||
| + | body:" | ||
| + | ring:" | ||
| + | feet:" | ||
| + | }; | ||
| + | |||
| + | displayStats(select, | ||
| + | |||
| + | checkLimit(key); | ||
| + | calculate(); | ||
| + | }; | ||
| + | } | ||
| + | |||
| + | displayAllEquipStats(); | ||
| + | checkLimit(); | ||
| + | calculate(); | ||
| } | } | ||
| - | const slotToStatId | + | |
| - | head:"headStats", | + | /* ========================================================= |
| - | neck:"neckStats", | + | |
| - | cape:"capeStats", | + | ========================================================= */ |
| - | rightHand:"rightStats", | + | |
| - | leftHand:"leftStats", | + | const statNames={ |
| - | body:"bodyStats", | + | |
| - | ring:"ringStats", | + | f:"F", |
| - | feet:"feetStats" | + | e:"E", |
| + | |||
| + | agi:"Agi", | ||
| + | |||
| + | cc:"CC", | ||
| + | ct:"CT", | ||
| + | fm:"FM", | ||
| + | |||
| + | mvt:" | ||
| + | |||
| + | pv:" | ||
| + | pm:" | ||
| + | |||
| + | r:" | ||
| + | res:" | ||
| + | rm:" | ||
| + | |||
| + | p:" | ||
| + | pui:" | ||
| + | |||
| + | esquive:" | ||
| + | |||
| + | demolition:" | ||
| + | |||
| + | magique:"Magique", | ||
| + | feu:"Feu" | ||
| }; | }; | ||
| - | Object.entries(slots).forEach(([k, | ||
| - | s.addEventListener(" | ||
| - | displayStats(s, | ||
| - | checkLimit(); | ||
| - | autoCalculate(); | ||
| - | }); | ||
| - | }); | ||
| - | // ===== LIMIT ===== | + | function |
| - | function | + | |
| - | let count=0; | + | |
| - | Object.entries(slots).forEach(([k,s])=>{ | + | |
| - | if(k!==" | + | |
| - | }); | + | |
| - | if(count>=3){ | + | const el=document.getElementById(id); |
| - | limitWarn.innerText="Limite atteinte"; | + | |
| - | Object.entries(slots).forEach(([k,s])=>{ | + | |
| - | if(k!=="ring"&& | + | return; |
| - | }); | + | } |
| - | }else{ | + | |
| - | limitWarn.innerText=""; | + | const index=select.value; |
| - | Object.values(slots).forEach(s=> | + | |
| + | if(index==="" | ||
| + | el.innerHTML=""; | ||
| + | | ||
| + | } | ||
| + | |||
| + | const e=equipments[Number(index)]; | ||
| + | |||
| + | if(!e){ | ||
| + | el.innerHTML=""; | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | let html=""; | ||
| + | |||
| + | for(const [stat,value] of Object.entries(e.stats || {})){ | ||
| + | |||
| + | const name=statNames[stat] || stat; | ||
| + | |||
| + | /* Booléens : Magique / Feu */ | ||
| + | | ||
| + | |||
| + | html += | ||
| + | `<span class="special"> | ||
| + | |||
| + | continue; | ||
| + | } | ||
| + | |||
| + | if(value===false || value===0){ | ||
| + | continue; | ||
| + | } | ||
| + | |||
| + | if(value> | ||
| + | |||
| + | html += | ||
| + | `<span class=" | ||
| + | |||
| + | | ||
| + | |||
| + | html += | ||
| + | `<span class="malus"> | ||
| + | |||
| + | } | ||
| + | } | ||
| + | |||
| + | el.innerHTML=html; | ||
| } | } | ||
| + | |||
| + | |||
| + | function displayAllEquipStats(){ | ||
| + | |||
| + | displayStats(head," | ||
| + | displayStats(cape," | ||
| + | displayStats(rightHand," | ||
| + | displayStats(leftHand," | ||
| + | displayStats(body," | ||
| + | displayStats(ring," | ||
| + | displayStats(feet," | ||
| } | } | ||
| - | // ===== CALCUL ===== | ||
| - | function calculate(){ | + | /* ========================================================= |
| + | | ||
| + | ========================================================= */ | ||
| - | let activeSpells = [...document.querySelectorAll(" | + | function checkLimit(changedSlot = null){ |
| - | let bestDex = 0; | + | |
| - | let bestProt | + | |
| - | activeSpells.forEach(s=>{ | + | for(const key in slots){ |
| - | let d = +s.dataset.dex; | + | |
| - | let p = +s.dataset.prot; | + | |
| - | if(Math.abs(d) > Math.abs(bestDex)) bestDex = d; | + | |
| - | if(Math.abs(p) > Math.abs(bestProt)) bestProt = p; | + | |
| - | }); | + | } |
| - | let char={...races[raceSelect.value]}; | + | if(slots[key].value |
| + | count++; | ||
| + | } | ||
| + | | ||
| - | // stats investies | + | const warn = document.getElementById(" |
| - | for(let s in costTable){ | + | |
| - | let v=+document.getElementById(s).value||0; | + | if(count > 3){ |
| - | char[s]=(char[s]||0)+v; | + | |
| + | // Si un équipement vient d' | ||
| + | // on le retire immédiatement | ||
| + | if(changedSlot && changedSlot !== " | ||
| + | slots[changedSlot].value | ||
| + | displayStats( | ||
| + | slots[changedSlot], | ||
| + | changedSlot | ||
| + | ); | ||
| + | } | ||
| + | |||
| + | count--; | ||
| + | |||
| + | warn.textContent = | ||
| + | " | ||
| + | |||
| + | }else{ | ||
| + | |||
| + | warn.textContent = ""; | ||
| + | } | ||
| } | } | ||
| - | // equip | + | |
| - | Object.values(slots).forEach(sel=> | + | /* ========================================================= |
| - | if(sel.value==="" | + | RESET DES EQUIPEMENTS |
| - | let e=equipments[sel.value]; | + | ========================================================= */ |
| - | for(let s in e.stats){ | + | |
| - | char[s]=(char[s]||0)+e.stats[s]; | + | function resetSlots(){ |
| + | |||
| + | for(const key in slots){ | ||
| + | |||
| + | slots[key].value=""; | ||
| + | } | ||
| + | |||
| + | displayAllEquipStats(); | ||
| + | | ||
| } | } | ||
| - | }); | ||
| - | // ===== DÉS ===== | ||
| - | let ccDice = char.cc * 2; | ||
| - | let ctDice = char.ct * 2; | ||
| - | let fmDice = char.fm * 2; | ||
| - | let agiDice = char.agi * 2; | ||
| - | // ===== VALEURS FINALES | + | /* ========================================================= |
| - | let finalCC | + | STATS DE BASE |
| - | let finalCT | + | ========================================================= */ |
| - | let finalFM | + | |
| + | function displayBase(){ | ||
| - | // ===== CT DISTANCE ===== | + | const r=races[raceSelect.value]; |
| - | function getCTDistance(baseCT, distance){ | + | |
| - | if(distance <= 2) return baseCT; | + | document.getElementById(" |
| - | return baseCT - (distance - 2) * 3; | + | |
| } | } | ||
| - | let ct1 = getCTDistance(finalCT, | ||
| - | let ct2 = getCTDistance(finalCT, | ||
| - | let ct3 = getCTDistance(finalCT, | ||
| - | let ct4 = getCTDistance(finalCT, | ||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| - | // ===== ESQUIVE ===== | + | function calcCost(){ |
| - | let checked | + | |
| - | // ===== ESQUIVE CAC ===== | + | for(const stat in costTable){ |
| - | // règle : meilleur entre CC et AGI (dés), puis conversion jet + protection | + | |
| - | let esquiveCAC | + | const input=document.getElementById(" |
| - | // conversion en jet + protection | + | if(!input){ |
| - | esquiveCAC = esquiveCAC + bestProt; | + | |
| + | } | ||
| + | let level=parseInt(input.value)||0; | ||
| - | // ===== ESQUIVE TIR ===== | + | const costs=costTable[stat]; |
| - | // règle : | + | |
| - | // max entre : | + | |
| - | // (3/4 CC + 1/4 AGI) | + | |
| - | // (1/4 CC + 3/4 AGI) | + | |
| - | // arrondi inférieur → dés → ×2 → + protection | + | |
| - | let esquiveA | + | for(let i=0;i< |
| - | let esquiveB = Math.floor(char.cc * 0.25 + char.agi * 0.75); | + | |
| - | // passifs qui remplacent le calcul | + | total += |
| - | let esquiveStat; | + | |
| + | } | ||
| + | } | ||
| - | if(checked.includes(" | + | return total; |
| - | esquiveStat = Math.floor(char.agi * 0.85 + char.cc * 0.15); | + | |
| } | } | ||
| - | else if(checked.includes(" | + | |
| - | | + | |
| - | } | + | function updateCost(){ |
| - | else{ | + | |
| - | esquiveStat = Math.max(esquiveA, esquiveB); | + | |
| + | "Coût total : "+calcCost(); | ||
| } | } | ||
| - | // conversion en jet | ||
| - | let esquiveTir = esquiveStat * 2; | ||
| - | // protection (UNE seule fois) | + | /* ========================================================= |
| - | esquiveTir += bestProt; | + | |
| + | ========================================================= */ | ||
| - | // bonus passifs | + | function calculate(){ |
| - | if(checked.includes(" | + | |
| - | esquiveTir += 1; | + | |
| + | const race=races[raceSelect.value]; | ||
| - | // ===== ESQUIVE MAGIQUE ===== | + | if(!race){ |
| - | // règle : FM en jet + protection | + | |
| + | } | ||
| - | let esquiveFM = fmDice + bestProt; | + | updateCost(); |
| + | displayBase(); | ||
| - | // ===== MAGIE ===== | + | |
| - | let jetFM = finalFM; | + | Copie des stats raciales |
| + | */ | ||
| - | let sorts = ""; | + | const char={}; |
| - | for(let lvl=1; lvl<=5; lvl++){ | + | |
| - | let seuil = 6 + 6 * lvl; | + | |
| - | let reussite = jetFM >= seuil ? " | + | |
| - | | + | |
| - | } | + | |
| - | // ===== AFFICHAGE ===== | + | char[stat]=race[stat]; |
| - | document.getElementById(" | + | } |
| - | "Bonus actifs → Dex: " | + | |
| - | result.textContent = | ||
| - | "===== PERSONNAGE =====\n" | + | /* |
| - | "Race : " | + | Ajout des améliorations |
| + | */ | ||
| - | " | + | for(const stat in costTable){ |
| - | JSON.stringify(char,null,2)+ | + | |
| - | "\n\n===== JET OFFENSIF =====\n" | + | const input=document.getElementById("up_"+stat); |
| - | "\n⚔ CC : jet moyen " | + | |
| - | " | + | |
| - | "\n✨ FM : jet moyen " | + | |
| - | " | + | if(input){ |
| - | " | + | |
| - | " | + | |
| - | "\n✨ Esquive FM : " | + | |
| - | "\n\n===== JET DISTANCE =====\n" | + | char[stat] |
| - | " | + | |
| - | "\n1 case : "+ct1+ | + | |
| - | "\n2 cases : "+ct2+ | + | } |
| - | "\n3 cases : " | + | } |
| - | "\n4 cases : "+ct4+ | + | |
| - | " | ||
| - | "Jet FM : " | ||
| - | sorts; | ||
| - | } | ||
| + | /* | ||
| + | Ajout équipement | ||
| + | */ | ||
| - | // ===== AUTO ===== | + | for(const key in slots){ |
| - | function autoCalculate(){ | + | |
| - | updateCost(); | + | |
| - | calculate(); | + | |
| - | } | + | |
| - | // events stats | + | const index=slots[key].value; |
| - | document.querySelectorAll("# | + | |
| - | i.addEventListener(" | + | |
| - | }); | + | |
| - | document.querySelectorAll(".spell").forEach(s=> | + | if(index==="" |
| - | s.addEventListener(" | + | |
| - | }); | + | } |
| + | const e=equipments[Number(index)]; | ||
| - | // passifs | + | if(!e){ |
| - | document.querySelectorAll(" | + | |
| - | s.addEventListener(" | + | } |
| - | }); | + | |
| + | for(const [stat, | ||
| + | if(typeof value===" | ||
| - | // ===== RESET ===== | + | char[stat]=(char[stat]||0)+value; |
| - | function resetAll(){ | + | } |
| + | } | ||
| + | } | ||
| - | document.querySelectorAll("# | ||
| - | document.querySelectorAll(" | ||
| - | Object.values(slots).forEach(s=> | + | /* |
| - | s.value=""; | + | Sorts actifs |
| - | s.disabled=false; | + | */ |
| - | }); | + | |
| - | document.querySelectorAll(" | + | let bestDex=0; |
| + | let bestProt=0; | ||
| - | resetSlots(); | + | let spellDetails=[]; |
| - | fillEquip(); | + | |
| - | displayBase(); | + | |
| - | checkLimit(); | + | |
| - | autoCalculate(); | + | |
| - | } | + | |
| - | // init | + | spells.forEach((s,i)=>{ |
| - | autoCalculate(); | + | |
| + | const cb=document.getElementById(" | ||
| + | if(cb && cb.checked){ | ||
| - | // ===== POUSSEE ===== | + | bestDex=Math.max(bestDex, |
| - | function calculatePush(){ | + | bestProt=Math.max(bestProt, |
| - | let F=+pushF.value; | + | spellDetails.push(s.name); |
| - | let buff=+pushBuff.value; | + | } |
| + | }); | ||
| - | let E=+pushE.value; | ||
| - | let agi=+pushAgi.value; | ||
| - | let pv=+pushPV.value; | ||
| - | let instability=+pushDebuff.value; | + | document.getElementById(" |
| - | let stability=+pushStab.value; | + | spellDetails.length |
| + | ? | ||
| + | "Sorts actifs : "+spellDetails.join(", | ||
| + | " | Bonus Dex : " | ||
| + | " | Protection : " | ||
| + | : | ||
| + | "" | ||
| - | let attaque=F+buff; | ||
| - | let defense=Math.max(E+4, | ||
| - | pushResult.textContent= | + | /* |
| - | " | + | Dés de caractéristiques |
| - | " | + | */ |
| - | " | + | |
| - | } | + | |
| - | // ===== EVENTS ===== | + | const ccDice=char.cc*2; |
| - | document.querySelectorAll(" | + | const ctDice=char.ct*2; |
| - | updateCost(); | + | const fmDice=char.fm*2; |
| - | })); | + | const agiDice=char.agi*2; |
| - | document.querySelectorAll(" | ||
| - | updateCost(); | ||
| - | })); | ||
| + | /* | ||
| + | | ||
| + | */ | ||
| - | // ===== INIT ===== | + | let result="" |
| - | updateCost(); | + | |
| - | calculate(); | + | |
| - | calculatePush(); | + | |
| - | // ===================================== | + | result += |
| - | // ENCODE / DECODE | + | " |
| - | // ===================================== | + | |
| - | function encodeBuild(data){ | + | result += |
| - | | + | " |
| - | } | + | |
| - | function decodeBuild(code){ | + | result += |
| - | | + | " |
| - | } | + | |
| - | // ===================================== | + | result += |
| - | // BUILD DATA | + | " |
| - | // ===================================== | + | |
| - | function getBuildData(){ | + | result += |
| + | "CC : " | ||
| - | | + | |
| - | | + | |
| - | stats: {}, | + | |
| - | equip: {}, | + | |
| - | skills: [], | + | |
| - | spells: [] | + | |
| - | }; | + | |
| - | // stats | + | |
| - | for(let | + | "FM : " |
| - | | + | |
| + | result += | ||
| + | "PV : " | ||
| + | |||
| + | result += | ||
| + | "PM : " | ||
| + | |||
| + | result += | ||
| + | "Mvt : " | ||
| + | |||
| + | result += | ||
| + | "R : " | ||
| + | |||
| + | result += | ||
| + | "Rés : " | ||
| + | |||
| + | result += | ||
| + | "RM : " | ||
| + | |||
| + | result += | ||
| + | "P : " | ||
| + | |||
| + | result += | ||
| + | "Pui : " | ||
| + | |||
| + | |||
| + | result += | ||
| + | "\n=== COMBAT ===\n\n"; | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | const finalCC=ccDice+bestDex; | ||
| + | const finalCT=ctDice+bestDex; | ||
| + | const finalFM=fmDice+bestDex; | ||
| + | |||
| + | |||
| + | result += | ||
| + | " | ||
| + | |||
| + | result += | ||
| + | " | ||
| + | |||
| + | result += | ||
| + | "FM : " | ||
| + | |||
| + | |||
| + | /* | ||
| + | Tir selon distance | ||
| + | */ | ||
| + | |||
| + | result += | ||
| + | "\n=== TIR ===\n\n"; | ||
| + | |||
| + | for(let | ||
| + | |||
| + | | ||
| + | |||
| + | if(cases> | ||
| + | |||
| + | ctDistance -= | ||
| + | (cases-2)*3; | ||
| + | } | ||
| + | |||
| + | result | ||
| + | cases+" | ||
| } | } | ||
| - | // équipements | ||
| - | Object.entries(slots).forEach(([k, | ||
| - | data.equip[k] = s.value; | ||
| - | }); | ||
| - | // passifs | + | /* |
| - | | + | Esquive CAC |
| - | data.skills.push(s.dataset.name); | + | |
| - | | + | |
| - | // sorts | + | |
| - | document.querySelectorAll(".spell:checked").forEach(s=>{ | + | Math.max(ccDice, |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| + | */ | ||
| + | |||
| + | | ||
| + | |||
| + | if(fulg && fulg.checked){ | ||
| + | |||
| + | meleeDodge += 1; | ||
| + | } | ||
| + | |||
| + | |||
| + | result += | ||
| + | "\n=== ESQUIVE CAC ===\n\n"; | ||
| + | |||
| + | result += | ||
| + | " | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | let rangedDodge; | ||
| + | |||
| + | const couverture= | ||
| + | document.getElementById(" | ||
| + | |||
| + | const reflexes= | ||
| + | document.getElementById(" | ||
| + | |||
| + | if(couverture && couverture.checked){ | ||
| + | |||
| + | | ||
| + | Math.floor( | ||
| + | (ccDice*0.85)+(agiDice*0.15) | ||
| + | ); | ||
| + | |||
| + | }else if(reflexes && reflexes.checked){ | ||
| + | |||
| + | rangedDodge= | ||
| + | | ||
| + | (agiDice*0.85)+(ccDice*0.15) | ||
| + | ); | ||
| + | |||
| + | }else{ | ||
| + | |||
| + | rangedDodge= | ||
| + | Math.floor( | ||
| + | (ccDice+agiDice)/ | ||
| + | | ||
| + | } | ||
| + | |||
| + | rangedDodge += bestProt; | ||
| + | |||
| + | result += | ||
| + | "\n=== ESQUIVE TIR ===\n\n"; | ||
| + | |||
| + | result += | ||
| + | " | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | const magicDodge= | ||
| + | fmDice+bestProt; | ||
| + | |||
| + | result += | ||
| + | "\n=== ESQUIVE MAGIQUE ===\n\n"; | ||
| + | |||
| + | result += | ||
| + | "FM défensive : " | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | const magicLevels=[ | ||
| + | 12, | ||
| + | 18, | ||
| + | 24, | ||
| + | 30, | ||
| + | 36 | ||
| + | ]; | ||
| + | |||
| + | result += | ||
| + | "\n=== SEUILS MAGIE ===\n\n"; | ||
| + | |||
| + | magicLevels.forEach((threshold, | ||
| + | |||
| + | | ||
| + | " | ||
| + | " : " | ||
| + | " → "+ | ||
| + | (finalFM> | ||
| + | " | ||
| }); | }); | ||
| - | return data; | + | |
| + | document.getElementById(" | ||
| + | |||
| + | calculatePush(); | ||
| } | } | ||
| - | // ===================================== | ||
| - | // APPLY BUILD | ||
| - | // ===================================== | ||
| - | function | + | /* ========================================================= |
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | function | ||
| + | |||
| + | const F= | ||
| + | parseInt( | ||
| + | document.getElementById(" | ||
| + | )||0; | ||
| + | |||
| + | const buff= | ||
| + | parseInt( | ||
| + | document.getElementById(" | ||
| + | )||0; | ||
| + | |||
| + | const E= | ||
| + | parseInt( | ||
| + | document.getElementById(" | ||
| + | )||0; | ||
| + | |||
| + | const agi= | ||
| + | parseInt( | ||
| + | document.getElementById(" | ||
| + | )||0; | ||
| + | |||
| + | const pv= | ||
| + | parseInt( | ||
| + | document.getElementById(" | ||
| + | )||0; | ||
| + | |||
| + | const instability= | ||
| + | parseInt( | ||
| + | document.getElementById(" | ||
| + | )||0; | ||
| + | |||
| + | const stability= | ||
| + | parseInt( | ||
| + | document.getElementById(" | ||
| + | )||0; | ||
| + | |||
| + | |||
| + | const attaque= | ||
| + | F+buff; | ||
| + | |||
| + | const defense= | ||
| + | Math.max(E+4, | ||
| + | +(pv/10) | ||
| + | +instability | ||
| + | +stability; | ||
| + | |||
| + | |||
| + | const result= | ||
| + | " | ||
| + | " | ||
| + | |||
| + | |||
| + | document.getElementById(" | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | [ | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ].forEach(id=> | ||
| + | |||
| + | document.getElementById(id) | ||
| + | .addEventListener(" | ||
| + | |||
| + | document.getElementById(id) | ||
| + | .addEventListener(" | ||
| + | }); | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | RESET COMPLET | ||
| + | ========================================================= */ | ||
| + | |||
| + | function resetAll(){ | ||
| + | |||
| + | raceSelect.selectedIndex=0; | ||
| + | |||
| + | for(const stat in costTable){ | ||
| + | |||
| + | const input=document.getElementById(" | ||
| + | |||
| + | if(input){ | ||
| + | input.value=0; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | document | ||
| + | .querySelectorAll( | ||
| + | '# | ||
| + | ) | ||
| + | .forEach(cb=> | ||
| + | cb.checked=false; | ||
| + | }); | ||
| - | // race | ||
| - | raceSelect.value = data.race || " | ||
| - | // recharge équipements race | ||
| resetSlots(); | resetSlots(); | ||
| + | |||
| fillEquip(); | fillEquip(); | ||
| - | // stats | + | |
| - | for(let s in costTable){ | + | } |
| - | document.getElementById(s).value | + | |
| - | | + | |
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | function exportBuild(){ | ||
| + | |||
| + | const build={}; | ||
| + | |||
| + | build.race=raceSelect.value; | ||
| + | |||
| + | build.stats={}; | ||
| + | |||
| + | for(const stat in costTable){ | ||
| + | |||
| + | | ||
| + | parseInt( | ||
| + | | ||
| + | | ||
| } | } | ||
| - | | ||
| - | // équipements | ||
| - | Object.entries(slots).forEach(([k, | ||
| - | s.value = data.equip? | ||
| - | }); | ||
| - | // refresh affichage bonus équipements | ||
| - | Object.entries(slots).forEach(([k, | ||
| - | displayStats(s, | ||
| - | }); | ||
| - | | ||
| - | | + | |
| - | document.querySelectorAll(" | + | |
| - | s.checked = | + | |
| - | data.skills? | + | |
| - | | + | |
| - | | + | |
| - | document.querySelectorAll(" | + | |
| - | | + | |
| - | | + | |
| - | | + | } |
| - | ); | + | |
| + | |||
| + | build.skills=[]; | ||
| + | |||
| + | skills.forEach((s, | ||
| + | |||
| + | const cb=document.getElementById(" | ||
| + | |||
| + | if(cb.checked){ | ||
| + | build.skills.push(s.name); | ||
| + | } | ||
| }); | }); | ||
| - | displayBase(); | ||
| - | checkLimit(); | ||
| - | autoCalculate(); | ||
| - | } | ||
| - | // ===================================== | + | build.spells=[]; |
| - | // EXPORT | + | |
| - | // ===================================== | + | spells.forEach((s, |
| + | |||
| + | const cb=document.getElementById(" | ||
| + | |||
| + | | ||
| + | |||
| + | build.spells.push({ | ||
| + | dex: | ||
| + | prot: | ||
| + | }); | ||
| + | } | ||
| + | }); | ||
| - | function exportBuild(){ | ||
| - | | + | |
| + | JSON.stringify(build, | ||
| - | let code = encodeBuild(data); | ||
| - | prompt(" | + | prompt( |
| + | | ||
| + | text | ||
| + | | ||
| } | } | ||
| - | // ===================================== | ||
| - | // IMPORT | ||
| - | // ===================================== | ||
| - | function importBuild(codeInput){ | + | /* ========================================================= |
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | function importBuild(){ | ||
| - | | + | |
| + | prompt(" | ||
| - | if(!code){ | + | if(!text){ |
| - | | + | |
| } | } | ||
| - | if(!code) return; | ||
| try{ | try{ | ||
| - | | + | |
| + | JSON.parse(text); | ||
| - | let data = decodeBuild(code); | ||
| - | | + | |
| + | | ||
| + | */ | ||
| - | | + | |
| - | | + | raceSelect.value=build.race; |
| + | | ||
| - | console.log(e); | ||
| - | alert(" | + | |
| + | | ||
| + | */ | ||
| + | |||
| + | if(build.stats){ | ||
| + | |||
| + | for(const stat in build.stats){ | ||
| + | |||
| + | const input= | ||
| + | document.getElementById(" | ||
| + | |||
| + | if(input){ | ||
| + | |||
| + | input.value= | ||
| + | build.stats[stat]; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | fillEquip(); | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | |||
| + | On essaye d' | ||
| + | | ||
| + | */ | ||
| + | |||
| + | if(build.equipment){ | ||
| + | |||
| + | for(const key in build.equipment){ | ||
| + | |||
| + | if(!slots[key]){ | ||
| + | continue; | ||
| + | } | ||
| + | |||
| + | const wanted= | ||
| + | build.equipment[key]; | ||
| + | |||
| + | if(wanted==="" | ||
| + | continue; | ||
| + | } | ||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | if( | ||
| + | equipments[wanted] && | ||
| + | canEquip( | ||
| + | equipments[wanted], | ||
| + | raceSelect.value | ||
| + | ) | ||
| + | ){ | ||
| + | |||
| + | slots[key].value=wanted; | ||
| + | continue; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | nom de l' | ||
| + | */ | ||
| + | |||
| + | const found= | ||
| + | equipments.findIndex(e => | ||
| + | e.name===wanted && | ||
| + | e.slot===key && | ||
| + | canEquip( | ||
| + | e, | ||
| + | raceSelect.value | ||
| + | ) | ||
| + | ); | ||
| + | |||
| + | if(found> | ||
| + | |||
| + | slots[key].value=found; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | document | ||
| + | .querySelectorAll( | ||
| + | '# | ||
| + | ) | ||
| + | .forEach(cb=> | ||
| + | cb.checked=false; | ||
| + | }); | ||
| + | |||
| + | |||
| + | if(Array.isArray(build.skills)){ | ||
| + | |||
| + | build.skills.forEach(name=> | ||
| + | |||
| + | const index= | ||
| + | skills.findIndex( | ||
| + | s=> | ||
| + | ); | ||
| + | |||
| + | if(index> | ||
| + | |||
| + | document.getElementById( | ||
| + | " | ||
| + | ).checked=true; | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | document | ||
| + | .querySelectorAll( | ||
| + | '# | ||
| + | ) | ||
| + | .forEach(cb=> | ||
| + | cb.checked=false; | ||
| + | }); | ||
| + | |||
| + | |||
| + | if(Array.isArray(build.spells)){ | ||
| + | |||
| + | build.spells.forEach(spell=> | ||
| + | |||
| + | const index= | ||
| + | spells.findIndex( | ||
| + | s => | ||
| + | s.dex===spell.dex && | ||
| + | s.prot===spell.prot | ||
| + | ); | ||
| + | |||
| + | if(index> | ||
| + | |||
| + | document.getElementById( | ||
| + | " | ||
| + | ).checked=true; | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | displayAllEquipStats(); | ||
| + | checkLimit(); | ||
| + | calculate(); | ||
| + | |||
| + | |||
| + | }catch(err){ | ||
| + | |||
| + | | ||
| + | | ||
| + | err.message | ||
| + | | ||
| } | } | ||
| } | } | ||
| - | // ===================================== | + | |
| - | // LIEN PARTAGE | + | /* ========================================================= |
| - | // ===================================== | + | |
| + | ========================================================= */ | ||
| function copyLink(){ | function copyLink(){ | ||
| - | | + | |
| - | | + | |
| - | | + | |
| - | window.location.origin + | + | |
| - | window.location.pathname + | + | |
| - | "? | + | |
| - | | + | |
| - | | + | |
| + | parseInt( | ||
| + | document.getElementById("up_"+stat).value | ||
| + | | ||
| + | } | ||
| - | }).catch(()=> | ||
| - | prompt(" | + | build.equipment={}; |
| + | for(const key in slots){ | ||
| + | |||
| + | const index=slots[key].value; | ||
| + | |||
| + | if(index==="" | ||
| + | |||
| + | build.equipment[key]=""; | ||
| + | |||
| + | }else{ | ||
| + | |||
| + | /* | ||
| + | On sauvegarde le nom plutôt que l' | ||
| + | Cela évite que les liens cassent si | ||
| + | | ||
| + | */ | ||
| + | |||
| + | build.equipment[key]= | ||
| + | equipments[Number(index)] | ||
| + | ? equipments[Number(index)].name | ||
| + | : ""; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | build.skills=[]; | ||
| + | |||
| + | skills.forEach((s, | ||
| + | |||
| + | if( | ||
| + | document.getElementById(" | ||
| + | ){ | ||
| + | |||
| + | build.skills.push(s.name); | ||
| + | } | ||
| }); | }); | ||
| + | |||
| + | |||
| + | build.spells=[]; | ||
| + | |||
| + | spells.forEach((s, | ||
| + | |||
| + | if( | ||
| + | document.getElementById(" | ||
| + | ){ | ||
| + | |||
| + | build.spells.push({ | ||
| + | dex:s.dex, | ||
| + | prot:s.prot | ||
| + | }); | ||
| + | } | ||
| + | }); | ||
| + | |||
| + | |||
| + | const encoded= | ||
| + | btoa( | ||
| + | unescape( | ||
| + | encodeURIComponent( | ||
| + | JSON.stringify(build) | ||
| + | ) | ||
| + | ) | ||
| + | ); | ||
| + | |||
| + | |||
| + | const url= | ||
| + | location.origin+ | ||
| + | location.pathname+ | ||
| + | "? | ||
| + | encodeURIComponent(encoded); | ||
| + | |||
| + | |||
| + | navigator.clipboard.writeText(url) | ||
| + | .then(()=> | ||
| + | |||
| + | alert( | ||
| + | "Lien copié dans le presse-papiers." | ||
| + | ); | ||
| + | |||
| + | }) | ||
| + | .catch(()=> | ||
| + | |||
| + | prompt( | ||
| + | "Copie ce lien :", | ||
| + | url | ||
| + | ); | ||
| + | }); | ||
| } | } | ||
| - | // ===================================== | ||
| - | // AUTO LOAD URL | ||
| - | // ===================================== | ||
| - | (function(){ | + | /* ========================================================= |
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | function | ||
| + | |||
| + | const params= | ||
| + | new URLSearchParams( | ||
| + | location.search | ||
| + | ); | ||
| + | |||
| + | const encoded= | ||
| + | params.get(" | ||
| + | |||
| + | if(!encoded){ | ||
| + | return; | ||
| + | } | ||
| try{ | try{ | ||
| - | | + | |
| - | | + | |
| + | escape( | ||
| + | atob( | ||
| + | decodeURIComponent(encoded) | ||
| + | ) | ||
| + | ) | ||
| + | | ||
| - | let code = params.get(" | ||
| - | | + | |
| + | JSON.parse(json); | ||
| - | let data = decodeBuild(code); | ||
| - | | + | |
| - | console.log(" | + | raceSelect.value= |
| + | build.race; | ||
| + | } | ||
| - | }catch(e){ | ||
| - | | + | |
| + | |||
| + | /* | ||
| + | Stats | ||
| + | */ | ||
| + | |||
| + | if(build.stats){ | ||
| + | |||
| + | for(const stat in build.stats){ | ||
| + | |||
| + | const input= | ||
| + | document.getElementById( | ||
| + | " | ||
| + | ); | ||
| + | |||
| + | if(input){ | ||
| + | |||
| + | input.value= | ||
| + | build.stats[stat]; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | if(build.equipment){ | ||
| + | |||
| + | for(const key in build.equipment){ | ||
| + | |||
| + | if(!slots[key]){ | ||
| + | continue; | ||
| + | } | ||
| + | |||
| + | const name= | ||
| + | build.equipment[key]; | ||
| + | |||
| + | if(!name){ | ||
| + | continue; | ||
| + | } | ||
| + | |||
| + | const index= | ||
| + | equipments.findIndex(e => | ||
| + | e.name===name && | ||
| + | e.slot===key && | ||
| + | canEquip( | ||
| + | e, | ||
| + | raceSelect.value | ||
| + | ) | ||
| + | ); | ||
| + | |||
| + | if(index> | ||
| + | |||
| + | slots[key].value= | ||
| + | index; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | | ||
| + | */ | ||
| + | |||
| + | if(Array.isArray(build.skills)){ | ||
| + | |||
| + | build.skills.forEach(name=> | ||
| + | |||
| + | const index= | ||
| + | skills.findIndex( | ||
| + | s=> | ||
| + | ); | ||
| + | |||
| + | if(index> | ||
| + | |||
| + | document.getElementById( | ||
| + | " | ||
| + | ).checked=true; | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | Sorts | ||
| + | */ | ||
| + | |||
| + | if(Array.isArray(build.spells)){ | ||
| + | |||
| + | build.spells.forEach(spell=> | ||
| + | |||
| + | const index= | ||
| + | spells.findIndex( | ||
| + | s => | ||
| + | s.dex===spell.dex && | ||
| + | s.prot===spell.prot | ||
| + | ); | ||
| + | |||
| + | if(index> | ||
| + | |||
| + | document.getElementById( | ||
| + | " | ||
| + | ).checked=true; | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | displayAllEquipStats(); | ||
| + | checkLimit(); | ||
| + | calculate(); | ||
| + | |||
| + | |||
| + | }catch(err){ | ||
| + | |||
| + | console.error( | ||
| + | " | ||
| + | err | ||
| + | ); | ||
| } | } | ||
| + | } | ||
| - | })(); | + | |
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | raceSelect.addEventListener( | ||
| + | " | ||
| + | ()=>{ | ||
| + | fillEquip(); | ||
| + | displayBase(); | ||
| + | calculate(); | ||
| + | | ||
| + | ); | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | fillEquip(); | ||
| + | displayBase(); | ||
| + | calculatePush(); | ||
| + | loadBuildFromUrl(); | ||
| </ | </ | ||
| + | |||
| </ | </ | ||
| </ | </ | ||
simulateur_saison3.txt · Dernière modification : 2026/09/21 00:22 de nanaki
