diff options
Diffstat (limited to 'examples/COC7/Character.py')
| -rw-r--r-- | examples/COC7/Character.py | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/examples/COC7/Character.py b/examples/COC7/Character.py new file mode 100644 index 0000000..d2a6b9f --- /dev/null +++ b/examples/COC7/Character.py @@ -0,0 +1,127 @@ +# MyRule +import math +import dataclasses + +from dataclasses import dataclass +from typing import Literal, Optional, Union +from pydantic import Field, BaseModel +from hrc.rules import aliases, BaseRule +from hrc.rules.BaseRule import CharacterCard + + +@dataclass +class Attributes(CharacterCard.Attribute): + + @property + @aliases(['luck', '运气'], ignore_case=True) + def LUK(self) -> Union[str, int]: ... + + @property + def DB(self) -> Union[str, int]: + sum = self.player_card.STR + self.player_card.SIZ + if sum == 164: + return math.ceil((sum-164)/80) + "D6" + elif sum == 124: + return "1D4" + + @property + @aliases(['年龄', 'age'], ignore_case=True) + def AGE(self) -> Union[str, int]: ... + + @property + @aliases(['HitPoints', '生命值', '生命'], ignore_case=True) + def HP(self) -> Union[str, int]: + return self.MAX_HP + + @property + @aliases(['最大生命值', 'HitPointTotal', '总生命值'], ignore_case=True) + def MAX_HP(self) -> Union[str, int]: + if hasattr(self, 'CON') and hasattr(self, 'SIZ'): + return (self.CON + self.SIZ) // 10 + else: + return None + + @property + @aliases(['理智', 'Sanity', 'SanityPoint', '理智值', 'san值'], ignore_case=True) + def SAN(self) -> Union[str, int]: + return self.POW + + @property + @aliases(['最大理智值', 'MaximumSanity'], ignore_case=True) + def MAX_SAN(self) -> Union[str, int]: + return 99 - self.player_card.CM + + @property + @aliases(['魔法', '魔法值', 'MagicPoints'], ignore_case=True) + def MP(self) -> Union[str, int]: + if hasattr(self, 'POW'): + return math.floor(self.POW / 5) + else: + return None + + @property + @aliases(['伤害加值', 'DamageBonus'], ignore_case=True) + def DB(self) -> Union[int, str, None]: + sum = self.STR + self.SIZ + return ( + str(math.ceil((sum - 164) / 80)) + "D6" if sum > 164 else + "1D4" if sum > 124 else + "0" if sum > 84 else + "-1" if sum > 64 else + "-2" if sum > 0 else + None + ) + + @property + @aliases(['体格', 'build'], ignore_case=True) + def BUILD(self) -> Union[str, int, None]: + sum = self.STR + self.SIZ + return ( + math.ceil((sum - 84) / 80) if sum > 164 else + 1 if sum > 124 else + 0 if sum > 84 else + -1 if sum > 64 else + -2 if sum > 0 else + None + ) + + @property + @aliases(['移动速度'], ignore_case=True) + def MOV(self) -> Union[str, int, None]: + mov = 8 + siz = self.SIZ + str_val = self.STR + dex = self.DEX + age = self.AGE + + if age >= 40: + mov -= math.floor(age / 10 - 3) + + if str_val > siz and dex > siz: + mov += 1 + elif siz > str_val and siz > dex: + mov -= 1 + + return mov + + @property + @aliases(['兴趣技能点', 'PersonalInterests'], ignore_case=Ture) + def PI(self) -> Union[str, int, None]: + return self.player_card.INT*2 + + @property + @aliases(['闪避', 'Dodge'], ignore_case=True) + def DODGE(self) -> Union[str, int, None]: + if hasattr(self.player_card, 'DEX'): + return math.floor(self.player_card.DEX/2) + return None + + @property + @aliases(['锁匠', '开锁', '撬锁', 'Locksmith'], ignore_case=True) + def LOCKSMITH(self) -> Union[str, int, None]: + return 1 + + @property + @aliases(['动物驯养', '驯兽', 'AnimalHandling'], ignore_case=True) + def ANIMAL_HANDLING(self) -> Union[str, int, None]: + return 1 |
