def __updateTankmanDossierImpl(dossierDescr, results): if not bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_TOTAL): return dossierDescr['total']['battlesCount'] += 1 if not bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_15X15): return for recordDBID in results['achievements']: __processArenaAchievement(dossierDescr, recordDBID)
def _updateTankmanDossierImpl(descr, results): if not bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_TOTAL_VALUES): return descr['battlesCount'] += 1 if not bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_RND_VALUES): return for achieveIdx in results['achievements']: arena_achievements.updateDossierRecord(descr, achieveIdx)
def __updateVehicleDossierImpl(vehTypeCompDescr, dossierDescr, results): bonusCaps = BONUS_CAPS.get(results['bonusType']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_7X7): _updatePerBattleSeries(dossierDescr['achievements7x7'], 'tacticalBreakthroughSeries', results['winnerTeam'] == results['team']) if not bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_15X15): return achievements = dossierDescr['achievements'] if achievements['markOfMastery'] < results['markOfMastery']: achievements['markOfMastery'] = results['markOfMastery'] damageRating = int(results['damageRating'] * 100) 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): bonusCaps = BONUS_CAPS.get(results["bonusType"]) if bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_7X7): _updatePerBattleSeries( dossierDescr["achievements7x7"], "tacticalBreakthroughSeries", results["winnerTeam"] == results["team"] ) if not bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_15X15): return achievements = dossierDescr["achievements"] if achievements["markOfMastery"] < results["markOfMastery"]: achievements["markOfMastery"] = results["markOfMastery"] damageRating = int(results["damageRating"] * 100) 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: 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 hasRespawns(arenBonusType = None): if arenBonusType is None: arenBonusType = getArenaBonusType() if arenBonusType is not None: return caps.get(arenBonusType) & caps.RESPAWN > 0 else: return False
def initAttackManager(arena): global _g_instance visual = caps.get(arena.bonusType) & caps.GAS_ATTACK_MECHANICS > 0 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 hasRage(arenBonusType = None): if arenBonusType is None: arenBonusType = getArenaBonusType() if arenBonusType is not None: return caps.get(arenBonusType) & caps.RAGE_MECHANICS > 0 else: return False
def hasGasAttack(arenBonusType = None): if arenBonusType is None: arenBonusType = getArenaBonusType() if arenBonusType is not None: return caps.get(arenBonusType) & caps.GAS_ATTACK_MECHANICS > 0 and getIsMultiteam() else: return False
def updateRated7x7Dossier(dossierDescr, battleResults, dossierXP): bonusCaps = BONUS_CAPS.get(battleResults["bonusType"]) if bool(bonusCaps & BONUS_CAPS.DOSSIER_RATED7X7): __updateAggregatedValues( dossierDescr.expand("rated7x7"), dossierDescr.expand("rated7x7"), battleResults, dossierXP, frags8p=0 ) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXRATED7X7): __updateMaxValues(dossierDescr.expand("maxRated7x7"), battleResults, dossierXP)
def initAttackManager(arena): global _g_instance if caps.get(arena.bonusType) & caps.GAS_ATTACK_MECHANICS > 0 and arena.arenaType.gameplayName in ('fallout', 'fallout2', 'fallout3'): visual = getattr(arena.arenaType, 'gasAttackVisual', None) if visual is None: LOG_DEBUG('Gas attack visual should be defined for arena bonus type: %d' % arena.bonusType) _g_instance = GasAttackManager(visual) return
def hasRepairPoints(arenaType = None, arenBonusType = None): if arenaType is None: arenaType = getArenaType() if arenBonusType is None: arenBonusType = getArenaBonusType() if arenaType is not None and arenBonusType is not None: return caps.get(arenBonusType) & caps.REPAIR_MECHANICS > 0 and arenaType.repairPoints return False
def hasResourcePoints(arenaType = None, arenBonusType = None): if arenaType is None: arenaType = getArenaType() if arenBonusType is None: arenBonusType = getArenaBonusType() if arenaType is not None and arenBonusType is not None: return caps.get(arenBonusType) & caps.RESOURCE_POINTS > 0 and arenaType.resourcePoints return False
def hasFlags(arenaType = None, arenBonusType = None): if arenaType is None: arenaType = getArenaType() if arenBonusType is None: arenBonusType = getArenaBonusType() if arenaType is not None and arenBonusType is not None: return caps.get(arenBonusType) & caps.FLAG_MECHANICS > 0 and arenaType.flagSpawnPoints return False
def __updateDossierCommonPart(dossierType, dossierDescr, results, dossierXP): bonusCaps = BONUS_CAPS.get(results['bonusType']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_TOTAL): __updateTotalValues(dossierDescr, results) frags8p = 0 maxValuesChanged = [] if bool(bonusCaps & BONUS_CAPS.DOSSIER_KILL_LIST): frags8p = __processKillList(dossierDescr, results['killList']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_15X15): __updateAggregatedValues(dossierDescr.expand('a15x15'), dossierDescr.expand('a15x15_2'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_7X7): __updateAggregatedValues(dossierDescr.expand('a7x7'), dossierDescr.expand('a7x7'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_RATED7X7): __updateAggregatedValues(dossierDescr.expand('rated7x7'), dossierDescr.expand('rated7x7'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_COMPANY): __updateBaseStatistics(dossierDescr.expand('company'), dossierDescr.expand('company2'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_CLAN): __updateBaseStatistics(dossierDescr.expand('clan'), dossierDescr.expand('clan2'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FALLOUT): __updateAggregatedValues(dossierDescr.expand('fallout'), dossierDescr.expand('fallout'), results, dossierXP, frags8p) for record in ('winPoints', 'flagCapture', 'soloFlagCapture', 'resourceAbsorbed', 'deathCount'): dossierDescr['fallout'][record] += results[record] if dossierType == DOSSIER_TYPE.ACCOUNT: for record in ('avatarDamageDealt', 'avatarKills'): dossierDescr['fallout'][record] += results[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): if dossierDescr.isBlockInLayout('globalMapCommon'): __updateAggregatedValues(dossierDescr.expand('globalMapCommon'), dossierDescr.expand('globalMapCommon'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): __updateAggregatedValues(dossierDescr.expand('fortSorties'), dossierDescr.expand('fortSorties'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): if results['winnerTeam'] == 0: winnerTeam = results['fortBuilding']['buildTeam'] else: winnerTeam = results['winnerTeam'] __updateAggregatedValues(dossierDescr.expand('fortBattles'), dossierDescr.expand('fortBattles'), results, dossierXP, frags8p, winnerTeam) if bool(bonusCaps & (BONUS_CAPS.DOSSIER_ACHIEVEMENTS | BONUS_CAPS.DOSSIER_ACHIEVEMENTS_FALLOUT)): for recordDBID in results['achievements']: __processArenaAchievement(dossierDescr, recordDBID) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX15X15): maxValuesChanged = __updateMaxValues(dossierDescr.expand('max15x15'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX7X7): maxValuesChanged = __updateMaxValues(dossierDescr.expand('max7x7'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXRATED7X7): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxRated7x7'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXSORTIE): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxFortSorties'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFORTBATTLE): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxFortBattles'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): if dossierDescr.isBlockInLayout('maxGlobalMapCommon'): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxGlobalMapCommon'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFALLOUT): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxFallout'), results, dossierXP) return (maxValuesChanged, frags8p)
def __updateMaxValuesWithAvatar(block, results): bonusCaps = BONUS_CAPS.get(results["bonusType"]) if bool(bonusCaps & 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 __updateMaxValuesWithAvatar(block, results): bonusCaps = BONUS_CAPS.get(results['bonusType']) if bool(bonusCaps & 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 _assembleBonusCapsComponents(componentSystem): from arena_components.assembler_helper import ARENA_BONUS_TYPE_CAP_COMPONENTS for name, ( bonusFlag, componentClass) in ARENA_BONUS_TYPE_CAP_COMPONENTS.iteritems(): isBonusTypeCapActive = ARENA_BONUS_TYPE_CAPS.get( componentSystem.bonusType) & bonusFlag if isBonusTypeCapActive: ClientArenaComponentAssembler._addArenaComponent( componentSystem, name, componentClass)
def __updateAccountDossierCuts(dossierDescr, results, dossierXP, vehTypeCompDescr, vehDossierDescr): if not vehDossierDescr is not None: raise AssertionError bonusCaps = BONUS_CAPS.get(results['bonusType']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_15X15): a15x15Cut = dossierDescr['a15x15Cut'] vehA15x15 = vehDossierDescr['a15x15'] a15x15Cut[vehTypeCompDescr] = ( vehA15x15['battlesCount'], vehA15x15['wins'], vehDossierDescr['achievements']['markOfMastery'], vehA15x15['xp']) if bool(bonusCaps & 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): sortieCut = dossierDescr['fortSortiesCut'] vehSortie = vehDossierDescr['fortSorties'] sortieCut[vehTypeCompDescr] = (vehSortie['battlesCount'], vehSortie['wins'], vehSortie['xp']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): battleCut = dossierDescr['fortBattlesCut'] vehBattles = vehDossierDescr['fortBattles'] battleCut[vehTypeCompDescr] = (vehBattles['battlesCount'], vehBattles['wins'], vehBattles['xp']) if bool(bonusCaps & 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): globalMapCommonCut = dossierDescr['globalMapCommonCut'] vehGlobalMapCommon = vehDossierDescr['globalMapCommon'] globalMapCommonCut[vehTypeCompDescr] = ( vehGlobalMapCommon['battlesCount'], vehGlobalMapCommon['wins'], vehGlobalMapCommon['xp']) falloutAccountDossierCut = bool(bonusCaps & BONUS_CAPS.DOSSIER_FALLOUT ) and dossierDescr['falloutCut'] falloutVehicleDossier = vehDossierDescr['fallout'] falloutAccountDossierCut[vehTypeCompDescr] = ( falloutVehicleDossier['battlesCount'], falloutVehicleDossier['wins'], falloutVehicleDossier['xp'], falloutVehicleDossier['winPoints']) return
def _updateVehicleDossierImpl(vehTypeCompDescr, descr, results): if not bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_RND_VALUES): return if descr['markOfMastery'] < results['markOfMastery']: descr['markOfMastery'] = results['markOfMastery'] tags = utils.vehicleTypeByCompactDescr(vehTypeCompDescr)['tags'] _updatePerBattleSeries(descr, 'invincibleSeries', results['killerID'] == 0 and results['damageReceived'] == 0 and 'SPG' not in tags) _updatePerBattleSeries(descr, 'diehardSeries', results['killerID'] == 0 and 'SPG' not in tags) _updateInBattleSeries(descr, 'sniper', results) _updateInBattleSeries(descr, 'killing', results) _updateInBattleSeries(descr, 'piercing', results)
def __updateDossierCommonPart(dossierType, dossierDescr, results, dossierXP, winnerTeam): bonusCaps = BONUS_CAPS.get(results['bonusType']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_TOTAL): __updateTotalValues(dossierDescr, results) frags8p = 0 maxValuesChanged = [] if bool(bonusCaps & BONUS_CAPS.DOSSIER_KILL_LIST): frags8p = __processKillList(dossierDescr, results['killList']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_15X15): __updateAggregatedValues(dossierDescr.expand('a15x15'), dossierDescr.expand('a15x15_2'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_7X7): __updateAggregatedValues(dossierDescr.expand('a7x7'), dossierDescr.expand('a7x7'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_RATED7X7): __updateAggregatedValues(dossierDescr.expand('rated7x7'), dossierDescr.expand('rated7x7'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_COMPANY): __updateBaseStatistics(dossierDescr.expand('company'), dossierDescr.expand('company2'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_CLAN): __updateBaseStatistics(dossierDescr.expand('clan'), dossierDescr.expand('clan2'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FALLOUT): __updateAggregatedValues(dossierDescr.expand('fallout'), dossierDescr.expand('fallout'), results, dossierXP, frags8p) for record in ('winPoints', 'flagCapture', 'soloFlagCapture', 'resourceAbsorbed', 'deathCount'): dossierDescr['fallout'][record] += results[record] if dossierType == DOSSIER_TYPE.ACCOUNT: for record in ('avatarDamageDealt', 'avatarKills'): dossierDescr['fallout'][record] += results[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): if dossierDescr.isBlockInLayout('globalMapCommon'): __updateAggregatedValues(dossierDescr.expand('globalMapCommon'), dossierDescr.expand('globalMapCommon'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): __updateAggregatedValues(dossierDescr.expand('fortSorties'), dossierDescr.expand('fortSorties'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): __updateAggregatedValues(dossierDescr.expand('fortBattles'), dossierDescr.expand('fortBattles'), results, dossierXP, frags8p, winnerTeam) if bool(bonusCaps & (BONUS_CAPS.DOSSIER_ACHIEVEMENTS | BONUS_CAPS.DOSSIER_ACHIEVEMENTS_FALLOUT)): for recordDBID in results['achievements']: __processArenaAchievement(dossierDescr, recordDBID) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX15X15): maxValuesChanged = __updateMaxValues(dossierDescr.expand('max15x15'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX7X7): maxValuesChanged = __updateMaxValues(dossierDescr.expand('max7x7'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXRATED7X7): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxRated7x7'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXSORTIE): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxFortSorties'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFORTBATTLE): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxFortBattles'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): if dossierDescr.isBlockInLayout('maxGlobalMapCommon'): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxGlobalMapCommon'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFALLOUT): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxFallout'), results, dossierXP) return (maxValuesChanged, frags8p)
def updateRated7x7Dossier(dossierDescr, battleResults, dossierXP): bonusCaps = BONUS_CAPS.get(battleResults['bonusType']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_RATED7X7): __updateAggregatedValues(dossierDescr.expand('rated7x7'), dossierDescr.expand('rated7x7'), battleResults, dossierXP, frags8p=0) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXRATED7X7): __updateMaxValues(dossierDescr.expand('maxRated7x7'), battleResults, dossierXP)
def __updateDossierCommonPart(dossierDescr, results, dossierXP): bonusCaps = BONUS_CAPS.get(results['bonusType']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_TOTAL): __updateTotalValues(dossierDescr, results) frags8p = 0 maxValuesChanged = [] if bool(bonusCaps & BONUS_CAPS.DOSSIER_KILL_LIST): frags8p = __processKillList(dossierDescr, results['killList']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_15X15): __updateAggregatedValues(dossierDescr.expand('a15x15'), dossierDescr.expand('a15x15_2'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_7X7): __updateAggregatedValues(dossierDescr.expand('a7x7'), dossierDescr.expand('a7x7'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_RATED7X7): __updateAggregatedValues(dossierDescr.expand('rated7x7'), dossierDescr.expand('rated7x7'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_COMPANY): __updateBaseStatistics(dossierDescr.expand('company'), dossierDescr.expand('company2'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_CLAN): __updateBaseStatistics(dossierDescr.expand('clan'), dossierDescr.expand('clan2'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): if dossierDescr.isBlockInLayout('globalMapCommon'): __updateAggregatedValues(dossierDescr.expand('globalMapCommon'), dossierDescr.expand('globalMapCommon'), results, dossierXP, frags8p) if dossierDescr.isBlockInLayout('maxGlobalMapCommon'): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxGlobalMapCommon'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_HISTORICAL): __updateAggregatedValues(dossierDescr.expand('historical'), dossierDescr.expand('historical'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): __updateAggregatedValues(dossierDescr.expand('fortSorties'), dossierDescr.expand('fortSorties'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): if results['winnerTeam'] == 0: winnerTeam = results['fortBuilding']['buildTeam'] else: winnerTeam = results['winnerTeam'] __updateAggregatedValues(dossierDescr.expand('fortBattles'), dossierDescr.expand('fortBattles'), results, dossierXP, frags8p, winnerTeam) if bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS): for recordDBID in results['achievements']: __processArenaAchievement(dossierDescr, recordDBID) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX15X15): maxValuesChanged = __updateMaxValues(dossierDescr.expand('max15x15'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX7X7): maxValuesChanged = __updateMaxValues(dossierDescr.expand('max7x7'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXRATED7X7): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxRated7x7'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXHISTORICAL): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxHistorical'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXSORTIE): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxFortSorties'), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFORTBATTLE): maxValuesChanged = __updateMaxValues(dossierDescr.expand('maxFortBattles'), results, dossierXP) return (maxValuesChanged, frags8p)
def __updateVehicleDossierImpl(vehTypeCompDescr, dossierDescr, results): if bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_7X7): _updatePerBattleSeries(dossierDescr['achievements7x7'], 'tacticalBreakthroughSeries', results['winnerTeam'] == results['team']) if not bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_15X15): return achievements = dossierDescr['achievements'] if achievements['markOfMastery'] < results['markOfMastery']: achievements['markOfMastery'] = results['markOfMastery'] damageRating = int(results['damageRating'] * 100) 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['killerID'] == 0 and results['damageReceived'] == 0 and not isSPG) _updatePerBattleSeries(achievements, 'diehardSeries', results['killerID'] == 0 and not isSPG) _updateInBattleSeries(achievements, 'sniper', results) _updateInBattleSeries(achievements, 'killing', results) _updateInBattleSeries(achievements, 'piercing', results)
def __updateAccountDossierCuts(dossierDescr, results, dossierXP, vehTypeCompDescr, vehDossierDescr): if not vehDossierDescr is not None: raise AssertionError bonusCaps = BONUS_CAPS.get(results['bonusType']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_15X15): a15x15Cut = dossierDescr['a15x15Cut'] vehA15x15 = vehDossierDescr['a15x15'] a15x15Cut[vehTypeCompDescr] = (vehA15x15['battlesCount'], vehA15x15['wins'], vehDossierDescr['achievements']['markOfMastery'], vehA15x15['xp']) if bool(bonusCaps & 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): sortieCut = dossierDescr['fortSortiesCut'] vehSortie = vehDossierDescr['fortSorties'] sortieCut[vehTypeCompDescr] = (vehSortie['battlesCount'], vehSortie['wins'], vehSortie['xp']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): battleCut = dossierDescr['fortBattlesCut'] vehBattles = vehDossierDescr['fortBattles'] battleCut[vehTypeCompDescr] = (vehBattles['battlesCount'], vehBattles['wins'], vehBattles['xp']) if bool(bonusCaps & 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): globalMapCommonCut = dossierDescr['globalMapCommonCut'] vehGlobalMapCommon = vehDossierDescr['globalMapCommon'] globalMapCommonCut[vehTypeCompDescr] = (vehGlobalMapCommon['battlesCount'], vehGlobalMapCommon['wins'], vehGlobalMapCommon['xp']) falloutAccountDossierCut = bool(bonusCaps & BONUS_CAPS.DOSSIER_FALLOUT) and dossierDescr['falloutCut'] falloutVehicleDossier = vehDossierDescr['fallout'] falloutAccountDossierCut[vehTypeCompDescr] = (falloutVehicleDossier['battlesCount'], falloutVehicleDossier['wins'], falloutVehicleDossier['xp'], falloutVehicleDossier['winPoints']) return
def updateClubDossier(dossierDescr, battleResults, geometryID, teamInDefence): bonusCaps = BONUS_CAPS.get(battleResults["bonusType"]) if not bool(bonusCaps & 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_RATED7X7): for recordDBID in battleResults["club"]["achievements"]: __processArenaAchievement(dossierDescr, recordDBID) _updatePerBattleSeries(dossierDescr["achievementsRated7x7"], "victoryMarchSeries", team == winnerTeam)
def updateClubDossier(dossierDescr, battleResults, geometryID, teamInDefence): bonusCaps = BONUS_CAPS.get(battleResults['bonusType']) if not bool(bonusCaps & 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_RATED7X7): for recordDBID in battleResults['club']['achievements']: __processArenaAchievement(dossierDescr, recordDBID) _updatePerBattleSeries(dossierDescr['achievementsRated7x7'], 'victoryMarchSeries', team == winnerTeam)
def __updateMaxValues(block, results, dossierXP): maxValuesChanged = [] bonusCaps = BONUS_CAPS.get(results["bonusType"]) 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFALLOUT): winPoints = results["winPoints"] if winPoints > 0 and winPoints >= block["maxWinPoints"]: block["maxWinPoints"] = winPoints maxValuesChanged.append("maxWinPointsVehicle") return maxValuesChanged
def __updateMaxValues(block, results, dossierXP): maxValuesChanged = [] bonusCaps = BONUS_CAPS.get(results['bonusType']) 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFALLOUT): winPoints = results['winPoints'] if winPoints > 0 and winPoints >= block['maxWinPoints']: block['maxWinPoints'] = winPoints maxValuesChanged.append('maxWinPointsVehicle') return maxValuesChanged
def updateClubDossier(dossierDescr, battleResults, geometryID, teamInDefence): bonusCaps = BONUS_CAPS.get(battleResults['bonusType']) if not bool(bonusCaps & 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_RATED7X7): for recordDBID in battleResults['club']['achievements']: __processArenaAchievement(dossierDescr, recordDBID) _updatePerBattleSeries(dossierDescr['achievementsRated7x7'], 'victoryMarchSeries', team == winnerTeam)
def _updateAccountDossierImpl(descr, results, vehTypeCompDescr, vehDossierDescr, isMaxFragsGained, isMaxXPGained): if not vehDossierDescr is not None: raise AssertionError vehDossiersCut = dict(descr['vehDossiersCut']) battlesCount, wins, _, _ = vehDossiersCut.get(vehTypeCompDescr, (0, 0, 0, 0)) if results['winnerTeam'] == results['team']: wins += 1 vehDossiersCut[vehTypeCompDescr] = (battlesCount + 1, wins, vehDossierDescr['markOfMastery'], vehDossierDescr['xp']) descr['vehDossiersCut'] = vehDossiersCut return bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_RND_VALUES) or None else: series = ('maxInvincibleSeries', 'maxDiehardSeries', 'maxSniperSeries', 'maxKillingSeries', 'maxPiercingSeries') for recordName in series: if vehDossierDescr[recordName] > descr[recordName]: descr[recordName] = vehDossierDescr[recordName] if isMaxXPGained: descr['maxXPVehicle'] = vehTypeCompDescr if isMaxFragsGained: descr['maxFragsVehicle'] = vehTypeCompDescr return
def hasRage(arenBonusType = None): if arenBonusType is None: arenBonusType = getArenaBonusType() if arenBonusType is not None: return caps.get(arenBonusType) & caps.RAGE_MECHANICS > 0 return False
def updateAccountDossier(dossierDescr, battleResults, dossierXP, vehDossiers, maxVehResults): bonusCaps = BONUS_CAPS.get(battleResults['bonusType']) maxValuesChanged, frags8p = __updateDossierCommonPart(DOSSIER_TYPE.ACCOUNT, dossierDescr, battleResults, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_15X15): _updatePerBattleSeries(dossierDescr['achievements'], 'reliableComradeSeries', battleResults['tdamageDealt'] == 0 and not battleResults['tdestroyedModules']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_7X7): __updateCapturePointsWithBaseCapture(dossierDescr, battleResults) __updateDefencePoints(dossierDescr, battleResults) if bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): fortResource = battleResults['fortResource'] for blockName in ('fortMisc', 'fortMiscInClan'): miscBlock = dossierDescr[blockName] miscBlock['fortResourceInSorties'] += fortResource if fortResource > miscBlock['maxFortResourceInSorties']: miscBlock['maxFortResourceInSorties'] = fortResource dossierDescr['fortSortiesInClan']['fortResource'] += battleResults['personalFortResource'] __updateAggregatedValues(dossierDescr.expand('fortSortiesInClan'), dossierDescr.expand('fortSortiesInClan'), battleResults, dossierXP, frags8p) if battleResults['division']: divisionNumber = getattr(SORTIE_DIVISION, battleResults['division']) fortSortiesInClanBlock = dossierDescr['fortSortiesInClan'] divisionLowerCase = SORTIE_DIVISION_NAMES[divisionNumber].lower() sortiesCombatsVar = '%sBattlesCount' % divisionLowerCase fortSortiesInClanBlock[sortiesCombatsVar] += 1 if battleResults['team'] == battleResults['winnerTeam']: sortiesCombatsWinsVar = '%sWins' % divisionLowerCase fortSortiesInClanBlock[sortiesCombatsWinsVar] += 1 if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): __updateAggregatedValues(dossierDescr.expand('fortBattlesInClan'), dossierDescr.expand('fortBattlesInClan'), battleResults, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_RATED7X7): clubDBID = battleResults['club'].get('clubDBID', 0) achievementsRated7x7 = dossierDescr['achievementsRated7x7'] if clubDBID != achievementsRated7x7['victoryMarchClubDBID']: achievementsRated7x7['victoryMarchClubDBID'] = clubDBID achievementsRated7x7['victoryMarchSeries'] = 0 _updatePerBattleSeries(dossierDescr['achievementsRated7x7'], 'victoryMarchSeries', battleResults['winnerTeam'] == battleResults['team']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): division = battleResults['division'] if division in GLOBAL_MAP_DIVISION._ORDER: if division == GLOBAL_MAP_DIVISION.MIDDLE: blockName = 'globalMapMiddle' blockNameMax = 'maxGlobalMapMiddle' elif division == GLOBAL_MAP_DIVISION.CHAMPION: blockName = 'globalMapChampion' blockNameMax = 'maxGlobalMapChampion' elif division == GLOBAL_MAP_DIVISION.ABSOLUTE: blockName = 'globalMapAbsolute' blockNameMax = 'maxGlobalMapAbsolute' else: raise False or AssertionError __updateAggregatedValues(dossierDescr.expand(blockName), dossierDescr.expand(blockName), battleResults, dossierXP, frags8p) for record in __updateMaxValues(dossierDescr.expand(blockNameMax), battleResults, dossierXP): dossierDescr[blockNameMax][record] = maxVehResults[record] for record in maxValuesChanged: dossierDescr[blockNameMax][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX15X15): for record in maxValuesChanged: dossierDescr['max15x15'][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX7X7): for record in maxValuesChanged: dossierDescr['max7x7'][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXRATED7X7): for record in maxValuesChanged: dossierDescr['maxRated7x7'][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFALLOUT): __updateMaxValuesWithAvatar(dossierDescr['maxFallout'], battleResults) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXSORTIE): for record in __updateMaxValues(dossierDescr.expand('maxFortSortiesInClan'), battleResults, dossierXP): dossierDescr['maxFortSortiesInClan'][record] = maxVehResults[record] for record in maxValuesChanged: dossierDescr['maxFortSorties'][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFORTBATTLE): for record in __updateMaxValues(dossierDescr.expand('maxFortBattlesInClan'), battleResults, dossierXP): dossierDescr['maxFortBattlesInClan'][record] = maxVehResults[record] for record in maxValuesChanged: dossierDescr['maxFortBattles'][record] = maxVehResults[record] for vehTypeCompDescr, (_, vehDossierDescr) in vehDossiers.iteritems(): __updateAccountDossierCuts(dossierDescr, battleResults, dossierXP, vehTypeCompDescr, vehDossierDescr)
def _assembleBonusCapsComponents(componentSystem): from arena_components.assembler_helper import ARENA_BONUS_TYPE_CAP_COMPONENTS for name, (bonusFlag, componentClass) in ARENA_BONUS_TYPE_CAP_COMPONENTS.iteritems(): isBonusTypeCapActive = ARENA_BONUS_TYPE_CAPS.get(componentSystem.bonusType) & bonusFlag if isBonusTypeCapActive: ClientArenaComponentAssembler._addArenaComponent(componentSystem, name, componentClass)
def __updateAccountDossierCuts(dossierDescr, results, dossierXP, vehTypeCompDescr, vehDossierDescr): if not vehDossierDescr is not None: raise AssertionError bonusCaps = BONUS_CAPS.get(results["bonusType"]) if bool(bonusCaps & BONUS_CAPS.DOSSIER_15X15): a15x15Cut = dossierDescr["a15x15Cut"] vehA15x15 = vehDossierDescr["a15x15"] a15x15Cut[vehTypeCompDescr] = ( vehA15x15["battlesCount"], vehA15x15["wins"], vehDossierDescr["achievements"]["markOfMastery"], vehA15x15["xp"], ) if bool(bonusCaps & 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): sortieCut = dossierDescr["fortSortiesCut"] vehSortie = vehDossierDescr["fortSorties"] sortieCut[vehTypeCompDescr] = (vehSortie["battlesCount"], vehSortie["wins"], vehSortie["xp"]) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): battleCut = dossierDescr["fortBattlesCut"] vehBattles = vehDossierDescr["fortBattles"] battleCut[vehTypeCompDescr] = (vehBattles["battlesCount"], vehBattles["wins"], vehBattles["xp"]) if bool(bonusCaps & 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 bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): globalMapCommonCut = dossierDescr["globalMapCommonCut"] vehGlobalMapCommon = vehDossierDescr["globalMapCommon"] globalMapCommonCut[vehTypeCompDescr] = ( vehGlobalMapCommon["battlesCount"], vehGlobalMapCommon["wins"], vehGlobalMapCommon["xp"], ) falloutAccountDossierCut = bool(bonusCaps & BONUS_CAPS.DOSSIER_FALLOUT) and dossierDescr["falloutCut"] falloutVehicleDossier = vehDossierDescr["fallout"] falloutAccountDossierCut[vehTypeCompDescr] = ( falloutVehicleDossier["battlesCount"], falloutVehicleDossier["wins"], falloutVehicleDossier["xp"], falloutVehicleDossier["winPoints"], ) return
def __updateDossierCommonPart(dossierType, dossierDescr, results, dossierXP, winnerTeam): bonusCaps = BONUS_CAPS.get(results["bonusType"]) if bool(bonusCaps & BONUS_CAPS.DOSSIER_TOTAL): __updateTotalValues(dossierDescr, results) frags8p = 0 maxValuesChanged = [] if bool(bonusCaps & BONUS_CAPS.DOSSIER_KILL_LIST): frags8p = __processKillList(dossierDescr, results["killList"]) if bool(bonusCaps & BONUS_CAPS.DOSSIER_15X15): __updateAggregatedValues( dossierDescr.expand("a15x15"), dossierDescr.expand("a15x15_2"), results, dossierXP, frags8p ) if bool(bonusCaps & BONUS_CAPS.DOSSIER_7X7): __updateAggregatedValues(dossierDescr.expand("a7x7"), dossierDescr.expand("a7x7"), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_RATED7X7): __updateAggregatedValues( dossierDescr.expand("rated7x7"), dossierDescr.expand("rated7x7"), results, dossierXP, frags8p ) if bool(bonusCaps & BONUS_CAPS.DOSSIER_COMPANY): __updateBaseStatistics(dossierDescr.expand("company"), dossierDescr.expand("company2"), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_CLAN): __updateBaseStatistics(dossierDescr.expand("clan"), dossierDescr.expand("clan2"), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FALLOUT): __updateAggregatedValues( dossierDescr.expand("fallout"), dossierDescr.expand("fallout"), results, dossierXP, frags8p ) for record in ("winPoints", "flagCapture", "soloFlagCapture", "resourceAbsorbed", "deathCount"): dossierDescr["fallout"][record] += results[record] if dossierType == DOSSIER_TYPE.ACCOUNT: for record in ("avatarDamageDealt", "avatarKills"): dossierDescr["fallout"][record] += results[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): if dossierDescr.isBlockInLayout("globalMapCommon"): __updateAggregatedValues( dossierDescr.expand("globalMapCommon"), dossierDescr.expand("globalMapCommon"), results, dossierXP, frags8p, ) if bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): __updateAggregatedValues( dossierDescr.expand("fortSorties"), dossierDescr.expand("fortSorties"), results, dossierXP, frags8p ) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): __updateAggregatedValues( dossierDescr.expand("fortBattles"), dossierDescr.expand("fortBattles"), results, dossierXP, frags8p, winnerTeam, ) if bool(bonusCaps & (BONUS_CAPS.DOSSIER_ACHIEVEMENTS | BONUS_CAPS.DOSSIER_ACHIEVEMENTS_FALLOUT)): for recordDBID in results["achievements"]: __processArenaAchievement(dossierDescr, recordDBID) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX15X15): maxValuesChanged = __updateMaxValues(dossierDescr.expand("max15x15"), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX7X7): maxValuesChanged = __updateMaxValues(dossierDescr.expand("max7x7"), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXRATED7X7): maxValuesChanged = __updateMaxValues(dossierDescr.expand("maxRated7x7"), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXSORTIE): maxValuesChanged = __updateMaxValues(dossierDescr.expand("maxFortSorties"), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFORTBATTLE): maxValuesChanged = __updateMaxValues(dossierDescr.expand("maxFortBattles"), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): if dossierDescr.isBlockInLayout("maxGlobalMapCommon"): maxValuesChanged = __updateMaxValues(dossierDescr.expand("maxGlobalMapCommon"), results, dossierXP) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFALLOUT): maxValuesChanged = __updateMaxValues(dossierDescr.expand("maxFallout"), results, dossierXP) return (maxValuesChanged, frags8p)
def __updateAccountDossierImpl(dossierDescr, results, dossierXP, vehTypeCompDescr, vehDossierDescr, maxValuesChanged, frags8p): if not vehDossierDescr is not None: raise AssertionError bonusCaps = BONUS_CAPS.get(results['bonusType']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_15X15): a15x15Cut = dossierDescr['a15x15Cut'] vehA15x15 = vehDossierDescr['a15x15'] a15x15Cut[vehTypeCompDescr] = (vehA15x15['battlesCount'], vehA15x15['wins'], vehDossierDescr['achievements']['markOfMastery'], vehA15x15['xp']) _updatePerBattleSeries(dossierDescr['achievements'], 'reliableComradeSeries', results['tdamageDealt'] == 0 and not results['tdestroyedModules']) if bool(bonusCaps & 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']) __updateCapturePointsWithBaseCapture(dossierDescr, results) __updateDefencePoints(dossierDescr, results) if bool(bonusCaps & BONUS_CAPS.DOSSIER_HISTORICAL): historicalCut = dossierDescr['historicalCut'] vehHistorical = vehDossierDescr['historical'] historicalCut[vehTypeCompDescr] = (vehHistorical['battlesCount'], vehHistorical['wins'], vehHistorical['xp']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): sortieCut = dossierDescr['fortSortiesCut'] vehSortie = vehDossierDescr['fortSorties'] sortieCut[vehTypeCompDescr] = (vehSortie['battlesCount'], vehSortie['wins'], vehSortie['xp']) fortResource = results['fortResource'] for blockName in ('fortMisc', 'fortMiscInClan'): miscBlock = dossierDescr[blockName] miscBlock['fortResourceInSorties'] += fortResource if fortResource > miscBlock['maxFortResourceInSorties']: miscBlock['maxFortResourceInSorties'] = fortResource if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): battleCut = dossierDescr['fortBattlesCut'] vehBattles = vehDossierDescr['fortBattles'] battleCut[vehTypeCompDescr] = (vehBattles['battlesCount'], vehBattles['wins'], vehBattles['xp']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): __updateAggregatedValues(dossierDescr.expand('fortSortiesInClan'), dossierDescr.expand('fortSortiesInClan'), results, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): __updateAggregatedValues(dossierDescr.expand('fortBattlesInClan'), dossierDescr.expand('fortBattlesInClan'), results, dossierXP, frags8p) bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS) and __updateAccountRecords(bonusCaps, dossierDescr, vehDossierDescr) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX15X15): for record in maxValuesChanged: dossierDescr['max15x15'][record] = vehTypeCompDescr if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX7X7): for record in maxValuesChanged: dossierDescr['max7x7'][record] = vehTypeCompDescr if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXHISTORICAL): for record in maxValuesChanged: dossierDescr['maxHistorical'][record] = vehTypeCompDescr if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXSORTIE): for record in __updateMaxValues(dossierDescr.expand('maxFortSortiesInClan'), results, dossierXP): dossierDescr['maxFortSortiesInClan'][record] = vehTypeCompDescr for record in maxValuesChanged: dossierDescr['maxFortSorties'][record] = vehTypeCompDescr if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFORTBATTLE): for record in __updateMaxValues(dossierDescr.expand('maxFortBattlesInClan'), results, dossierXP): dossierDescr['maxFortBattlesInClan'][record] = vehTypeCompDescr for record in maxValuesChanged: dossierDescr['maxFortBattles'][record] = vehTypeCompDescr return
def hasRespawns(arenBonusType = None): if arenBonusType is None: arenBonusType = getArenaBonusType() if arenBonusType is not None: return caps.get(arenBonusType) & caps.RESPAWN > 0 return False
def _updateDossierCommonPart(descr, results, originalXP, dossierXP): if not bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_TOTAL_VALUES): return (True, False, False) descr.expand() descr['battleLifeTime'] += results['lifeTime'] descr['lastBattleTime'] = int(time.time()) descr['originalXP'] += originalXP descr['damageAssistedTrack'] += results['damageAssistedTrack'] descr['damageAssistedRadio'] += results['damageAssistedRadio'] descr['mileage'] += results['mileage'] descr['shotsReceived'] += results['shotsReceived'] descr['noDamageShotsReceived'] += results['noDamageShotsReceived'] descr['piercedReceived'] += results['piercedReceived'] descr['heHitsReceived'] += results['heHitsReceived'] descr['he_hits'] += results['he_hits'] descr['pierced'] += results['pierced'] _updateDossierRecordsWithBonusTypePrefix(descr, '', results, dossierXP) if bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_COMPANY_VALUES): _updateDossierRecordsWithBonusTypePrefix(descr, 'company/', results, dossierXP) if bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_CLAN_VALUES): _updateDossierRecordsWithBonusTypePrefix(descr, 'clan/', results, dossierXP) if results['killerID'] == 0 and results['winnerTeam'] == results['team']: descr['winAndSurvived'] += 1 kill_list = results['kill_list'] if kill_list: vehTypeFrags = dict(descr['vehTypeFrags']) vehicles8p = dossiers.g_cache['vehicles8+'] beastVehicles = dossiers.g_cache['beastVehicles'] sinaiVehicles = dossiers.g_cache['sinaiVehicles'] pattonVehicles = dossiers.g_cache['pattonVehicles'] frags8p = fragsBeast = fragsSinai = fragsPatton = 0 for _, vtcd, _ in kill_list: frags = vehTypeFrags.get(vtcd, 0) vehTypeFrags[vtcd] = min(frags + 1, 60001) if vtcd in vehicles8p: frags8p += 1 if vtcd in beastVehicles: fragsBeast += 1 if vtcd in sinaiVehicles: fragsSinai += 1 if vtcd in pattonVehicles: fragsPatton += 1 descr['vehTypeFrags'] = vehTypeFrags if frags8p != 0: descr['frags8p'] += frags8p if fragsBeast != 0: descr['fragsBeast'] += fragsBeast if fragsSinai != 0: descr['fragsSinai'] += fragsSinai if fragsPatton != 0: descr['fragsPatton'] += fragsPatton if not bool(BONUS_CAPS.get(results['bonusType']) & BONUS_CAPS.DOSSIER_RND_VALUES): return (False, False, False) isMaxXPGained = False if dossierXP != 0 and dossierXP >= descr['maxXP']: isMaxXPGained = True descr['maxXP'] = dossierXP for achieveIdx in results['achievements']: arena_achievements.updateDossierRecord(descr, achieveIdx) isMaxFragsGained = False if kill_list and len(kill_list) >= descr['maxFrags']: descr['maxFrags'] = len(kill_list) isMaxFragsGained = True descr['treesCut'] += results['destroyedObjects'].get(DESTR_CODES_BY_TAGS['tree'], 0) return (False, isMaxFragsGained, isMaxXPGained)
def updateAccountDossier(dossierDescr, battleResults, dossierXP, vehDossiers, maxVehResults, winnerTeam): bonusCaps = BONUS_CAPS.get(battleResults['bonusType']) maxValuesChanged, frags8p = __updateDossierCommonPart(DOSSIER_TYPE.ACCOUNT, dossierDescr, battleResults, dossierXP, winnerTeam) if bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS): for vehTypeCompDescr, (_, vehDossierDescr) in vehDossiers.iteritems(): __updateAccountRecords(bonusCaps, dossierDescr, vehDossierDescr) if bool(bonusCaps & BONUS_CAPS.DOSSIER_ACHIEVEMENTS_15X15): _updatePerBattleSeries(dossierDescr['achievements'], 'reliableComradeSeries', battleResults['tdamageDealt'] == 0 and not battleResults['tdestroyedModules']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_7X7): __updateCapturePointsWithBaseCapture(dossierDescr, battleResults) __updateDefencePoints(dossierDescr, battleResults) if bool(bonusCaps & BONUS_CAPS.DOSSIER_SORTIE): fortResource = battleResults['fortResource'] for blockName in ('fortMisc', 'fortMiscInClan'): miscBlock = dossierDescr[blockName] miscBlock['fortResourceInSorties'] += fortResource if fortResource > miscBlock['maxFortResourceInSorties']: miscBlock['maxFortResourceInSorties'] = fortResource dossierDescr['fortSortiesInClan']['fortResource'] += battleResults['personalFortResource'] __updateAggregatedValues(dossierDescr.expand('fortSortiesInClan'), dossierDescr.expand('fortSortiesInClan'), battleResults, dossierXP, frags8p) if battleResults['division']: divisionNumber = getattr(SORTIE_DIVISION, battleResults['division']) fortSortiesInClanBlock = dossierDescr['fortSortiesInClan'] divisionLowerCase = SORTIE_DIVISION_NAMES[divisionNumber].lower() sortiesCombatsVar = '%sBattlesCount' % divisionLowerCase fortSortiesInClanBlock[sortiesCombatsVar] += 1 if battleResults['team'] == battleResults['winnerTeam']: sortiesCombatsWinsVar = '%sWins' % divisionLowerCase fortSortiesInClanBlock[sortiesCombatsWinsVar] += 1 if bool(bonusCaps & BONUS_CAPS.DOSSIER_FORT_BATTLE): __updateAggregatedValues(dossierDescr.expand('fortBattlesInClan'), dossierDescr.expand('fortBattlesInClan'), battleResults, dossierXP, frags8p) if bool(bonusCaps & BONUS_CAPS.DOSSIER_RATED7X7): clubDBID = battleResults['club'].get('clubDBID', 0) achievementsRated7x7 = dossierDescr['achievementsRated7x7'] if clubDBID != achievementsRated7x7['victoryMarchClubDBID']: achievementsRated7x7['victoryMarchClubDBID'] = clubDBID achievementsRated7x7['victoryMarchSeries'] = 0 _updatePerBattleSeries(dossierDescr['achievementsRated7x7'], 'victoryMarchSeries', battleResults['winnerTeam'] == battleResults['team']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_GLOBAL_MAP): division = battleResults['division'] if division in GLOBAL_MAP_DIVISION._ORDER: if division == GLOBAL_MAP_DIVISION.MIDDLE: blockName = 'globalMapMiddle' blockNameMax = 'maxGlobalMapMiddle' elif division == GLOBAL_MAP_DIVISION.CHAMPION: blockName = 'globalMapChampion' blockNameMax = 'maxGlobalMapChampion' elif division == GLOBAL_MAP_DIVISION.ABSOLUTE: blockName = 'globalMapAbsolute' blockNameMax = 'maxGlobalMapAbsolute' else: raise False or AssertionError __updateAggregatedValues(dossierDescr.expand(blockName), dossierDescr.expand(blockName), battleResults, dossierXP, frags8p) for record in __updateMaxValues(dossierDescr.expand(blockNameMax), battleResults, dossierXP): dossierDescr[blockNameMax][record] = maxVehResults[record] for record in maxValuesChanged: dossierDescr[blockNameMax][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX15X15): for record in maxValuesChanged: dossierDescr['max15x15'][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAX7X7): for record in maxValuesChanged: dossierDescr['max7x7'][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXRATED7X7): for record in maxValuesChanged: dossierDescr['maxRated7x7'][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFALLOUT): __updateMaxValuesWithAvatar(dossierDescr['maxFallout'], battleResults) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXSORTIE): for record in __updateMaxValues(dossierDescr.expand('maxFortSortiesInClan'), battleResults, dossierXP): dossierDescr['maxFortSortiesInClan'][record] = maxVehResults[record] for record in maxValuesChanged: dossierDescr['maxFortSorties'][record] = maxVehResults[record] if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXFORTBATTLE): for record in __updateMaxValues(dossierDescr.expand('maxFortBattlesInClan'), battleResults, dossierXP): dossierDescr['maxFortBattlesInClan'][record] = maxVehResults[record] for record in maxValuesChanged: dossierDescr['maxFortBattles'][record] = maxVehResults[record] for vehTypeCompDescr, (_, vehDossierDescr) in vehDossiers.iteritems(): __updateAccountDossierCuts(dossierDescr, battleResults, dossierXP, vehTypeCompDescr, vehDossierDescr)
def updateRated7x7Dossier(dossierDescr, battleResults, dossierXP, vehTypeCompDescr, vehDossierDescr): bonusCaps = BONUS_CAPS.get(battleResults['bonusType']) if bool(bonusCaps & BONUS_CAPS.DOSSIER_RATED7X7): __updateAggregatedValues(dossierDescr.expand('rated7x7'), dossierDescr.expand('rated7x7'), battleResults, dossierXP, frags8p=0) if bool(bonusCaps & BONUS_CAPS.DOSSIER_MAXRATED7X7): __updateMaxValues(dossierDescr.expand('maxRated7x7'), battleResults, dossierXP)