diff options
| author | 2024-07-15 18:38:53 +0800 | |
|---|---|---|
| committer | 2024-07-15 18:38:53 +0800 | |
| commit | fae8d2273dfad2dd0cf9709f15e24640e7ebfd8d (patch) | |
| tree | c7e170446bcadfef013bf3290a6c4188053949cc /examples/rules/COC/Character.py | |
| parent | 03812119ea6e99f549793a5e7ffac4b5765fa6a3 (diff) | |
| download | HydroRollCore-fae8d2273dfad2dd0cf9709f15e24640e7ebfd8d.tar.gz HydroRollCore-fae8d2273dfad2dd0cf9709f15e24640e7ebfd8d.zip | |
feat(Improve the underlying business directory): Improve the underlying business directory
Add { doc | feat | perf | dev } mods
Diffstat (limited to 'examples/rules/COC/Character.py')
| -rw-r--r-- | examples/rules/COC/Character.py | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/examples/rules/COC/Character.py b/examples/rules/COC/Character.py new file mode 100644 index 0000000..bb30661 --- /dev/null +++ b/examples/rules/COC/Character.py @@ -0,0 +1,132 @@ +# MyRule +import math + +from typing import Union +from dataclasses import dataclass + +from hrc.rule import Rule +from hrc.rule.BaseRule import CharacterCard + +aliases = Rule.aliases + +@dataclass +class Attributes(CharacterCard.Attribute): + + @aliases(["luck", "运气"], ignore_case=True) + def LUK(self) -> Union[str, int, None]: ... + + @aliases(["伤害加值", "DamageBonus"], ignore_case=True) + def DB(self) -> Union[str, int, 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 + ) + + @aliases(["年龄", "age"], ignore_case=True) + def AGE(self) -> Union[str, int, None]: ... + + @aliases(["HitPoints", "生命值", "生命"], ignore_case=True) + def HP(self) -> Union[str, int, None]: + return self.MAX_HP + + @aliases(["最大生命值", "HitPointTotal", "总生命值"], ignore_case=True) + def MAX_HP(self) -> Union[str, int, None]: + if hasattr(self, "CON") and hasattr(self, "SIZ"): + return (self.CON() + self.SIZ()) // 10 + else: + return None + + @aliases(["理智", "Sanity", "SanityPoint", "理智值", "san值"], ignore_case=True) + def SAN(self) -> Union[str, int, None]: + return self.POW() + + @aliases(["最大理智值", "MaximumSanity"], ignore_case=True) + def MAX_SAN(self) -> Union[str, int, None]: + return 99 - self.player_card.CM() + + @aliases(["魔法", "魔法值", "MagicPoints"], ignore_case=True) + def MP(self) -> Union[str, int, None]: + if hasattr(self, "POW"): + return math.floor(self.POW() / 5) + else: + return None + + @aliases(["伤害加值", "DamageBonus"], ignore_case=True) + def DB(self) -> Union[int, str, None]: # noqa: F811 + 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 + ) + + @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 + ) + + @aliases(["移动速度"], ignore_case=True) + def MOV(self) -> Union[str, int, None]: + mov = 8 + siz = self.player_card.SIZ() + str_val = self.player_card.STR() + dex = self.player_card.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 + + @aliases(["兴趣技能点", "PersonalInterests"], ignore_case=True) + def PI(self) -> Union[str, int, None]: + return self.player_card.INT() * 2 + + @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 + + @aliases(["锁匠", "开锁", "撬锁", "Locksmith"], ignore_case=True) + def LOCKSMITH(self) -> Union[str, int, None]: + return 1 + + @aliases(["动物驯养", "驯兽", "AnimalHandling"], ignore_case=True) + def ANIMAL_HANDLING(self) -> Union[str, int, None]: + return 1 |
