class Statistics(db.Model): __tablename__ = 'statistics' id = db.Column(db.Integer, primary_key= True) gender = db.Column(db.String(32)) alignment = db.Column(db.String(32)) level = db.Column(db.Integer, default=1) hp_dice = db.relationship("Dice", uselist=False, backref="hp_dice") strength = db.Column(db.Integer, default=8) dexterity = db.Column(db.Integer, default=8) constitution = db.Column(db.Integer, default=8) intelligence = db.Column(db.Integer, default=8) wisdom = db.Column(db.Integer, default=8) charisma = db.Column(db.Integer, default=8) skills = db.relationship("SkillEntity") race = db.relationship("Race") race_id = db.Column(db.Integer, db.ForeignKey('race.id')) class_info = db.relationship("ClassInfo") class_info_id = db.Column(db.Integer, db.ForeignKey('class_info.id')) character_id = db.Column(db.Integer, db.ForeignKey('character.id')) def get_modifier(self, stat): return int(float(stat - 10)/2) def get_initiative(self): return self.get_modifier(self.dexterity) def get_armor_class(self): return 10 + self.get_modifier(self.dexterity)
class Base(db.Model): __abstract__ = True id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80)) slug = db.Column(db.String(80), unique=True) def __unicode__(self): return self.name @declared_attr def __tablename__(cls): return cls.__name__.lower() def set_name(self, name): slug = slugify(name) counter = 2 while self.query.filter_by(slug=slug).first() is not None: slug = slugify(name) + "-" + str(counter) counter = counter + 1 self.name = name self.slug = slug def __init__(self, *args, **kwargs): if not 'slug' in kwargs: self.set_name(kwargs.get('name', '')) super().__init__(*args, **kwargs)
class Spell(db.Model): __tablename__ = 'spell' id = db.Column(db.Integer, primary_key=True) casting_time = db.Column(db.String(32)) components = db.Column(db.String(32)) description = db.Column(db.String(256)) duration = db.Column(db.String(32)) level = db.Column(db.Integer, default=0) range_distance = db.Column(db.Integer, default=0) school = db.Column(db.String(32))
class Character(db.Model): __tablename__ = 'character' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) theme = db.Column(db.String(32)) hostile = db.Column(db.Boolean, default=False) current_health = db.Column(db.Integer, null=True) statistics = db.relationship("Statistics", uselist=False, backref="character_statistics")
class Location(db.Model): __tablename__ = 'address' id = db.Column(db.Integer, primary_key=True) address1 = db.Column(db.String(64)) address2 = db.Column(db.String(64)) city = db.Column(db.String(32)) state = db.Column(db.String(32)) host_id = db.Column(db.Integer, db.ForeignKey('host.id')) host = db.relationship('Host', backref=db.backref('location', lazy='dynamic'))
class Race(db.Model): __tablename__ = 'race' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) size = db.Column(db.String(32)) speed = db.Column(db.Integer, default=30) ability_mods = db.relationship("RaceAbility") def get_ability_modifier(self, ability): iterator = (modifier for modifier in self.ability_mods if ability in modifier.ability.name) for modifier in iterator: return modifier return RaceAbility(get_ability(ability), modifier=0)
class User(Base, TimestampMixin): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) password_hash = db.Column(db.String(128)) first_name = db.Column(db.String(32)) last_name = db.Column(db.String(32)) email = db.Column(db.String(64)) gender = db.Column(db.String(32)) admin = db.Column(db.Boolean, default=False) def hash_password(self, password): self.password_hash = pwd_context.hash(password) def verify_password(self, password): return pwd_context.verify(password, self.password_hash)
class Trap(db.Model): __tablename__ = 'trap' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) statistics = db.relationship("Statistics", uselist=False, backref="trap_statistics")
class Attack(db.Model): __tablename__ = 'attack' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) damage = db.relationship("Dice", uselist=False, backref="damage_dice") to_hit_mod = db.Column(db.Integer, default=0) damage_mod = db.Column(db.Integer, default=0)
class Character(db.Model): __tablename__ = 'character' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) player_character = db.Column(db.Boolean, default=False) race = db.relationship("Race", backref="characters") race_id = db.Column(db.Integer, db.ForeignKey('race.id')) character_classes = db.relationship("CharacterClass", lazy='dynamic') abilities = db.relationship("CharacterAbility", lazy='dynamic') skills = db.relationship("CharacterSkill", lazy='dynamic') def get_ability(self, ability): return self.abilities.filter( CharacterAbility.ability.has(name=ability)).first() def get_skill(self, skill): return self.skills.filter(CharacterSkill.skill.has(name=skill)).first() def add_race_modifiers(self): for ability_mod in self.race.ability_mods: iterator = ( char_ability for char_ability in self.abilities if ability_mod.ability.name in char_ability.ability.name) for ability in iterator: ability.score = ability.score + ability_mod.modifier
class Player(db.Model): __tablename__ = 'player' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) active = db.Column(db.Boolean, default=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) user = db.relationship('User', backref=db.backref('players', lazy='dynamic'))
class ClassInfo(db.Model): __tablename__ = 'class_info' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) spell_ability = db.relationship("Ability") spell_ability_id = db.Column(db.Integer, db.ForeignKey('ability.id')) skill_proficiencies = db.relationship("Skill", secondary=class_skill_table, backref="class_skills")
class Trait(db.Model): __tablename__ = 'trait' id = db.Column(db.Integer, primary_key=True) language = db.Column(db.String(32)) disabled = db.Column(db.Boolean, default=False) smoker = db.Column(db.Boolean, default=False) pets_allowed = db.Column(db.Boolean, default=False) has_pets = db.Column(db.Boolean, default=False) overnight_stay = db.Column(db.Boolean, default=False) guest_id = db.Column(db.Integer, db.ForeignKey('guest.id'))
class Preference(db.Model): __tablename__ = 'preference' id = db.Column(db.Integer, primary_key=True) language = db.Column(db.String(32)) wheelchair_access = db.Column(db.Boolean, default=False) smoking_allowed = db.Column(db.Boolean, default=False) pets_allowed = db.Column(db.Boolean, default=False) has_pets = db.Column(db.Boolean, default=False) overnight_stays_allowed = db.Column(db.Boolean, default=False) host_id = db.Column(db.Integer, db.ForeignKey('host.id'))
class Room(db.Model): __tablename__ = 'room' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) dungeon_id = db.Column(db.Integer, db.ForeignKey('dungeon.id')) dungeon = db.relationship('Dungeon', backref=db.backref('rooms', lazy='dynamic')) doors = db.relationship('Room', secondary=door, primaryjoin=id == door.c.room_id, secondaryjoin=id == door.c.door_id)
class Statistics(db.Model): __tablename__ = 'statistics' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) level = db.Column(db.Integer, default=1) max_health = db.Column(db.Integer, default=1) damage_min = db.Column(db.Integer, default=1) damage_max = db.Column(db.Integer, default=4) armor_class = db.Column(db.Integer, default=10) strength = db.Column(db.Integer, default=8) dexterity = db.Column(db.Integer, default=8) consitution = db.Column(db.Integer, default=8) intelligence = db.Column(db.Integer, default=8) wisdom = db.Column(db.Integer, default=8) charisma = db.Column(db.Integer, default=8) character_id = db.Column(db.Integer, db.ForeignKey('character.id')) trap_id = db.Column(db.Integer, db.ForeignKey('trap.id'))
class Skill(db.Model): __tablename__ = 'skill' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) ability = db.relationship("Ability") ability_id = db.Column(db.Integer, db.ForeignKey('ability.id'))
class Character(Base, TimestampMixin): race = db.Column(db.String(32)) charClass = db.Column(db.String(32)) background = db.Column(db.String(32))
class Ability(db.Model): __tablename__ = 'ability' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) saving_throw_id = db.Column(db.Integer, db.ForeignKey('saving_throw.id'))
class Dungeon(db.Model): __tablename__ = 'dungeon' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32))
class Image(Base, TimestampMixin): url = db.Column(db.String(256)) blob = db.Column(db.String(256))