def from_bestiary(cls, data): for key in ('traits', 'actions', 'reactions', 'legactions'): data[key] = [Trait(**t) for t in data.pop(key)] data['spellcasting'] = Spellbook.from_dict(data.pop('spellbook')) data['saves'] = Saves.from_dict(data['saves']) data['skills'] = Skills.from_dict(data['skills']) data['ability_scores'] = BaseStats.from_dict(data['ability_scores']) data['attacks'] = AttackList.from_dict(data['attacks']) if 'display_resists' in data: data['display_resists'] = Resistances.from_dict( data['display_resists']) return cls(**data)
def from_data(cls, d): ability_scores = BaseStats.from_dict(d['ability_scores']) saves = Saves.from_dict(d['saves']) skills = Skills.from_dict(d['skills']) display_resists = Resistances.from_dict(d['display_resists'], smart=False) traits = [Trait(**t) for t in d['traits']] actions = [Trait(**t) for t in d['actions']] reactions = [Trait(**t) for t in d['reactions']] legactions = [Trait(**t) for t in d['legactions']] resistances = Resistances.from_dict(d['resistances']) attacks = AttackList.from_dict(d['attacks']) if d['spellbook'] is not None: spellcasting = MonsterSpellbook.from_dict(d['spellbook']) else: spellcasting = None return cls( d['name'], d['size'], d['race'], d['alignment'], d['ac'], d['armortype'], d['hp'], d['hitdice'], d['speed'], ability_scores, saves, skills, d['senses'], display_resists, d['condition_immune'], d['languages'], d['cr'], d['xp'], traits, actions, reactions, legactions, d['la_per_round'], d['passiveperc'], # augmented resistances, attacks, d['proper'], d['image_url'], spellcasting=spellcasting, # sourcing source=d['source'], entity_id=d['id'], page=d['page'], url=d['url'], is_free=d['isFree'])
def from_bestiary(cls, data, source): for key in ('traits', 'actions', 'reactions', 'legactions'): data[key] = [Trait(**t) for t in data.pop(key)] data['spellcasting'] = MonsterSpellbook.from_dict(data.pop('spellbook')) data['saves'] = Saves.from_dict(data['saves']) data['skills'] = Skills.from_dict(data['skills']) data['ability_scores'] = BaseStats.from_dict(data['ability_scores']) data['attacks'] = AttackList.from_dict(data['attacks']) if 'resistances' in data: data['resistances'] = Resistances.from_dict(data['resistances']) if 'display_resists' in data: data['display_resists'] = Resistances.from_dict(data['display_resists'], smart=False) else: data['display_resists'] = Resistances() if 'source' in data: del data['source'] return cls(homebrew=True, source=source, **data)