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
Esempio n. 2
0
 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
Esempio n. 3
0
 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']
Esempio n. 4
0
 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']
Esempio n. 5
0
    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