initial hardcore tables
This commit is contained in:
@@ -4,15 +4,20 @@ import re
|
||||
from pathlib import Path
|
||||
|
||||
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",
|
||||
"v2": NEWSERV / "system/tables/rare-table-v2.json",
|
||||
"v3": NEWSERV / "system/tables/rare-table-v3.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):
|
||||
out = []
|
||||
in_str = False
|
||||
@@ -142,23 +147,23 @@ def flatten_table(version, table):
|
||||
|
||||
return rows
|
||||
|
||||
def main():
|
||||
OUT.mkdir(parents=True, exist_ok=True)
|
||||
def write_group(mode, label, tables, out_dir):
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
index = {
|
||||
"mode": "peeps",
|
||||
"label": "Peeps",
|
||||
"mode": mode,
|
||||
"label": label,
|
||||
"tables": [],
|
||||
}
|
||||
|
||||
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)
|
||||
rows = flatten_table(version, table)
|
||||
|
||||
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")
|
||||
|
||||
index["tables"].append({
|
||||
@@ -168,11 +173,15 @@ def main():
|
||||
"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")
|
||||
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__":
|
||||
main()
|
||||
|
||||
+28
-21
@@ -51,7 +51,8 @@
|
||||
}
|
||||
|
||||
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() {
|
||||
@@ -306,7 +307,8 @@
|
||||
if (!box) return;
|
||||
|
||||
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));
|
||||
state.page = Math.min(Math.max(1, state.page), totalPages);
|
||||
|
||||
@@ -343,7 +345,7 @@
|
||||
box.innerHTML = `
|
||||
<div class="drops-summary">
|
||||
<div>
|
||||
<strong>Peeps ${esc(tableLabel)} drop table</strong>
|
||||
<strong>${esc(groupLabel)} ${esc(tableLabel)} drop table</strong>
|
||||
<span>${rows.length.toLocaleString()} matching rows.${rangeText}</span>
|
||||
${modifierNote}
|
||||
</div>
|
||||
@@ -367,24 +369,29 @@
|
||||
`;
|
||||
}
|
||||
|
||||
async function loadPeeps() {
|
||||
setStatus("Loading Peeps drop tables...");
|
||||
async function loadDropGroup() {
|
||||
const selectedMode = qs("#drops-mode")?.value || "peeps";
|
||||
const groupPath = selectedMode === "hardcore" ? "hardcore" : "peeps";
|
||||
const groupLabel = selectedMode === "hardcore" ? "Hardcore" : "Peeps";
|
||||
|
||||
if (!state.index) {
|
||||
state.index = await fetchJson("generated/drops/peeps/index.json");
|
||||
setStatus(`Loading ${groupLabel} drop tables...`);
|
||||
|
||||
state.index = await fetchJson(`generated/drops/${groupPath}/index.json`);
|
||||
|
||||
if (selectedMode === "peeps") {
|
||||
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);
|
||||
|
||||
if (!table) {
|
||||
setStatus("No drop table is configured for that version.", "error");
|
||||
setStatus(`No ${groupLabel} drop table is configured.`, "error");
|
||||
return;
|
||||
}
|
||||
|
||||
state.table = table;
|
||||
state.rows = await fetchJson(`generated/drops/peeps/${table.path}`);
|
||||
state.table = { ...table, groupLabel };
|
||||
state.rows = await fetchJson(`generated/drops/${groupPath}/${table.path}`);
|
||||
|
||||
state.filters.mode = "";
|
||||
state.filters.episode = "";
|
||||
@@ -408,18 +415,18 @@
|
||||
|
||||
async function updateMode() {
|
||||
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 (peepsControls) peepsControls.hidden = true;
|
||||
setStatus("Hardcore drop tables coming next.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (peepsControls) peepsControls.hidden = false;
|
||||
if (versionSelect) versionSelect.hidden = mode === "hardcore";
|
||||
if (versionLabel) versionLabel.hidden = mode === "hardcore";
|
||||
if (v2Note) v2Note.hidden = true;
|
||||
if (hardcoreNote) hardcoreNote.hidden = mode !== "hardcore";
|
||||
|
||||
try {
|
||||
await loadPeeps();
|
||||
await loadDropGroup();
|
||||
} catch (err) {
|
||||
setStatus(err?.message || "Unable to load drop table.", "error");
|
||||
}
|
||||
@@ -427,7 +434,7 @@
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
qs("#drops-mode")?.addEventListener("change", updateMode);
|
||||
qs("#drops-version")?.addEventListener("change", loadPeeps);
|
||||
qs("#drops-version")?.addEventListener("change", loadDropGroup);
|
||||
qs("#drops-rare-modifier")?.addEventListener("change", () => {
|
||||
state.page = 1;
|
||||
state.page = 1;
|
||||
|
||||
+2
-1
@@ -46,6 +46,7 @@
|
||||
<option value="bb">BB</option>
|
||||
</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-hardcore-note" hidden>Hardcore uses the BB/V4 drop table.</p>
|
||||
|
||||
<div id="drops-rare-modifier-wrap" hidden>
|
||||
<label for="drops-rare-modifier">Rare bonus modifier</label>
|
||||
@@ -126,6 +127,6 @@
|
||||
</div>
|
||||
</footer>
|
||||
</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>
|
||||
</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