initial hardcore tables
This commit is contained in:
@@ -4,15 +4,20 @@ import re
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
NEWSERV = Path.home() / ".local/share/github/psopeeps-newserv"
|
NEWSERV = Path.home() / ".local/share/github/psopeeps-newserv"
|
||||||
OUT = Path("site/generated/drops/peeps")
|
PEEPS_OUT = Path("site/generated/drops/peeps")
|
||||||
|
HARDCORE_OUT = Path("site/generated/drops/hardcore")
|
||||||
|
|
||||||
TABLES = {
|
PEEPS_TABLES = {
|
||||||
"v1": NEWSERV / "system/tables/rare-table-v1.json",
|
"v1": NEWSERV / "system/tables/rare-table-v1.json",
|
||||||
"v2": NEWSERV / "system/tables/rare-table-v2.json",
|
"v2": NEWSERV / "system/tables/rare-table-v2.json",
|
||||||
"v3": NEWSERV / "system/tables/rare-table-v3.json",
|
"v3": NEWSERV / "system/tables/rare-table-v3.json",
|
||||||
"bb": NEWSERV / "system/tables/rare-table-v4.json",
|
"bb": NEWSERV / "system/tables/rare-table-v4.json",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HARDCORE_TABLES = {
|
||||||
|
"bb": Path("source-drops/hardcore/rare-table-v4.json"),
|
||||||
|
}
|
||||||
|
|
||||||
def strip_json_comments(text):
|
def strip_json_comments(text):
|
||||||
out = []
|
out = []
|
||||||
in_str = False
|
in_str = False
|
||||||
@@ -142,23 +147,23 @@ def flatten_table(version, table):
|
|||||||
|
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
def main():
|
def write_group(mode, label, tables, out_dir):
|
||||||
OUT.mkdir(parents=True, exist_ok=True)
|
out_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
index = {
|
index = {
|
||||||
"mode": "peeps",
|
"mode": mode,
|
||||||
"label": "Peeps",
|
"label": label,
|
||||||
"tables": [],
|
"tables": [],
|
||||||
}
|
}
|
||||||
|
|
||||||
labels = {"v1": "V1", "v2": "V2", "v3": "V3", "bb": "BB"}
|
labels = {"v1": "V1", "v2": "V2", "v3": "V3", "bb": "BB"}
|
||||||
|
|
||||||
for version, src in TABLES.items():
|
for version, src in tables.items():
|
||||||
table = load_newserv_jsonish(src)
|
table = load_newserv_jsonish(src)
|
||||||
rows = flatten_table(version, table)
|
rows = flatten_table(version, table)
|
||||||
|
|
||||||
out_name = f"{version}.json"
|
out_name = f"{version}.json"
|
||||||
out_path = OUT / out_name
|
out_path = out_dir / out_name
|
||||||
out_path.write_text(json.dumps(rows, indent=2, sort_keys=True) + "\n")
|
out_path.write_text(json.dumps(rows, indent=2, sort_keys=True) + "\n")
|
||||||
|
|
||||||
index["tables"].append({
|
index["tables"].append({
|
||||||
@@ -168,11 +173,15 @@ def main():
|
|||||||
"rows": len(rows),
|
"rows": len(rows),
|
||||||
})
|
})
|
||||||
|
|
||||||
print(f"{version}: {len(rows)} rows -> {out_path}")
|
print(f"{mode} {version}: {len(rows)} rows -> {out_path}")
|
||||||
|
|
||||||
index_path = OUT / "index.json"
|
index_path = out_dir / "index.json"
|
||||||
index_path.write_text(json.dumps(index, indent=2, sort_keys=True) + "\n")
|
index_path.write_text(json.dumps(index, indent=2, sort_keys=True) + "\n")
|
||||||
print(f"index -> {index_path}")
|
print(f"{mode} index -> {index_path}")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
write_group("peeps", "Peeps", PEEPS_TABLES, PEEPS_OUT)
|
||||||
|
write_group("hardcore", "Hardcore", HARDCORE_TABLES, HARDCORE_OUT)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
+28
-21
@@ -51,7 +51,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function rareModifierEnabled() {
|
function rareModifierEnabled() {
|
||||||
return RARE_MODIFIER_VERSIONS.has(currentVersion());
|
const selectedMode = qs("#drops-mode")?.value || "peeps";
|
||||||
|
return selectedMode === "peeps" && RARE_MODIFIER_VERSIONS.has(currentVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
function currentRareModifier() {
|
function currentRareModifier() {
|
||||||
@@ -306,7 +307,8 @@
|
|||||||
if (!box) return;
|
if (!box) return;
|
||||||
|
|
||||||
const rows = sortedRows(visibleRows());
|
const rows = sortedRows(visibleRows());
|
||||||
const tableLabel = state.table?.label || "Peeps";
|
const tableLabel = state.table?.label || "BB";
|
||||||
|
const groupLabel = state.table?.groupLabel || "Peeps";
|
||||||
const totalPages = Math.max(1, Math.ceil(rows.length / state.pageSize));
|
const totalPages = Math.max(1, Math.ceil(rows.length / state.pageSize));
|
||||||
state.page = Math.min(Math.max(1, state.page), totalPages);
|
state.page = Math.min(Math.max(1, state.page), totalPages);
|
||||||
|
|
||||||
@@ -343,7 +345,7 @@
|
|||||||
box.innerHTML = `
|
box.innerHTML = `
|
||||||
<div class="drops-summary">
|
<div class="drops-summary">
|
||||||
<div>
|
<div>
|
||||||
<strong>Peeps ${esc(tableLabel)} drop table</strong>
|
<strong>${esc(groupLabel)} ${esc(tableLabel)} drop table</strong>
|
||||||
<span>${rows.length.toLocaleString()} matching rows.${rangeText}</span>
|
<span>${rows.length.toLocaleString()} matching rows.${rangeText}</span>
|
||||||
${modifierNote}
|
${modifierNote}
|
||||||
</div>
|
</div>
|
||||||
@@ -367,24 +369,29 @@
|
|||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadPeeps() {
|
async function loadDropGroup() {
|
||||||
setStatus("Loading Peeps drop tables...");
|
const selectedMode = qs("#drops-mode")?.value || "peeps";
|
||||||
|
const groupPath = selectedMode === "hardcore" ? "hardcore" : "peeps";
|
||||||
|
const groupLabel = selectedMode === "hardcore" ? "Hardcore" : "Peeps";
|
||||||
|
|
||||||
if (!state.index) {
|
setStatus(`Loading ${groupLabel} drop tables...`);
|
||||||
state.index = await fetchJson("generated/drops/peeps/index.json");
|
|
||||||
|
state.index = await fetchJson(`generated/drops/${groupPath}/index.json`);
|
||||||
|
|
||||||
|
if (selectedMode === "peeps") {
|
||||||
populateVersions(state.index);
|
populateVersions(state.index);
|
||||||
}
|
}
|
||||||
|
|
||||||
const version = qs("#drops-version")?.value || "v1";
|
const version = selectedMode === "hardcore" ? "bb" : currentVersion();
|
||||||
const table = (state.index.tables || []).find((entry) => entry.version === version);
|
const table = (state.index.tables || []).find((entry) => entry.version === version);
|
||||||
|
|
||||||
if (!table) {
|
if (!table) {
|
||||||
setStatus("No drop table is configured for that version.", "error");
|
setStatus(`No ${groupLabel} drop table is configured.`, "error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
state.table = table;
|
state.table = { ...table, groupLabel };
|
||||||
state.rows = await fetchJson(`generated/drops/peeps/${table.path}`);
|
state.rows = await fetchJson(`generated/drops/${groupPath}/${table.path}`);
|
||||||
|
|
||||||
state.filters.mode = "";
|
state.filters.mode = "";
|
||||||
state.filters.episode = "";
|
state.filters.episode = "";
|
||||||
@@ -408,18 +415,18 @@
|
|||||||
|
|
||||||
async function updateMode() {
|
async function updateMode() {
|
||||||
const mode = qs("#drops-mode")?.value || "peeps";
|
const mode = qs("#drops-mode")?.value || "peeps";
|
||||||
const peepsControls = qs("#drops-peeps-controls");
|
const versionSelect = qs("#drops-version");
|
||||||
|
const versionLabel = document.querySelector('label[for="drops-version"]');
|
||||||
|
const v2Note = qs("#drops-v2-note");
|
||||||
|
const hardcoreNote = qs("#drops-hardcore-note");
|
||||||
|
|
||||||
if (mode === "hardcore") {
|
if (versionSelect) versionSelect.hidden = mode === "hardcore";
|
||||||
if (peepsControls) peepsControls.hidden = true;
|
if (versionLabel) versionLabel.hidden = mode === "hardcore";
|
||||||
setStatus("Hardcore drop tables coming next.");
|
if (v2Note) v2Note.hidden = true;
|
||||||
return;
|
if (hardcoreNote) hardcoreNote.hidden = mode !== "hardcore";
|
||||||
}
|
|
||||||
|
|
||||||
if (peepsControls) peepsControls.hidden = false;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await loadPeeps();
|
await loadDropGroup();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setStatus(err?.message || "Unable to load drop table.", "error");
|
setStatus(err?.message || "Unable to load drop table.", "error");
|
||||||
}
|
}
|
||||||
@@ -427,7 +434,7 @@
|
|||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
qs("#drops-mode")?.addEventListener("change", updateMode);
|
qs("#drops-mode")?.addEventListener("change", updateMode);
|
||||||
qs("#drops-version")?.addEventListener("change", loadPeeps);
|
qs("#drops-version")?.addEventListener("change", loadDropGroup);
|
||||||
qs("#drops-rare-modifier")?.addEventListener("change", () => {
|
qs("#drops-rare-modifier")?.addEventListener("change", () => {
|
||||||
state.page = 1;
|
state.page = 1;
|
||||||
state.page = 1;
|
state.page = 1;
|
||||||
|
|||||||
+2
-1
@@ -46,6 +46,7 @@
|
|||||||
<option value="bb">BB</option>
|
<option value="bb">BB</option>
|
||||||
</select>
|
</select>
|
||||||
<p class="drops-field-note" id="drops-v2-note" hidden>V2 drop tables apply to PSO PC only.</p>
|
<p class="drops-field-note" id="drops-v2-note" hidden>V2 drop tables apply to PSO PC only.</p>
|
||||||
|
<p class="drops-field-note" id="drops-hardcore-note" hidden>Hardcore uses the BB/V4 drop table.</p>
|
||||||
|
|
||||||
<div id="drops-rare-modifier-wrap" hidden>
|
<div id="drops-rare-modifier-wrap" hidden>
|
||||||
<label for="drops-rare-modifier">Rare bonus modifier</label>
|
<label for="drops-rare-modifier">Rare bonus modifier</label>
|
||||||
@@ -126,6 +127,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
<script src="drop-tables.js?v=drops-peeps-table-viewer-20260613-11" defer></script>
|
<script src="drop-tables.js?v=drops-peeps-table-viewer-20260613-12" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"label": "Hardcore",
|
||||||
|
"mode": "hardcore",
|
||||||
|
"tables": [
|
||||||
|
{
|
||||||
|
"label": "BB",
|
||||||
|
"path": "bb.json",
|
||||||
|
"rows": 7200,
|
||||||
|
"version": "bb"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user