diff options
author | nea <romangraef@gmail.com> | 2022-11-09 16:28:35 +0100 |
---|---|---|
committer | nea <romangraef@gmail.com> | 2022-11-09 16:28:35 +0100 |
commit | eff90addc24dcbb271525e9c322b52c4bb3bcbd5 (patch) | |
tree | e029c7b537abaf659963bfde4328801e016cba5c /sbdata | |
parent | fd22b8f3743c7216e2fefa265214b3315cd60bf4 (diff) | |
download | sbdata-eff90addc24dcbb271525e9c322b52c4bb3bcbd5.tar.gz sbdata-eff90addc24dcbb271525e9c322b52c4bb3bcbd5.tar.bz2 sbdata-eff90addc24dcbb271525e9c322b52c4bb3bcbd5.zip |
Reforge basics
Diffstat (limited to 'sbdata')
-rw-r--r-- | sbdata/tasks/__init__.py | 1 | ||||
-rw-r--r-- | sbdata/tasks/list_reforges.py | 103 |
2 files changed, 104 insertions, 0 deletions
diff --git a/sbdata/tasks/__init__.py b/sbdata/tasks/__init__.py index 737c65c..c4df789 100644 --- a/sbdata/tasks/__init__.py +++ b/sbdata/tasks/__init__.py @@ -1,2 +1,3 @@ from .fetch_dungeon_loot import fetch_dungeon_loot from .calculate_mapping_function import calculate_mapping_function +from .list_reforges import list_reforges diff --git a/sbdata/tasks/list_reforges.py b/sbdata/tasks/list_reforges.py new file mode 100644 index 0000000..169cd46 --- /dev/null +++ b/sbdata/tasks/list_reforges.py @@ -0,0 +1,103 @@ +import json +import traceback + +import mwparserfromhell.nodes + +from sbdata.repo import find_item_by_name +from sbdata.task import register_task, Arguments +from sbdata.wiki import get_wiki_sources_by_title + + +@register_task("List Reforges") +def list_reforges(args: Arguments): + all_reforge_ids = [] + for temp in (get_wiki_sources_by_title("Reforging")['Reforging']).filter_templates(): + if temp.name.strip() == 'Reforge_Table_Builder': + t = "" + reforgeids = [] + for param in temp.params: + if param.name == "type": + t = str(param.value) + elif param.showkey == False and str(param.value).strip(): + reforgeids.append(str(param.value).strip()) + print(f"Type = {t}: {reforgeids}") + all_reforge_ids += reforgeids + + for reforge in set(all_reforge_ids): + print(parse_reforge(reforge)) + + +rarity_list = [ + '', + 'COMMON', + 'UNCOMMON', + 'RARE', + 'EPIC', + 'LEGENDARY', + 'MYTHIC', + 'DIVINE' +] + +stat_names = dict( + SA_STR="STRENGTH", + SA_CC="CRIT_CHANCE", + SA_SCC="SEA_CREATURE_CHANCE", + SA_CD="CRIT_DAMAGE", + SA_INT="INTELLIGENCE", + SA_AS="BONUS_ATTACK_SPEED", + SA_HP="HEALTH", + SA_DEF="DEFENSE", + SA_SPD="SPEED", + SA_MF="MAGIC_FIND", + SA_FERO="FEROCITY", + SA_DMG="DAMAGE", + SA_MS="MINING_SPEED", + SA_MI="MINING_FORTUNE", + SA_FS="FISHING_SPEED", +) + + +def parse_reforge(reforge): + prefix = None + rarity = None + applied = None + stone = None + cost = None + stats = {} + tn = "Template:Reforge/" + reforge + for t in list(get_wiki_sources_by_title(tn).values())[0].filter_templates(): + if str(t.name).startswith("#switch: {{{type"): + for param in t.params: + pn = str(param.name).strip() + if pn == 'prefix': + prefix = str(param.value).strip() + elif pn == 'rarity': + rarity = str(param.value.filter_templates()[0].name)[0] + elif pn == 'stone': + try: + stone = str(param.value.filter(forcetype=mwparserfromhell.nodes.Wikilink)[-1].title) + except: + pass + elif pn == 'bonus': + pass + elif pn == 'applied': + applied = [l.strip().upper().replace(' ', '_')[:-1] for l in str(param.value).split(',')] + elif pn == 'stats': + i = 0 + for s in param.value.filter_templates(): + sn = s.name.strip() + if sn == '!': + i += 1 + stats[rarity_list[i]] = {} + elif sn.startswith('SA'): + try: + stats[rarity_list[i]][stat_names[sn]] = str(s.params[0].value).strip() + except: + print(f"Could not parse {s}") + return { + 'reforge_id': reforge, + 'prefix': prefix, + 'stats': stats, + 'stone': find_item_by_name(stone) if stone else None, + 'applicable': applied + } |