diff options
| author | Supremist <sergkarv@gmail.com> | 2025-10-27 19:53:18 +0200 |
|---|---|---|
| committer | Supremist <sergkarv@gmail.com> | 2025-10-27 19:53:18 +0200 |
| commit | d3e18471b664c9146f4255e7c23ea21c9cfa6130 (patch) | |
| tree | 6b317ce2b7598b85b9c526aa23fd884da581cf4c /creature.py | |
| parent | 2721a20cdef0bbbfc97345a102017b13e962ff03 (diff) | |
| download | pf2e_calc-d3e18471b664c9146f4255e7c23ea21c9cfa6130.tar.xz pf2e_calc-d3e18471b664c9146f4255e7c23ea21c9cfa6130.zip | |
Add creature stats
Diffstat (limited to 'creature.py')
| -rw-r--r-- | creature.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/creature.py b/creature.py new file mode 100644 index 0000000..3584cf0 --- /dev/null +++ b/creature.py @@ -0,0 +1,48 @@ +import csv +from enum import Enum + +class Difficulty(Enum): + Terrible = -2 + Low = -1 + Moderate = 0 + High = 1 + Extreme = 2 + + @classmethod + def from_str(cls, name): + name = name.strip().lower() + for member in cls: + if member.name.lower() == name: + return member + raise ValueError(f"{name!r} is not a valid {cls.__name__}") + + +def load_csv(name, value_parser=None): + if value_parser is None: + value_parser = lambda x:x + res = dict() # Table by level and Difficulty + with open(f"creature_stats/{name}.csv", newline='', encoding='utf8') as file: + reader = csv.DictReader(file) + for row in reader: + level = int(row.pop("Level")) + res[level] = {Difficulty.from_str(name): + value_parser(val) for name,val in row.items()} + return res + +def parse_range(str_data): + try: + value = int(str_data) + return (value, value) + except ValueError: + return tuple([int(i) for i in str_data.split("-")[:2]]) + +class StatsDB: + def __init__(self) -> None: + self.ac = load_csv("ac", int) + self.saves = load_csv("saves", int) + self.hp = load_csv("hp", parse_range) + +stats = StatsDB() + +# if __name__ == '__main__': +# main() |
