From 48145f69773d5332ebd89252504f12b3f21ee491 Mon Sep 17 00:00:00 2001
From: perco
Six emplacements : ${Object.values(GEAR_SLOTS).map(s => s.label).join(", ")}. Les bonus d'équipement sont fixes (jamais en dés) et s'ajoutent toujours aux jets. La plupart sont physiques ; certains objets portent aussi des bonus magiques @@ -117,6 +142,19 @@ function treasuresRender() { html += "
Suffixes à la MountyHall ajoutés aux objets qui tombent dans le + monde partagé : un objet reçoit jusqu'à 3 templates (6 pour une arme à + 2 mains), chacun tiré au hasard selon une probabilité réglable sur la page admin. Leurs + bonus s'ajoutent à ceux de l'objet (le mod TOUR est en minutes de DLA), et leur + nom s'accole à celui de l'objet (« Épée Courte de l'Aigle des Mages »). + Valeurs lues dans la base de référence (modifiables côté admin).
`; + if (templates.length) { + html += `Liste indisponible (base non joignable).
`; + } + html += `Effet de Zone : touche le lecteur et tous les monstres à 3 cases ou moins. « PV −2D3 ou −4D3 » (Rune des Foins) : la Mountypedia note « -2/4 D3 », interprété ici comme un tirage au sort entre 2D3 et 4D3.
`; @@ -129,7 +167,7 @@ let treasuresReturnTo = "create"; // Données de la base de référence (BDD), rechargées à chaque ouverture pour // refléter les éditions (admin OU sqlite-web) ; null tant qu'on n'a pas (ou pas // pu) charger → repli sur les valeurs statiques du code. -let GEAR_DB = null, POTIONS_DB = null, SCROLLS_DB = null; +let GEAR_DB = null, POTIONS_DB = null, SCROLLS_DB = null, TEMPLATES_DB = null; async function fetchRef(cat) { try { @@ -143,12 +181,13 @@ async function fetchRef(cat) { } async function loadReference() { - const [gear, potions, scrolls] = await Promise.all([ - fetchRef("gear"), fetchRef("potions"), fetchRef("scrolls"), + const [gear, potions, scrolls, templates] = await Promise.all([ + fetchRef("gear"), fetchRef("potions"), fetchRef("scrolls"), fetchRef("templates"), ]); GEAR_DB = gear ? gearBySlotFromRows(gear) : null; POTIONS_DB = potions ? indexPowerById(potions) : null; SCROLLS_DB = scrolls ? indexPowerById(scrolls) : null; + TEMPLATES_DB = templates; } function gearBySlotFromRows(rows) { @@ -184,7 +223,7 @@ async function treasuresShow(from) { treasuresReturnTo = from; document.getElementById("screen-" + from).classList.add("hidden"); document.getElementById("screen-treasures").classList.remove("hidden"); - document.getElementById("screen-treasures").scrollTop = 0; + window.scrollTo(0, 0); await loadReference(); treasuresRender(); } @@ -197,6 +236,15 @@ if (typeof document !== "undefined") { document.getElementById("screen-treasures").classList.add("hidden"); document.getElementById("screen-" + treasuresReturnTo).classList.remove("hidden"); }; + // Bouton « remonter en haut » : visible dès qu'on a un peu défilé. + const topBtn = document.getElementById("tz-top"); + if (topBtn) { + topBtn.onclick = () => window.scrollTo({ top: 0, behavior: "smooth" }); + window.addEventListener("scroll", () => { + const onTz = !document.getElementById("screen-treasures").classList.contains("hidden"); + topBtn.classList.toggle("hidden", !onTz || window.scrollY < 400); + }); + } if (new URLSearchParams(location.search).get("screen") === "treasures") { treasuresShow("create"); }