aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/examples/rules/COC
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2024-07-15 18:38:53 +0800
committer简律纯 <i@jyunko.cn>2024-07-15 18:38:53 +0800
commitfae8d2273dfad2dd0cf9709f15e24640e7ebfd8d (patch)
treec7e170446bcadfef013bf3290a6c4188053949cc /examples/rules/COC
parent03812119ea6e99f549793a5e7ffac4b5765fa6a3 (diff)
downloadHydroRollCore-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')
-rw-r--r--examples/rules/COC/Character.py132
-rw-r--r--examples/rules/COC/Command.py1
-rw-r--r--examples/rules/COC/Wiki.py3
-rw-r--r--examples/rules/COC/__init__.py62
4 files changed, 198 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
diff --git a/examples/rules/COC/Command.py b/examples/rules/COC/Command.py
new file mode 100644
index 0000000..9819841
--- /dev/null
+++ b/examples/rules/COC/Command.py
@@ -0,0 +1 @@
+class Command: ... \ No newline at end of file
diff --git a/examples/rules/COC/Wiki.py b/examples/rules/COC/Wiki.py
new file mode 100644
index 0000000..b97f717
--- /dev/null
+++ b/examples/rules/COC/Wiki.py
@@ -0,0 +1,3 @@
+# MyRule
+
+class Wiki(): ... \ No newline at end of file
diff --git a/examples/rules/COC/__init__.py b/examples/rules/COC/__init__.py
new file mode 100644
index 0000000..260bfb5
--- /dev/null
+++ b/examples/rules/COC/__init__.py
@@ -0,0 +1,62 @@
+import math
+
+from hrc.core import Core
+from hrc.rule import Rule, BaseRule # noqa: F401
+from hrc.dependencies import Depends
+
+from .Character import Attributes
+from .Wiki import Wiki
+from .Command import Command
+
+core = Core()
+
+
+class COC7(Rule):
+
+ # 规则、指令、词条,必须至少实现任意一个
+ attr: Attributes = Depends() # CharacterCard.Attribute
+ wiki: Wiki = Depends() # Wiki
+ cmd: Command = Depends() # Command # noqa: F821
+
+ async def handle(self): ...
+
+ async def rule(self): ...
+
+ @core.event_postprocessor_hook
+ async def auto_card(self):
+ if self.session and self.session.gid and self.ac:
+ if hasattr(self.pc.trans, "生命") or hasattr(self.pc.trans, "理智"):
+ self.event.call_back(
+ "set_group_card", self.pc.gid, f"card#{self.pc.uid}", await self.overview_card()
+ )
+
+ async def overview_card(self):
+ max_hp = math.floor(
+ (self.pc.get("CON", 0) + self.pc.get("SIZ", 0) / 10))
+ max_san = math.floor(99 - self.pc.get("CM", 0))
+ mp = self.pc.get("MP", 0)
+ mp_show = (
+ " mp" + str(mp) + "/" + str(math.floor(self.pc.get("POW", 0) / 5))
+ if mp and mp != math.floor(self.pc.get("POW", 0) / 5)
+ else ""
+ )
+ return (
+ self.pc.get("__Name", "")
+ + " hp"
+ + str(self.pc.get("HP", max_hp))
+ + "/"
+ + str(max_hp)
+ + " san"
+ + str(self.pc.get("SAN", "?"))
+ + "/"
+ + str(max_san)
+ + mp_show
+ + " DEX"
+ + str(self.pc.get("DEX", "?"))
+ )
+
+
+class COC6(Rule):
+ async def handle(self): ...
+
+ async def rule(self): ...