Add skill training advisor with recipe data and one-click goals.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-22 15:28:51 +02:00
parent e233e3c762
commit 567bbd3de0
21 changed files with 3447 additions and 18 deletions
+80
View File
@@ -0,0 +1,80 @@
#!/usr/bin/env python3
"""Download recipe JSON assets from the Idle Fantasy game repository."""
from __future__ import annotations
import json
import urllib.error
import urllib.request
from datetime import datetime, timezone
from pathlib import Path
REPO = "tristinbaker/IdleFantasy"
BRANCH = "main"
DATA_PREFIX = f"app/src/main/assets/data/recipes"
RAW_BASE = f"https://raw.githubusercontent.com/{REPO}/{BRANCH}"
RECIPE_FILES = (
"smithing.json",
"crafting.json",
"cooking.json",
"fletching.json",
"herblore.json",
"construction.json",
)
ROOT = Path(__file__).resolve().parent.parent
OUT_DIR = ROOT / "game_data" / "recipes"
MANIFEST = ROOT / "game_data" / "manifest.json"
def _fetch(url: str) -> bytes:
req = urllib.request.Request(url, headers={"User-Agent": "idle-fantasy-viewer-sync"})
with urllib.request.urlopen(req, timeout=60) as resp:
return resp.read()
def _resolve_sha() -> str:
api = f"https://api.github.com/repos/{REPO}/commits/{BRANCH}"
req = urllib.request.Request(api, headers={"User-Agent": "idle-fantasy-viewer-sync"})
with urllib.request.urlopen(req, timeout=30) as resp:
data = json.loads(resp.read().decode())
return data["sha"]
def main() -> None:
OUT_DIR.mkdir(parents=True, exist_ok=True)
sha = _resolve_sha()
synced: list[str] = []
for name in RECIPE_FILES:
url = f"{RAW_BASE}/{DATA_PREFIX}/{name}"
try:
payload = _fetch(url)
except urllib.error.HTTPError as exc:
raise SystemExit(f"Failed to download {name}: HTTP {exc.code}") from exc
json.loads(payload)
(OUT_DIR / name).write_bytes(payload)
synced.append(name)
print(f" {name}")
MANIFEST.write_text(
json.dumps(
{
"source_repo": f"https://github.com/{REPO}",
"source_ref": BRANCH,
"source_sha": sha,
"synced_at": datetime.now(timezone.utc).isoformat(),
"files": synced,
},
indent=2,
)
+ "\n",
encoding="utf-8",
)
print(f"Synced {len(synced)} files -> {OUT_DIR}")
print(f"Manifest: {MANIFEST} (sha {sha[:12]})")
if __name__ == "__main__":
main()