249 lines
5.2 KiB
Python
249 lines
5.2 KiB
Python
from abc import ABC, abstractmethod
|
|
from collections.abc import Mapping
|
|
from typing import Any, Literal
|
|
|
|
|
|
class CharacterProperty(ABC):
|
|
"""
|
|
抽象类,用于定义Character的接口和属性
|
|
"""
|
|
|
|
# region 角色属性
|
|
STR: float
|
|
"""力量"""
|
|
|
|
INT: float
|
|
"""智力"""
|
|
|
|
Spirit: float
|
|
"""精神"""
|
|
|
|
Vitality: float
|
|
"""体力"""
|
|
|
|
AtkP: float
|
|
"""物理攻击力"""
|
|
|
|
PAtkP: float
|
|
"""物理攻击力%"""
|
|
|
|
AtkM: float
|
|
"""魔法攻击力"""
|
|
|
|
PAtkM: float
|
|
"""魔法攻击力%"""
|
|
|
|
AtkI: float
|
|
"""独立攻击力"""
|
|
|
|
PAtkI: float
|
|
"""独立攻击力%"""
|
|
|
|
ElementA: dict[str, float]
|
|
"""属性攻击"""
|
|
|
|
ElementIncrease: float
|
|
"""属性增幅"""
|
|
|
|
ElementDB: dict[str, float]
|
|
"""属性强化数值"""
|
|
|
|
ElementR: dict[str, float]
|
|
"""属性抗性数值"""
|
|
|
|
CriticalM: float
|
|
"""魔法暴击"""
|
|
|
|
CriticalP: float
|
|
"""物理暴击"""
|
|
|
|
SkillAttack: float
|
|
"""技能攻击力"""
|
|
|
|
SpeedA: float
|
|
"""攻击速度"""
|
|
|
|
SpeedM: float
|
|
"""移动速度"""
|
|
|
|
SpeedR: float
|
|
"""施放速度"""
|
|
|
|
Hit: float
|
|
"""命中率"""
|
|
|
|
Abnormal: dict[str, bool]
|
|
"""敌人异常状态"""
|
|
|
|
MonsterInfo: dict[str, float]
|
|
"""怪物信息"""
|
|
|
|
jade_effect: Any
|
|
"""辟邪玉加成"""
|
|
|
|
Buffer: float
|
|
"""增益量"""
|
|
|
|
BufferP: float
|
|
"""增益量%"""
|
|
|
|
Attack: float
|
|
"""攻击强化"""
|
|
|
|
AttackP: float
|
|
"""攻击强化%"""
|
|
|
|
# endregion
|
|
|
|
# region 职业属性
|
|
实际名称: str
|
|
名称: str
|
|
角色: str
|
|
角色类型: str
|
|
职业: str
|
|
武器选项: list[str]
|
|
副武器选项: list[str]
|
|
输出类型选项: list[str]
|
|
防具精通属性: list[str]
|
|
输出类型: str
|
|
# endregion
|
|
|
|
@abstractmethod
|
|
def SetBaseStatus(self) -> None:
|
|
"""设角色基础属性"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def SetStatus(
|
|
self,
|
|
力量=0,
|
|
智力=0,
|
|
力智=0,
|
|
体力=0,
|
|
精神=0,
|
|
体精=0,
|
|
四维=0,
|
|
物攻=0,
|
|
魔攻=0,
|
|
独立=0,
|
|
三攻=0,
|
|
技攻=0,
|
|
全属强=0,
|
|
火强=0,
|
|
冰强=0,
|
|
光强=0,
|
|
暗强=0,
|
|
全属抗=0,
|
|
火属性抗性=0,
|
|
冰属性抗性=0,
|
|
光属性抗性=0,
|
|
暗属性抗性=0,
|
|
火属性攻击=False,
|
|
冰属性攻击=False,
|
|
光属性攻击=False,
|
|
暗属性攻击=False,
|
|
移动速度=0,
|
|
攻击速度=0,
|
|
施放速度=0,
|
|
三速=0,
|
|
命中=0,
|
|
命中率=0,
|
|
物暴=0,
|
|
魔暴=0,
|
|
攻击强化=0,
|
|
攻击强化P=0,
|
|
增益量=0,
|
|
增益量P=0,
|
|
**kwargs: Mapping[
|
|
Literal[
|
|
'STR',
|
|
'INT',
|
|
'AtkP',
|
|
'AtkM',
|
|
'AtkI',
|
|
'PAtkP',
|
|
'PAtkM',
|
|
'PAtkI',
|
|
'PATKIPDamage',
|
|
'PDamageC',
|
|
'PSTR',
|
|
'PINT',
|
|
'PDamageB',
|
|
'ElementA',
|
|
'ElementDB',
|
|
'ElementR',
|
|
'CriticalMP',
|
|
'CriticalM',
|
|
'CriticalPP',
|
|
'CriticalP',
|
|
'EquipmentSkillAttack',
|
|
'SkillAttack',
|
|
'SpeedA',
|
|
'SpeedM',
|
|
'SpeedR',
|
|
'HitP',
|
|
'Hit',
|
|
'Attack',
|
|
'AttackP',
|
|
'Buffer',
|
|
'BufferP',
|
|
'Spirit',
|
|
'Vitality',
|
|
'EquEffectRatio',
|
|
],
|
|
Any,
|
|
],
|
|
) -> None:
|
|
"""设置角色属性"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def AddElementDB(self, element: str, value: float, type: int = 0) -> None:
|
|
"""增加属性强化"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def AddSkillLv(self, min: int, max: int, lv: int, type=-1, exceptSkills: tuple[str, ...] = ()) -> None:
|
|
"""增加技能等级"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def SetSkillCD(self, min=1, max=100, cd=0, exclude: tuple[int, ...] = (50, 85, 100)) -> None:
|
|
"""设置技能CD"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def SetSkillCDRecover(self, min=1, max=100, cd=0, exclude: tuple[int, ...] = (50, 85, 100)) -> None:
|
|
"""设置技能CD恢复"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def SetSkillRation(self, min=1, max=100, ratio=0, type=0) -> None:
|
|
"""设置技能倍率"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def GetSkillByName(self, name) -> Any:
|
|
"""通过技能名获取技能"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def GetSkillByID(self, id: str) -> Any:
|
|
"""通过技能ID获取技能"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def GetSkillNames(self, type: Literal['active', 'passive', 'all'] = 'all', damage: Literal[True, False, 'all'] = 'all') -> list[str]:
|
|
"""获取技能名字"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def calc(self, setInfo: dict[str, dict]) -> dict:
|
|
"""计算角色属性"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def GetReinforceSum(self) -> list[int]:
|
|
"""获取强化总和"""
|
|
pass
|