コード例 #1
0
 def _updatePlayerPlaneScoresData(self):
     avatarInfo = self._clientArena.avatarInfos[self._bigWorld.player().id]
     economics = avatarInfo['economics']
     planeTypeRanks = avatarInfo['planeTypeRank']
     pointsByPlanes = economics['pointsByPlanes']
     if not pointsByPlanes:
         globalID = avatarInfo['airplaneInfo']['globalID']
         planeID = self._planesConfigurationsDB.getAirplaneConfiguration(
             globalID).planeID
         pointsByPlanes = [(planeID, 0)]
     for planeID, battlePoints in pointsByPlanes:
         planeData = self._db.getAircraftData(planeID)
         planeType = planeData.airplane.planeType
         scoreItem = self._model.planeScoresData.first(
             lambda e: e.planeID.get() == planeID)
         if scoreItem:
             scoreItem.battlePoints = battlePoints
             scoreItem.rankID = planeTypeRanks[planeType]
         else:
             self._model.planeScoresData.append(
                 planeID=planeID,
                 planeType=planeType,
                 planeName=localizeAirplane(planeData.airplane.name),
                 battlePoints=battlePoints,
                 rankID=planeTypeRanks[planeType])
コード例 #2
0
def getLobbyAirplane(aircraftID):
    aircraftID = int(aircraftID)
    airplaneData = db.DBLogic.g_instance.getAircraftData(aircraftID)
    if airplaneData is None:
        LOG_ERROR('updateCarouselResponse. plane is wrong. Airplane = ', aircraftID)
        return
    else:
        nationID = db.DBLogic.g_instance.getNationIDbyAircraftID(aircraftID)
        airplane = LobbyAirplane()
        import BWPersonality
        inv = BWPersonality.g_lobbyCarouselHelper.inventory
        try:
            airplane.nationID = nationID
            airplane.planeID = aircraftID
            airplane.name = localizeAirplane(airplaneData.airplane.name)
            airplane.longName = localizeAirplaneLong(airplaneData.airplane.name)
            if airplaneData.airplane.options.isDev:
                airplane.longName += ' (Dev)'
            airplane.hudIconPath = airplaneData.airplane.hudIcoPath if airplaneData.airplane else 'n/a'
            airplane.planeIconPath = airplaneData.airplane.iconPath if airplaneData.airplane else 'n/a'
            airplane.previewIconPath = airplaneData.airplane.previewIconPath if airplaneData.airplane else 'n/a'
            airplane.nationFlagPath = db.DBLogic.g_instance.getAircraftFlagPath(airplaneData.airplane.name)
            airplane.level = airplaneData.airplane.level if airplaneData.airplane else 0
            airplane.levelRomanNum = airplane.level
            airplane.mass = 0.0
            airplane.hitPoints = 0.0
            airplane.type = localizeLobby(PREBATTLE_PLANE_TYPE_NAME[airplaneData.airplane.planeType])
            airplane.isPremium = db.DBLogic.g_instance.isPlanePremium(aircraftID)
            airplane.isElite = inv.isAircraftElite(aircraftID)
            airplane.experience = inv.getAircraftExp(aircraftID)
            airplane.planeType = airplaneData.airplane.planeType
            airplane.isResearched = inv.isAircraftOpened(aircraftID)
            airplane.isBought = inv.isAircraftBought(aircraftID)
            airplane.updatePrice()
            airplane.researchExp = 0
            upgrade = db.DBLogic.g_instance.upgrades.get(airplaneData.airplane.name, None)
            if upgrade is not None and upgrade.variant[0].parentUpgrade:
                airplane.researchExp = int(upgrade.variant[0].parentUpgrade[0].experience)
            planeStatus = airplane.isPremium * PLANE_CLASS.PREMIUM or airplane.isElite * PLANE_CLASS.ELITE or PLANE_CLASS.REGULAR
            airplane.planeTypeIconPath = PLANE_TYPE_ICO_PATH.icon(airplane.planeType, planeStatus)
            upgradesList, aircraftList = db.DBLogic.g_instance.getAircraftUpgrades(aircraftID)
            defaultConfiguration = _airplanesConfigurations_db.getDefaultAirplaneConfiguration(aircraftID)
            upgradeInfoMaps = []
            for upgrade in upgradesList:
                info = inv.getUpgradeInfoMap(aircraftID, upgrade)
                info['isInstalled'] = any((m == upgrade.name for m in defaultConfiguration.modules))
                upgradeInfoMaps.append(info)

            airplane.modules = LobbyAirplaneModules(aircraftID, upgradeInfoMaps)
            airplane.weapons = LobbyAirplaneWeapons(aircraftID, None, list(defaultConfiguration.weaponSlots))
            from gui.Scaleform.LobbyAirplanePresets import LobbyAirplanePresets
            airplane.presets = LobbyAirplanePresets(aircraftID, airplane.modules, airplane.weapons, None, [ preset.name for preset in db.DBLogic.g_instance.getAircraftPresetsListByName(airplaneData.airplane.name) ], db.DBLogic.g_instance.getAircraftDefaultPresetFromName(airplaneData.airplane.name).name)
            airplane.presets.fillPresets()
        except:
            LOG_CURRENT_EXCEPTION()
            return

        from Account import PLANE_BLOCK_TYPE
        airplane.blockType = PLANE_BLOCK_TYPE.get(airplane.planeID, BLOCK_TYPE.UNLOCKED)
        return airplane
コード例 #3
0
    def __sortAvatars(self):
        teams = dict()
        for avatarInfo in self.avatarInfos.values():
            level = avatarInfo['settings'].airplane.level
            teamIndex = avatarInfo['teamIndex']
            name = localizeAirplane(avatarInfo['settings'].airplane.name)
            if teamIndex not in teams:
                teams[teamIndex] = dict()
            if level not in teams[teamIndex]:
                teams[teamIndex][level] = dict()
            if name not in teams[teamIndex][level]:
                teams[teamIndex][level][name] = list()
            teams[teamIndex][level][name].append(avatarInfo)

        sortedList = list()
        for team in teams.values():
            for level in team.values():
                for name in level.values():
                    name.sort(key=lambda avatarInfo: avatarInfo['playerName'])

            sortedLevelsList = sorted(team.keys(), None, None, True)
            for levelID in sortedLevelsList:
                sortedPlaneNameList = sorted(team[levelID].keys())
                for planeName in sortedPlaneNameList:
                    sortedList.extend(team[levelID][planeName])

        for avatarInfo in sortedList:
            if avatarInfo['teamIndex'] not in self.__sortedAvatarsIDs:
                self.__sortedAvatarsIDs[avatarInfo['teamIndex']] = list()
            self.__sortedAvatarsIDs[avatarInfo['teamIndex']].append(
                avatarInfo['avatarID'])

        return
コード例 #4
0
 def _updatePlaneIfChanged(self, entity, avatarModel):
     settings = entity.settings
     newPlaneName = localizeAirplane(settings.airplane.name)
     if newPlaneName != avatarModel.planeName.get():
         avatarModel.planeName = newPlaneName
         avatarModel.planeType = settings.airplane.planeType
         avatarModel.planeLevel = settings.airplane.level
コード例 #5
0
 def _updatePlaneScoresData(self, avatarID, *args, **kwargs):
     """Update score data for all avatar planes.
      Is called when avatar rank is changed and when new battle points received from server
     """
     avatarInfo = self._clientArena.avatarInfos[avatarID]
     economics = avatarInfo['economics']
     planeTypeRanks = avatarInfo['planeTypeRank']
     pointsByPlanes = economics['pointsByPlanes']
     if not pointsByPlanes:
         globalID = avatarInfo['airplaneInfo']['globalID']
         planeID = self._planeConfigurationsDB.getAirplaneConfiguration(
             globalID).planeID
         pointsByPlanes = [(planeID, 0)]
     avatarItem = self._model.avatars.first(
         lambda e: e.id.get() == avatarID)
     if not avatarItem:
         return
     for planeID, battlePoints in pointsByPlanes:
         planeData = self._db.getAircraftData(planeID)
         planeType = planeData.airplane.planeType
         scoreItem = avatarItem.planeScoresData.first(
             lambda e: e.planeID.get() == planeID)
         if scoreItem:
             scoreItem.battlePoints = battlePoints
             scoreItem.rankID = planeTypeRanks[planeType]
         else:
             avatarItem.planeScoresData.append(
                 planeID=planeID,
                 planeType=planeType,
                 planeName=localizeAirplane(planeData.airplane.name),
                 battlePoints=battlePoints,
                 rankID=planeTypeRanks[planeType])
コード例 #6
0
def convertMessage(message, players, senderInfo, targetID):
    if not message or message[0] == '!':
        return message
    else:
        message = localizeBotChat(message)
        if not message:
            return ''
        lastPlayerName = ''
        botName = ''
        planeName = ''
        team = senderInfo['teamIndex']
        isAlive = lambda e: e['stats']['flags'] & AvatarFlags.DEAD == 0
        targetInfo = players.get(targetID, None)
        if targetInfo:
            localPlaneName = localizeAirplane(
                targetInfo['settings'].airplane.name)
            botName = targetInfo['playerName']
            planeName = localPlaneName
        allPlayers = []
        aliveAllyPlayers = []
        for id_, player in players.iteritems():
            if player['classID'] == EntitySupportedClasses.AvatarBot:
                continue
            allPlayers.append(player)
            if player['teamIndex'] == team and isAlive(player):
                aliveAllyPlayers.append(player)

        randomPlayerName = random.choice(allPlayers)['playerName']
        if len(aliveAllyPlayers) > 0:
            lastPlayerName = random.choice(aliveAllyPlayers)['playerName']
        result = message.format(bot_name=botName,
                                plane_name=planeName,
                                random_player_name=randomPlayerName,
                                last_player_name=lastPlayerName)
        return result
コード例 #7
0
 def __call__(self, account, ob, **kw):
     adaptedOb = super(IPlaneDescriptionAdapter,
                       self).__call__(account, ob, **kw)
     if ob is None:
         return adaptedOb
     else:
         if ob.description:
             adaptedOb['description'] = localizeAirplaneAny(
                 ob.description.textDescription)
         dbInstance = db.DBLogic.g_instance
         adaptedOb['presetsList'] = airplanesConfigurationsList[ob.id]
         adaptedOb['defaultPreset'] = airplanesDefaultConfigurations[ob.id]
         adaptedOb['level'] = ob.level
         adaptedOb['icoPath'] = ob.iconPath
         adaptedOb['bigIcoPath'] = ob.previewIconPath
         adaptedOb['hudIcoPath'] = ob.hudIcoPath
         adaptedOb['treeIcoPath'] = ob.treeIconPath
         adaptedOb[
             'battleLoadingIcoPath'] = ob.battleLoadingIconPath if hasattr(
                 ob, 'battleLoadingIconPath') else ob.previewIconPath
         adaptedOb['middleName'] = localizeAirplaneMid(ob.name)
         adaptedOb['name'] = localizeAirplane(ob.name)
         adaptedOb['longName'] = localizeAirplaneLong(ob.name)
         adaptedOb['isExclusive'] = dbInstance.isPlaneExclusive(ob.id)
         adaptedOb['isTest'] = getattr(ob.options, 'isTest', False)
         if hasattr(ob, 'tags'):
             adaptedOb['tagsList'] = [[localizeTooltips(x.name), x.type]
                                      for x in ob.tags.tag]
         else:
             adaptedOb['tagsList'] = []
         return adaptedOb
コード例 #8
0
 def _requestPlaneData(self, planeID):
     data = self._db.getAircraftData(planeID).airplane
     isPremium = self._db.isPlanePremium(planeID)
     isElite = planeID in self._playerAvatar.elitePlanes
     planeStatus = PLANE_CLASS.PREMIUM if isPremium else isElite * PLANE_CLASS.ELITE or PLANE_CLASS.REGULAR
     self._model.planes.append(
         planeID=planeID,
         planeNameShort=localizeAirplane(data.name),
         planeLevel=data.level,
         prevIconPath=data.iconPath,
         planeType=data.planeType,
         nation=self._db.getNationIDbyName(data.country),
         planeStatus=planeStatus,
         typeIconPath=PLANE_TYPE_ICO_PATH.iconHud(data.planeType,
                                                  planeStatus))
     LOG_DEBUG(' TEST PLANE DATA:  _requestPlaneData: ', planeID,
               localizeAirplane(data.name))
コード例 #9
0
    def __getResearchAircraftVOfromMap(self, aircraftsDataMap):
        airplaneID = aircraftsDataMap['id']
        airplaneData = db.DBLogic.g_instance.getAircraftData(airplaneID)
        if airplaneData is None:
            LOG_ERROR('ResearchTreeHelper::__getResearchAircraftVOfromMap. plane is wrong. Airplane = ', airplaneID)
            return
        else:
            shortName = localizeAirplane(airplaneData.airplane.name)
            longName = localizeAirplaneLong(airplaneData.airplane.name)
            if airplaneData.airplane.options.isDev:
                longName = ''.join([longName, ' (Dev)'])
                shortName = ''.join([shortName, ' (Dev)'])
            parentIDs = []
            requiredResearches = dict()
            if not (self.__lobbyCarouselHelper.inventory.isAircraftOpened(airplaneID) or db.DBLogic.g_instance.isPlanePremium(airplaneID)):
                from LobbyModulesTreeHelper import ResearchVO

                def getUpgradeGroupName(planeID, upgrade):
                    if upgrade.type in UPGRADE_TYPE.MODULES:
                        return localizeComponents(UPGRADE_TYPE.DESCRIPTION_MAP[upgrade.type])
                    if upgrade.type in UPGRADE_TYPE.WEAPON:
                        return localizeLobby('AMMO_SLOT_' + db.DBLogic.g_instance.getSlotsWeaponUpgrade(planeID, upgrade)[0].name)

                db_upgrades = db.DBLogic.g_instance.upgrades
                for parentPlaneID, toResearch, _ in self.__lobbyCarouselHelper.inventory.calculateRequiredUpgradesForAircraft(airplaneID, None, onlyResearched=False):
                    parentIDs.append(parentPlaneID)
                    needResources = self.__lobbyCarouselHelper.inventory.calculateRequiredResourcesForUpgradePresset(parentPlaneID, toResearch, [])
                    requiredResearches[parentPlaneID] = [ ResearchVO(localizeUpgrade(db_upgrades[u]), getUpgradeGroupName(parentPlaneID, db_upgrades[u]), needResources[u]['exp']) for u in toResearch ]

            isPremium = aircraftsDataMap['isPremium']
            isElite = aircraftsDataMap['isElite']
            planeStatus = isPremium * PLANE_CLASS.PREMIUM or isElite * PLANE_CLASS.ELITE or PLANE_CLASS.REGULAR
            researchAircraftVO = ResearchAircraftVO()
            researchAircraftVO.id = airplaneID
            researchAircraftVO.longName = longName
            researchAircraftVO.shortName = shortName
            researchAircraftVO.icoTypePath = PLANE_TYPE_ICO_PATH.icon(airplaneData.airplane.planeType, planeStatus)
            researchAircraftVO.icoPath = airplaneData.airplane.treeIconPath if airplaneData.airplane else 'n/a'
            researchAircraftVO.isResearched = aircraftsDataMap['isResearched'] or isPremium
            researchAircraftVO.isResearchAvailable = aircraftsDataMap['isResearchAvailable'] or isPremium
            researchAircraftVO.isBought = aircraftsDataMap['isBought']
            researchAircraftVO.isElite = aircraftsDataMap['isElite']
            researchAircraftVO.isPremium = isPremium
            researchAircraftVO.reqiuredExperience = aircraftsDataMap['reqiuredExperience']
            researchAircraftVO.reqiuredExperiencePlane = aircraftsDataMap['reqiuredExperiencePlane']
            researchAircraftVO.gotExperience = aircraftsDataMap['gotExperience']
            researchAircraftVO.priceCredits = aircraftsDataMap['priceCredits']
            researchAircraftVO.priceGold = aircraftsDataMap['priceGold']
            researchAircraftVO.researchedParentID = aircraftsDataMap['researchedParentID']
            researchAircraftVO.level = airplaneData.airplane.level
            researchAircraftVO.parentName = aircraftsDataMap['parent']
            researchAircraftVO.parentIDs = parentIDs
            researchAircraftVO.blockType = aircraftsDataMap['blockType']
            researchAircraftVO.sellPrice = aircraftsDataMap['sellPrice']
            researchAircraftVO.requiredResearches = requiredResearches
            return researchAircraftVO
コード例 #10
0
 def __convertAirplaneIdToVO(self, planeID):
     botVO = BotVO()
     botVO.planeID = planeID
     planeSettings = db.DBLogic.g_instance.getAircraftData(planeID).airplane
     botVO.planeLevel = planeSettings.level
     botVO.planeType = planeSettings.planeType
     botVO.planeName = localizeAirplane(planeSettings.name)
     botVO.planeIcoPath = planeSettings.hudIcoPath
     botVO.planeTypeIcoPath = getHudPlaneIcon(planeSettings.planeType)
     return botVO
コード例 #11
0
 def _onNewBomber(self, id, avatarInfo):
     LOG_DEBUG('EntitySource :: _onNewBomber', id)
     settings = avatarInfo.get('settings')
     return self._model.bombers.append(
         id=id,
         planeName=localizeAirplane(settings.airplane.name),
         playerName=avatarInfo['playerName'],
         teamIndex=getClientTeamIndex(avatarInfo['teamIndex'],
                                      self._playerAvatar.teamIndex),
         maxHealth=int(ceil(avatarInfo['maxHealth'])),
         inWorld=False)
コード例 #12
0
 def __init__(self, aircraftID, freeExp, isPremium, isElite):
     airplaneData = db.DBLogic.g_instance.getAircraftData(aircraftID)
     self.aircraftID = aircraftID
     self.planeName = localizeAirplane(airplaneData.airplane.name)
     self.planeIcoPath = airplaneData.airplane.iconPath if airplaneData.airplane else 'n/a'
     self.planeType = airplaneData.airplane.planeType
     self.freeExp = freeExp
     self.isElite = isElite
     self.isPremium = isPremium
     planeStatus = self.isPremium * PLANE_CLASS.PREMIUM or self.isElite * PLANE_CLASS.ELITE or PLANE_CLASS.REGULAR
     self.planeTypeIcoPath = PLANE_TYPE_ICO_PATH.icon(self.planeType, planeStatus)
コード例 #13
0
 def _fillPlaneData(self, *args, **kwargs):
     avatarInfo = self._clientArena.getAvatarInfo(self._playerAvatar.id)
     settings = avatarInfo['settings']
     self._model.planeName = localizeAirplane(settings.airplane.name)
     self._model.planeLevel = settings.airplane.level
     self._model.planeGlobalID = self._playerAvatar.globalID
     self._model.id = self._playerAvatar.id
     self._model.planeType = settings.airplane.planeType
     self._model.teamIndex = self._playerAvatar.teamIndex
     if self._clientArena.isAllServerDataReceived():
         self._updatePlaneTypeRank()
コード例 #14
0
 def __showTextMessage(self,
                       senderID,
                       msgType,
                       messageStringID,
                       targetID,
                       message,
                       isHistory,
                       leaderType=-1,
                       isHTML=False):
     messageT = ChatMessageVO()
     messageT.msgType = msgType
     messageT.senderID = senderID
     messageT.message = message
     messageT.isHistory = isHistory
     messageT.leaderType = leaderType
     owner = BigWorld.player()
     clientArena = GameEnvironment.getClientArena()
     if owner and clientArena:
         avatarInfo = clientArena.getAvatarInfo(senderID)
         if avatarInfo:
             messageT.authorType = avatarInfo['settings'].airplane.planeType
             messageT.authorName = avatarInfo['playerName']
             messageT.vechicleName = localizeAirplane(
                 avatarInfo['settings'].airplane.name)
             if avatarInfo['classID'] == EntitySupportedClasses.AvatarBot:
                 messageT.authorName = messageT.authorName.replace(
                     '>', '&gt;').replace('<', '&lt;')
             messageT.authorClanAbbrev = avatarInfo['clanAbbrev']
             if avatarInfo['teamIndex'] == BigWorld.player().teamIndex:
                 squadType = SQUAD_TYPES().getSquadType(
                     SQUAD_TYPES().getSquadIDbyAvatarID(senderID), senderID)
                 if squadType == SQUAD_TYPES.OWN:
                     messageT.teamType = TEAM_TYPE.BATTLE_SQUAD
                 else:
                     messageT.teamType = TEAM_TYPE.BATTLE_ALLY
             else:
                 messageT.teamType = TEAM_TYPE.BATTLE_OPPONENT
         else:
             LOG_DEBUG('showTextMessage - avatarInfo is None', senderID,
                       msgType, messageStringID, targetID, message,
                       isHistory, leaderType)
         messageT.isOwner = messageT.senderID == owner.id
         if messageT.isOwner:
             messageT.authorName = localizeHUD('HUD_YOU_MESSAGE')
             messageT.authorClanAbbrev = ''
         if messageT.message and not isHTML:
             messageT.message = messageT.message.replace('>',
                                                         '&gt;').replace(
                                                             '<', '&lt;')
             if messageT.senderID == self.__lastMessage.senderID and messageT.msgType == self.__lastMessage.msgType and messageT.message == self.__lastMessage.message and messageT.time - self.__lastMessage.time < MESSAGE_SAME_COOLDOWN:
                 return
             self.__addChatMessage(messageT)
             self.__lastMessage = messageT
コード例 #15
0
 def _fillPlaneData(self, *args, **kwargs):
     avatarInfo = self._clientArena.getAvatarInfo(self._playerAvatar.id)
     playerGlobalID = self._playerAvatar.globalID
     settings = avatarInfo['settings']
     self._updateModelShootingDistance()
     self._model.planeName = localizeAirplane(settings.airplane.name)
     self._model.planeLevel = settings.airplane.level
     self._model.planeGlobalID = playerGlobalID
     self._model.planeType = settings.airplane.planeType
     self._model.planeTypeName = PREBATTLE_PLANE_TYPE_NAME[
         settings.airplane.planeType]
     self._model.planePreviewIcon = settings.airplane.previewIconPath
     self._model.planeId = self._playerAvatar.objTypeID
     self._model.planeStatus = self._getPlaneStatus()
     self._model.teamIndex = self._playerAvatar.teamIndex
     self._model.isReconnected = bool(self._playerAvatar.reconnected)
コード例 #16
0
 def __convertAccountMapToVO(self, accountMap, responseTime):
     accountVO = AccountVO()
     accountVO.id = accountMap['id']
     accountVO.name = accountMap['name']
     accountVO.clanAbbrev = accountMap['clanAbbrev']
     accountVO.blockType = accountMap['blockType']
     accountVO.status = accountMap['status']
     accountVO.teamID = accountMap['teamID']
     accountVO.isBot = accountMap['isBot']
     accountVO.isMe = False if self.__entityID is None else accountMap[
         'id'] == self.__entityID
     accountVO.difficulty = accountMap['difficulty']
     accountVO.difficultyIconPath = PREBATTLE_BOT_DIFFICULTY.ICON_PATH_MAP.get(
         accountVO.difficulty, '')
     if accountVO.isBot:
         if accountMap['planeID'] != -1:
             accountVO.name = getBotName(accountVO.name,
                                         accountMap['planeID'], None)
         else:
             accountVO.name = getBotName(accountVO.name, None,
                                         accountMap['planeCountry'])
     selectedAirplane = self.__lobbyCarouselHelper.getCarouselAirplaneSelected(
     )
     currentPlaneID = selectedAirplane.planeID if selectedAirplane else -1
     if accountVO.isMe and accountVO.teamID and accountMap['planeID'] != -1:
         if accountMap['planeID'] != currentPlaneID:
             BigWorld.callback(
                 1,
                 partial(self.__lobbyCarouselHelper.onSelectedPlaneID,
                         accountMap['planeID']))
             self.__account.call_1('hangar.setSelectedAircraftID',
                                   accountMap['planeID'])
     accountVO.planeID = currentPlaneID if accountMap[
         'planeID'] == -1 and accountVO.isMe else accountMap['planeID']
     if accountVO.planeID != UNDEFINED_PLANE:
         planeSettings = db.DBLogic.g_instance.getAircraftData(
             accountVO.planeID).airplane
         accountVO.planeLevel = planeSettings.level
         accountVO.planeName = localizeAirplane(planeSettings.name)
         accountVO.planeIcoPath = planeSettings.hudIcoPath
         accountVO.planeTypeIcoPath = getHudPlaneIcon(
             planeSettings.planeType)
         accountVO.planeType = planeSettings.planeType
     return accountVO
コード例 #17
0
 def setPlanes(self):
     for planeID in self._playerAvatar.availablePlanes:
         data = self._db.getAircraftData(planeID).airplane
         if data.planeType in self._availablePlaneTypes:
             isPremium = self._db.isPlanePremium(planeID)
             isElite = planeID in self._playerAvatar.elitePlanes
             isPrimary = planeID in self._playerAvatar.primaryPlanes
             planeStatus = PLANE_CLASS.PREMIUM if isPremium else isElite * PLANE_CLASS.ELITE or PLANE_CLASS.REGULAR
             self._model.planes.append(
                 planeID=planeID,
                 planeNameShort=localizeAirplane(data.name),
                 planeLevel=data.level,
                 iconPath=data.iconPath,
                 planeType=data.planeType,
                 nation=self._db.getNationIDbyName(data.country),
                 planeStatus=planeStatus,
                 isPrimary=isPrimary,
                 typeIconPath=PLANE_TYPE_ICO_PATH.iconHud(
                     data.planeType, planeStatus))
         self._model.availablePlaneTypes = self._getConvertPlanes()
コード例 #18
0
 def onSellPlaneResponse(self, resultID, aircraftID):
     """see AccountCommands.py for actual resultID format"""
     LOG_DEBUG('shop.sellPlaneResponse', resultID)
     if resultID == OPERATION_RETURN_CODE.SUCCESS:
         self.__lobbyCarouselHelper.removeCarouselAirplane(aircraftID)
         self.__lobbyCarouselHelper.inventory.syncAircraftsData(
             [aircraftID],
             partial(self.__sellPlaneResponse, resultID, aircraftID))
     else:
         if SyncOperationKeeper.getFlagStatus(FLAGS_CODE.SELL_PLANE):
             self.__lobby.call_1('shop.sellPlaneResponse', resultID)
             SyncOperationKeeper.stop(FLAGS_CODE.SELL_PLANE)
         if resultID == OPERATION_RETURN_CODE.FAILURE_MAX_SOLD_PLANES_PER_DAY_REACHED:
             msgHeader = localizeMessages('SYSTEM_MESSAGE_ERROR_HEADER')
             planeName = localizeAirplane(
                 db.DBLogic.g_instance.getAircraftName(aircraftID))
             msgData = localizeLobby('LOBBY_ERROR_SELL_LIMIT',
                                     plane=planeName)
             self.__lobby.showMessageBox(
                 msgHeader, msgData,
                 localizeOptions('SAVE_SETTINGS_BUTTON'), None, None, None,
                 False)
     return
コード例 #19
0
 def _addAvatarFromInfo(self, avatarInfo, id):
     settings = avatarInfo.get('settings')
     if not settings:
         globalID = avatarInfo['airplaneInfo']['globalID']
         import _airplanesConfigurations_db
         planeID = _airplanesConfigurations_db.getAirplaneConfiguration(
             globalID).planeID
         settings = self._db.getAircraftData(planeID)
     untypedName = avatarInfo.get('playerName', '')
     globalID = avatarInfo['airplaneInfo']['globalID']
     currentPlaneType = settings.airplane.planeType
     currentRankID = avatarInfo['planeTypeRank'][currentPlaneType]
     if type(untypedName) is unicode:
         playerName = untypedName
     else:
         playerName = unicode(untypedName, 'utf-8')
     return self._model.avatars.append(
         id=id,
         clanName=unicode(avatarInfo.get('clanAbbrev', '')),
         playerName=playerName,
         planeGlobalID=globalID,
         isDefender=bool(avatarInfo.get('defendSector')),
         isBot=bool(avatarInfo.get('databaseID') == 0),
         planeType=settings.airplane.planeType,
         planeName=localizeAirplane(settings.airplane.name),
         planeLevel=settings.airplane.level,
         previewIconPath=settings.airplane.previewIconPath,
         teamIndex=getClientTeamIndex(avatarInfo['teamIndex'],
                                      self._playerAvatar.teamIndex),
         squadIndex=avatarInfo['squadID'],
         maxHealth=int(ceil(avatarInfo['maxHealth'])),
         points=avatarInfo['economics']['totalBattlePoints'],
         inWorld=False,
         state=getLogicState(avatarInfo),
         isLost=checkLost(avatarInfo),
         rankID=currentRankID)
コード例 #20
0
 def _updateBestRankData(self):
     avatarInfo = self._clientArena.avatarInfos[self._player.id]
     bestPlaneID = avatarInfo['bestRankPlaneID']
     planeData = self._db.getAircraftData(bestPlaneID)
     planeType = planeData.airplane.planeType
     bestRankID = avatarInfo['planeTypeRank'][planeType]
     logger.debug('Best rank id = {0}, planeID = {1}'.format(
         bestRankID, bestPlaneID))
     self._model.bestPlane = localizeAirplane(planeData.airplane.name)
     self._model.bestClass = localizeLobby(
         PREBATTLE_PLANE_TYPE_NAME[planeType])
     self._model.bestPlaneType = planeType
     self._model.bestRank = bestRankID
     self._model.bestTasks.clean()
     for objective in self._player.coachManager.getPlaneTypeObjectives(
             planeType):
         self._model.bestTasks.append(
             id=objective.id,
             title=objective.model.client.name.locale,
             description=objective.model.client.description.locale,
             progress=objective.progressCurrent,
             maxProgress=objective.progressMax,
             value=objective.progressRawValue,
             requiredValue=objective.getNextProgressBound())
コード例 #21
0
 def __call__(self, account, ob, **kw):
     from Helpers.i18n import localizeAirplane
     ob = super(IPlaneNameAdapter, self).__call__(account, ob, **kw)
     if 'name' in ob and ob['name']:
         ob['name'] = localizeAirplane(ob['name'])
     return ob
コード例 #22
0
 def __checkEliteStatus(self, planeID, showMsg = True):
     """
     check and message elite status for planeID
     """
     airplaneData = db.DBLogic.g_instance.getAircraftData(planeID)
     if self.__lobbyCarouselHelper.inventory.isAircraftElite(planeID):
         self.__lobbyCarouselHelper.refreshAircraftData(planeID, True)
         if showMsg:
             self.__lobby.call_1('hangar.eliteAircraft', planeID, PLANE_TYPE_ICO_PATH.icon(airplaneData.airplane.planeType, PLANE_CLASS.ELITE), localizeAirplane(airplaneData.airplane.name))
コード例 #23
0
    def __call__(self, account, ob, **kw):
        if ob is None:
            return
        else:
            cmpUpgrade = None
            cmpUpgradeID = None
            weaponConfig = None
            slotID = None
            upgrade = None
            upgradeID = None
            plane = None
            _, typeList = splitIDTypeList(kw['idTypeList'])
            if isinstance(ob, list):
                for idx in xrange(0, len(typeList)):
                    if typeList[idx] == 'plane':
                        plane = ob[idx]
                    elif typeList[idx] == 'upgrade':
                        if upgradeID is None:
                            upgrade = ob[idx]
                            upgradeID = kw['idTypeList'][idx][0]
                        else:
                            cmpUpgrade = ob[idx]
                            cmpUpgradeID = kw['idTypeList'][idx][0]
                    elif typeList[idx] == 'weaponConfig':
                        weaponConfig = ob[idx]
                    elif typeList[idx] == 'weaponslot':
                        slotID = ob[idx].id

            else:
                upgrade = ob
            adaptedOb = super(IModuleDescriptionAdapter,
                              self).__call__(account, ob, **kw)
            if upgrade is not None:
                outName, specs, planesSet, shortDescription = getUpgradeSpecs(
                    upgrade, plane.id if plane is not None else None,
                    cmpUpgrade, slotID, weaponConfig)
            elif weaponConfig is None or slotID is None or cmpUpgradeID is None or cmpUpgrade.type not in UPGRADE_TYPE.WEAPON:
                return adaptedOb
            adaptedOb['configComparison'] = []
            adaptedOb['requiredModules'] = []
            dbInstance = db.DBLogic.g_instance
            cmpGlobalID = 0
            if cmpUpgradeID is not None:
                import BWPersonality
                lch = BWPersonality.g_lobbyCarouselHelper
                lobbyAirplane = lch.getCarouselAirplane(
                    plane.id) or getLobbyAirplane(plane.id)
                upgradeName = upgrade.name if upgrade is not None else None
                cmpName = cmpUpgrade.name if cmpUpgrade is not None else None
                if lobbyAirplane is not None:
                    upgrades = [
                        x['name']
                        for x in lobbyAirplane.modules.getInstalled()
                    ]
                    weaponList = lobbyAirplane.weapons.getInstalledWeaponsList(
                    )
                    if not upgrades:
                        planeConfig = airplanesConfigurations[
                            airplanesDefaultConfigurations[plane.id]]
                        upgrades = planeConfig.modules
                        weaponList = planeConfig.weaponSlots
                    cmpGlobalID, newUpgrades, newWeaponList = adjustPlaneConfig(
                        lobbyAirplane.planeID, upgrades, weaponList,
                        upgradeName, cmpName, slotID, weaponConfig)
                    oldGlobalID = db.DBLogic.createGlobalID(
                        lobbyAirplane.planeID, upgrades, weaponList)
                    requiredModules = getDiffModules(oldGlobalID, cmpGlobalID,
                                                     upgradeName,
                                                     (slotID, weaponConfig))
                    for upgradeName in requiredModules:
                        reqUpgrade = dbInstance.getUpgradeByName(upgradeName)
                        name, _, _, _ = getUpgradeSpecs(
                            reqUpgrade,
                            plane.id if plane is not None else None, None,
                            slotID, weaponConfig)
                        adaptedOb['requiredModules'].append(name)

                    cmpLobbyAirplane = lobbyAirplane.previewPreset(
                        newUpgrades, [{
                            'slot': x[0],
                            'configuration': x[1]
                        } for x in newWeaponList])
                    comparisonSpecs = cmpLobbyAirplane.getGroupedDescriptionFields(
                        True, lobbyAirplane, cmpGlobalID, False)
                    for el in comparisonSpecs:
                        for i, j in el.__dict__.iteritems():
                            if i != 'main':
                                continue
                            specObj = None
                            if j is not None:
                                specObj = j.__dict__
                            if specObj and specObj['comparisonValue']:
                                adaptedOb['configComparison'].append(specObj)

            if not adaptedOb['configComparison']:
                adaptedOb['configComparison'] = None
            if upgrade is not None:
                gunData = dbInstance.getGunData(upgrade.name)
                if gunData is None:
                    moduleType = localizeComponents(
                        MODULE_GROUP_NAME.get(
                            getattr(upgrade, 'moduleGroup', None),
                            MODULE_GROUP_NAME[upgrade.type]))
                else:
                    profileName = gunData.gunProfileName.upper()
                    if profileName == 'MACHINEGUN_SMALL':
                        profileName = 'MACHINE_GUN_LOW'
                    else:
                        profileName = profileName.replace(
                            'MACHINEGUN_SMALL', 'MACHINE_GUN')
                    profileName = profileName.replace('CANNON_HIGH_VULCAN',
                                                      'CANNON_HIGH')
                    moduleType = localizeLobby(
                        '{0}_DESCRIPTION'.format(profileName))
                adaptedOb['name'] = '{0} {1}'.format(moduleType, outName)
                adaptedOb['type'] = upgrade.type
                adaptedOb['description'] = shortDescription
                if hasattr(upgrade, 'level'):
                    adaptedOb['level'] = upgrade.level
                else:
                    adaptedOb['level'] = 0
                adaptedOb['specsList'] = [spec.__dict__ for spec in specs]
                adaptedOb['airplanesList'] = map(
                    lambda x: localizeAirplane(dbInstance.getAircraftName(x)),
                    filter(lambda x: x in planesSet,
                           dbInstance.getShopPlaneList()))
                adaptedOb['suitablePlaneIDs'] = list(planesSet)
                adaptedOb['icoPath'] = get48ModuleIconPath(
                    getattr(upgrade, 'iconPath', ICON_MODULE_DEFAULT_PATH))
                isArmoredTargetEffective = EFFECTIVE_AGAINST_ARMORED_OBJECTS.NORMAL
                if upgrade.type in [UPGRADE_TYPE.BOMB, UPGRADE_TYPE.ROCKET]:
                    isArmoredTargetEffective = EFFECTIVE_AGAINST_ARMORED_OBJECTS.IS_EFFECTIVE
                if upgrade.type == UPGRADE_TYPE.GUN:
                    isArmoredTargetEffective = EFFECTIVE_AGAINST_ARMORED_OBJECTS.NOT_EFFECTIVE if gunData.caliber < MIN_CALIBER else EFFECTIVE_AGAINST_ARMORED_OBJECTS.LOW_EFFECTIVE
                adaptedOb['armoredTargetEffective'] = isArmoredTargetEffective
                adaptedOb['buyAvailable'] = getattr(upgrade, 'buyAvailable',
                                                    True)
                if upgrade.type == UPGRADE_TYPE.GUN:
                    compData = gunData
                elif upgrade.type in UPGRADE_TYPE.SHELL:
                    compData = dbInstance.getComponentByName(
                        UPGRADE_TYPE_TO_COMPONENT_TYPE[upgrade.type],
                        upgrade.name)
                elif upgrade.type == UPGRADE_TYPE.TURRET:
                    turret = dbInstance.getTurretData(upgrade.name)
                    compData = dbInstance.getGunData(turret.hangarSimilarGun)
                else:
                    compData = None
                if compData is not None and hasattr(compData, 'tag'):
                    adaptedOb['propsList'] = [[localizeLobby(x.name), x.type]
                                              for x in compData.tag]
                else:
                    adaptedOb['propsList'] = []
                adaptedOb['cmpGlobalID'] = cmpGlobalID
            else:
                adaptedOb['name'] = ''
                adaptedOb['type'] = -1
                adaptedOb['description'] = ''
                adaptedOb['level'] = 0
                adaptedOb['specsList'] = []
                adaptedOb['airplanesList'] = []
                adaptedOb['suitablePlaneIDs'] = []
                adaptedOb['icoPath'] = ''
                adaptedOb['armoredTargetEffective'] = False
                adaptedOb['buyAvailable'] = False
                adaptedOb['cmpGlobalID'] = 0
            return adaptedOb