diff options
| author | 2024-06-27 21:14:04 +0800 | |
|---|---|---|
| committer | 2024-06-27 21:14:04 +0800 | |
| commit | a0ebfdc2cf5f37c40caedcd1dfdcef9660b08f69 (patch) | |
| tree | 8b58231bfc896e546c6716ac0f46a61db43529db /examples/COC7 | |
| parent | 94d6725582f862031d6573fa0c7c68f495bcca9c (diff) | |
| download | HydroRollCore-a0ebfdc2cf5f37c40caedcd1dfdcef9660b08f69.tar.gz HydroRollCore-a0ebfdc2cf5f37c40caedcd1dfdcef9660b08f69.zip | |
feat(BaseRule): add Character.py
Diffstat (limited to 'examples/COC7')
| -rw-r--r-- | examples/COC7/Character.py | 127 | ||||
| -rw-r--r-- | examples/COC7/Wiki.py | 12 | ||||
| -rw-r--r-- | examples/COC7/__init__.py | 24 |
3 files changed, 163 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 diff --git a/examples/COC7/Wiki.py b/examples/COC7/Wiki.py new file mode 100644 index 0000000..060fb9d --- /dev/null +++ b/examples/COC7/Wiki.py @@ -0,0 +1,12 @@ +# 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 + +class Query(Wiki): +
\ No newline at end of file diff --git a/examples/COC7/__init__.py b/examples/COC7/__init__.py new file mode 100644 index 0000000..f3d781f --- /dev/null +++ b/examples/COC7/__init__.py @@ -0,0 +1,24 @@ +import math + +from hrc import Core, player_card + +core = Core() + + +@core.event_post_processor_hook +async def auto_card(_event='T_Event'): + g = core.session + pc = player_card + if g and core.session.gid and g.ac: + if hasattr(pc.trans, '生命') or hasattr(pc.trans, '理智'): + core.session.call("set_group_card", pc.gid, f"card#{pc.uid}", await overview_card(pc.char)) + + +async def overview_card(pc: player_card): + max_hp = math.floor((pc.get('CON', 0) + pc.get('SIZ', 0) / 10) + max_san=math.floor(99 - pc.get('CM', 0)) + mp=pc.get('MP', 0) + mp_show=" mp" + str(mp) + "/" + str( + math.floor(pc.get('POW', 0) / 5) + ) if mp and mp != math.floor(pc.get('POW', 0) / 5) else "" + return pc.get('__Name', "") + " hp" + str(pc.get('HP', max_hp)) + "/" + str(max_hp) + " san" + str(pc.get('SAN', "?")) + "/" + str(max_san) + mp_show + " DEX" + str(pc.get('DEX', "?")) |
