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)
Example #2
0
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)
Example #3
0
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))
Example #4
0
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")
Example #5
0
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'))
Example #6
0
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)
Example #7
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)
Example #8
0
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)
Example #10
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
Example #11
0
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'))
Example #12
0
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")
Example #13
0
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'))
Example #14
0
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'))
Example #15
0
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)
Example #16
0
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'))
Example #17
0
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'))
Example #18
0
class Character(Base, TimestampMixin):
    race = db.Column(db.String(32))
    charClass = db.Column(db.String(32))
    background = db.Column(db.String(32))
Example #19
0
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'))
Example #20
0
class Dungeon(db.Model):
    __tablename__ = 'dungeon'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
Example #21
0
class Image(Base, TimestampMixin):
    url = db.Column(db.String(256))
    blob = db.Column(db.String(256))