from pathlib import Path
import ast, csv, io, hashlib, json, re
ROOT=Path(__file__).resolve().parents[3]
OUT=ROOT/'HEROLL_OUTGAME_DEV_v1.0'
OLD=ROOT/'HEROLL_OUTGAME_2.0.1'
CORE=ROOT/'HEROLL_APK_REVERSE_ONLY/01_core_reverse_archive'
SOURCE=CORE/'resource-tables/extracted/csv'
LOC=CORE/'unity/assets/bin/Data/65724e71f83a175409c383f97a5a8ed9'
def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest()
def snapshot():
return {p.relative_to(OLD).as_posix():dict(size=p.stat().st_size,mtime_ns=p.stat().st_mtime_ns,sha256=sha(p)) for p in OLD.rglob('*') if p.is_file()}
def constants(path):
result={}
for node in ast.parse(path.read_text(encoding='utf-8')).body:
if isinstance(node,ast.Assign) and len(node.targets)==1 and isinstance(node.targets[0],ast.Name):
try: result[node.targets[0].id]=ast.literal_eval(node.value)
except (ValueError,TypeError): pass
return result
def write(p,s):
assert p.resolve().is_relative_to(OUT.resolve()),p
p.parent.mkdir(parents=True,exist_ok=True); p.write_text(s,encoding='utf-8')
def savecsv(p,rows,fields=None):
assert p.resolve().is_relative_to(OUT.resolve()),p
p.parent.mkdir(parents=True,exist_ok=True)
if fields is None: fields=list(rows[0]) if rows else ['说明']
with p.open('w',encoding='utf-8-sig',newline='') as f:
w=csv.DictWriter(f,fieldnames=fields);w.writeheader();w.writerows(rows)
def md(headers,rows):
def esc(x): return str(x).replace('|','\\|').replace('\r','').replace('\n','
').replace('