aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/examples/COC7/Character.py
blob: b5f07c5d7f084db55b8a3bedd16654a2293618ed (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# MyRule
import math

from typing import Union
from dataclasses import dataclass

from hrc.rule import aliases
from hrc.rule.BaseRule import CharacterCard


@dataclass
class Attributes(CharacterCard.Attribute):

    @property
    @aliases(['luck', '运气'], ignore_case=True)
    def LUK(self) -> Union[str, int, None]: ...

    @property
    @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
        )

    @property
    @aliases(['年龄', 'age'], ignore_case=True)
    def AGE(self) -> Union[str, int, None]: ...

    @property
    @aliases(['HitPoints', '生命值', '生命'], ignore_case=True)
    def HP(self) -> Union[str, int, None]:
        return self.MAX_HP

    @property
    @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

    @property
    @aliases(['理智', 'Sanity', 'SanityPoint', '理智值', 'san值'], ignore_case=True)
    def SAN(self) -> Union[str, int, None]:
        return self.POW

    @property
    @aliases(['最大理智值', 'MaximumSanity'], ignore_case=True)
    def MAX_SAN(self) -> Union[str, int, None]:
        return 99 - self.player_card.CM

    @property
    @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

    @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.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

    @property
    @aliases(['兴趣技能点', 'PersonalInterests'], ignore_case=True)
    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