diff --git a/dungeonsheets/character.py b/dungeonsheets/character.py index dae7263..e193403 100644 --- a/dungeonsheets/character.py +++ b/dungeonsheets/character.py @@ -3,6 +3,7 @@ import os import re import warnings import math +import logging from types import ModuleType from typing import Sequence, Union, MutableMapping @@ -28,6 +29,9 @@ from dungeonsheets.dice import combine_dice from dungeonsheets.equipment_reader import equipment_weight_parser +log = logging.getLogger(__name__) + + dice_re = re.compile(r"(\d+)d(\d+)") __all__ = ( @@ -1060,6 +1064,9 @@ class Character(Creature): char_props["levels"] = [str(char_props.pop("level"))] # Create the character with loaded properties char = Cls(**char_props) + log.info(f"Imported character: {char}") + log.debug(f"New character classes: {char.class_list} ({char.levels})") + log.debug(f"New character subclasses: {char.subclasses}") return char def save(self, filename, template_file="character_template.txt"): diff --git a/dungeonsheets/make_sheets.py b/dungeonsheets/make_sheets.py index 2cd0ebf..bb46e5b 100644 --- a/dungeonsheets/make_sheets.py +++ b/dungeonsheets/make_sheets.py @@ -280,20 +280,29 @@ def make_gm_sheet( warnings.warn(msg) continue else: + # Make sure it's not already on the list + if MyMonster in [type(m) for m in monsters_]: + break new_monster = MyMonster() monsters_.append(new_monster) if len(monsters_) > 0: content.append( create_monsters_content( - monsters_, suffix=content_suffix, use_dnd_decorations=fancy_decorations + set(monsters_), suffix=content_suffix, use_dnd_decorations=fancy_decorations ) ) # Add the GM Spellbook - spells = [Spell() for monster in monsters_ for Spell in monster.spells] - spells = set(spells) + spells = [] + for monster in monsters_: + for Spell in monster.spells: + # Make sure it's not already on the list + if Spell not in [type(spl) for spl in spells]: + spells.append(Spell()) + # Alphabetical order + spells = sorted(spells, key=lambda x: x.name) + # Generate the content content.append(create_gm_spellbook(spells, content_suffix)) - # Add the random tables tables = [ find_content(s, valid_classes=[random_tables.RandomTable]) diff --git a/examples/gm-session-notes.py b/examples/gm-session-notes.py index 33ea707..f4bced0 100644 --- a/examples/gm-session-notes.py +++ b/examples/gm-session-notes.py @@ -30,7 +30,7 @@ parent_sheets = ["gm-campaign-notes.py"] # Defining a *monsters* attribute will include their stat blocks in # the output -monsters = ["aboleth", "wolf", "giant eagle", "Vashta Nerada", "priest"] +monsters = ["aboleth", "wolf", "giant eagle", "Vashta Nerada", "priest", "priest"] # Arbitrary sections can be added to the GM notes. The # ``extra_sections`` attribute should be a sequence of subclasses of