Esempio n. 1
0
    def __onNewAvatarsInfo(self, argStr):
        newAvatarsList = translateDictThroughAnother(
            wgPickle.loads(wgPickle.FromServerToClient, argStr),
            NEW_AVATARS_INFO_KEYS_INVERT_DICT, True)
        LOG_INFO('__onNewAvatarsInfo', self.__ownerID,
                 [avatarData['avatarID'] for avatarData in newAvatarsList])
        LOG_INFO('INFO extUpgrades',
                 [(avatarData['avatarID'], avatarData['extUpgrades'])
                  for avatarData in newAvatarsList])
        for avatarData in newAvatarsList:
            avatarID = avatarData['avatarID']
            airplaneInfo = avatarData['airplaneInfo']
            currentOwner = None
            avatarData['planeTypeRank'] = dict(avatarData['planeTypeRank'])
            avatarPrevInfo = self.avatarInfos.get(avatarID, None)
            if not avatarPrevInfo:
                self.avatarInfos[avatarID] = avatarData
            else:
                if 'airplaneInfo' in avatarPrevInfo and avatarPrevInfo[
                        'airplaneInfo']['globalID'] != airplaneInfo['globalID']:
                    self.onBeforePlaneChanged(avatarID)
                    currentOwner = self.__destroyControllers(avatarPrevInfo)
                self.avatarInfos[avatarID].update(avatarData)
            extUpgrades = dict(avatarData['extUpgrades'])
            pilotUpgradeId = extUpgrades.get(LOGICAL_PART.PILOT, 1)
            controllersData = self.createControllers(
                avatarID,
                airplaneInfo['globalID'],
                camouflage=airplaneInfo['camouflage'],
                decals=airplaneInfo['decals'],
                pilotUpgradeId=pilotUpgradeId)
            if currentOwner:
                currentOwner.registerControllers(controllersData)
                self.onAvatarChangedPlane(currentOwner.id)
                if currentOwner == BigWorld.player():
                    self.onRecreateAvatar()
            avatarInfo = self.avatarInfos[avatarID]
            if avatarInfo['isNPC']:
                if avatarInfo['NPCType'] == ACNPCTypes.Bomber:
                    avatarInfo['playerName'] = localizeLobby(
                        avatarInfo['playerName'])
                elif avatarInfo['NPCType'] == ACNPCTypes.Defender:
                    avatarInfo['playerName'] = localizeHUD(
                        avatarInfo['playerName'])
            else:
                avatarInfo['playerName'] = getBotName(
                    avatarData['playerName'],
                    getAirplaneConfiguration(airplaneInfo['globalID']).planeID)
            avatarInfo['maxHealth'] = avatarData['maxHealth']
            avatarInfo['equipment'] = avatarData['equipment']
            if avatarID == BigWorld.player().id:
                LOG_TRACE('ClientArena: VOIP.initialize()')
                wasInit = bool(VOIP.api())
                VOIP.initialize(avatarInfo['databaseID'])
                if not wasInit:
                    VOIP.api().onEnterArenaScreen()

        self.__sortAvatars()
        for ids in self.__sortedAvatarsIDs.values():
            for i, avatarID in enumerate(ids):
                self.avatarInfos[avatarID]['airplaneInfo']['decals'][4] = i + 1
                self.avatarInfos[avatarID][
                    'modelManipulator'].surface.setDecalsByIds(
                        self.avatarInfos[avatarID]['airplaneInfo']
                        ['camouflage'],
                        self.avatarInfos[avatarID]['airplaneInfo']['decals'])

        teamMembers = dict()
        for avatarID, info in self.avatarInfos.iteritems():
            if info['teamIndex'] == BigWorld.player().teamIndex:
                teamMembers[info['databaseID']] = avatarID

        VOIP.api().unsubscribeMemberStateObserversByType(
            consts.VOIP.MEMBER_STATUS_OBSERVER_TYPES.ARENA_HUD)
        VOIP.api().subscribeMemberStateObserver(
            consts.VOIP.MEMBER_STATUS_OBSERVER_TYPES.ARENA_HUD, teamMembers)
        self.__avatarsDataReceived = True
        self.onNewAvatarsInfo(newAvatarsList)
        return