aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/examples/COC7
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2024-06-27 21:14:04 +0800
committer简律纯 <i@jyunko.cn>2024-06-27 21:14:04 +0800
commita0ebfdc2cf5f37c40caedcd1dfdcef9660b08f69 (patch)
tree8b58231bfc896e546c6716ac0f46a61db43529db /examples/COC7
parent94d6725582f862031d6573fa0c7c68f495bcca9c (diff)
downloadHydroRollCore-a0ebfdc2cf5f37c40caedcd1dfdcef9660b08f69.tar.gz
HydroRollCore-a0ebfdc2cf5f37c40caedcd1dfdcef9660b08f69.zip
feat(BaseRule): add Character.py
Diffstat (limited to 'examples/COC7')
-rw-r--r--examples/COC7/Character.py127
-rw-r--r--examples/COC7/Wiki.py12
-rw-r--r--examples/COC7/__init__.py24
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', "?"))