diff options
| author | Supremist <sergkarv@gmail.com> | 2025-10-29 00:40:14 +0200 |
|---|---|---|
| committer | Supremist <sergkarv@gmail.com> | 2025-10-29 00:40:14 +0200 |
| commit | c29738661837749c72e3743c71814703cd11e062 (patch) | |
| tree | 421a26874678eed3273322e7d3cbe7bc95954cc2 /creature.py | |
| parent | f2c7dbddb602db06ec8e8a8c9a4134451acd52e9 (diff) | |
| download | pf2e_calc-c29738661837749c72e3743c71814703cd11e062.tar.xz pf2e_calc-c29738661837749c72e3743c71814703cd11e062.zip | |
Add simple creature stat builder
Diffstat (limited to 'creature.py')
| -rw-r--r-- | creature.py | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/creature.py b/creature.py index e30f877..aa830f6 100644 --- a/creature.py +++ b/creature.py @@ -1,6 +1,6 @@ import csv -from game import Difficulty, RollInfo +from game import Difficulty, RollInfo, LevelingPlan def safe_item_level(creature_level: int): if creature_level <= 3: @@ -41,10 +41,19 @@ def parse_stat(str_data): else: return RollInfo.parse(str_data) +def get_range_value(range_stat: tuple, value="avg"): + if value == "min": + return range_stat[0] + if value == "max": + return range_stat[1] + if value == "avg": + return (range_stat[0]+range_stat[1]) // 2 + class StatsDB: stat_names = ["ac","abilities","attack_bonus", "hp", "perception", "saves", "resistances", "skills", "strike_damage"] + saves = ["reflex", "will", "fortitude"] def __init__(self) -> None: self.stats = dict() @@ -53,7 +62,36 @@ class StatsDB: self.stats["resistances"] = {k:(v["minimum"], v["maximum"]) for k,v in self.stats["resistances"].items()} + + def get(self, stat, level, difficulty=Difficulty.Moderate, range_value="avg"): + if stat in StatsDB.saves: + stat = "saves" + value = self.stats[stat][level] + if isinstance(value, dict): + value = value[difficulty] + if isinstance(value, tuple): + value = get_range_value(value, range_value) + return value + + stats = StatsDB() +class CreaturePlan(LevelingPlan, dict): + stat_names = ["ac", "attack_bonus", "hp", "perception", "strike_damage"] + + def __init__(self, data=None, + default_difficulty = Difficulty.Moderate, + stat_range_value="avg") -> None: + super().__init__({k: default_difficulty for k in self.stat_names+StatsDB.saves}) + if data is not None: + self.update(data) + self.stat_range_value = stat_range_value + + def build(self, level: int): + res = dict() + for stat, difficulty in self.items(): + res[stat] = stats.get(stat, level, difficulty, self.stat_range_value) + return res + # if __name__ == '__main__': # main() |
