def printPlayerPage(self, fields, params): def getPlayerItems(player, fields): all_items = self.model.players.getPlayerHaveItems(player['_id']) items = {} wealth_items = [] inventory = [] ring1_exists = False if self.cur_player: str_class = str(self.cur_player['login_class']) else: str_class = False authors_ids = Set() for item in all_items: if "author" in item: authors_ids.add(item['author']) players_names = self.model.players.getPlayersList(authors_ids, ['_id', 'name']) for item in all_items: item['type'] = int(item['type']) # после type 100 начинаются неигровые предметы # которые учитывать не нужно if item['type'] < 100: if 'author' in item: item.update({ 'img': item['img'] + '_thumb.png', 'big_img': item['img'] + '_fit.png' }) else: item['img'] = '/data/items/' + item['img'] + '.jpg' if item['equipped'] and item['type'] == 6: if ring1_exists: item['type'] = 66 else: ring1_exists = True if 'UID' in item and 'pooled_date' in item and item['img'][:2] != './': item['img'] = '/data/items/' + item['img'][:-10] + '.jpg' if 'UID' in item and not 'author' in item: item_uid_str = str(int(item['UID'])) created_by_player = False else: item_uid_str = str(item['_id']) item['color'] = 1 created_by_player = True can_use_item = '0' if self.cur_player and 'lvl_min' in item and int(item['lvl_min']) <= int( self.cur_player['login_lvl']): can_use_item = '1' item.update(prettyItemBonus(item, self.balance.stats_name)) record = item record.update({ 'link': '/obj/1/' + item_uid_str + '/' + can_use_item, 'id': str(item['_id']), 'created_by_player': created_by_player, }) if item['type'] == 1 and str_class: if not item['view'] in self.sbuilder.balance.available_weapons[str_class]: item['cant_use'] = True if item['type'] == 1: item['str_type'] = item['view'] else: item['str_type'] = self.sbuilder.balance.item_types[item['type'] % 60] for player in players_names: if "author" in item and player['_id'] == item['author']: item['author_name'] = player['name'] if item['equipped']: items.update({'slot' + str(item['type']): record}) else: inventory.append(record) # shop items else: wealth_items.append(item) fields.update({ 'items': items, 'inventory': inventory, 'wealth': wealth_items }) def getCurrentTitle(player, fields): for title in player['titles']: if 'current' in title and title['current']: fields['player'].update({'current_title': title['name']}) fields['player'].update({'name_with_title': re.sub('\{player\}', player['name'], title['desc'])}) return True fields['player'].update({'name_with_title': fields['player']['name']}) return False def getEventsByPlayer(player, fields): if self.cur_player and self.cur_player['login_utc_offset']: utc_offset = self.cur_player['login_utc_offset'] else: utc_offset = self.core.server_utc_offset events = self.model.events.getEvents( player_id=player['_id'], query={'upcoming': 1}, fields={ 'start_date': 1, 'guild_side_name': 1, 'sides_names': 1, 'target_name': 1, '_id': 1, 'finish_date': 1, 'type': 1 } ) current_time = time() for event in events: event.update({'start_date_f': getRelativeDate(int(event['start_date']) + utc_offset)}) if event['start_date'] <= current_time <= event['finish_date']: fields.update({ 'in_progress_event': event }) fields.update({'events': events}) def getPlayerStats(player, fields): static = self.model.players.getStatisticStaticForPrint() buff_players_stats = self.model.players.getPlayerStatistics(player['user_id'])['stats'] player_stats = [] group = [] group_name = '' for stat_static in static: if stat_static['type'] == 'none': if group_name: player_stats.append({'name': group_name, 'stats': group}) group_name = stat_static['text'] group = [] else: if stat_static['visibility']: group.append({ 'name': stat_static['text'], 'value': buff_players_stats[stat_static['name']] }) fields.update({'statistics': player_stats}) def getPlayerAchvs(player, fields): buff_player_achvs = self.model.players.getPlayerAchvs(player['user_id'])['achvs'] player_achvs = [] group = [] group_name = '' for achv_static in self.static: if achv_static['type'] == 0: if group_name: player_achvs.append({'name': group_name, 'achvs': group}) group_name = achv_static['name'] group = [] else: if achv_static['visibility']: group.append({ 'name': achv_static['name'], 'complete': buff_player_achvs[str(achv_static['UID'])], 'UID': achv_static['UID'], 'text': achv_static['text'], 'img': achv_static['img'] }) player_achvs.append({'name': group_name, 'achvs': group}) fields.update({'achvs': player_achvs}) def getPlayerSpells(player, fields): spellbook = self.model.spells.getSpellBook(player['_id']) spells_ids = [] for item in spellbook['spells']: if 'spell_UID' in item: spells_ids.append(item['spell_UID']) else: spells_ids.append(item['spell_id']) spells = self.model.spells.getSpellsByIds(spells_ids) for spell in spells: if 'author' in spell: spell['img'] += '_thumb.png' else: spell['img'] = '/' + self.core.IMAGE_SPELL_FOLDER + spell['img'] + '.jpg' fields.update({'spells': spells}) def getArtwork(player, fields): # Получаем artwork is_artwork = False artwork_path = '' artwork_id = 0 if 'artworks' in player: for artwork in player['artworks']: if 'current' in artwork and artwork['current']: if 'UID' in artwork: artwork_path = self.core.ARTWORK_PATH + artwork['img'] + '.jpg' else: if artwork['img'] == './data/artwork_delete.jpg': artwork_path = artwork['img'] else: artwork_path = artwork['img'] + '_fit.png' is_artwork = True if '_id' in artwork: artwork_id = artwork['_id'] break else: artwork_id = 'none' if not is_artwork: key = str(player['faction']) + str(player['race']) + str(player['class']) if key in self.balance.default_artworks: artwork_path = self.core.ARTWORK_PATH + self.balance.default_artworks[key]['src'] + '.jpg' artwork_id = self.balance.default_artworks[key]['_id'] else: fields.update({'default_artwork': True}) fields['player'].update({ 'artwork': artwork_path, 'artwork_id': artwork_id }) def getPlayerBuffs(player, fields): fields.update({'stat_names': self.balance.stats_name}) inactive_count = 0 for buff in player['buffs']: buff['type'] = 'buff' buff['minutes'] = int(float(buff['start_time'] + buff['length'] - time()) / 60) if buff['minutes'] > 0: if 'buff_uid' in buff: buff['buff_img'] = '/data/spells/' + buff['buff_img'] + '.jpg' for action_name in buff['actions']: if action_name in player['stat']: player['stat'][action_name]['current'] += buff['actions'][action_name] is_buff = buff['actions'][action_name] > 0 buff['actions'][action_name] = str(buff['actions'][action_name]) if is_buff: buff['actions'][action_name] = '+' + buff['actions'][action_name] else: buff['type'] = 'debuff' player['stat'][action_name]['change'] = is_buff else: inactive_count += 1 if inactive_count != 0 and inactive_count == len(fields['player']['buffs']): fields['player']['buffs'] = [] def getNearPlayers(player, fields): def miniFormatPlayers(players): for player in players: player.update({ 'class_name': self.balance.classes[str(player['class'])], 'race_name': self.balance.races[player['faction']][player['race']], }) return players rad = 6 players_count = self.model.players.getNearPlayersCount( player['position']['x'], player['position']['y'], rad, player['name'] ) raw_records = self.model.players.getNearEnemies(rad, player) enemies = miniFormatPlayers(sample(raw_records, min(5, len(raw_records)))) raw_records = self.model.players.getNearFriends(rad, player) friends = miniFormatPlayers(sample(raw_records, min(5, len(raw_records)))) fields.update({ 'nearby_players': { 'count': players_count, 'enemies': enemies, 'friends': friends } }) def getAuthorInfo(player, fields): info = self.model.misc.getAuthorLikes(player['_id'], {'likes': 1}) if not info and 'ugc_enabled' in player and player['ugc_enabled']: info = {'likes': 0} if info: fields.update({'author_info': info}) player = self.model.players.getPlayer(params['username'], fields='game') if not player: return self.sbuilder.throwWebError(7001) getAuthorInfo(player, fields) if 'works' in params: fields.update({'player': player}) return self.printWorksPage(fields, params) fields.update({self.title: player['name'] + '\'s profile'}) lvl_caps = self.model.getLvls() cache_need_save = False from_cache = False if self.cur_player and player['name'] == self.cur_player['login_name']: fields.update({'player_self': True}) if from_cache: # fields = dict(loaded['content'].items() + fields.items()) pass else: fields.update({'player': player}) fields['player']['is_sleep'] = not (fields['player']['last_login'] >= time() - self.core.MAX_TIME_TO_SLEEP) # format player's last events messages tags = self.model.misc.getTags() fields['player']['messages'] = getMessages(fields['player']['messages'], host=self.core.HOST, tags=tags) if self.cur_player and 'login_id' in self.cur_player and player and self.cur_player['login_id'] == player['_id']: getEventsByPlayer(player, fields) getPlayerSpells(player, fields) getPlayerBuffs(player, fields) getPlayerItems(player, fields) getCurrentTitle(player, fields) getPlayerStats(player, fields) getPlayerAchvs(player, fields) if self.cur_player and self.cur_player['login_id'] == player['_id']: getNearPlayers(player, fields) getPlayerSpells(player, fields) if 'pvp' in player and player['pvp'] == 1: fields.update({'pvp_mode': 1}) fields['player'].update({ 'exp_level_cap': '', 'exp_percent': 0 }) if int(player['lvl']) != self.balance.max_lvl: lvl_cap = lvl_caps[str(fields['player']['lvl'] + 1)] fields['player'].update({ 'exp_level_cap': str(player['exp']) + ' / ' + str(lvl_cap), 'exp_percent': int((float(player['exp']) / float(lvl_cap)) * 100) }) fields['player'].update({ 'HP_percent': int(float(fields['player']['stat']['HP']['current']) / fields['player']['stat']['HP']['max_dirty'] * 100), 'MP_percent': int(float(fields['player']['stat']['MP']['current']) / fields['player']['stat']['MP']['max_dirty'] * 100) } ) # Получаем расу fields['player']['race_name'] = self.balance.races[fields['player']['faction']][fields['player']['race']] # Получаем название класса fields['player']['class_name'] = self.balance.classes[str(fields['player']['class'])] # Получаем название пола fields['player']['sex_name'] = ['Female', 'Male'][fields['player']['sex']] getArtwork(player, fields) # получаем гильдию guild = self.getPlayersGuild(player['_id']) if guild: fields.update({'guild': {'name': guild['name'], 'link': guild['link_name']}}) # Получаем тип урона fields['player']['damage_type'] = self.balance.damage_type[str(fields['player']['class'])] if self.cur_player: inventory_count = self.model.items.getInventoryCount(self.cur_player['login_id']) else: inventory_count = 0 fields.update({ 'help': 'help' in params, 'inventory_count': inventory_count, 'player_coords': self.core.relativePosition(player['position']) }) if cache_need_save: self.cache.cacheSave('!' + player['name'], content=fields) return basic.defaultController._printTemplate(self, 'player', fields)
def printGuildDetail(self, fields, params = {}): guildname = params['guildname'] guild = self.model.guilds.getGuildByName(guildname) if guild: guild['img'] = self.core.getAvatarLink(guild) if guild['img'].find("./") == 0: guild['img'] = guild['img'][2:] if 'site_link' in guild: if guild['site_link'] == '': del guild['site_link'] elif guild['site_link'][:7] != 'http://': guild['site_link'] = 'http://'+guild['site_link'] fields.update(guild) sort_name = '' sort_order = -1 if 's' in params: if params['s'] == 'lead': sort_name = 'stat.lead.current' elif params['s'] == 'name': sort_name = 'name' elif params['s'] == 'achv': sort_name = 'achv_points' elif params['s'] == 'lvl': sort_name = 'lvl' elif params['s'] == 'pvp': sort_name = 'pvp_score' if 'o' in params: if params['o'] == '1': sort_order = 1 if sort_name: sort = {sort_name: sort_order} else: sort = {} guild_members = self.model.guilds.getGuildMembers(guild, sort_query=sort) fields.update(self._formatGuildMembers(guild, guild_members, show_creator=True)) if self.cur_player: if self.cur_player['login_id'] == fields['creator']['_id']: fields.update({'login_creator': True}) else: players_guild = self.model.guilds.getPlayersGuild(self.cur_player['login_id']) if players_guild: if players_guild['name'] == guild['name']: fields.update({'in_guild':'this'}) else: fields.update({'in_guild':'other'}) else: if self.cur_player['login_id'] in guild['request']: fields.update({'requested': True}) fields.update({'in_guild': False}) messages = self.model.guilds.getGuildMessages(guild['name'])['history'] fields.update({ 'messages': getMessages(messages), self.title: '"'+guild['name']+'" guild' }) news = self.model.guilds.getGuildNews(guild['_id'])['news'][::-1] last_news = news[:2] # cut text desc_cut = 128 for story in last_news: if len(story['text']) > desc_cut: story['text'] = story['text'][:desc_cut:] + '...' fields.update({ 'news': last_news, 'events': self.model.events.getGuildEventsByID(guild['_id']) }) if 'name' in params: inviter_info = self.model.players.getPlayerRawByName(params['name'], {'avatar': 1}) if inviter_info and 'avatar' in inviter_info: fields.update({'inviter_avatar': inviter_info['avatar']}) return basic.defaultController._printTemplate(self, 'guild_detail', fields) else: return self.sbuilder.throwWebError(404)
Fore.RED + 'El mensaje contiene caracteres que no están en el alfabeto.' + Style.RESET_ALL) print('Alfabeto: ' + alphabet + '\n') f.sendMessage(message, loggedUser, USERS_PATH, users.index(receiver) + 1, affineKey, hillKey, alphabet) print(Fore.GREEN + '¡Mensaje enviado correctamente a ' + receiverName + '!\n' + Style.RESET_ALL) elif option == 2: # BANDEJA DE ENTRADA print(Fore.GREEN + '-* Bandeja de entrada de ' + loggedUser.getFullName() + ' *-' + Style.RESET_ALL) messages = f.getMessages(USERS_PATH, users.index(loggedUser) + 1, affineKey, hillKey, alphabet) for message in messages: day = message.date[:2] month = message.date[2:4] year = message.date[4:8] hour = message.date[8:10] minute = message.date[10:] print('[' + day + '/' + month + '/' + year + ' ' + hour + ':' + minute + '] ' + message.sender + ' escribió: ' + message.message) print(Fore.GREEN + '-* FIN *-\n' + Style.RESET_ALL) if len(messages) > 0: while True: