def __populatePersonalMedals(self, pData): pData['dossierType'] = None pData['dossierCompDescr'] = None achievements = pData.get('dossierPopUps', []) pData['achievementsLeft'] = [] pData['achievementsRight'] = [] for achievementId, achieveValue in achievements: achieveName = DB_ID_TO_RECORD[achievementId][1] if achieveName in ('maxXP', 'maxFrags', 'maxDamage'): continue medalDict = getMedalDict(achieveName, rank=achieveValue) medalDict['unic'] = True type = medalDict['type'] if type == 'markOfMastery': type = ''.join([type, str(medalDict.get('rank'))]) medalDict['isEpic'] = type in ACHIEVEMENTS_WITH_RIBBON if medalDict['type'] in ACHIEVEMENTS: pData['achievementsRight'].append(medalDict) else: pData['achievementsLeft'].append(medalDict) pData['achievementsRight'].sort(key=lambda k: k['isEpic'], reverse=True) return
def __populateTeamsData(self, pData, playersData, vehiclesData, battleType): squads = {1: {}, 2: {}} stat = {1: [], 2: []} lastSquadId = 0 squadManCount = 0 playerSquadId = 0 playerDBID = pData.get('accountDBID') for pId, pInfo in playersData.iteritems(): row = None for vId, vInfo in vehiclesData.iteritems(): if pId == vInfo.get('accountDBID'): row = pInfo.copy() row.update(vInfo) row['vehicleId'] = vId row['damageAssisted'] = row.get('damageAssistedTrack', 0) + row.get('damageAssistedRadio', 0) row['statValues'] = self.__populateStatValues(row) health = vInfo.get('health', 0) percents = 0 if health > 0: percents = math.ceil(health * 100 / float(health + vInfo.get('damageReceived', 0))) row['healthPercents'] = percents row['vehicleFullName'], row['vehicleName'], row['bigTankIcon'], row['tankIcon'], row['balanceWeight'] = self.__getVehicleData(vInfo.get('typeCompDescr', None)) row['realKills'] = vInfo.get('kills', 0) - vInfo.get('tkills', 0) achievements = tuple(row.get('achievements', [])) row['medalsCount'] = len(achievements) achievementsList = [] for achievementId in achievements: medalDict = getMedalDict(DB_ID_TO_RECORD[achievementId][1], 0) medalDict['unic'] = True medalDict['isEpic'] = medalDict['type'] in ACHIEVEMENTS_WITH_RIBBON achievementsList.append(medalDict) achievementsList.sort(key=lambda k: k['isEpic'], reverse=True) row['achievements'] = achievementsList killerID = row.get('killerID', 0) deathReason = row.get('deathReason', -1) if deathReason > -1: row['vehicleStateStr'] = i18n.makeString('#battle_results:common/vehicleState/dead{0}'.format(deathReason)) if killerID: killerVehicle = vehiclesData.get(killerID, dict()) killerPlayerId = killerVehicle.get('accountDBID', None) row['vehicleStateStr'] = '{0} ({1})'.format(row['vehicleStateStr'], self.__getPlayerName(killerPlayerId, playersData)) else: row['vehicleStateStr'] = '#battle_results:common/vehicleState/alive' break if row is None: row = pInfo.copy() row['playerId'] = pId row['userName'] = pInfo.get('name') row['playerClan'] = self.__getPlayerClan(pId, playersData) row['playerName'] = self.__getPlayerName(pId, playersData) row['isIGR'] = pInfo.get('igrType') != IGR_TYPE.NONE row['playerInfo'] = {} row['isSelf'] = playerDBID == pId if playerDBID == pId: playerSquadId = row.get('prebattleID', 0) team = row['team'] prebattleID = row.get('prebattleID', 0) if battleType == ARENA_BONUS_TYPE.REGULAR and prebattleID: if not lastSquadId or lastSquadId != prebattleID: squadManCount = 1 lastSquadId = prebattleID else: squadManCount += 1 if prebattleID not in squads[team].keys(): squads[team][prebattleID] = 1 else: squads[team][prebattleID] += 1 stat[team].append(row) if battleType == ARENA_BONUS_TYPE.REGULAR: squadsSorted = IS_DEVELOPMENT and not squadManCount == len(playersData) and dict() squadsSorted[1] = sorted(squads[1].iteritems(), cmp=lambda x, y: cmp(x[0], y[0])) squadsSorted[2] = sorted(squads[2].iteritems(), cmp=lambda x, y: cmp(x[0], y[0])) squads[1] = [ id for id, num in squadsSorted[1] if 1 < num < 4 ] squads[2] = [ id for id, num in squadsSorted[2] if 1 < num < 4 ] for team in (1, 2): data = sorted(stat[team], cmp=self.__vehiclesComparator) sortIdx = len(data) for item in data: item['vehicleSort'] = sortIdx sortIdx -= 1 if battleType == ARENA_BONUS_TYPE.REGULAR: item['isOwnSquad'] = IS_DEVELOPMENT and not squadManCount == len(playersData) and (playerSquadId == item.get('prebattleID') if playerSquadId != 0 else False) item['squadID'] = squads[team].index(item.get('prebattleID')) + 1 if item.get('prebattleID') in squads[team] else 0 else: item['squadID'] = 0 item['isOwnSquad'] = False return (stat[pData.get('team')], stat[pData.get('team') % 2 + 1])