XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
"""Build read-only module reference metadata for the local ship simulator from EDCD/FDevIDs."""
import csv,hashlib,json,pathlib
root=pathlib.Path(__file__).resolve().parents[1];ref=root/'artifacts/engineering-reference';out=root/'XFEEDToolBox.Core/Outfitting';out.mkdir(parents=True,exist_ok=True)
def rows(name):return list(csv.DictReader((ref/name).read_text(encoding='utf-8-sig').splitlines()))
modules=[dict(item=r['symbol'].lower(),name=r['name'],category=r['category'],size=int(r['class']) if r['class'].isdigit() else 0,rating=r['rating'],mount=r['mount'],ship=r['ship']) for r in rows('fdev-outfitting.csv') if r['category'] in ['standard','internal','hardpoint','utility']]
ships={r['symbol'].lower():r['name'] for r in rows('fdev-shipyard.csv')}
def key(s):return ''.join(c.lower() for c in s if c.isalnum())
shapes={}
for doc in json.loads((ref/'coriolis-ships.json').read_text(encoding='utf-8-sig')):
 for name,ship in doc.items():
  symbol=next((s for s,n in ships.items() if key(n)==key(ship['properties']['name'])),name)
  shapes[symbol]=dict(core=dict(zip(['PowerPlant','MainEngines','FrameShiftDrive','LifeSupport','PowerDistributor','Radar','FuelTank'],ship['slots']['standard'])),hardpoints=[h if isinstance(h,int) else h['class'] for h in ship['slots']['hardpoints']],miningHardpoints=[i for i,h in enumerate(ship['slots']['hardpoints']) if isinstance(h,dict) and h.get('name')=='Mining'])
catalog=dict(modules=modules,shipNames=ships,ships=shapes,source='https://github.com/EDCD/FDevIDs + https://github.com/EDCD/coriolis-data',sha256={name:hashlib.sha256((ref/name).read_bytes()).hexdigest() for name in ['fdev-outfitting.csv','fdev-shipyard.csv','coriolis-ships.json']})
(out/'catalog.json').write_text(json.dumps(catalog,ensure_ascii=False,separators=(',',':')),encoding='utf-8')
print(json.dumps(dict(modules=len(modules),ships=len(ships))))