This commit is contained in:
bridge
2025-09-25 21:45:43 +08:00
parent 3155384313
commit ced6a117e1
5 changed files with 22 additions and 33 deletions

View File

@@ -59,17 +59,15 @@ def _build_root_members_from_csv() -> Dict[str, tuple]:
element_names = [s.strip() for s in elements_field.split(sep) if str(s).strip()]
element_members: List[RootElement] = []
for en in element_names:
try:
# RootElement 的值即为中文名,因此可直接用中文构造
element_members.append(RootElement(en))
except Exception as e:
raise ValueError(f"root.csv 中未知的元素名称: {en}") from e
element_members.append(RootElement(en))
members[key] = (cn_name, tuple(element_members))
return members
# 动态创建 Root 枚举(使用 mixin 作为 type使 __new__ 生效)
Root = Enum("Root", _build_root_members_from_csv(), type=_RootMixin)
# 某些环境下函数式创建的 Enum 可能未正确采用 mixin 的 __str__这里显式绑定确保生效
Root.__str__ = _RootMixin.__str__
# 元素到灵气类型的一一对应
@@ -94,21 +92,12 @@ def _load_extra_breakthrough_success_rate_from_csv() -> Dict["Root", float]:
从 root.csv 载入各灵根的额外突破成功率默认0。
列名extra_breakthrough_success_rate
"""
df = game_configs.get("root")
if df is None:
return {}
df = game_configs["root"]
bonuses: Dict["Root", float] = {}
for _, row in df.iterrows():
key = str(row["key"]).strip()
try:
root_member = getattr(Root, key)
except AttributeError:
# CSV 中的 key 未在 Root 中注册(理论不可能),跳过
continue
try:
bonus = float(row.get("extra_breakthrough_success_rate", 0) or 0)
except Exception:
bonus = 0.0
root_member = getattr(Root, key)
bonus = float(row.get("extra_breakthrough_success_rate", 0) or 0)
bonuses[root_member] = bonus
return bonuses