brouillon21
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 | ||
| brouillon21 [2026/05/05 21:24] – nanaki | brouillon21 [2026/05/06 09:47] (Version actuelle) – nanaki | ||
|---|---|---|---|
| Ligne 559: | Ligne 559: | ||
| result.textContent = | result.textContent = | ||
| - | "===== STATS =====\n" | + | |
| + | "===== PERSONNAGE =====\n" | ||
| + | "Race : " | ||
| + | |||
| + | "\n\n===== STATS =====\n" | ||
| JSON.stringify(char, | JSON.stringify(char, | ||
| Ligne 582: | Ligne 586: | ||
| "Jet FM : " | "Jet FM : " | ||
| sorts; | sorts; | ||
| - | |||
| - | |||
| } | } | ||
| Ligne 665: | Ligne 667: | ||
| updateCost(); | updateCost(); | ||
| })); | })); | ||
| + | |||
| // ===== INIT ===== | // ===== INIT ===== | ||
| Ligne 670: | Ligne 673: | ||
| calculate(); | calculate(); | ||
| calculatePush(); | calculatePush(); | ||
| + | |||
| + | |||
| + | // ===== ENCODE / DECODE ULTRA SIMPLE ===== | ||
| + | function encodeBuild(data){ | ||
| + | return JSON.stringify(data); | ||
| + | } | ||
| + | |||
| + | function decodeBuild(code){ | ||
| + | return JSON.parse(code); | ||
| + | } | ||
| // ===== EXPORT ===== | // ===== EXPORT ===== | ||
| Ligne 677: | Ligne 690: | ||
| race: raceSelect.value, | race: raceSelect.value, | ||
| stats: {}, | stats: {}, | ||
| - | items: {}, | + | equip: {}, |
| skills: [], | skills: [], | ||
| spells: [] | spells: [] | ||
| }; | }; | ||
| - | // stats | ||
| for(let s in costTable){ | for(let s in costTable){ | ||
| data.stats[s] = +document.getElementById(s).value || 0; | data.stats[s] = +document.getElementById(s).value || 0; | ||
| } | } | ||
| - | // équipements | ||
| Object.entries(slots).forEach(([k, | Object.entries(slots).forEach(([k, | ||
| - | data.items[k] = s.value; | + | data.equip[k] = s.value; |
| }); | }); | ||
| - | // passifs | ||
| document.querySelectorAll(" | document.querySelectorAll(" | ||
| data.skills.push(s.dataset.name); | data.skills.push(s.dataset.name); | ||
| }); | }); | ||
| - | // sorts | ||
| document.querySelectorAll(" | document.querySelectorAll(" | ||
| data.spells.push({ | data.spells.push({ | ||
| Ligne 705: | Ligne 714: | ||
| }); | }); | ||
| - | let code = btoa(JSON.stringify(data)); | + | let code = encodeBuild(data); |
| - | prompt(" | + | |
| + | // 🔥 important → stringify lisible | ||
| + | prompt(" | ||
| } | } | ||
| - | |||
| // ===== IMPORT ===== | // ===== IMPORT ===== | ||
| - | function importBuild(){ | + | function importBuild(codeInput){ |
| - | let code = prompt(" | + | let code = codeInput || prompt(" |
| if(!code) return; | if(!code) return; | ||
| - | |||
| - | let data; | ||
| try{ | try{ | ||
| - | data = JSON.parse(atob(code)); | ||
| - | }catch(e){ | ||
| - | alert(" | ||
| - | return; | ||
| - | } | ||
| - | // reset propre | + | code = code.trim(); |
| - | resetAll(); | + | |
| + | let data = decodeBuild(code); | ||
| - | // race | ||
| raceSelect.value = data.race; | raceSelect.value = data.race; | ||
| - | displayBase(); | ||
| - | resetSlots(); | ||
| - | fillEquip(); | ||
| - | // stats | + | for(let s in costTable){ |
| - | for(let s in data.stats){ | + | document.getElementById(s).value = data.stats[s] |
| - | if(document.getElementById(s)) | + | |
| - | document.getElementById(s).value = data.stats[s]; | + | |
| } | } | ||
| - | // équipements | + | Object.entries(slots).forEach(([k, |
| - | Object.entries(data.items).forEach(([k, | + | s.value = data.equip[k] || "" |
| - | if(slots[k]){ | + | |
| - | slots[k].value = v; | + | |
| - | } | + | |
| }); | }); | ||
| - | // passifs | ||
| document.querySelectorAll(" | document.querySelectorAll(" | ||
| s.checked = data.skills.includes(s.dataset.name); | s.checked = data.skills.includes(s.dataset.name); | ||
| }); | }); | ||
| - | // sorts | ||
| document.querySelectorAll(" | document.querySelectorAll(" | ||
| - | let dex = +s.dataset.dex; | + | s.checked = data.spells.some(sp => |
| - | let prot = +s.dataset.prot; | + | sp.dex == +s.dataset.dex && sp.prot == +s.dataset.prot |
| - | + | ); | |
| - | s.checked = data.spells.some(sp=> | + | |
| - | }); | + | |
| - | + | ||
| - | // refresh UI | + | |
| - | Object.entries(slots).forEach(([k, | + | |
| - | displayStats(s, | + | |
| }); | }); | ||
| + | displayBase(); | ||
| checkLimit(); | checkLimit(); | ||
| autoCalculate(); | autoCalculate(); | ||
| + | |||
| + | }catch(e){ | ||
| + | alert(" | ||
| + | console.log(e); | ||
| + | } | ||
| } | } | ||
| - | |||
| // ===== LIEN PARTAGE ===== | // ===== LIEN PARTAGE ===== | ||
| Ligne 776: | Ligne 768: | ||
| race: raceSelect.value, | race: raceSelect.value, | ||
| stats: {}, | stats: {}, | ||
| - | items: {}, | + | equip: {}, |
| skills: [], | skills: [], | ||
| spells: [] | spells: [] | ||
| Ligne 786: | Ligne 778: | ||
| Object.entries(slots).forEach(([k, | Object.entries(slots).forEach(([k, | ||
| - | data.items[k] = s.value; | + | data.equip[k] = s.value; |
| }); | }); | ||
| Ligne 800: | Ligne 792: | ||
| }); | }); | ||
| - | let code = btoa(JSON.stringify(data)); | + | let code = encodeBuild(data); |
| - | let url = window.location.origin + window.location.pathname + "? | + | // 🔥 ENCODAGE URL OBLIGATOIRE |
| + | let url = window.location.origin + window.location.pathname + "? | ||
| - | prompt(" | + | navigator.clipboard.writeText(url).catch(()=> |
| + | | ||
| + | }); | ||
| + | |||
| + | alert(" | ||
| } | } | ||
| - | |||
| // ===== AUTO LOAD URL ===== | // ===== AUTO LOAD URL ===== | ||
| - | window.addEventListener(" | + | (function(){ |
| let params = new URLSearchParams(window.location.search); | let params = new URLSearchParams(window.location.search); | ||
| Ligne 817: | Ligne 813: | ||
| try{ | try{ | ||
| - | let data = JSON.parse(atob(code)); | + | code = decodeURIComponent(code); |
| - | + | importBuild(code); | |
| - | // même logique que import | + | |
| - | resetAll(); | + | |
| - | + | ||
| - | raceSelect.value = data.race; | + | |
| - | displayBase(); | + | |
| - | resetSlots(); | + | |
| - | fillEquip(); | + | |
| - | + | ||
| - | for(let s in data.stats){ | + | |
| - | if(document.getElementById(s)) | + | |
| - | document.getElementById(s).value = data.stats[s]; | + | |
| - | } | + | |
| - | + | ||
| - | Object.entries(data.items).forEach(([k, | + | |
| - | if(slots[k]){ | + | |
| - | slots[k].value = v; | + | |
| - | } | + | |
| - | }); | + | |
| - | + | ||
| - | document.querySelectorAll(" | + | |
| - | s.checked = data.skills.includes(s.dataset.name); | + | |
| - | }); | + | |
| - | + | ||
| - | document.querySelectorAll(" | + | |
| - | let dex = +s.dataset.dex; | + | |
| - | let prot = +s.dataset.prot; | + | |
| - | + | ||
| - | s.checked = data.spells.some(sp=> | + | |
| - | }); | + | |
| - | + | ||
| - | Object.entries(slots).forEach(([k, | + | |
| - | displayStats(s, | + | |
| - | }); | + | |
| - | + | ||
| - | checkLimit(); | + | |
| - | autoCalculate(); | + | |
| }catch(e){ | }catch(e){ | ||
| - | console.log(" | + | console.log(" |
| } | } | ||
| - | }); | + | })(); |
| </ | </ | ||
| </ | </ | ||
| </ | </ | ||
brouillon21.1778009080.txt.gz · Dernière modification : 2026/05/05 21:24 de nanaki
