From 9558df091151d58aa7433c79ac3b8e050674c6fc Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Sat, 6 Jul 2024 09:14:35 +0800 Subject: chore: move COC7 folder into rules folder --- examples/COC7/Character.py | 132 --------------------------------------- examples/COC7/Wiki.py | 3 - examples/COC7/__init__.py | 48 -------------- examples/config.toml | 2 + examples/main.py | 6 ++ examples/rules/COC7/Character.py | 132 +++++++++++++++++++++++++++++++++++++++ examples/rules/COC7/Wiki.py | 3 + examples/rules/COC7/__init__.py | 48 ++++++++++++++ 8 files changed, 191 insertions(+), 183 deletions(-) delete mode 100644 examples/COC7/Character.py delete mode 100644 examples/COC7/Wiki.py delete mode 100644 examples/COC7/__init__.py create mode 100644 examples/config.toml create mode 100644 examples/main.py create mode 100644 examples/rules/COC7/Character.py create mode 100644 examples/rules/COC7/Wiki.py create mode 100644 examples/rules/COC7/__init__.py diff --git a/examples/COC7/Character.py b/examples/COC7/Character.py deleted file mode 100644 index bb30661..0000000 --- a/examples/COC7/Character.py +++ /dev/null @@ -1,132 +0,0 @@ -# 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/COC7/Wiki.py b/examples/COC7/Wiki.py deleted file mode 100644 index b97f717..0000000 --- a/examples/COC7/Wiki.py +++ /dev/null @@ -1,3 +0,0 @@ -# MyRule - -class Wiki(): ... \ No newline at end of file diff --git a/examples/COC7/__init__.py b/examples/COC7/__init__.py deleted file mode 100644 index 25acdaa..0000000 --- a/examples/COC7/__init__.py +++ /dev/null @@ -1,48 +0,0 @@ -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 - -core = Core() - - -class COC7(Rule): - - attr: Attributes = Depends() # 必须实现一个继承自 Character.Attribute 的子类 - wiki: Wiki = Depends() # 可选实现一个 Wiki 类 - - @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", "?")) - ) \ No newline at end of file diff --git a/examples/config.toml b/examples/config.toml new file mode 100644 index 0000000..4e5e2fe --- /dev/null +++ b/examples/config.toml @@ -0,0 +1,2 @@ +[core] +rule_dirs = ["rules"] \ No newline at end of file diff --git a/examples/main.py b/examples/main.py new file mode 100644 index 0000000..c8b43e0 --- /dev/null +++ b/examples/main.py @@ -0,0 +1,6 @@ +from hrc.core import Core + +core = Core(hot_reload=True) + +if __name__ == '__main__': + core.run() diff --git a/examples/rules/COC7/Character.py b/examples/rules/COC7/Character.py new file mode 100644 index 0000000..bb30661 --- /dev/null +++ b/examples/rules/COC7/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/COC7/Wiki.py b/examples/rules/COC7/Wiki.py new file mode 100644 index 0000000..b97f717 --- /dev/null +++ b/examples/rules/COC7/Wiki.py @@ -0,0 +1,3 @@ +# MyRule + +class Wiki(): ... \ No newline at end of file diff --git a/examples/rules/COC7/__init__.py b/examples/rules/COC7/__init__.py new file mode 100644 index 0000000..25acdaa --- /dev/null +++ b/examples/rules/COC7/__init__.py @@ -0,0 +1,48 @@ +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 + +core = Core() + + +class COC7(Rule): + + attr: Attributes = Depends() # 必须实现一个继承自 Character.Attribute 的子类 + wiki: Wiki = Depends() # 可选实现一个 Wiki 类 + + @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", "?")) + ) \ No newline at end of file -- cgit v1.2.3-70-g09d2