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
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Install items-server.tsv (from make_items.py) into share/conf/item_proto.txt + item_names.txt.
|
||||
Rows with the same vnum are replaced, so a rerun is idempotent. The db reads the tables only at boot:
|
||||
restart db and every core afterwards. Usage: install_items.py <server root> <items-server.tsv> <fresh backup dir>
|
||||
"""
|
||||
import shutil,sys
|
||||
from pathlib import Path
|
||||
server,rows,backup=map(Path,sys.argv[1:4])
|
||||
if backup.exists():raise SystemExit('use a fresh backup directory')
|
||||
items={int(l.split(b'\t',1)[0]):l for l in rows.read_bytes().splitlines() if l}
|
||||
backup.mkdir(parents=True)
|
||||
conf=server/'share/conf'
|
||||
for filename,row in (('item_proto.txt',lambda v:items[v]),('item_names.txt',lambda v:str(v).encode()+b'\t'+items[v].split(b'\t')[1])):
|
||||
path=conf/filename;raw=path.read_bytes();shutil.copy2(path,backup/filename)
|
||||
newline=b'\r\n' if b'\r\n' in raw else b'\n'
|
||||
kept=[l for l in raw.replace(b'\r\n',b'\n').split(b'\n') if l and not (l.split(b'\t',1)[0].isdigit() and int(l.split(b'\t',1)[0]) in items)]
|
||||
tmp=path.with_name(filename+'.tmp');tmp.write_bytes(newline.join(kept+[row(v) for v in sorted(items)])+newline);tmp.replace(path)
|
||||
print('AVA2 items installed:',len(items),'backup:',backup)
|
||||
Reference in New Issue
Block a user