aboutsummaryrefslogtreecommitdiff
path: root/sbdata
diff options
context:
space:
mode:
authornea <romangraef@gmail.com>2022-11-09 16:28:35 +0100
committernea <romangraef@gmail.com>2022-11-09 16:28:35 +0100
commiteff90addc24dcbb271525e9c322b52c4bb3bcbd5 (patch)
treee029c7b537abaf659963bfde4328801e016cba5c /sbdata
parentfd22b8f3743c7216e2fefa265214b3315cd60bf4 (diff)
downloadsbdata-eff90addc24dcbb271525e9c322b52c4bb3bcbd5.tar.gz
sbdata-eff90addc24dcbb271525e9c322b52c4bb3bcbd5.tar.bz2
sbdata-eff90addc24dcbb271525e9c322b52c4bb3bcbd5.zip
Reforge basics
Diffstat (limited to 'sbdata')
-rw-r--r--sbdata/tasks/__init__.py1
-rw-r--r--sbdata/tasks/list_reforges.py103
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
+ }