fb1077de7e
* Beginnings of shaman atree * Fix aura parents * Day's work (ft. frozenearth and endistic) * More incremental work -- finish another two pages i think, or one * One more page to go on shaman atree * Fix missing archetype on overseer and fix regeneration to be not 100% heal per tick * Just missing 4 abils at the bottom hopefully * Fix typos in display * Fix archetype req for chant of the fanatic * Shaman atree complete except fluid healing doesn't work yet * Add comments, fix some misc. formatting related stuffs * Misc. patch Fix rebound interaction Fix translations for newly added target parts Fix tree misc. connection/archetype missing bugs Co-authored-by: hppeng <hppeng>
98 lines
4.7 KiB
Python
98 lines
4.7 KiB
Python
"""
|
|
Generate a minified JSON Ability Tree [atree_constants_min.json] AND a minified .js form [atree_constants_min.js] of the Ability Tree with:
|
|
- All references replaced by numerical IDs
|
|
- Extra JSON File with Class: [Original name as key and Assigned IDs as value].
|
|
given [atree_constants.js] .js form of the Ability Tree with reference as string.
|
|
"""
|
|
import json
|
|
|
|
def translate_id(id_data, atree_data):
|
|
for _class, info in atree_data.items():
|
|
def translate(path, ref):
|
|
ref_dict = info
|
|
for x in path:
|
|
ref_dict = ref_dict[x]
|
|
ref_dict[ref] = id_data[_class][ref_dict[ref]]
|
|
|
|
for abil in range(len(info)):
|
|
info[abil]["id"] = id_data[_class][info[abil]["display_name"]]
|
|
for ref in range(len(info[abil]["parents"])):
|
|
translate([abil, "parents"], ref)
|
|
|
|
for ref in range(len(info[abil]["dependencies"])):
|
|
translate([abil, "dependencies"], ref)
|
|
|
|
for ref in range(len(info[abil]["blockers"])):
|
|
translate([abil, "blockers"], ref)
|
|
|
|
if "base_abil" in info[abil]:
|
|
base_abil_name = info[abil]["base_abil"]
|
|
if base_abil_name in id_data[_class]:
|
|
translate([abil], "base_abil")
|
|
|
|
if "effects" not in info[abil]:
|
|
print("WARNING: abil missing 'effects' tag")
|
|
print(info[abil])
|
|
info[abil]["effects"] = []
|
|
for effect in info[abil]["effects"]:
|
|
if effect["type"] == "raw_stat":
|
|
for bonus in effect["bonuses"]:
|
|
if "abil" in bonus and bonus["abil"] in id_data[_class]:
|
|
bonus["abil"] = id_data[_class][bonus["abil"]]
|
|
elif effect["type"] == "replace_spell":
|
|
for part in effect['parts']:
|
|
if 'hits' in part: # Translate parametrized hits...
|
|
hits_mapping = part['hits']
|
|
keys = list(hits_mapping.keys())
|
|
for k in keys:
|
|
v = hits_mapping[k]
|
|
if isinstance(v, str):
|
|
abil_id, propname = v.split('.')
|
|
hits_mapping[k] = str(id_data[_class][abil_id])+'.'+propname
|
|
elif effect["type"] == "add_spell_prop":
|
|
if 'hits' in effect: # Translate parametrized hits...
|
|
hits_mapping = effect['hits']
|
|
keys = list(hits_mapping.keys())
|
|
for k in keys:
|
|
v = hits_mapping[k]
|
|
if isinstance(v, str):
|
|
abil_id, propname = v.split('.')
|
|
hits_mapping[k] = str(id_data[_class][abil_id])+'.'+propname
|
|
elif effect["type"] == "stat_scaling":
|
|
if "inputs" in effect: # Might not exist for sliders
|
|
for _input in effect["inputs"]:
|
|
if "abil" in _input and _input["abil"] in id_data[_class]:
|
|
_input["abil"] = id_data[_class][_input["abil"]]
|
|
if "output" in effect:
|
|
if isinstance(effect["output"], list):
|
|
for output in effect["output"]:
|
|
if "abil" in output and output["abil"] in id_data[_class]:
|
|
output["abil"] = id_data[_class][output["abil"]]
|
|
else:
|
|
if "abil" in effect["output"] and effect["output"]["abil"] in id_data[_class]:
|
|
effect["output"]["abil"] = id_data[_class][effect["output"]["abil"]]
|
|
|
|
abilDict = {}
|
|
with open("atree_constants.js") as f:
|
|
data = f.read()
|
|
data = data.replace("const atrees = ", "")
|
|
data = json.loads(data)
|
|
for classType, info in data.items():
|
|
_id = 0
|
|
abilDict[classType] = {}
|
|
for abil in info:
|
|
abilDict[classType][abil["display_name"]] = _id
|
|
_id += 1
|
|
|
|
with open("atree_ids.json", "w", encoding='utf-8') as id_dest:
|
|
json.dump(abilDict, id_dest, ensure_ascii=False, indent=4)
|
|
|
|
translate_id(abilDict, data)
|
|
|
|
data_str = json.dumps(data, ensure_ascii=False, separators=(',', ':'))
|
|
data_str = "const atrees=" + data_str
|
|
with open('atree_constants_min.js', 'w', encoding='utf-8') as abil_dest:
|
|
abil_dest.write(data_str)
|
|
|
|
with open('atree_constants_min.json', 'w', encoding='utf-8') as json_dest:
|
|
json.dump(data, json_dest, ensure_ascii=False, separators=(',', ':'))
|