PaiGram/modules/playercards/helpers.py
2023-09-20 15:48:27 +08:00

52 lines
2.1 KiB
Python

import os
import ujson as json
from enkanetwork import EquipmentsStats
from modules.playercards.fight_prop import FightProp, FightPropScore
_project_path = os.path.dirname(__file__)
_fight_prop_rule_file = os.path.join(_project_path, "metadata", "FightPropRule_genshin.json")
with open(_fight_prop_rule_file, "r", encoding="utf-8") as f:
fight_prop_rule_data: dict = json.load(f)
class ArtifactStatsTheory:
def __init__(self, character_name: str):
self.character_name = character_name
self.fight_prop_rules = fight_prop_rule_data.get(self.character_name, {})
fight_prop_rule_list = list(self.fight_prop_rules.keys())
self.main_prop = [FightProp(fight_prop_rule) for fight_prop_rule in fight_prop_rule_list]
if not self.main_prop:
self.main_prop = [
FightProp.FIGHT_PROP_CRITICAL,
FightProp.FIGHT_PROP_CRITICAL_HURT,
FightProp.FIGHT_PROP_ATTACK_PERCENT,
]
# 修正要评分的数值词条
if FightProp.FIGHT_PROP_ATTACK_PERCENT in self.main_prop and FightProp.FIGHT_PROP_ATTACK not in self.main_prop:
self.main_prop.append(FightProp.FIGHT_PROP_ATTACK)
if FightProp.FIGHT_PROP_HP_PERCENT in self.main_prop and FightProp.FIGHT_PROP_HP not in self.main_prop:
self.main_prop.append(FightProp.FIGHT_PROP_HP)
if (
FightProp.FIGHT_PROP_DEFENSE_PERCENT in self.main_prop
and FightProp.FIGHT_PROP_DEFENSE not in self.main_prop
):
self.main_prop.append(FightProp.FIGHT_PROP_DEFENSE)
def theory(self, sub_stats: EquipmentsStats) -> float:
"""圣遗物副词条评分
Args:
sub_stats: 圣遗物对象
Returns:
返回得分
"""
score: float = 0
main_prop = {x.name: x for x in self.main_prop}
if prop := main_prop.get(sub_stats.prop_id):
weight = self.fight_prop_rules.get(prop.value, 0.0)
if weight == 0.0:
weight = float(FightPropScore[sub_stats.prop_id].value)
score = weight * sub_stats.value
return round(score, 1)