#!/usr/bin/env python3 """Nomi delle tecnologie OGame (numerazione client attuale, verificata con report reali). Gli id usati dalle API di gioco (v8+) differiscono dalla vecchia numerazione storica: edifici: 1-4 miniere/centrale, 12 fusione, 14-15 fabbriche, 21 hangar, 22-24 depositi, 31 laboratorio, 33 terraformer, 34 deposito alleanza, 36 dock riparazioni, 41-43 base lunare/phalanx/salto, 44 silo ricerca: 106 spionaggio, 108 computer, 109 armi, 110 scudi, 111 corazzatura, 113 energia, 114 iperspazio, 115 motore combustione, 117 motore impulso, 118 motore iperspazio, 120 laser, 121 ioni, 122 plasma, 123 rete ricerca, 124 astrofisica, 199 gravitoni navi: 202-210 cargo/caccia/..., 212 satellite solare, 215 interceptor, 217 crawler, 218 reaper, 219 pathfinder difese: 401-408 cannoni/cupole, 502-503 missili """ import json from pathlib import Path BASE_DIR = Path(__file__).resolve().parent BUILDINGS = { 1: "Miniera di metallo", 2: "Miniera di cristallo", 3: "Sintetizzatore di deuterio", 4: "Centrale solare", 12: "Centrale a fusione", 14: "Fabbrica di robot", 15: "Fabbrica di naniti", 21: "Cantiere spaziale", 22: "Deposito di metallo", 23: "Deposito di cristallo", 24: "Serbatoio di deuterio", 31: "Laboratorio di ricerca", 33: "Terraformer", 34: "Deposito dell'alleanza", 36: "Dock di riparazione", 41: "Base lunare", 42: "Falanx sensoriale", 43: "Portale quantico", 44: "Silo missilistico", } RESEARCH = { 106: "Tecnologia spionaggio", 108: "Tecnologia informatica", 109: "Tecnologia delle armi", 110: "Tecnologia scudi", 111: "Tecnologia corazzatura", 113: "Tecnologia energetica", 114: "Tecnologia iperspazio", 115: "Motore a combustione", 117: "Motore a impulso", 118: "Motore iperspaziale", 120: "Tecnologia laser", 121: "Tecnologia ionica", 122: "Tecnologia al plasma", 123: "Rete di ricerca intergalattica", 124: "Astrofisica", 199: "Tecnologia gravitoni", } SHIPS = { 202: "Cargo leggero", 203: "Cargo pesante", 204: "Caccia leggero", 205: "Caccia pesante", 206: "Incrociatore", 207: "Nave da battaglia", 208: "Nave colonizzatrice", 209: "Riciclatore", 210: "Sonda di spionaggio", 211: "Bombardiere", 212: "Satellite solare", 213: "Corazzata", 214: "Morte Nera", 215: "Incrociatore da battaglia", 217: "Crawler", 218: "Reaper", 219: "Pathfinder", } DEFENSES = { 401: "Lanciamissili", 402: "Laser leggero", 403: "Laser pesante", 404: "Cannone Gauss", 405: "Cannone ionico", 406: "Cannone al plasma", 407: "Cupola protettiva piccola", 408: "Cupola protettiva grande", 502: "Missili anti-balistici", 503: "Missili interplanetari", } LF_BUILDINGS = { 11101: "Campo di coltivazione", 11102: "Centro di ricerca", } CATEGORY = { "buildings": "Edifici", "lfbuildings": "Edifici Lifeform", "research": "Ricerca", "ships": "Navi", "defense": "Difese", } def _localized_names(): """Tenta di caricare i nomi localizzati dal server (per id non coperti qui).""" try: with open(BASE_DIR / "data" / "latest" / "localization.json", encoding="utf-8") as f: lo = json.load(f) return {i + 1: n for i, n in enumerate(lo.get("techs", {}).get("name", []))} except Exception: return {} def item_name(category, tid): tid = int(tid) table = {"buildings": BUILDINGS, "research": RESEARCH, "ships": SHIPS, "defense": DEFENSES}.get(category) if table and tid in table: return table[tid] if category == "lfbuildings" and tid in LF_BUILDINGS: return LF_BUILDINGS[tid] loc = _localized_names() if tid in loc: return loc[tid] return f"{CATEGORY.get(category, 'Elemento')} #{tid}" def category_name(cat): return CATEGORY.get(cat, cat)