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 CharacterLog(Base, TimestampMixin): character_id = db.Column(db.ForeignKey('character.id'), index=True) character = db.relationship('Character', backref=backref("logs", cascade="all, delete")) log_id = db.Column(db.ForeignKey('adventurelog.id'), index=True) log = db.relationship('AdventureLog', backref=backref("characters", cascade="all, delete")) xp = db.Column(db.Integer, default=0) gold = db.Column(db.Integer, default=0)
class RaceAbility(db.Model): __tablename__ = 'race_ability' race_id = db.Column(db.Integer, db.ForeignKey('race.id'), primary_key=True) ability_id = db.Column(db.Integer, db.ForeignKey('ability.id'), primary_key=True) modifier = db.Column(db.Integer) ability = db.relationship("Ability") def __init__(self, ability, modifier): self.ability = ability self.modifier = modifier
class Entity(db.Model): __tablename__ = 'entity' id = db.Column(db.Integer, primary_key=True) active = db.Column(db.Boolean, default=True) room_id = db.Column(db.Integer, db.ForeignKey('room.id')) room = db.relationship('Room', backref=db.backref('entities', lazy='dynamic')) character_id = db.Column(db.Integer, db.ForeignKey('character.id')) character = db.relationship('Character', backref=db.backref('entities', lazy='dynamic')) trap_id = db.Column(db.Integer, db.ForeignKey('trap.id')) trap = db.relationship('Trap', backref=db.backref('entities', lazy='dynamic'))
class CharacterSkill(db.Model): __tablename__ = 'character_skill' character_id = db.Column(db.Integer, db.ForeignKey('character.id'), primary_key=True) proficient = db.Column(db.Boolean, default=False) modifier = db.Column(db.Integer) skill_id = db.Column(db.Integer, db.ForeignKey('skill.id'), primary_key=True) skill = db.relationship("Skill") def __init__(self, skill): self.skill = skill self.proficient = True
class CharacterClass(db.Model): __tablename__ = 'character_class' character_id = db.Column(db.Integer, db.ForeignKey('character.id'), primary_key=True) starting = db.Column(db.Boolean, default=False) level = db.Column(db.Integer) class_info_id = db.Column(db.Integer, db.ForeignKey('class_info.id'), primary_key=True) class_info = db.relationship("ClassInfo") def __init__(self, class_info, level, starting=False): self.class_info = class_info self.level = level self.starting = starting
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 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 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 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 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 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 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 CharacterAbility(db.Model): __tablename__ = 'character_ability' character_id = db.Column(db.Integer, db.ForeignKey('character.id'), primary_key=True) score = db.Column(db.Integer) modifier = db.Column(db.Integer) ability_id = db.Column(db.Integer, db.ForeignKey('ability.id'), primary_key=True) ability = db.relationship("Ability") def __init__(self, ability, score): self.ability = ability self.score = score def __setattr__(self, name, value): # Call the parent class method first. super(CharacterAbility, self).__setattr__(name, value) if (name == "score"): self.modifier = int((self.score - 10) / 2)
class Host(db.Model): __tablename__ = 'host' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) preference = db.relationship("Preference", uselist=False, backref="host") def is_available(self, date): if type(date) is not datetime.date: raise TypeError('arg must be a datetime.date, not a %s' % type(date)) for suspended_date in self.suspended_dates: if date >= suspended_date.from_date and date <= suspended_date.to_date: return False return True
class AdventureLog(Base, TimestampMixin): date_ran = db.Column(db.DateTime, default=datetime.utcnow) length = db.Column(db.Integer) author_id = db.Column(db.ForeignKey('user.id'), index=True) author = db.relationship('User', backref='logs') def xp_total(self): xp = 0 for character in self.characters: xp = character.xp + xp return xp def gold_total(self): gold = 0 for character in self.characters: gold = character.gold + gold return gold
class Suspend(db.Model): __tablename__ = 'suspend' id = db.Column(db.Integer, primary_key=True) host_id = db.Column(db.Integer, db.ForeignKey('host.id')) host = db.relationship('Host', backref=db.backref('suspended_dates', lazy='dynamic')) from_date = db.Column(db.Date) to_date = db.Column(db.Date) def is_available(self, date): if type(date) is not datetime.date: raise TypeError('arg must be a datetime.date, not a %s' % type(date)) if date >= self.from_date and date <= self.to_date: return False else: return True
def get_skill(name): return Skill.query.filter_by(name=name).first() def get_class(name): return ClassInfo.query.filter_by(name=name).first() def get_race(name): return Race.query.filter_by(name=name).first() class_skill_table = db.Table( 'class_skill', db.Model.metadata, db.Column('class_info_id', db.Integer, db.ForeignKey('class_info.id')), db.Column('skill_id', db.Integer, db.ForeignKey('skill.id'))) class_weapon_proficiency_table = db.Table( 'class_weapon_proficiency', db.Model.metadata, db.Column('class_info_id', db.Integer, db.ForeignKey('class_info.id')), db.Column('weapon_id', db.Integer, db.ForeignKey('weapon.id'))) 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'))
from v1.apps import db door = db.Table( 'doors', db.Model.metadata, db.Column('room_id', db.Integer, db.ForeignKey('room.id'), index=True), db.Column('door_id', db.Integer, db.ForeignKey('room.id')), db.UniqueConstraint('room_id', 'door_id', name='unique_door')) class Dungeon(db.Model): __tablename__ = 'dungeon' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32)) 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 Guest(db.Model): __tablename__ = 'guest' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) trait = db.relationship("Trait", uselist=False, backref="guest")
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 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 SkillEntity(db.Model): __tablename__ = 'skill_entity' statistics_id = db.Column(db.Integer, db.ForeignKey('statistics.id'), primary_key=True) modifier = db.Column(db.Integer, default=0) skill_id = db.Column(db.Integer, db.ForeignKey('skill.id')) skill = db.relationship("Skill")
class AbilityEntity(db.Model): __tablename__ = 'ability_entity' statistics_id = db.Column(db.Integer, db.ForeignKey('statistics.id'), primary_key=True) modifier = db.Column(db.Integer, default=0) ability_id = db.Column(db.Integer, db.ForeignKey('ability.id')) ability = db.relationship("Ability")