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