def __vehiclesComparator(self, item, other): res = 0 iKiller = item.get('killerID', 0) cd = item.get('typeCompDescr') if cd is not None: iType = vehicles_core.getVehicleType(cd) iLevel = iType.level if iType else -1 iWeight = VEHICLE_BATTLE_TYPES_ORDER_INDICES.get(set(VEHICLE_CLASS_TAGS.intersection(iType.tags)).pop(), 10) if iType else 10 else: iLevel = -1 iWeight = 10 oKiller = other.get('killerID', 0) cd = other.get('typeCompDescr') if cd is not None: oType = vehicles_core.getVehicleType(other.get('typeCompDescr', None)) oLevel = oType.level if oType else -1 oWeight = VEHICLE_BATTLE_TYPES_ORDER_INDICES.get(set(VEHICLE_CLASS_TAGS.intersection(oType.tags)).pop(), 10) if oType else 10 else: oLevel = -1 oWeight = 10 if iKiller == 0 and oKiller == 0 or iKiller != 0 and oKiller != 0: res = cmp(oLevel, iLevel) or cmp(iWeight, oWeight) or cmp(item.get('vehicleName', ''), other.get('vehicleName', '')) elif not iKiller: res = -1 else: res = 1 return res
def update(self, vData): self.vName = vData['vehicleType'].type.shortUserString vId = vData['vehicleType'].type.id self.vId = (vId[0] << 4) | (vId[1] << 8) self.vLevel = vData['vehicleType'].type.level self.maxHealth = vData['vehicleType'].maxHealth self.vIcon = vData['vehicleType'].type.name.replace(':', '-') self.vn = vData['vehicleType'].type.name self.vn = self.vn[self.vn.find(':')+1:].upper() self.vType = set(VEHICLE_CLASS_TAGS.intersection(vData['vehicleType'].type.tags)).pop() self.team = vData['team'] - 1
def update(self, vData): self.vId = vData['vehicleType'].type.compactDescr self.vLevel = vData['vehicleType'].type.level self.maxHealth = vData['vehicleType'].maxHealth self.vIcon = vData['vehicleType'].type.name.replace(':', '-') #self.vn = vData['vehicleType'].type.name #self.vn = self.vn[self.vn.find(':')+1:].upper() self.vType = set(VEHICLE_CLASS_TAGS.intersection(vData['vehicleType'].type.tags)).pop() self.team = vData['team'] self.alive = vData['isAlive'] self.ready = vData['isAvatarReady']
def update(self, vData): self.vName = vData['vehicleType'].type.shortUserString vId = vData['vehicleType'].type.id self.vId = (vId[0] << 4) | (vId[1] << 8) self.vLevel = vData['vehicleType'].type.level self.maxHealth = vData['vehicleType'].maxHealth self.vIcon = vData['vehicleType'].type.name.replace(':', '-') self.vn = vData['vehicleType'].type.name self.vn = self.vn[self.vn.find(':')+1:].upper() self.vType = set(VEHICLE_CLASS_TAGS.intersection(vData['vehicleType'].type.tags)).pop() self.team = vData['team'] self.alive = vData['isAlive'] self.ready = vData['isAvatarReady']
def __updatePlayers(self, *args): if self.__needArenaTypeUpdate: arena = getattr(BigWorld.player(), 'arena', None) if arena: descExtra = getPrebattleFullDescription(arena.extraData or {}) if not descExtra: arenaSubType = getArenaSubTypeName(BigWorld.player().arenaTypeID) if arenaSubType == 'assault': team = getattr(BigWorld.player(), 'team', None) if team: arenaSubType += '1' if isBaseExists(BigWorld.player().arenaTypeID, team) else '2' self.as_setBattleTypeFrameNameS(arenaSubType) self.__needArenaTypeUpdate = False stat = {1: [], 2: []} squads = {1: {}, 2: {}} player = BigWorld.player() if player is None: return elif self.__arena is None: return else: vehicles = self.__arena.vehicles userGetter = self.usersStorage.getUser for vId, vData in vehicles.items(): team = vData['team'] if 'name' in vData: name = g_battleContext.getFullPlayerName(vData, showVehShortName=False) else: name = i18n.makeString('#ingame_gui:players_panel/unknown_name') if vData['vehicleType'] is not None: vShortName = vData['vehicleType'].type.shortUserString vName = vData['vehicleType'].type.userString vIcon = self.CONTOUR_ICONS_MASK % {'unicName': vData['vehicleType'].type.name.replace(':', '-')} vType = set(VEHICLE_CLASS_TAGS.intersection(vData['vehicleType'].type.tags)).pop() else: vName = vShortName = i18n.makeString('#ingame_gui:players_panel/unknown_vehicle') vIcon = self.CONTOUR_ICONS_MASK % {'unicName': 'unknown'} vType = 100 if vData['isAlive']: isAlive = vData['isAvatarReady'] vehActions = VehicleActions.getBitMask(vData.get('events', {})) if vData['prebattleID']: if vData['prebattleID'] not in squads[team].keys(): squads[team][vData['prebattleID']] = 1 else: squads[team][vData['prebattleID']] += 1 user = userGetter(vData['accountDBID']) isMuted = user and user.getRoster() & USERS_ROSTER_VOICE_MUTED != 0 else: isMuted = False stat[team].append([name, vIcon, vShortName, not isAlive, vId, vData['prebattleID'], vType, vName, not vData['isAlive'], vData['name'], vData['accountDBID'], isMuted, vehActions, self.app.voiceChatManager.isPlayerSpeaking(vData['accountDBID']), vData['isTeamKiller'], vData['vehicleType'].level, vData['igrType'], vData['clanAbbrev']]) squadsSorted = 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])) squadsFiltered = dict() squadsFiltered[1] = [ id for id, num in squadsSorted[1] if 1 < num < 4 and self.__arena.guiType == constants.ARENA_GUI_TYPE.RANDOM ] squadsFiltered[2] = [ id for id, num in squadsSorted[2] if 1 < num < 4 and self.__arena.guiType == constants.ARENA_GUI_TYPE.RANDOM ] playerVehicleID = -1 if hasattr(player, 'playerVehicleID'): playerVehicleID = player.playerVehicleID playerSquadID = -1 for team in (1, 2): data = sorted(stat[team], cmp=_playerComparator) for item in data: if playerVehicleID == item[4]: playerSquadID = squadsFiltered[team].index(item[5]) + 1 if item[5] in squadsFiltered[team] else 0 break result = {'playerID': playerVehicleID, 'squadID': playerSquadID, 'team1': list(), 'team2': list()} for team in (1, 2): thisTeam = 'team2' thisTeamMembers = list() data = sorted(stat[team], cmp=_playerComparator) for item in data: item[5] = squadsFiltered[team].index(item[5]) + 1 if item[5] in squadsFiltered[team] else 0 if item[9] == player.name and result['playerID'] == -1 or item[4] == playerVehicleID: result['playerID'] = item[4] thisTeam = 'team1' self.setTeams(team) if not self.__winTextInit: self.__winTextInit = True teamHasBase = 1 if isBaseExists(BigWorld.player().arenaTypeID, team) else 2 winText = getBattleSubTypeWinText(BigWorld.player().arenaTypeID, teamHasBase) self.as_setWinTextS(winText) thisTeamMembers.append({'id': item[10], 'muted': item[11], 'playerID': item[4], 'label': item[0], 'icon': item[1], 'vehicle': item[2], 'enabled': not item[3], 'squad': item[5], 'vehAction': item[12], 'speak': item[13], 'isTeamKiller': item[14], 'isIGR': item[16] != constants.IGR_TYPE.NONE, 'clanAbbrev': item[17]}) result[thisTeam] = thisTeamMembers self.as_setTeamValuesS(result) return