Outils pour utilisateurs

Outils du site


brouillon21

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
brouillon21 [2026/05/05 21:24] nanakibrouillon21 [2026/05/06 09:47] (Version actuelle) nanaki
Ligne 559: Ligne 559:
  
 result.textContent = result.textContent =
-"===== STATS =====\n"++ 
 +"===== PERSONNAGE =====\n"
 +"Race : "+raceSelect.value+ 
 + 
 +"\n\n===== STATS =====\n"+
 JSON.stringify(char,null,2)+ JSON.stringify(char,null,2)+
  
Ligne 582: Ligne 586:
 "Jet FM : "+jetFM+"\n\n"+ "Jet FM : "+jetFM+"\n\n"+
 sorts; sorts;
- 
- 
 } }
  
Ligne 665: Ligne 667:
 updateCost(); calculate(); calculatePush(); updateCost(); calculate(); calculatePush();
 })); }));
 +
  
 // ===== 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,s])=>{ Object.entries(slots).forEach(([k,s])=>{
-data.items[k] = s.value;+data.equip[k] = s.value;
 }); });
  
-// passifs 
 document.querySelectorAll(".skill:checked").forEach(s=>{ document.querySelectorAll(".skill:checked").forEach(s=>{
 data.skills.push(s.dataset.name); data.skills.push(s.dataset.name);
 }); });
  
-// sorts 
 document.querySelectorAll(".spell:checked").forEach(s=>{ document.querySelectorAll(".spell:checked").forEach(s=>{
 data.spells.push({ data.spells.push({
Ligne 705: Ligne 714:
 }); });
  
-let code = btoa(JSON.stringify(data)); +let code = encodeBuild(data); 
-prompt("📋 Code de sauvegarde :", code);+ 
 +// 🔥 important → stringify lisible 
 +prompt("Copie ton build :", code);
 } }
- 
  
 // ===== IMPORT ===== // ===== IMPORT =====
-function importBuild(){+function importBuild(codeInput){
  
-let code = prompt("📥 Colle ton code :");+let code = codeInput || prompt("Colle le code du build :");
 if(!code) return; if(!code) return;
- 
-let data; 
  
 try{ try{
-data = JSON.parse(atob(code)); 
-}catch(e){ 
-alert("Code invalide !"); 
-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] || 0;
-if(document.getElementById(s)) +
-document.getElementById(s).value = data.stats[s];+
 } }
  
-// équipements +Object.entries(slots).forEach(([k,s])=>{ 
-Object.entries(data.items).forEach(([k,v])=>{ +s.value = data.equip[k] || "";
-if(slots[k]){ +
-slots[k].value = v; +
-}+
 }); });
  
-// passifs 
 document.querySelectorAll(".skill").forEach(s=>{ document.querySelectorAll(".skill").forEach(s=>{
 s.checked = data.skills.includes(s.dataset.name); s.checked = data.skills.includes(s.dataset.name);
 }); });
  
-// sorts 
 document.querySelectorAll(".spell").forEach(s=>{ document.querySelectorAll(".spell").forEach(s=>{
-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=>sp.dex===dex && sp.prot===prot); +
-}); +
- +
-// refresh UI +
-Object.entries(slots).forEach(([k,s])=>{ +
-displayStats(s, slotToStatId[k]);+
 }); });
  
 +displayBase();
 checkLimit(); checkLimit();
 autoCalculate(); autoCalculate();
 +
 +}catch(e){
 +alert("❌ Code invalide");
 +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,s])=>{ Object.entries(slots).forEach(([k,s])=>{
-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 + "?build=" + code;+// 🔥 ENCODAGE URL OBLIGATOIRE 
 +let url = window.location.origin + window.location.pathname + "?build="encodeURIComponent(code);
  
-prompt("🔗 Lien de partage :", url);+navigator.clipboard.writeText(url).catch(()=>
 +    prompt("Copie ce lien :", url); 
 +}); 
 + 
 +alert("🔗 Lien copié !");
 } }
- 
  
 // ===== AUTO LOAD URL ===== // ===== AUTO LOAD URL =====
-window.addEventListener("load", ()=>{+(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,v])=>+
-if(slots[k]){ +
-slots[k].value = v; +
-+
-}); +
- +
-document.querySelectorAll(".skill").forEach(s=>+
-s.checked = data.skills.includes(s.dataset.name); +
-}); +
- +
-document.querySelectorAll(".spell").forEach(s=>+
-let dex = +s.dataset.dex; +
-let prot = +s.dataset.prot; +
- +
-s.checked = data.spells.some(sp=>sp.dex===dex && sp.prot===prot); +
-}); +
- +
-Object.entries(slots).forEach(([k,s])=>+
-displayStats(s, slotToStatId[k]); +
-}); +
- +
-checkLimit(); +
-autoCalculate(); +
 }catch(e){ }catch(e){
-console.log("Erreur chargement build");+console.log("Erreur chargement URL");
 } }
  
-});+})();
  
 </script> </script>
 </body> </body>
 </html> </html>
brouillon21.1778009080.txt.gz · Dernière modification : 2026/05/05 21:24 de nanaki