File size: 6,008 Bytes
5825182
f0b1638
88de31c
ef62e40
 
970efde
88de31c
2452398
f0b1638
2452398
f0b1638
 
5825182
970efde
5825182
f0b1638
2452398
ef62e40
 
 
 
 
f0b1638
 
 
 
ef62e40
 
f0b1638
3393f9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
970efde
 
 
2452398
3393f9d
 
 
f0b1638
 
 
2f63a42
3393f9d
0ed027c
3393f9d
0ed027c
2452398
 
 
 
 
 
 
 
 
60d173b
2452398
 
 
88de31c
0ed027c
88de31c
 
 
 
 
 
 
0ed027c
88de31c
0ed027c
 
 
3393f9d
0ed027c
 
 
 
 
 
 
 
 
88de31c
 
0ed027c
 
 
 
 
 
 
 
88de31c
ef62e40
0ed027c
f0b1638
970efde
f0b1638
3393f9d
f0b1638
 
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
104
105
106
107
108
109
110
111
112
113
114
115
116
from PySide6.QtWidgets import QFileDialog, QWidget

from general.consumables import FOODS, POTIONS, WEAPON_ENCHANTS, SNACKS, WINES, SPREADS
from general.gains.formation import FORMATIONS
from qt.components.bonuses import BonusesWidget
from qt.components.config import ConfigWidget
from qt.components.consumables import ConsumablesWidget
from qt.components.dashboard import DashboardWidget
from qt.components.equipments import EquipmentsWidget
from qt.components.recipes import RecipesWidget
from qt.components.talents import TalentsWidget
from qt.components.top import TopWidget
from qt.constant import MAX_RECIPES, MAX_STONE_LEVEL
from qt.scripts.config import CONFIG
from utils.parser import Parser


def top_script(
        top_widget: TopWidget, config_widget: ConfigWidget, bottom_widget: QWidget,
        dashboard_widget: DashboardWidget, talents_widget: TalentsWidget, recipes_widget: RecipesWidget,
        equipments_widget: EquipmentsWidget, consumables_widget: ConsumablesWidget, bonus_widget: BonusesWidget
):
    parser = Parser()

    def upload_logs():
        file_name = QFileDialog(top_widget, "Choose File").getOpenFileName()
        if not file_name[0]:
            return
        parser(file_name[0])
        top_widget.player_select.set_items(
            [parser.id2name[player_id] for player_id in parser.school], keep_index=True, default_index=0
        )
        top_widget.player_select.show()
        select_player(None)

    top_widget.upload_button.clicked.connect(upload_logs)

    def select_player(_):
        player_name = top_widget.player_select.combo_box.currentText()
        if not player_name:
            return
        player_id = parser.name2id[player_name]
        parser.current_player = player_id
        school = parser.school[player_id]
        """ Update config """
        config_choices = list(CONFIG.get(school.school, {}))
        config_widget.config_select.set_items(config_choices, default_index=-1)
        """ Update dashboard """
        record_index = list(parser.record_index[player_id])
        dashboard_widget.fight_select.set_items(record_index, default_index=0)
        dashboard_widget.duration.set_value(parser.duration(player_id, parser.record_index[player_id][record_index[0]]))

        """ Update talent options """
        for i, talent_widget in enumerate(talents_widget.values()):
            talents = school.talents[i]
            default_index = talents.index(parser.select_talents[player_id][i]) + 1
            talent_widget.set_items(
                [""] + [school.talent_decoder[talent] for talent in talents], default_index=default_index
            )

        """ Update recipe options """
        for recipe_widget in recipes_widget.values():
            recipe_widget.list.clear()
            recipe_widget.hide()

        for i, (skill, recipes) in enumerate(school.recipes.items()):
            recipes_widget[i].set_label(skill)
            recipes_widget[i].set_items(recipes)
            for n in range(min(MAX_RECIPES, len(recipes))):
                recipes_widget[i].list.item(n).setSelected(True)
            recipes_widget[i].show()

        """ Update equipment options """
        for label, equipment_widget in equipments_widget.items():
            choices = [""]
            for name, detail in equipment_widget.equipment_json.items():
                if detail['kind'] not in (school.kind, school.major):
                    continue
                if detail['school'] not in ("精简", "通用", school.school):
                    continue
                choices.append(name)
            equipment_widget.equipment.set_items(choices, keep_index=True)
            if equipment_widget.stones_json:
                if not (current_index := equipment_widget.stone_level.combo_box.currentIndex()):
                    current_index = MAX_STONE_LEVEL
                equipment_widget.stone_level.combo_box.setCurrentIndex(current_index)
            if select_equipment := parser.select_equipments[player_id].get(label, {}):
                if equipment := equipment_widget.equipment_mapping.get(select_equipment['equipment']):
                    if equipment in equipment_widget.equipment.items:
                        equipment_widget.equipment.combo_box.setCurrentText(equipment)
                if enchant := equipment_widget.enchant_mapping.get(select_equipment['enchant']):
                    if enchant in equipment_widget.enchant.items:
                        equipment_widget.enchant.combo_box.setCurrentText(enchant)
                equipment_widget.strength_level.combo_box.setCurrentIndex(select_equipment['strength_level'])
                for i, embed_level in enumerate(select_equipment['embed_levels']):
                    equipment_widget.embed_levels[i].combo_box.setCurrentIndex(embed_level)

        """ Update consumable options """
        consumables_widget.major_food.set_items([""] + FOODS[school.major], keep_index=True)
        consumables_widget.minor_food.set_items([""] + FOODS[school.kind] + FOODS[""], keep_index=True)
        consumables_widget.major_potion.set_items([""] + POTIONS[school.major], keep_index=True)
        consumables_widget.minor_potion.set_items([""] + POTIONS[school.kind] + POTIONS[""], keep_index=True)
        consumables_widget.weapon_enchant.set_items([""] + WEAPON_ENCHANTS[school.kind], keep_index=True)
        consumables_widget.home_snack.set_items([""] + SNACKS[school.kind] + SNACKS[""], keep_index=True)
        consumables_widget.home_wine.set_items([""] + WINES[school.major] + WINES[""], keep_index=True)
        consumables_widget.spread.set_items([""] + SPREADS[school.major] + SPREADS[school.kind], keep_index=True)

        """ Update bonus options """
        bonus_widget.formation.formation.set_items([""] + FORMATIONS[school.kind] + FORMATIONS[""], keep_index=True)
        config_widget.show()
        bottom_widget.show()

    top_widget.player_select.combo_box.currentTextChanged.connect(select_player)

    return parser