🐛 Fix default config from weapon and artifact

This commit is contained in:
xtaodada 2024-02-22 23:51:55 +08:00
parent c5d0360cca
commit 6c3349411e
Signed by: xtaodada
GPG Key ID: 4CBB3F4FA8C85659
4 changed files with 48 additions and 5 deletions

View File

@ -366,7 +366,8 @@
"full_rate": 0.0 "full_rate": 0.0
}, },
"CalamityQueller": { "CalamityQueller": {
"stack": 6.0 "stack": 6.0,
"backend_rate": 0.0
}, },
"StaffOfHoma": { "StaffOfHoma": {
"be50_rate": 0.0 "be50_rate": 0.0
@ -1900,7 +1901,8 @@
"rate": 1.0 "rate": 1.0
}, },
"KeyOfKhajNisut": { "KeyOfKhajNisut": {
"stack": 3.0 "stack": 3.0,
"rate": 0.5
}, },
"ToukabouShigure": { "ToukabouShigure": {
"rate": 0.5 "rate": 0.5
@ -2156,7 +2158,8 @@
"rate": 1.0 "rate": 1.0
}, },
"KeyOfKhajNisut": { "KeyOfKhajNisut": {
"stack": 3.0 "stack": 3.0,
"rate": 0.5
}, },
"WolfFang": { "WolfFang": {
"e_stack": 1.0, "e_stack": 1.0,

View File

@ -26,5 +26,8 @@ class Artifact:
self.artifacts = artifacts self.artifacts = artifacts
self.artifact_config_map = artifact_config_map self.artifact_config_map = artifact_config_map
def get_by_name(self, name: str) -> ArtifactModel:
return self.artifact_config_map.get(name)
artifact = Artifact() artifact = Artifact()

View File

@ -1,9 +1,11 @@
import json import json
from typing import Dict, Any from typing import Dict, Any
from .artifact import artifact
from .character import character from .character import character
from .models import CharacterDamage, CharacterSkill, CharacterConfig, WeaponConfig from .models import CharacterDamage, CharacterConfig, WeaponConfig
from .skill_data import SkillData from .skill_data import SkillData
from .weapon import weapon
class Data: class Data:
@ -11,6 +13,7 @@ class Data:
self.file_name = "GenshinDamageRule.json" self.file_name = "GenshinDamageRule.json"
self.file_data: Dict[str, CharacterDamage] = self.load() self.file_data: Dict[str, CharacterDamage] = self.load()
self.patch_character() self.patch_character()
self.add_new_default_config()
def load(self) -> Dict[str, CharacterDamage]: def load(self) -> Dict[str, CharacterDamage]:
with open(self.file_name, "r", encoding="utf-8") as f: with open(self.file_name, "r", encoding="utf-8") as f:
@ -39,6 +42,33 @@ class Data:
skill.index skill.index
] ]
def add_new_default_config(self):
# 版本更新时,自动添加新的默认配置。只处理 config_weapon artifact_config
self.add_new_default_config_weapon()
self.add_new_default_config_artifact()
def add_new_default_config_weapon(self):
for c_name, v in self.file_data.items():
if v.config_weapon:
for w_name, w_value in v.config_weapon.items():
w = weapon.get_by_name(w_name)
if not w:
continue
for config in w.config:
if config.name not in w_value:
w_value[config.name] = config.default
def add_new_default_config_artifact(self):
for c_name, v in self.file_data.items():
if v.artifact_config:
for a_name, a_value in v.artifact_config.items():
a = artifact.get_by_name(a_name)
if not a:
continue
for config in a.config:
if config.name not in a_value:
a_value[config.name] = config.default
def dump(self) -> Dict[str, Dict]: def dump(self) -> Dict[str, Dict]:
new_data = {} new_data = {}
for k, v in self.file_data.items(): for k, v in self.file_data.items():

View File

@ -1,5 +1,5 @@
import json import json
from typing import Dict from typing import Dict, Optional
from .assets import assets, locale from .assets import assets, locale
from .models import Weapon as WeaponModel, WeaponConfig from .models import Weapon as WeaponModel, WeaponConfig
@ -8,6 +8,7 @@ from .models import Weapon as WeaponModel, WeaponConfig
class Weapon: class Weapon:
def __init__(self): def __init__(self):
weapon_map: Dict[str, WeaponModel] = {} weapon_map: Dict[str, WeaponModel] = {}
weapon_name_map: Dict[str, WeaponModel] = {}
for value in assets.weapon.values(): for value in assets.weapon.values():
if not value["configs"]: if not value["configs"]:
continue continue
@ -22,7 +23,13 @@ class Weapon:
temp = weapon_map.get(value["t"], []) temp = weapon_map.get(value["t"], [])
temp.append(weapon_) temp.append(weapon_)
weapon_map[value["t"]] = temp weapon_map[value["t"]] = temp
weapon_name_map[value["name"]] = weapon_
self.weapon_map = weapon_map self.weapon_map = weapon_map
self.weapon_name_map = weapon_name_map
def get_by_name(self, name: str) -> Optional[WeaponModel]:
# 通过内部名称获取武器,例如 MistsplitterReforged
return self.weapon_name_map.get(name)
weapon = Weapon() weapon = Weapon()