aboutsummaryrefslogtreecommitdiff
path: root/sbdata/tasks/list_reforges.py
blob: 169cd466973638de8c3884343ec49b97a79ce247 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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
    }