def getBattleCommandFactory(): if g_settings.server.BW_CHAT2.isEnabled(): from messenger.proto import proto_getter factory = proto_getter(PROTO_TYPE.BW_CHAT2).get().battleCmd.factory else: from messenger.proto.bw.battle_chat_cmd import BattleCommandFactory factory = BattleCommandFactory() return factory
def __sendChatMessagePart(msg, chanId): import BattleReplay from messenger import MessengerEntry from messenger.m_constants import PROTO_TYPE from messenger.proto import proto_getter msg = msg.encode('utf-8') proto = proto_getter(PROTO_TYPE.BW_CHAT2).get() if proto is None or BattleReplay.isPlaying(): MessengerEntry.g_instance.gui.addClientMessage('OFFLINE: %s' % msg, True) elif chanId in (0, 1): # 0 == 'All', 1 == 'Team' proto.arenaChat.broadcast(msg, int(not chanId)) elif chanId == 2: proto.unitChat.broadcast(msg, 1)
def __setClubMembersList(self, members): self.usersStorage.removeTags(_TAGS) getter = self.usersStorage.getUser setter = self.usersStorage.setUser unresolved = set() for dbID in members.iterkeys(): contact = getter(dbID) if contact: contact.addTags(_TAGS) else: unresolved.add(dbID) setter(SharedUserEntity(dbID, tags={USER_TAG.CLUB_MEMBER})) if unresolved: from messenger.proto import proto_getter xmpp = proto_getter(PROTO_TYPE.XMPP).get() xmpp.nicknames.resolve(unresolved, self.__onClubMembersReceived) else: self.__onClubMembersReceived()
def _getSlotsData(unitMgrID, fullData, app=None, levelsRange=None, checkForVehicles=True, maxPlayerCount=MAX_PLAYER_COUNT_ALL): pInfo = fullData.playerInfo isPlayerCreator = pInfo.isCommander() isPlayerInSlot = pInfo.isInSlot slots = [] userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors itemsCache = dependency.instance(IItemsCache) vehicleGetter = itemsCache.items.getItemByCD canTakeSlot = not pInfo.isLegionary() bwPlugin = proto_getter(PROTO_TYPE.BW_CHAT2)(None) isPlayerSpeaking = bwPlugin.voipController.isPlayerSpeaking unit = fullData.unit makeVO = makePlayerVO rosterSlots = {} isDefaultSlot = False if unit is not None: roster = unit.getRoster() rosterSlots = roster.slots isDefaultSlot = roster.isDefaultSlot unitState = fullData.flags playerCount = 0 for slotInfo in fullData.slotsIterator: index = slotInfo.index slotState = slotInfo.state player = slotInfo.player vehicle = slotInfo.vehicle canAssign, vehicles = pInfo.canAssignToSlot(index) vehCount = len(vehicles) slotLevel = 0 vehicleVO = None slotPlayerUI = None if player is not None: dbID = player.dbID slotPlayerUI = makeVO(player, userGetter(dbID), colorGetter, isPlayerSpeaking(dbID)) isCurrentPlayer = player.isCurrentPlayer() if vehicle: slotLevel = vehicle.vehLevel if vehicle.vehTypeCompDescr: vehicleVO = makeVehicleVO(vehicleGetter( vehicle.vehTypeCompDescr), levelsRange, isCurrentPlayer=isCurrentPlayer) isRequired = False slotLabel = makeSlotLabel(unitState, slotState, isPlayerCreator, vehCount, checkForVehicles, isRequired=isRequired) if unit.isPrebattlesSquad(): playerStatus = getSquadPlayerStatus(slotState, player) else: playerStatus = getPlayerStatus(slotState, player) if unit is not None: restrictions = makeUnitRosterConditions(rosterSlots, isDefaultSlot, index=index, levelsRange=levelsRange) else: restrictions = [] rating = '' isLegionaries = False role = 0 if player is not None: isLegionaries = player.isLegionary() rating = BigWorld.wg_getIntegralFormat(player.rating) role = player.role if maxPlayerCount == MAX_PLAYER_COUNT_ALL or playerCount < maxPlayerCount: isLocked = False else: isLocked = True slot = { 'rallyIdx': unitMgrID, 'isCommanderState': isPlayerCreator, 'isCurrentUserInSlot': isPlayerInSlot, 'playerStatus': playerStatus, 'isClosed': slotState.isClosed, 'isFreezed': unitState.isFreezed(), 'slotLabel': slotLabel, 'player': slotPlayerUI, 'canBeTaken': canAssign and canTakeSlot, 'compatibleVehiclesCount': vehCount, 'selectedVehicle': vehicleVO, 'selectedVehicleLevel': 1 if slotState.isClosed else slotLevel, 'restrictions': restrictions, 'isFallout': False, 'rating': rating, 'isLegionaries': isLegionaries, 'isLocked': isLocked, 'role': role } if unit.isSquad(): eventsCache = dependency.instance(IEventsCache) if eventsCache.isBalancedSquadEnabled(): isVisibleAdtMsg = player and player.isCurrentPlayer( ) and not isPlayerCreator and not vehicle and unit and bool( unit.getVehicles()) if isVisibleAdtMsg: rangeString = toRomanRangeString(levelsRange, 1) additionMsg = text_styles.main( i18n.makeString( MESSENGER.DIALOGS_SIMPLESQUAD_VEHICLELEVEL, level=rangeString)) else: additionMsg = '' slot.update({ 'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionMsg }) elif eventsCache.isSquadXpFactorsEnabled(): vehicles = unit.getVehicles() levels = unit.getSelectedVehicleLevels() isVisibleAdtMsg = False additionalMsg = '' unitHasXpBonus = True unitHasXpPenalty = False if vehicles: distance = levels[-1] - levels[0] unitHasXpBonus = distance in eventsCache.getSquadBonusLevelDistance( ) unitHasXpPenalty = distance in eventsCache.getSquadPenaltyLevelDistance( ) isVisibleAdtMsg = unitHasXpBonus and player and player.isCurrentPlayer( ) and not vehicle if isVisibleAdtMsg: maxDistance = max( eventsCache.getSquadBonusLevelDistance()) minLevel = max(MIN_VEHICLE_LEVEL, levels[0] - maxDistance) maxLevel = min(MAX_VEHICLE_LEVEL, levels[0] + maxDistance) rangeString = toRomanRangeString( range(minLevel, maxLevel + 1), 1) additionalMsg = text_styles.main( i18n.makeString( MESSENGER.DIALOGS_SIMPLESQUAD_VEHICLELEVEL, level=rangeString)) slotNotificationIcon = '' slotNotificationIconTooltip = '' if vehicle: if unitHasXpPenalty: slotNotificationIcon = RES_ICONS.MAPS_ICONS_LIBRARY_CYBERSPORT_ALERTICON slotNotificationIconTooltip = makeTooltip( TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_ALERT_HEADER, TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_ALERT_BODY, None, TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_ALERT_ALERT) elif not unitHasXpBonus: slotNotificationIcon = RES_ICONS.MAPS_ICONS_LIBRARY_ATTENTIONICON slotNotificationIconTooltip = makeTooltip( TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_INFO_HEADER, TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_INFO_BODY) slot.update({ 'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionalMsg, 'slotNotificationIconTooltip': slotNotificationIconTooltip, 'slotNotificationIcon': slotNotificationIcon }) if unit.isEvent(): isVisibleAdtMsg = player and player.isCurrentPlayer( ) and not vehicle additionMsg = '' if isVisibleAdtMsg: eventsCache = dependency.instance(IEventsCache) vehiclesNames = [ veh.userName for veh in eventsCache.getEventVehicles() ] additionMsg = text_styles.main( i18n.makeString(MESSENGER.DIALOGS_EVENTSQUAD_VEHICLE, vehName=', '.join(vehiclesNames))) slot.update({ 'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionMsg }) slots.append(slot) playerCount += 1 return slots
def _getSlotsData(unitIdx, unit, unitState, pInfo, slotsIter, app = None, levelsRange = None, checkForVehicles = True): isPlayerCreator = pInfo.isCreator() isPlayerInSlot = pInfo.isInSlot slots = [] userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors vehicleGetter = g_itemsCache.items.getItemByCD canTakeSlot = not pInfo.isLegionary() bwPlugin = proto_getter(PROTO_TYPE.BW_CHAT2)(None) isPlayerSpeaking = bwPlugin.voipController.isPlayerSpeaking falloutCtrl = getFalloutCtrl() isFallout = falloutCtrl.isEnabled() if isFallout: falloutBattleType = falloutCtrl.getBattleType() falloutCfg = falloutCtrl.getConfig() else: falloutBattleType = QUEUE_TYPE.UNKNOWN falloutCfg = None if unit is None: makeVO = makePlayerVO elif unit.isFortBattle(): makeVO = makeClanBattlePlayerVO elif unit.isSortie(): makeVO = makeSortiePlayerVO elif unit.isClub(): makeVO = makeStaticFormationPlayerVO else: makeVO = makePlayerVO rosterSlots = {} isDefaultSlot = False if unit is not None: roster = unit.getRoster() rosterSlots = roster.slots isDefaultSlot = roster.isDefaultSlot for slotInfo in slotsIter: index = slotInfo.index slotState = slotInfo.state player = slotInfo.player vehicle = slotInfo.vehicle canAssign, vehicles = pInfo.canAssignToSlot(index) vehCount = len(vehicles) slotLevel = 0 vehicleVO = None slotPlayerUI = None if player is not None: dbID = player.dbID slotPlayerUI = makeVO(player, userGetter(dbID), colorGetter, isPlayerSpeaking(dbID)) isCurrentPlayer = player.isCurrentPlayer() if vehicle: slotLevel = vehicle.vehLevel if vehicle.vehTypeCompDescr: vehicleVO = makeVehicleVO(vehicleGetter(vehicle.vehTypeCompDescr), levelsRange, isCurrentPlayer=isCurrentPlayer) if unit is not None and unit.isClub(): slotLabel = makeStaticSlotLabel(unitState, slotState, isPlayerCreator, vehCount, checkForVehicles, pInfo.isLegionary(), unit.isRated()) else: isRequired = falloutBattleType == QUEUE_TYPE.FALLOUT_MULTITEAM slotLabel = makeSlotLabel(unitState, slotState, isPlayerCreator, vehCount, checkForVehicles, isRequired=isRequired) if unit.isPrebattlesSquad(): playerStatus = getSquadPlayerStatus(slotState, player) else: playerStatus = getPlayerStatus(slotState, player) if unit is not None: restrictions = makeUnitRosterConditions(rosterSlots, isDefaultSlot, index=index, isSortie=unit.isSortie(), levelsRange=levelsRange) else: restrictions = [] slot = {'rallyIdx': unitIdx, 'isCommanderState': isPlayerCreator, 'isCurrentUserInSlot': isPlayerInSlot, 'playerStatus': playerStatus, 'isClosed': slotState.isClosed, 'isFreezed': unitState.isFreezed(), 'slotLabel': slotLabel, 'player': slotPlayerUI, 'canBeTaken': canAssign and canTakeSlot, 'compatibleVehiclesCount': vehCount, 'selectedVehicle': vehicleVO, 'selectedVehicleLevel': 1 if slotState.isClosed else slotLevel, 'restrictions': restrictions, 'isFallout': isFallout} if unit.isSquad(): if g_eventsCache.isBalancedSquadEnabled(): isVisibleAdtMsg = player and player.isCurrentPlayer() and not isPlayerCreator and not vehicle and unit and bool(unit.getMemberVehicles(unit.getCommanderDBID())) if isVisibleAdtMsg: rangeString = toRomanRangeString(levelsRange, 1) additionMsg = text_styles.main(i18n.makeString(MESSENGER.DIALOGS_SIMPLESQUAD_VEHICLELEVEL, level=rangeString)) else: additionMsg = '' slot.update({'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionMsg}) elif g_eventsCache.isSquadXpFactorsEnabled(): vehicles = unit.getVehicles() levels = unit.getSelectedVehicleLevels() isVisibleAdtMsg = False additionalMsg = '' unitHasXpBonus = True unitHasXpPenalty = False if vehicles: distance = levels[-1] - levels[0] unitHasXpBonus = distance in g_eventsCache.getSquadBonusLevelDistance() unitHasXpPenalty = distance in g_eventsCache.getSquadPenaltyLevelDistance() isVisibleAdtMsg = unitHasXpBonus and player and player.isCurrentPlayer() and not vehicle if isVisibleAdtMsg: maxDistance = max(g_eventsCache.getSquadBonusLevelDistance()) minLevel = max(MIN_VEHICLE_LEVEL, levels[0] - maxDistance) maxLevel = min(MAX_VEHICLE_LEVEL, levels[0] + maxDistance) rangeString = toRomanRangeString(range(minLevel, maxLevel + 1), 1) additionalMsg = text_styles.main(i18n.makeString(MESSENGER.DIALOGS_SIMPLESQUAD_VEHICLELEVEL, level=rangeString)) slotNotificationIcon = '' slotNotificationIconTooltip = '' if vehicle: if unitHasXpPenalty: slotNotificationIcon = RES_ICONS.MAPS_ICONS_LIBRARY_CYBERSPORT_ALERTICON slotNotificationIconTooltip = makeTooltip(TOOLTIPS.SQUADWINDOW_SIMPLESLOTNOTIFICATION_ALERT_HEADER, TOOLTIPS.SQUADWINDOW_SIMPLESLOTNOTIFICATION_ALERT_BODY, None, TOOLTIPS.SQUADWINDOW_SIMPLESLOTNOTIFICATION_ALERT_ALERT) elif not unitHasXpBonus: slotNotificationIcon = RES_ICONS.MAPS_ICONS_LIBRARY_ATTENTIONICON slotNotificationIconTooltip = makeTooltip(TOOLTIPS.SQUADWINDOW_SIMPLESLOTNOTIFICATION_INFO_HEADER, TOOLTIPS.SQUADWINDOW_SIMPLESLOTNOTIFICATION_INFO_BODY) slot.update({'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionalMsg, 'slotNotificationIconTooltip': slotNotificationIconTooltip, 'slotNotificationIcon': slotNotificationIcon}) if unit.isEvent(): isVisibleAdtMsg = player and player.isCurrentPlayer() and not vehicle additionMsg = '' if isVisibleAdtMsg: vehiclesNames = [ veh.userName for veh in g_eventsCache.getEventVehicles() ] additionMsg = text_styles.main(i18n.makeString(MESSENGER.DIALOGS_EVENTSQUAD_VEHICLE, vehName=', '.join(vehiclesNames))) slot.update({'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionMsg}) if isFallout: vehiclesNotify = [None, None, None] selectedVehicles = [None, None, None] if player is not None: dbID = player.dbID isCurrentPlayer = player.isCurrentPlayer() if isCurrentPlayer: statusTemplate = None if falloutBattleType == QUEUE_TYPE.FALLOUT_MULTITEAM: minVehiclesPerPlayer = falloutCfg.minVehiclesPerPlayer if len(falloutCtrl.getSelectedVehicles()) < minVehiclesPerPlayer: statusTemplate = i18n.makeString(MESSENGER.DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYMULTITEAM) elif falloutCtrl.mustSelectRequiredVehicle(): statusTemplate = i18n.makeString(MESSENGER.DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFY, level=text_styles.main(int2roman(falloutCfg.vehicleLevelRequired))) else: statusTemplate = i18n.makeString(MESSENGER.DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYRANGE, level=text_styles.main(toRomanRangeString(list(falloutCfg.allowedLevels), 1))) if statusTemplate is not None: for slotIdx in range(falloutCfg.minVehiclesPerPlayer): vehiclesNotify[slotIdx] = statusTemplate for idx, vehicle in enumerate(unit.getVehicles().get(dbID, ())): selectedVehicles[idx] = makeVehicleVO(vehicleGetter(vehicle.vehTypeCompDescr), falloutCfg.allowedLevels, isCurrentPlayer=isCurrentPlayer) slot['vehiclesNotify'] = vehiclesNotify slot['selectedVehicle'] = selectedVehicles slots.append(slot) return slots
def _getSlotsData(unitMgrID, fullData, levelsRange=None, checkForVehicles=True, maxPlayerCount=MAX_PLAYER_COUNT_ALL, withPrem=False): pInfo = fullData.playerInfo isPlayerCreator = pInfo.isCommander() isPlayerInSlot = pInfo.isInSlot slots = [] userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors itemsCache = dependency.instance(IItemsCache) vehicleGetter = itemsCache.items.getItemByCD lobbyContext = dependency.instance(ILobbyContext) squadPremBonusEnabled = lobbyContext.getServerSettings( ).squadPremiumBonus.isEnabled canTakeSlot = not pInfo.isLegionary() bwPlugin = proto_getter(PROTO_TYPE.BW_CHAT2)(None) isPlayerSpeaking = bwPlugin.voipController.isPlayerSpeaking unit = fullData.unit rosterSlots = {} isDefaultSlot = False if unit is not None: roster = unit.getRoster() rosterSlots = roster.slots isDefaultSlot = roster.isDefaultSlot if unit.getPrebattleType() in PREBATTLE_TYPE.EXTERNAL_PREBATTLES: canTakeSlot = canTakeSlot and not isPlayerInSlot unitState = fullData.flags playerCount = 0 for slotInfo in fullData.slotsIterator: index = slotInfo.index slotState = slotInfo.state player = slotInfo.player vehicle = slotInfo.vehicle canAssign, vehicles = pInfo.canAssignToSlot(index) vehCount = len(vehicles) slotLevel = 0 vehicleVO = None slotPlayerUI = None if player is not None: dbID = player.dbID slotPlayerUI = makePlayerVO(player, userGetter(dbID), colorGetter, isPlayerSpeaking(dbID)) isCurrentPlayer = player.isCurrentPlayer() if vehicle: slotLevel = vehicle.vehLevel if vehicle.vehTypeCompDescr: vehicleVO = makeVehicleVO(vehicleGetter( vehicle.vehTypeCompDescr), levelsRange, isCurrentPlayer=isCurrentPlayer) isRequired = False if unit is not None and unit.getPrebattleType( ) == PREBATTLE_TYPE.BATTLE_ROYALE: slotLabel = makeBattleRoyaleSlotLabel(slotState) else: slotLabel = makeSlotLabel(unitState, slotState, isPlayerCreator, vehCount, checkForVehicles, isRequired=isRequired) if unit.isPrebattlesSquad(): playerStatus = getSquadPlayerStatus(slotState, player) else: playerStatus = getPlayerStatus(slotState, player) if unit is not None: restrictions = makeUnitRosterConditions(rosterSlots, isDefaultSlot, index=index, levelsRange=levelsRange) else: restrictions = [] rating = '' isLegionaries = False role = 0 if player is not None: isLegionaries = player.isLegionary() rating = backport.getIntegralFormat(player.rating) role = player.role if maxPlayerCount == MAX_PLAYER_COUNT_ALL or playerCount < maxPlayerCount: isLocked = False else: isLocked = True slot = { 'rallyIdx': unitMgrID, 'isCommanderState': isPlayerCreator, 'isCurrentUserInSlot': isPlayerInSlot, 'playerStatus': playerStatus, 'isClosed': slotState.isClosed, 'isFreezed': unitState.isFreezed(), 'slotLabel': slotLabel, 'player': slotPlayerUI, 'canBeTaken': canAssign and canTakeSlot, 'compatibleVehiclesCount': vehCount, 'selectedVehicle': vehicleVO, 'selectedVehicleLevel': 1 if slotState.isClosed else slotLevel, 'restrictions': restrictions, 'isEvent': False, 'rating': rating, 'isLegionaries': isLegionaries, 'isLocked': isLocked, 'role': role } if withPrem: slot['hasPremiumAccount'] = player and player.hasPremium if unit.isSquad(): eventsCache = dependency.instance(IEventsCache) if eventsCache.isBalancedSquadEnabled(): isVisibleAdtMsg = player and player.isCurrentPlayer( ) and not isPlayerCreator and not vehicle and unit and bool( unit.getVehicles()) if isVisibleAdtMsg: rangeString = toRomanRangeString(levelsRange, 1) additionMsg = text_styles.main( i18n.makeString( MESSENGER.DIALOGS_SIMPLESQUAD_VEHICLELEVEL, level=rangeString)) else: additionMsg = '' slot.update({ 'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionMsg }) elif eventsCache.isSquadXpFactorsEnabled(): slot.update(_getXPFactorSlotInfo(unit, eventsCache, slotInfo)) if unit.isEvent(): isVisibleAdtMsg = player and player.isCurrentPlayer( ) and not vehicle additionMsg = '' if isVisibleAdtMsg: eventsCache = dependency.instance(IEventsCache) vehiclesNames = [ veh.userName for veh in eventsCache.getEventVehicles() ] additionMsg = text_styles.main( i18n.makeString(MESSENGER.DIALOGS_EVENTSQUAD_VEHICLE, vehName=', '.join(vehiclesNames))) slot.update({ 'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionMsg }) elif unit.getPrebattleType( ) == PREBATTLE_TYPE.EPIC and squadPremBonusEnabled: slot.update(_updateEpicBattleSlotInfo(player, vehicle)) elif unit.getPrebattleType() == PREBATTLE_TYPE.BATTLE_ROYALE: slot.update(_updateBattleRoyaleSlotInfo(player, vehicle)) slots.append(slot) playerCount += 1 return slots
def _getSlotsData(unitIdx, unit, unitState, pInfo, slotsIter, app=None, levelsRange=None, checkForVehicles=True): isPlayerCreator = pInfo.isCreator() isPlayerInSlot = pInfo.isInSlot slots = [] userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors vehicleGetter = g_itemsCache.items.getItemByCD canTakeSlot = not pInfo.isLegionary() bwPlugin = proto_getter(PROTO_TYPE.BW_CHAT2)(None) isPlayerSpeaking = bwPlugin.voipController.isPlayerSpeaking falloutCtrl = getFalloutCtrl() isFallout = falloutCtrl.isEnabled() if isFallout: falloutBattleType = falloutCtrl.getBattleType() falloutCfg = falloutCtrl.getConfig() else: falloutBattleType = QUEUE_TYPE.UNKNOWN falloutCfg = None if unit is None: makeVO = makePlayerVO elif unit.isFortBattle(): makeVO = makeClanBattlePlayerVO elif unit.isSortie(): makeVO = makeSortiePlayerVO elif unit.isClub(): makeVO = makeStaticFormationPlayerVO else: makeVO = makePlayerVO rosterSlots = {} isDefaultSlot = False if unit is not None: roster = unit.getRoster() rosterSlots = roster.slots isDefaultSlot = roster.isDefaultSlot for slotInfo in slotsIter: index = slotInfo.index slotState = slotInfo.state player = slotInfo.player vehicle = slotInfo.vehicle canAssign, vehicles = pInfo.canAssignToSlot(index) vehCount = len(vehicles) slotLevel = 0 vehicleVO = None slotPlayerUI = None if player is not None: dbID = player.dbID slotPlayerUI = makeVO(player, userGetter(dbID), colorGetter, isPlayerSpeaking(dbID)) isCurrentPlayer = player.isCurrentPlayer() if vehicle: slotLevel = vehicle.vehLevel if vehicle.vehTypeCompDescr: vehicleVO = makeVehicleVO(vehicleGetter( vehicle.vehTypeCompDescr), levelsRange, isCurrentPlayer=isCurrentPlayer) if unit is not None and unit.isClub(): slotLabel = makeStaticSlotLabel(unitState, slotState, isPlayerCreator, vehCount, checkForVehicles, pInfo.isLegionary(), unit.isRated()) else: isRequired = falloutBattleType == QUEUE_TYPE.FALLOUT_MULTITEAM slotLabel = makeSlotLabel(unitState, slotState, isPlayerCreator, vehCount, checkForVehicles, isRequired=isRequired) if unit.isPrebattlesSquad(): playerStatus = getSquadPlayerStatus(slotState, player) else: playerStatus = getPlayerStatus(slotState, player) if unit is not None: restrictions = makeUnitRosterConditions(rosterSlots, isDefaultSlot, index=index, isSortie=unit.isSortie(), levelsRange=levelsRange) else: restrictions = [] slot = { 'rallyIdx': unitIdx, 'isCommanderState': isPlayerCreator, 'isCurrentUserInSlot': isPlayerInSlot, 'playerStatus': playerStatus, 'isClosed': slotState.isClosed, 'isFreezed': unitState.isFreezed(), 'slotLabel': slotLabel, 'player': slotPlayerUI, 'canBeTaken': canAssign and canTakeSlot, 'compatibleVehiclesCount': vehCount, 'selectedVehicle': vehicleVO, 'selectedVehicleLevel': 1 if slotState.isClosed else slotLevel, 'restrictions': restrictions, 'isFallout': isFallout } if unit.isSquad(): if g_eventsCache.isBalancedSquadEnabled(): isVisibleAdtMsg = player and player.isCurrentPlayer( ) and not isPlayerCreator and not vehicle and unit and bool( unit.getMemberVehicles(unit.getCommanderDBID())) if isVisibleAdtMsg: rangeString = toRomanRangeString(levelsRange, 1) additionMsg = text_styles.main( i18n.makeString( MESSENGER.DIALOGS_SIMPLESQUAD_VEHICLELEVEL, level=rangeString)) else: additionMsg = '' slot.update({ 'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionMsg }) elif g_eventsCache.isSquadXpFactorsEnabled(): vehicles = unit.getVehicles() levels = unit.getSelectedVehicleLevels() isVisibleAdtMsg = False additionalMsg = '' unitHasXpBonus = True unitHasXpPenalty = False if vehicles: distance = levels[-1] - levels[0] unitHasXpBonus = distance in g_eventsCache.getSquadBonusLevelDistance( ) unitHasXpPenalty = distance in g_eventsCache.getSquadPenaltyLevelDistance( ) isVisibleAdtMsg = unitHasXpBonus and player and player.isCurrentPlayer( ) and not vehicle if isVisibleAdtMsg: maxDistance = max( g_eventsCache.getSquadBonusLevelDistance()) minLevel = max(MIN_VEHICLE_LEVEL, levels[0] - maxDistance) maxLevel = min(MAX_VEHICLE_LEVEL, levels[0] + maxDistance) rangeString = toRomanRangeString( range(minLevel, maxLevel + 1), 1) additionalMsg = text_styles.main( i18n.makeString( MESSENGER.DIALOGS_SIMPLESQUAD_VEHICLELEVEL, level=rangeString)) slotNotificationIcon = '' slotNotificationIconTooltip = '' if vehicle: if unitHasXpPenalty: slotNotificationIcon = RES_ICONS.MAPS_ICONS_LIBRARY_CYBERSPORT_ALERTICON slotNotificationIconTooltip = makeTooltip( TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_ALERT_HEADER, TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_ALERT_BODY, None, TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_ALERT_ALERT) elif not unitHasXpBonus: slotNotificationIcon = RES_ICONS.MAPS_ICONS_LIBRARY_ATTENTIONICON slotNotificationIconTooltip = makeTooltip( TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_INFO_HEADER, TOOLTIPS. SQUADWINDOW_SIMPLESLOTNOTIFICATION_INFO_BODY) slot.update({ 'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionalMsg, 'slotNotificationIconTooltip': slotNotificationIconTooltip, 'slotNotificationIcon': slotNotificationIcon }) if unit.isEvent(): isVisibleAdtMsg = player and player.isCurrentPlayer( ) and not vehicle additionMsg = '' if isVisibleAdtMsg: vehiclesNames = [ veh.userName for veh in g_eventsCache.getEventVehicles() ] additionMsg = text_styles.main( i18n.makeString(MESSENGER.DIALOGS_EVENTSQUAD_VEHICLE, vehName=', '.join(vehiclesNames))) slot.update({ 'isVisibleAdtMsg': isVisibleAdtMsg, 'additionalMsg': additionMsg }) if isFallout: vehiclesNotify = [None, None, None] selectedVehicles = [None, None, None] if player is not None: dbID = player.dbID isCurrentPlayer = player.isCurrentPlayer() if isCurrentPlayer: statusTemplate = None if falloutBattleType == QUEUE_TYPE.FALLOUT_MULTITEAM: minVehiclesPerPlayer = falloutCfg.minVehiclesPerPlayer if len(falloutCtrl.getSelectedVehicles() ) < minVehiclesPerPlayer: statusTemplate = i18n.makeString( MESSENGER. DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYMULTITEAM ) elif falloutCtrl.mustSelectRequiredVehicle(): statusTemplate = i18n.makeString( MESSENGER. DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFY, level=text_styles.main( int2roman(falloutCfg.vehicleLevelRequired))) else: statusTemplate = i18n.makeString( MESSENGER. DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYRANGE, level=text_styles.main( toRomanRangeString( list(falloutCfg.allowedLevels), 1))) if statusTemplate is not None: for slotIdx in range(falloutCfg.minVehiclesPerPlayer): vehiclesNotify[slotIdx] = statusTemplate for idx, vehicle in enumerate(unit.getVehicles().get(dbID, ())): selectedVehicles[idx] = makeVehicleVO( vehicleGetter(vehicle.vehTypeCompDescr), falloutCfg.allowedLevels, isCurrentPlayer=isCurrentPlayer) slot['vehiclesNotify'] = vehiclesNotify slot['selectedVehicle'] = selectedVehicles slots.append(slot) return slots