Import the AVA2 drop items the server lacks as ordinary 40250 items
tools/server/ava2-items stages the 478 items referenced by the AVA2 drop tables that 203 does not have: server item_proto/item_names rows, a client item_proto/item_list/itemdesc patch over the biolog tables, and the AVA2 icons, ground models (BitKnit gr2 via sdk/gr2) and their textures, packed as ava2items ahead of biolog. Materials, quest items, chests, the guardian weapons and shoes keep their meaning; items of AVA2-only systems (pets, pendants, new rings, mounts, sashes, costume enchants, talisman items, new skill books) become plain ITEM_NONE items until those systems are ported. Names are translated in names_zh.tsv. item_proto_patch is the full-record successor of biolog_proto_patch, with --dump for checking conversions against the shipped table. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d11d46c469
commit
90f213c4cc
@@ -431,6 +431,36 @@ def build_biolog(output: Path, pack_tool: Path):
|
||||
return {"stages": 13, "item_templates": 29, "pack": "biolog", "first_priority": True}
|
||||
|
||||
|
||||
def build_ava2_items(output: Path, pack_tool: Path):
|
||||
"""AVA2 drop items missing on the server, layered over the biolog item table (see tools/server/ava2-items)."""
|
||||
import importlib.util
|
||||
root = REPO / "tools/server/ava2-items"
|
||||
ava = REPO.parent / "AVA2/TEST"
|
||||
reader = REPO.parent / "metin2-server/src/server/db/src/ProtoReader.cpp"
|
||||
if not (ava / "1. Client DEV/pack_maker").is_dir() or not reader.is_file():
|
||||
raise ValueError("AVA2 items need ../AVA2/TEST (pack_maker + server db) and ../metin2-server")
|
||||
proto_tool = tool("item_proto_patch")
|
||||
if not proto_tool.is_file():
|
||||
raise ValueError("build item_proto_patch before generating the Chinese client")
|
||||
stage = output.parent / "ava2-items"
|
||||
spec = importlib.util.spec_from_file_location("ava2_items", root / "make_items.py")
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
# biolog's pack carries the current locale/zh item tables; this pack must replace them, so it goes first.
|
||||
report = module.prepare(ava, reader, output.parent / "biolog/assets/locale/zh", stage,
|
||||
proto_tool.resolve(), pack_tool.resolve(), wrap_description)
|
||||
for extension in ("eix", "epk"):
|
||||
shutil.copy2(stage / ("ava2items." + extension), output / "pack" / ("ava2items." + extension))
|
||||
index = output / "pack/Index"
|
||||
lines = index.read_bytes().replace(b"\r\n", b"\n").splitlines()
|
||||
if b"ava2items" in lines:
|
||||
del lines[lines.index(b"ava2items") - 1:lines.index(b"ava2items") + 1]
|
||||
at = lines.index(b"biolog") - 1
|
||||
lines[at:at] = [b"*", b"ava2items"]
|
||||
index.write_bytes(b"\r\n".join(lines) + b"\r\n")
|
||||
return {"items": len(report["kept"]) + len(report["locked"]), "kept": len(report["kept"]),
|
||||
"locked": len(report["locked"]), "assets": report["assets"], "pack": "ava2items"}
|
||||
|
||||
|
||||
def build_wiki(output: Path, pack_tool: Path):
|
||||
"""A versioned public server catalogue; original script and proto packs stay intact."""
|
||||
@@ -472,6 +502,7 @@ def main():
|
||||
args.proto_tool, args.name_tables, args.pack_tool)
|
||||
report = json.loads(report_path.read_text())
|
||||
report["biolog"] = build_biolog(args.output, args.pack_tool)
|
||||
report["ava2_items"] = build_ava2_items(args.output, args.pack_tool)
|
||||
report["wiki"] = build_wiki(args.output, args.pack_tool)
|
||||
report_path.write_text(json.dumps(report, ensure_ascii=False, indent=2)+"\n", encoding="utf-8")
|
||||
print(f"Built {args.output / 'pack/locale_zh.eix'} (.epk), registered in pack/Index")
|
||||
|
||||
Reference in New Issue
Block a user