import csv from game import Difficulty, RollInfo def safe_item_level(creature_level: int): if creature_level <= 3: return 0 if creature_level == 4: return 1 return creature_level - 4 def load_csv(name, value_parser=None): def parse_col_name(name): try: return Difficulty.from_str(name) except ValueError: return name.lower() 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] = {parse_col_name(name): value_parser(val) for name,val in row.items()} return res def parse_stat(str_data): try: return int(str_data) except ValueError: pass separator = "-" if separator in str_data: # parse range values = [int(i) for i in str_data.split(separator)[:2]] return tuple((min(*values), max(*values))) else: return RollInfo.parse(str_data) class StatsDB: stat_names = ["ac","abilities","attack_bonus", "hp", "perception", "saves", "resistances", "skills", "strike_damage"] def __init__(self) -> None: self.stats = dict() for stat_name in StatsDB.stat_names: self.stats[stat_name] = load_csv(stat_name, parse_stat) self.stats["resistances"] = {k:(v["minimum"], v["maximum"]) for k,v in self.stats["resistances"].items()} stats = StatsDB() # if __name__ == '__main__': # main()