def __constructComponents(self): player = BigWorld.player() typeDescr = player.vehicleTypeDescriptor if typeDescr.hasSiegeMode: if not self.siegeModeControl: self.siegeModeControl = SiegeModeControl() self.__commands.append(self.siegeModeControl) self.siegeModeControl.onSiegeStateChanged += lambda *args: self.steadyVehicleMatrixCalculator.relinkSources() if not self.siegeModeSoundNotifications: notifications = None if typeDescr.hasHydraulicChassis: notifications = SiegeModeSoundNotifications() elif typeDescr.hasTurboshaftEngine: notifications = TurboshaftModeSoundNotifications() if notifications: self.siegeModeSoundNotifications = notifications self.siegeModeControl.onSiegeStateChanged += self.siegeModeSoundNotifications.onSiegeStateChanged self.siegeModeControl.onRequestFail += self.__onRequestFail self.siegeModeControl.onSiegeStateChanged += SiegeModeCameraShaker.shake if typeDescr.isDualgunVehicle and not self.dualGunControl: self.dualGunControl = DualGunController(typeDescr) elif not typeDescr.isDualgunVehicle: self.dualGunControl = None if self.bootcampCtrl.isInBootcamp() and constants.HAS_DEV_RESOURCES: self.__commands.append(BootcampModeControl()) if ARENA_BONUS_TYPE_CAPS.checkAny(player.arena.bonusType, ARENA_BONUS_TYPE_CAPS.RADAR): self.__commands.append(RadarControl()) if ARENA_BONUS_TYPE_CAPS.checkAny(player.arena.bonusType, ARENA_BONUS_TYPE_CAPS.BATTLEROYALE): self.__commands.append(VehicleUpdateControl()) self.__commands.append(VehicleUpgradePanelControl()) self.__detachedCommands.append(VehicleUpgradePanelControl()) return
def __updateVehicleDossierImpl(vehTypeCompDescr, dossierDescr, results): bonusType = results['bonusType'] if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_ACHIEVEMENTS_7X7): _updatePerBattleSeries(dossierDescr['achievements7x7'], 'tacticalBreakthroughSeries', results['winnerTeam'] == results['team']) if not BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_ACHIEVEMENTS_15X15): return achievements = dossierDescr['achievements'] if achievements['markOfMastery'] < results['markOfMastery']: achievements['markOfMastery'] = results['markOfMastery'] damageRating = int(results['damageRating'] * 100) if damageRating != 0: achievements['damageRating'] = damageRating achievements['movingAvgDamage'] = results['movingAvgDamage'] if achievements['marksOnGun'] < results['marksOnGun']: achievements['marksOnGun'] = results['marksOnGun'] if results['winnerTeam'] == results['team'] and results['aimerSeries'] > 0: dossierDescr['singleAchievements']['aimer'] = 1 if achievements['maxAimerSeries'] < results['aimerSeries']: achievements['maxAimerSeries'] = results['aimerSeries'] isSPG = isVehicleSPG(vehTypeCompDescr) _updatePerBattleSeries( achievements, 'invincibleSeries', results['deathCount'] == 0 and results['damageReceived'] == 0 and not isSPG) _updatePerBattleSeries(achievements, 'diehardSeries', results['deathCount'] == 0 and not isSPG) _updateInBattleSeries(achievements, 'sniper', results) _updateInBattleSeries(achievements, 'killing', results) _updateInBattleSeries(achievements, 'piercing', results)
def __updateVehicleDossierImpl(vehTypeCompDescr, dossierDescr, results, dossierXP): bonusType = results['bonusType'] if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_ACHIEVEMENTS_7X7): _updatePerBattleSeries(dossierDescr['achievements7x7'], 'tacticalBreakthroughSeries', results['winnerTeam'] == results['team']) return if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_RANKED): __updateAggregatedValues(dossierDescr.expand('ranked_10x10'), dossierDescr.expand('ranked_10x10'), results, dossierXP, 0) if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_MAXRANKED): __updateMaxValues(dossierDescr.expand('maxRanked_10x10'), results, dossierXP) __updateMarksOnGun(dossierDescr, results) __updateMarkOfMastery(dossierDescr, results) if not BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_ACHIEVEMENTS_15X15): return achievements = dossierDescr['achievements'] if results['winnerTeam'] == results['team'] and results['aimerSeries'] > 0: dossierDescr['singleAchievements']['aimer'] = 1 if achievements['maxAimerSeries'] < results['aimerSeries']: achievements['maxAimerSeries'] = results['aimerSeries'] isSPG = isVehicleSPG(vehTypeCompDescr) _updatePerBattleSeries( achievements, 'invincibleSeries', results['deathCount'] == 0 and results['damageReceived'] == 0 and not isSPG) _updatePerBattleSeries(achievements, 'diehardSeries', results['deathCount'] == 0 and not isSPG) _updateInBattleSeries(achievements, 'sniper', results) _updateInBattleSeries(achievements, 'killing', results) _updateInBattleSeries(achievements, 'piercing', results)
def __updateTankmanDossierImpl(dossierDescr, results): if not BONUS_CAPS.checkAny(results['bonusType'], BONUS_CAPS.DOSSIER_TOTAL): return dossierDescr['total']['battlesCount'] += 1 if not BONUS_CAPS.checkAny(results['bonusType'], BONUS_CAPS.DOSSIER_ACHIEVEMENTS_15X15): return for recordDBID in results['achievements']: __processArenaAchievement(dossierDescr, recordDBID)
def updateRated7x7Dossier(dossierDescr, battleResults, dossierXP): bonusType = battleResults['bonusType'] if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_RATED7X7): __updateAggregatedValues(dossierDescr.expand('rated7x7'), dossierDescr.expand('rated7x7'), battleResults, dossierXP, frags8p=0) if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_MAXRATED7X7): __updateMaxValues(dossierDescr.expand('maxRated7x7'), battleResults, dossierXP)
def __updateMarkOfMastery(dossierDescr, results): if not BONUS_CAPS.checkAny(results['bonusType'], BONUS_CAPS.DOSSIER_MARK_OF_MASTERY): return achievements = dossierDescr['achievements'] if achievements['markOfMastery'] < results['markOfMastery']: achievements['markOfMastery'] = results['markOfMastery']
def onBecomePlayer(self): self.__enabled = BONUS_CAPS.checkAny(self.arenaBonusType, BONUS_CAPS.TEAM_HEALTH_BAR) if not self.__enabled: return else: self.__lastTeamHealthPercentage = None return
def getAchievementCondition(arenaBonusType, medal): if BONUS_CAPS.checkAny(arenaBonusType, BONUS_CAPS.ACHIEVEMENT_CONDITIONS_EXT): if medal in ACHIEVEMENT_CONDITIONS_EXT: return ACHIEVEMENT_CONDITIONS_EXT[medal] return ACHIEVEMENT_CONDITIONS[ medal] if medal in ACHIEVEMENT_CONDITIONS else {}
def __isDailyBonusVisible(self): if self.__getIsApplied(): return True isBonusEnabled = self.__lobbyContext.getServerSettings().getAdditionalBonusConfig().get('enabled', False) bonusLeft = self.__itemsCache.items.stats.applyAdditionalXPCount hasPremium = self.__itemsCache.items.stats.isActivePremium(PREMIUM_TYPE.PLUS) isProperArena = ARENA_BONUS_TYPE_CAPS.checkAny(self.__arenaBonusType, ARENA_BONUS_TYPE_CAPS.ADDITIONAL_XP_POSTBATTLE) return hasPremium and isBonusEnabled and isProperArena and bonusLeft > 0
def onBecomePlayer(self): self.__enabled = BONUS_CAPS.checkAny(self.arenaBonusType, BONUS_CAPS.RECOVERY_MECHANIC) if not self.__enabled: return else: self.__lastRecoveryArgs = None return
def __updateMaxValuesWithAvatar(block, results): if BONUS_CAPS.checkAny(results['bonusType'], BONUS_CAPS.DOSSIER_MAXFALLOUT): kills = len(results['killList']) + results['avatarKills'] if kills > 0 and kills >= block['maxFragsWithAvatar']: block['maxFragsWithAvatar'] = kills damageDealt = results['damageDealt'] + results['avatarDamageDealt'] if damageDealt > 0 and damageDealt >= block['maxDamageWithAvatar']: block['maxDamageWithAvatar'] = damageDealt
def __updateMarkOfMastery(dossierDescr, results): if not BONUS_CAPS.checkAny(results['bonusType'], BONUS_CAPS.DOSSIER_MARK_OF_MASTERY): return achievements = dossierDescr['achievements'] markOfMasterField = 'marksOfMasteryCount{}'.format(results['markOfMastery']) if markOfMasterField in achievements: achievements[markOfMasterField] += 1 if achievements['markOfMastery'] < results['markOfMastery']: achievements['markOfMastery'] = results['markOfMastery']
def createEquipmentCtrl(setup): isBattleRoyale = ARENA_BONUS_TYPE_CAPS.checkAny(setup.arenaEntity.bonusType, ARENA_BONUS_TYPE_CAPS.BATTLEROYALE) if isBattleRoyale: clazz = br_equipment_ctrl.BattleRoyaleEquipmentController elif setup.isReplayPlaying: clazz = equipment_ctrl.EquipmentsReplayPlayer else: clazz = equipment_ctrl.EquipmentsController return clazz()
def updateClubDossier(dossierDescr, battleResults, geometryID, teamInDefence): bonusType = battleResults['bonusType'] if not BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_CLUB): return block = dossierDescr['total'] block['lastBattleTime'] = int(time.time()) block = dossierDescr.expand('clubBattles') block['battlesCount'] += 1 team = battleResults['team'] winnerTeam = battleResults['winnerTeam'] if team == winnerTeam: block['wins'] += 1 else: if winnerTeam == 0: LOG_ERROR( '[EXCEPTION] updateClubDossier(dossierDescr, battleResults, geometryID): draw is not allowed for cybersport rated battles.' ) block['losses'] += 1 for record in ('killedVehicles', 'lostVehicles', 'damageDealt', 'damageReceived', 'capturePoints', 'droppedCapturePoints'): block[record] += battleResults['club'][record] isInAttack = team != teamInDefence if isInAttack: block['battlesCountInAttack'] += 1 block['damageDealtInAttack'] += battleResults['club']['damageDealt'] else: block['damageDealtInDefence'] += battleResults['club']['damageDealt'] block = dossierDescr['vehicles'] for typeCompDescr, xp in battleResults['club']['vehicles']: battlesCount, experience = block.get(typeCompDescr, (0, 0)) block[typeCompDescr] = (battlesCount + 1, experience + xp) block = dossierDescr['maps'] battlesCount, wins = block.get(geometryID, (0, 0)) block[geometryID] = (battlesCount + 1, wins + 1 if team == winnerTeam else 0) if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_ACHIEVEMENTS_RATED7X7): for recordDBID in battleResults['club']['achievements']: __processArenaAchievement(dossierDescr, recordDBID) _updatePerBattleSeries(dossierDescr['achievementsRated7x7'], 'victoryMarchSeries', team == winnerTeam)
def __updateMarksOnGun(dossierDescr, results): if not BONUS_CAPS.checkAny(results['bonusType'], BONUS_CAPS.DOSSIER_MARKS_ON_GUN): return achievements = dossierDescr['achievements'] damageRating = int(results['damageRating'] * 100) if damageRating != 0: achievements['damageRating'] = damageRating achievements['movingAvgDamage'] = results['movingAvgDamage'] if achievements['marksOnGun'] < results['marksOnGun']: achievements['marksOnGun'] = results['marksOnGun']
def _assembleBonusCapsComponents(componentSystem): from arena_component_system.assembler_helper import ARENA_BONUS_TYPE_CAP_COMPONENTS for name, ( bonusFlag, componentClass) in ARENA_BONUS_TYPE_CAP_COMPONENTS.iteritems(): isBonusTypeCapActive = ARENA_BONUS_TYPE_CAPS.checkAny( componentSystem.bonusType, bonusFlag) if isBonusTypeCapActive: ClientArenaComponentAssembler._addArenaComponent( componentSystem, name, componentClass)
def _setupPlugins(self, arenaVisitor): setup = {'equipments': plugins.EquipmentsPlugin, 'vehicles': plugins.ArenaVehiclesPlugin, 'personal': plugins.PersonalEntriesPlugin, 'area': plugins.AreaStaticMarkerPlugin, 'area_markers': plugins.AreaMarkerEntriesPlugin, 'spgShot': plugins.EnemySPGShotPlugin} arenaBonusType = BigWorld.player().arenaBonusType if arenaBonusType and BONUS_CAPS.checkAny(arenaBonusType, BONUS_CAPS.DEATHZONES): setup['deathzones'] = plugins.DeathZonesMinimapPlugin return setup
def getAchievementCondition(arenaBonusType, medal): """ Returns condition for medal depending on arena bonus type. :param arenaBonusType: arena bonus type. :param medal: medal name. :return: dict with medal conditions. See ACHIEVEMENT_CONDITIONS and other conditions. """ if BONUS_CAPS.checkAny(arenaBonusType, BONUS_CAPS.ACHIEVEMENT_CONDITIONS_EXT): return ACHIEVEMENT_CONDITIONS_EXT.get(medal, ACHIEVEMENT_CONDITIONS[medal]) return ACHIEVEMENT_CONDITIONS[medal]
def setTotalCount(self, vehicles, teams): isSquad = ARENA_BONUS_TYPE_CAPS.checkAny(getArena().bonusType, ARENA_BONUS_TYPE_CAPS.SQUADS) countText = str(vehicles) if isSquad: countText = ' '.join( (countText, self.__ADDITIONAL_FRAG_TEMPLATE.format( backport.text( R.strings.battle_royale.fragPanel.squadsCount(), squadsCount=str(teams))))) self.as_setLeftFieldS(countText)
def __updateMarkOfMastery(dossierDescr, results): """ Updates markOfMastery medal for vehicle. :param dossierDescr: vehicle dossier. :param results: battle results. """ if not BONUS_CAPS.checkAny(results['bonusType'], BONUS_CAPS.DOSSIER_MARK_OF_MASTERY): return achievements = dossierDescr['achievements'] if achievements['markOfMastery'] < results['markOfMastery']: achievements['markOfMastery'] = results['markOfMastery']
def __updateAccountDossierCuts(dossierDescr, results, dossierXP, vehTypeCompDescr, vehDossierDescr): if not vehDossierDescr is not None: raise AssertionError bonusType = results['bonusType'] if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_15X15): a15x15Cut = dossierDescr['a15x15Cut'] vehA15x15 = vehDossierDescr['a15x15'] a15x15Cut[vehTypeCompDescr] = ( vehA15x15['battlesCount'], vehA15x15['wins'], vehDossierDescr['achievements']['markOfMastery'], vehA15x15['xp']) if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_7X7): a7x7Cut = dossierDescr['a7x7Cut'] vehA7x7 = vehDossierDescr['a7x7'] a7x7Cut[vehTypeCompDescr] = (vehA7x7['battlesCount'], vehA7x7['wins'], vehA7x7['xp'], vehA7x7['originalXP'], vehA7x7['damageDealt'], vehA7x7['damageAssistedRadio'], vehA7x7['damageAssistedTrack']) if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_SORTIE): sortieCut = dossierDescr['fortSortiesCut'] vehSortie = vehDossierDescr['fortSorties'] sortieCut[vehTypeCompDescr] = (vehSortie['battlesCount'], vehSortie['wins'], vehSortie['xp']) if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_FORT_BATTLE): battleCut = dossierDescr['fortBattlesCut'] vehBattles = vehDossierDescr['fortBattles'] battleCut[vehTypeCompDescr] = (vehBattles['battlesCount'], vehBattles['wins'], vehBattles['xp']) if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_RATED7X7): rated7x7Cut = dossierDescr['rated7x7Cut'] vehRated7x7 = vehDossierDescr['rated7x7'] rated7x7Cut[vehTypeCompDescr] = ( vehRated7x7['battlesCount'], vehRated7x7['wins'], vehRated7x7['xp'], vehRated7x7['originalXP'], vehRated7x7['damageDealt'], vehRated7x7['damageAssistedRadio'], vehRated7x7['damageAssistedTrack']) if BONUS_CAPS.checkAny(bonusType, BONUS_CAPS.DOSSIER_GLOBAL_MAP): globalMapCommonCut = dossierDescr['globalMapCommonCut'] vehGlobalMapCommon = vehDossierDescr['globalMapCommon'] globalMapCommonCut[vehTypeCompDescr] = ( vehGlobalMapCommon['battlesCount'], vehGlobalMapCommon['wins'], vehGlobalMapCommon['xp']) falloutAccountDossierCut = BONUS_CAPS.checkAny( bonusType, BONUS_CAPS.DOSSIER_FALLOUT) and dossierDescr['falloutCut'] falloutVehicleDossier = vehDossierDescr['fallout'] falloutAccountDossierCut[vehTypeCompDescr] = ( falloutVehicleDossier['battlesCount'], falloutVehicleDossier['wins'], falloutVehicleDossier['xp'], falloutVehicleDossier['winPoints']) return
def __init__(self, componentSystem): ClientArenaComponent.__init__(self, componentSystem) self.__playerGroupsEnabled = componentSystem.arenaType.numPlayerGroups > 0 LOG_DEBUG_DEV('PlayerDataComponent.__playerGroupsEnabled ', self.__playerGroupsEnabled, componentSystem.arenaType.numPlayerGroups > 0) self.onPlayerGroupsUpdated = Event.Event(self._eventManager) self.__playerIngameRanksEnabled = BONUS_CAPS.checkAny( componentSystem.bonusType, BONUS_CAPS.PLAYER_RANK_MECHANICS) self.__playerRank = None self.onVehicleRanksUpdated = Event.Event(self._eventManager) self.onPlayerRankUpdated = Event.Event(self._eventManager) return
def initAttackManager(arena): global _g_instance visual = caps.checkAny( arena.bonusType, caps.GAS_ATTACK_MECHANICS) and arena.arenaType.gameplayName in ( 'fallout', 'fallout2', 'fallout3') and getattr( arena.arenaType, 'gasAttackVisual', None) if not visual is not None: raise AssertionError( 'Gas attack visual should be defined for arena bonus type: %d' % arena.bonusType) _g_instance = GasAttackManager(visual) return
def showSpawnPoints(self): visibleComponents = [BATTLE_VIEW_ALIASES.BR_SELECT_RESPAWN] if ARENA_BONUS_TYPE_CAPS.checkAny(BigWorld.player().arena.bonusType, ARENA_BONUS_TYPE_CAPS.SQUADS): visibleComponents.extend([ BATTLE_VIEW_ALIASES.BATTLE_TEAM_PANEL, BATTLE_VIEW_ALIASES.BATTLE_MESSENGER ]) if not self.__selectSpawnToggling: self.__selectSpawnToggling.update( set(self.as_getComponentsVisibilityS()) - set(visibleComponents)) self._setComponentsVisibility(visible=visibleComponents, hidden=self.__selectSpawnToggling) self.app.enterGuiControlMode(BATTLE_VIEW_ALIASES.BR_SELECT_RESPAWN)
def __updateMarksOnGun(dossierDescr, results): """ Updates marksOnGun medal for vehicle and related statistics. :param dossierDescr: vehicle dossier. :param results: battle results. """ if not BONUS_CAPS.checkAny(results['bonusType'], BONUS_CAPS.DOSSIER_MARKS_ON_GUN): return achievements = dossierDescr['achievements'] damageRating = int(results['damageRating'] * 100) if damageRating != 0: achievements['damageRating'] = damageRating achievements['movingAvgDamage'] = results['movingAvgDamage'] if achievements['marksOnGun'] < results['marksOnGun']: achievements['marksOnGun'] = results['marksOnGun']
def _buildVehicle(self, vehicle): result = super(FunRandomCarouselDataProvider, self)._buildVehicle(vehicle) state, _ = vehicle.getState() if state == Vehicle.VEHICLE_STATE.UNSUITABLE_TO_QUEUE: validationResult = self.__controller.isSuitableVehicle(vehicle) resPath = R.strings.fun_random.funRandomCarousel.lockedTooltip if validationResult is not None: result['lockedTooltip'] = getUnsuitable2queueTooltip( validationResult, resPath) result['isEarnCrystals'] = result[ 'isEarnCrystals'] and self.__isCrystalsFarmEnabled if not ARENA_BONUS_TYPE_CAPS.checkAny( ARENA_BONUS_TYPE.FUN_RANDOM, ARENA_BONUS_TYPE_CAPS.DAILY_MULTIPLIED_XP): result['xpImgSource'] = '' result['tooltip'] = TOOLTIPS_CONSTANTS.FUN_RANDOM_CAROUSEL_VEHICLE return result
def start(self): self.__settings = AccountSettings.getSettings(RADAR_HINT_SECTION) self._updateCounterOnStart(self.__settings, self._HINT_DAY_COOLDOWN, self._HINT_BATTLES_COOLDOWN) arenaDP = self._sessionProvider.getArenaDP() self.__isObserver = arenaDP.getVehicleInfo().isObserver( ) if arenaDP is not None else False arena = BigWorld.player().arena if arena is not None: self.__isEnabled = ARENA_BONUS_TYPE_CAPS.checkAny( arena.bonusType, ARENA_BONUS_TYPE_CAPS.RADAR) if self._sessionProvider.dynamic.radar: self._sessionProvider.dynamic.radar.addRuntimeView(self) vStateCtrl = self._sessionProvider.shared.vehicleState if vStateCtrl: vStateCtrl.onPostMortemSwitched += self.__onPostMortemSwitched vStateCtrl.onVehicleStateUpdated += self.__onVehicleStateUpdated return
def __updateMaxValues(block, results, dossierXP): maxValuesChanged = [] if dossierXP != 0 and dossierXP >= block['maxXP']: block['maxXP'] = dossierXP maxValuesChanged.append('maxXPVehicle') kills = len(results['killList']) if kills > 0 and kills >= block['maxFrags']: block['maxFrags'] = kills maxValuesChanged.append('maxFragsVehicle') damageDealt = results['damageDealt'] if damageDealt > 0 and damageDealt >= block['maxDamage']: block['maxDamage'] = damageDealt maxValuesChanged.append('maxDamageVehicle') if BONUS_CAPS.checkAny(results['bonusType'], BONUS_CAPS.DOSSIER_MAXFALLOUT): winPoints = results['winPoints'] if winPoints > 0 and winPoints >= block['maxWinPoints']: block['maxWinPoints'] = winPoints maxValuesChanged.append('maxWinPointsVehicle') return maxValuesChanged
def __init__(self, componentSystem): ClientArenaComponent.__init__(self, componentSystem) self.__playerGroupsEnabled = componentSystem.arenaType.numPlayerGroups > 0 LOG_DEBUG_DEV('PlayerDataComponent.__playerGroupsEnabled ', self.__playerGroupsEnabled, componentSystem.arenaType.numPlayerGroups > 0) if self.__playerGroupsEnabled: self.addSyncDataCallback(ARENA_SYNC_OBJECTS.PLAYER_GROUP, 'playerGroups', self._vehiclePlayerGroupsUpdated) self.onPlayerGroupsUpdated = Event.Event(self._eventManager) self.__playerIngameRanksEnabled = BONUS_CAPS.checkAny( componentSystem.bonusType, BONUS_CAPS.PLAYER_RANK_MECHANICS) if self.__playerIngameRanksEnabled: self.addSyncDataCallback(ARENA_SYNC_OBJECTS.PLAYER_RANK, 'ranksByTeam', self.__onTeamRanksUpdated) self.__playerRank = None self.onVehicleRanksUpdated = Event.Event(self._eventManager) self.onPlayerRankUpdated = Event.Event(self._eventManager) return
def _generateMapping(cls, hasRented, hasEvent, hasRoles, **kwargs): mapping = super(TankCarouselFilterPopover, cls)._generateMapping(hasRented, hasEvent, hasRoles, **kwargs) mapping[_SECTION.SPECIALS].extend(cls._getBaseSpecialSection()) if hasRented: mapping[_SECTION.SPECIALS].append('rented') if hasEvent: mapping[_SECTION.SPECIALS].append('event') if constants.IS_KOREA: mapping[_SECTION.SPECIALS].append('igr') clanWarsVehicles = cls.itemsCache.items.getItems(GUI_ITEM_TYPE.VEHICLE, REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.CLAN_WARS) if bool(clanWarsVehicles): mapping[_SECTION.SPECIALS].append('clanRented') if kwargs.get('isRanked', False): mapping[_SECTION.SPECIALS].append('ranked') if kwargs.get('isFunRandom', False): mapping[_SECTION.SPECIALS].append('funRandom') config = cls.__lobbyContext.getServerSettings().getCrystalRewardConfig() if not config.isCrystalEarnPossible(ARENA_BONUS_TYPE.FUN_RANDOM): mapping[_SECTION.SPECIALS].remove('crystals') if not BONUS_CAPS.checkAny(ARENA_BONUS_TYPE.FUN_RANDOM, BONUS_CAPS.DAILY_MULTIPLIED_XP): mapping[_SECTION.SPECIALS].remove('bonus') return mapping