def characters(self): charids = r_get('users', self._uid + '.characters') chars = [] for charid in charids: chars.append(Character(charid, self._uid)) return chars
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
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)
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.')
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
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)
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
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)
def last_selected_char(self): charid = r_get('users', self._uid + '.last_selected') return Character(charid)
def email(self): return r_get('users', self._uid + '.email')
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.')