Exemple #1
0
    def characters(self):
        charids = r_get('users', self._uid + '.characters')
        chars = []
        for charid in charids:
            chars.append(Character(charid, self._uid))

        return chars
Exemple #2
0
    def attack(self):
        attack = self._get_char_value('attack')
        classes = self._get_char_value('exp.classes')
        clsname = ''
        clslvl = 0
        for key in classes.keys():
            if clslvl < classes[key]:
                clsname = key
                clslvl = classes[key]

        bab = r_get('templates', 'classes.' + clsname + '.bab')
        attack['bab'] = bab[clslvl - 1]

        for key, feat in self.feats.items():
            try:
                bonus = feat['direct_bonus']['attack']
                attack['base']['bonus']['total'] += bonus
                attack['base']['bonus']['from'].append(
                    self._create_from_string(
                        bonus, 'from feat "' + feat['name'] + '".'))
            except KeyError as e:
                pass

        for key, skill in self.skills.items():
            try:
                bonus = skill['direct_bonus']['attack']
                attack['base']['bonus']['total'] += bonus
                attack['base']['bonus']['from'].append(
                    self._create_from_string(
                        bonus, 'from skill "' + skill['name'] + '".'))
            except KeyError as e:
                pass

        for key, trait in self.traits.items():
            try:
                bonus = trait['direct_bonus']['attack']
                attack['base']['bonus']['total'] += bonus
                attack['base']['bonus']['from'].append(
                    self._create_from_string(
                        bonus, 'from trait "' + trait['name'] + '".'))
            except KeyError as e:
                pass

        race = self.race
        try:
            bonus = self.race['direct_bonus']['cmd']
            attack['cmd']['bonus']['total'] += bonus
            attack['cmd']['bonus']['from'].append(
                self._create_from_string(bonus, 'from race ' + race['name']))
        except KeyError as e:
            pass
        try:
            bonus = self.race['direct_bonus']['cmb']
            attack['cmb']['bonus']['total'] += bonus
            attack['cmb']['bonus']['from'].append(
                self._create_from_string(bonus, 'from race ' + race['name']))
        except KeyError as e:
            pass

        return attack
Exemple #3
0
def new_char(userid, char_name, char_class, char_race):
    id = 'uuid_' + uuid.uuid4().hex
    char = r_get('templates', 'character')
    char['uid'] = userid
    char['basics']['name'] = char_name
    char['basics']['race'] = char_race.lower()
    char['exp']['level'] = 1
    char['exp']['classes'][char_class.lower()] = 1

    char['basics']['languages']['known'] = r_get(
        'templates', 'races.' + char_race.lower() + '.languages.base')
    char['basics']['speed']['base'] = r_get(
        'templates', 'races.' + char_race.lower() + '.speed')

    r_set('characters', id, char)

    return Character(id, userid)
Exemple #4
0
    def _get_user_by_email(self, email):
        all_users = r_get('users')
        for uid, userdata in all_users.items():
            if userdata['email'] == email:
                self._uid = uid

        if self._uid is None:
            raise UserNotFoundError(
                'Could not find the user with the specified email.')
Exemple #5
0
    def feats(self):
        feats = {}

        for feat_ident in self._get_char_value('feats'):
            feat = r_get('templates', 'feats.' + feat_ident)
            feats[feat_ident] = feat

        traits = self.traits
        for trait_key in traits.keys():
            try:
                for feat_ident in traits[trait_key]['dicrect_bonus'][
                        'feats'].keys():
                    feat = r_get('templates', 'feats.' + feat_ident)
                    feat['from'] = 'from racial trait "' + traits[trait_key][
                        'name'] + '".'
                    feats[feat_ident] = feat
            except KeyError as e:
                pass

        return feats
Exemple #6
0
    def _set_experience(self, value):
        value = 0 if value == '' else int(value)
        exp = self._get_char_value('exp')
        growthCurve = r_get('templates', 'mechanics.growth.' + exp['growth'])
        newLvl = 0

        for index, entry in enumerate(growthCurve):
            if value < entry:
                newLvl = index + 1
                break

        exp['level'] = newLvl
        exp['experience'] = value

        self._set_char_value('exp', exp)
Exemple #7
0
    def exp(self):
        exp = self._get_char_value('exp')
        growthCurve = r_get('templates', 'mechanics.growth.' + exp['growth'])

        if exp['level'] > 20:
            exp['nextLevel'] = 0
        else:
            nextLevelExp = 0
            for entry in growthCurve:
                if exp['experience'] < entry:
                    nextLevelExp = entry
                    break
            exp['nextLevel'] = nextLevelExp

        return exp
Exemple #8
0
    def _set_level(self, value):
        value = 0 if value == '' else int(value)
        value = 1 if value == 0 else value

        exp = self._get_char_value('exp')
        growthCurve = r_get('templates', 'mechanics.growth.' + exp['growth'])

        if value == 1:
            exp['experience'] = 0
        elif value > 20:
            exp['experience'] = 0
        else:
            exp['experience'] = growthCurve[value - 2]

        exp['level'] = value

        self._set_char_value('exp', exp)
Exemple #9
0
 def last_selected_char(self):
     charid = r_get('users', self._uid + '.last_selected')
     return Character(charid)
Exemple #10
0
 def email(self):
     return r_get('users', self._uid + '.email')
Exemple #11
0
 def check_password(self, password):
     hashed_pw = r_get('users', self._uid + '.password').encode()
     if not bcrypt.checkpw(password.encode(), hashed_pw):
         raise UserPasswordError('The provided password is not correct.')