Spaces:
Runtime error
Runtime error
| import json | |
| import os | |
| from qt.components import ComboWithLabel, RadioWithLabel, SpinWithLabel | |
| from qt.components.bonuses import BonusesWidget | |
| from qt.components.config import ConfigWidget | |
| from qt.components.equipments import EquipmentsWidget | |
| from qt.components.consumables import ConsumablesWidget | |
| from qt.components.recipes import RecipesWidget | |
| from qt.components.talents import TalentsWidget | |
| from qt.components.top import TopWidget | |
| from utils.parser import Parser | |
| if not os.path.exists("config"): | |
| CONFIG = {} | |
| else: | |
| CONFIG = json.load(open("config", encoding="utf-8")) | |
| def config_script( | |
| parser: Parser, config_widget: ConfigWidget, | |
| talent_widget: TalentsWidget, recipe_widget: RecipesWidget, | |
| equipments_widget: EquipmentsWidget, consumable_widget: ConsumablesWidget, bonus_widget: BonusesWidget): | |
| def load_equipments(config): | |
| if not config: | |
| return | |
| for label, equipment in equipments_widget.items(): | |
| if 'equipment' not in config[label]: | |
| continue | |
| else: | |
| index = equipment.equipment.combo_box.findText(config[label]['equipment']) | |
| equipment.equipment.combo_box.setCurrentIndex(index) | |
| equipment.strength_level.combo_box.setCurrentIndex(config[label]['strength_level']) | |
| if 'enchant' in config[label]: | |
| index = equipment.enchant.combo_box.findText(config[label]['enchant']) | |
| equipment.enchant.combo_box.setCurrentIndex(index) | |
| if 'special_enchant' in config[label]: | |
| if equipment.special_enchant.radio_button.isChecked() != config[label]['special_enchant']: | |
| equipment.special_enchant.radio_button.click() | |
| if 'embed_levels' in config[label]: | |
| for i, embed_level in enumerate(equipment.embed_levels): | |
| embed_level.combo_box.setCurrentIndex(config[label]['embed_levels'][i]) | |
| if 'stone_level' in config[label]: | |
| equipment.stone_level.combo_box.setCurrentIndex(config[label]['stone_level']) | |
| if 'stone_attrs' in config[label]: | |
| for i, stone_attr in enumerate(equipment.stone_attrs): | |
| index = equipment.stone_attrs[i].combo_box.findText(config[label]['stone_attrs'][i]) | |
| stone_attr.combo_box.setCurrentIndex(index) | |
| def load_consumables(config): | |
| for label, consumable in consumable_widget.items(): | |
| if isinstance(consumable, ComboWithLabel): | |
| consumable.combo_box.setCurrentText(config[label]) | |
| elif isinstance(consumable, RadioWithLabel): | |
| if consumable.radio_button.isChecked() != config[label]: | |
| consumable.radio_button.click() | |
| def load_bonuses(config): | |
| bonus_widget.formation.formation.combo_box.setCurrentText(config['formation']['formation']) | |
| bonus_widget.formation.core_rate.spin_box.setValue(config['formation']['core_rate']) | |
| bonus_widget.formation.rate.spin_box.setValue(config['formation']['rate']) | |
| for label, team_gain in bonus_widget.team_gains.items(): | |
| if isinstance(team_gain, RadioWithLabel): | |
| if team_gain.radio_button.isChecked() != config['team_gains'][label]: | |
| team_gain.radio_button.click() | |
| elif isinstance(team_gain, dict): | |
| for sub_label, sub_team_gain in team_gain.items(): | |
| if isinstance(sub_team_gain, ComboWithLabel): | |
| sub_team_gain.combo_box.setCurrentText(config['team_gains'][label][sub_label]) | |
| elif isinstance(sub_team_gain, SpinWithLabel): | |
| sub_team_gain.spin_box.setValue(config['team_gains'][label][sub_label]) | |
| def load_recipes(config): | |
| for i, recipes in enumerate(config): | |
| for selected_item in recipe_widget.recipes[i].list.selectedItems(): | |
| selected_item.setSelected(False) | |
| def load_config(): | |
| config_name = config_widget.config_select.combo_box.currentText() | |
| player_id = parser.current_player | |
| config = CONFIG.get(parser.school[player_id].school, {}).get(config_name, {}) | |
| if not config: | |
| return | |
| category = config_widget.config_category.combo_box.currentText() | |
| if category == "全部": | |
| load_equipments(config.get("equipments")) | |
| load_consumables(config.get("consumables")) | |
| load_bonuses(config.get("bonuses")) | |
| elif category == "装备": | |
| load_equipments(config.get("equipments")) | |
| elif category == "消耗品": | |
| load_consumables(config.get("consumables")) | |
| elif category == "增益": | |
| load_bonuses(config.get("bonuses")) | |
| config_widget.config_name.text_browser.setText(config_name) | |
| config_widget.load_config.clicked.connect(load_config) | |
| def save_equipments(config): | |
| for label, equipment in equipments_widget.items(): | |
| config[label] = {} | |
| if not (text := equipment.equipment.combo_box.currentText()): | |
| continue | |
| else: | |
| config[label]['equipment'] = text | |
| config[label]['strength_level'] = equipment.strength_level.combo_box.currentIndex() | |
| if equipment.enchant: | |
| config[label]['enchant'] = equipment.enchant.combo_box.currentText() | |
| if equipment.special_enchant: | |
| config[label]['special_enchant'] = equipment.special_enchant.radio_button.isChecked() | |
| if equipment.embed_levels: | |
| config[label]['embed_levels'] = [ | |
| embed_level.combo_box.currentIndex() for embed_level in equipment.embed_levels | |
| ] | |
| if equipment.stone_level: | |
| config[label]['stone_level'] = equipment.stone_level.combo_box.currentIndex() | |
| if equipment.stone_attrs: | |
| config[label]['stone_attrs'] = [ | |
| stone_attr.combo_box.currentText() for stone_attr in equipment.stone_attrs | |
| ] | |
| def save_consumables(config): | |
| for label, consumable in consumable_widget.items(): | |
| if isinstance(consumable, ComboWithLabel): | |
| config[label] = consumable.combo_box.currentText() | |
| elif isinstance(consumable, RadioWithLabel): | |
| config[label] = consumable.radio_button.isChecked() | |
| def save_bonuses(config): | |
| config['formation']['formation'] = bonus_widget.formation.formation.combo_box.currentText() | |
| config['formation']['core_rate'] = bonus_widget.formation.core_rate.spin_box.value() | |
| config['formation']['rate'] = bonus_widget.formation.rate.spin_box.value() | |
| for label, team_gain in bonus_widget.team_gains.items(): | |
| if isinstance(team_gain, RadioWithLabel): | |
| config['team_gains'][label] = team_gain.radio_button.isChecked() | |
| elif isinstance(team_gain, dict): | |
| config['team_gains'][label] = {} | |
| for sub_label, sub_team_gain in team_gain.items(): | |
| if isinstance(sub_team_gain, ComboWithLabel): | |
| config['team_gains'][label][sub_label] = sub_team_gain.combo_box.currentText() | |
| elif isinstance(sub_team_gain, SpinWithLabel): | |
| config['team_gains'][label][sub_label] = sub_team_gain.spin_box.value() | |
| def save_recipes(config): | |
| for recipe in recipe_widget.values(): | |
| if selected_items := recipe.list.selectedItems(): | |
| config.append(selected_items) | |
| def save_config(): | |
| config_name = config_widget.config_name.text_browser.text() | |
| player_id = parser.current_player | |
| school = parser.school[player_id].school | |
| if school not in CONFIG: | |
| CONFIG[school] = {} | |
| if config_name not in CONFIG[school]: | |
| CONFIG[school][config_name] = { | |
| "equipments": {}, | |
| "consumables": {}, | |
| "bonuses": {"formation": {}, "team_gains": {}}, | |
| "talents": [], | |
| "recipes": [] | |
| } | |
| save_equipments(CONFIG[school][config_name]['equipments']) | |
| save_consumables(CONFIG[school][config_name]['consumables']) | |
| save_bonuses(CONFIG[school][config_name]['bonuses']) | |
| # save_recipes(CONFIG[parser.school.school][config_name]['recipes']) | |
| json.dump(CONFIG, open("config", "w", encoding="utf-8"), ensure_ascii=False) | |
| config_widget.config_select.set_items( | |
| list(CONFIG.get(school, {})), keep_index=True, default_index=-1 | |
| ) | |
| config_widget.save_config.clicked.connect(save_config) | |
| def delete_config(): | |
| config_name = config_widget.config_name.text_browser.text() | |
| player_id = parser.current_player | |
| school = parser.school[player_id].school | |
| if config_name not in CONFIG.get(school, {}): | |
| return | |
| CONFIG[school].pop(config_name) | |
| json.dump(CONFIG, open("config", "w", encoding="utf-8"), ensure_ascii=False) | |
| config_widget.config_select.set_items(list(CONFIG.get(school, {})), default_index=-1) | |
| config_widget.config_name.text_browser.clear() | |
| config_widget.delete_config.clicked.connect(delete_config) | |