def __updateUsersData(self, userDBIDs): diff = [] userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors for userDBID in userDBIDs: data = findFirst(lambda d: d['creator'].get('dbID') == userDBID, self.collection) if data is not None: clubDBID = data['cfdUnitID'] try: index = self.mapping[clubDBID] item = self.collection[index] except (KeyError, IndexError): LOG_ERROR('Item not found', clubDBID) continue creator = userGetter(userDBID) creatorVO = makeUserVO(creator, colorGetter) creatorName = creator.getName() item.update({'creatorName': creatorName, 'rating': self.getGuiUserRating(userDBID)}) if creator.hasValidName(): item['creator'] = creatorVO diff.append(index) if len(diff): self.updateItems(diff) return
def buildList(self, selectedID, result): self.clear() userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors pNameGetter = g_lobbyContext.getPeripheryName ratingFormatter = BigWorld.wg_getIntegralFormat self._selectedIdx = -1 for unitItem in result: creator = unitItem.creator if creator: dbID = creator.dbID creatorVO = makePlayerVO(creator, userGetter(dbID), colorGetter) else: creatorVO = None cfdUnitID = unitItem.cfdUnitID index = len(self.collection) if cfdUnitID == selectedID: self._selectedIdx = index self.mapping[cfdUnitID] = index self.collection.append({'cfdUnitID': cfdUnitID, 'unitMgrID': unitItem.unitMgrID, 'creator': creatorVO, 'creatorName': creatorVO.get('userName', ''), 'rating': ratingFormatter(unitItem.rating), 'playersCount': unitItem.playersCount, 'commandSize': unitItem.commandSize, 'inBattle': unitItem.state.isInArena(), 'isFreezed': unitItem.state.isLocked(), 'isRestricted': unitItem.isRosterSet, 'description': unitItem.description, 'peripheryID': unitItem.peripheryID, 'server': pNameGetter(unitItem.peripheryID)}) return self._selectedIdx
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 if app: isPlayerSpeaking = app.voiceChatManager.isPlayerSpeaking else: isPlayerSpeaking = lambda dbID: False if unitState.isFortBattle(): makeVO = makeClanBattlePlayerVO elif unitState.isSortie(): makeVO = makeSortiePlayerVO else: makeVO = makePlayerVO 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)) if vehicle: if 'vehLevel' in vehicle: slotLevel = vehicle['vehLevel'] if 'vehTypeCompDescr' in vehicle: vehicleVO = makeVehicleVO(vehicleGetter(vehicle['vehTypeCompDescr']), levelsRange) slotLabel = makeSlotLabel(unitState, slotState, isPlayerCreator, vehCount, checkForVehicles) playerStatus = getPlayerStatus(slotState, player, unitState.isFortBattle()) if unit is not None: restrictions = makeUnitRosterVO(unit, pInfo, index=index, isSortie=unitState.isSortie(), levelsRange=levelsRange)['conditions'] else: restrictions = [] isFreezed = unitState.isLocked() or unitState.isInSearch() or unitState.isInQueue() or unitState.isInArena() slot = {'rallyIdx': unitIdx, 'isCommanderState': isPlayerCreator, 'isCurrentUserInSlot': isPlayerInSlot, 'playerStatus': playerStatus, 'isClosed': slotState.isClosed, 'isFreezed': isFreezed, 'slotLabel': slotLabel, 'player': slotPlayerUI, 'canBeTaken': canAssign, 'compatibleVehiclesCount': vehCount, 'selectedVehicle': vehicleVO, 'selectedVehicleLevel': 1 if slotState.isClosed else slotLevel, 'restrictions': restrictions} slots.append(slot) return slots
def updateList(self, selectedID, result): isFullUpdate, diff = False, [] self._selectedIdx = None userGetter = storage_getter("users")().getUser colorGetter = g_settings.getColorScheme("rosters").getColors ratingFormatter = BigWorld.wg_getIntegralFormat result = set(result) removed = set(filter(lambda item: item[1] is None, result)) isFullUpdate = len(removed) for cfdUnitID, unitItem in removed: index = self.mapping.pop(cfdUnitID, None) if index is not None: self.collection.pop(index) if cfdUnitID == selectedID: self._selectedIdx = -1 self.rebuildIndexes() if isFullUpdate: updated = result.difference(removed) else: updated = result for cfdUnitID, unitItem in updated: try: index = self.mapping[cfdUnitID] item = self.collection[index] except (KeyError, IndexError): LOG_ERROR("Item not found", unitItem) continue creator = unitItem.creator if creator: dbID = creator.dbID creatorVO = makePlayerVO(creator, userGetter(dbID), colorGetter) else: creatorVO = None item.update( { "creator": creatorVO, "creatorName": creatorVO.get("userName", ""), "rating": ratingFormatter(unitItem.rating), "playersCount": unitItem.playersCount, "commandSize": unitItem.commandSize, "inBattle": unitItem.flags.isInArena() or unitItem.flags.isInPreArena(), "isFreezed": unitItem.flags.isLocked(), "isRestricted": unitItem.isRosterSet, "description": unitItem.description, } ) diff.append(index) if self._selectedIdx is None and selectedID in self.mapping: self._selectedIdx = self.mapping[selectedID] if isFullUpdate: self.refresh() elif len(diff): self.updateItems(diff) return self._selectedIdx
def _buildData(self, candidates): isPlayerSpeaking = self.bwProto.voipController.isPlayerSpeaking userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors mapping = map(lambda pInfo: (pInfo, userGetter(pInfo.dbID)), candidates.itervalues()) sortedList = sorted(mapping, cmp=getUnitCandidatesComparator()) for pInfo, user in sortedList: dbID = pInfo.dbID self._mapping[dbID] = len(self._list) self._list.append(self._makePlayerVO(pInfo, user, colorGetter, isPlayerSpeaking(dbID)))
def updateListItem(self, userDBID): for item in self.collection: creator = item.get('creator', None) if creator is None: return creatorDBID = creator.get('dbID', None) if userDBID == creatorDBID: userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors colors = colorGetter(userGetter(creatorDBID).getGuiType()) creator['colors'] = colors self.refresh() return
def _buildData(self, candidates): if self.app is not None: isPlayerSpeaking = self.app.voiceChatManager.isPlayerSpeaking else: isPlayerSpeaking = lambda dbID: False userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors mapping = map(lambda pInfo: (pInfo, userGetter(pInfo.dbID)), candidates.itervalues()) sortedList = sorted(mapping, cmp=getUnitCandidatesComparator()) for (pInfo, user,) in sortedList: dbID = pInfo.dbID self._mapping[dbID] = len(self._list) self._list.append(self._makePlayerVO(pInfo, user, colorGetter, isPlayerSpeaking(dbID)))
def updateList(self, selectedID, result): (isFullUpdate, diff,) = (False, []) self._selectedIdx = None userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors ratingFormatter = BigWorld.wg_getIntegralFormat result = set(result) removed = set(filter(lambda item: item[1] is None, result)) isFullUpdate = len(removed) for (cfdUnitID, unitItem,) in removed: index = self.mapping.pop(cfdUnitID, None) if index is not None: self.collection.pop(index) if cfdUnitID == selectedID: self._selectedIdx = -1 self.rebuildIndexes() if isFullUpdate: updated = result.difference(removed) else: updated = result for (cfdUnitID, unitItem,) in updated: try: index = self.mapping[cfdUnitID] item = self.collection[index] except (KeyError, IndexError): LOG_ERROR('Item not found', unitItem) continue creator = unitItem.creator if creator: dbID = creator.dbID creatorVO = makePlayerVO(creator, userGetter(dbID), colorGetter) else: creatorVO = None item.update({'creator': creatorVO, 'rating': ratingFormatter(unitItem.rating), 'playersCount': unitItem.playersCount, 'commandSize': unitItem.commandSize, 'inBattle': unitItem.state.isInArena(), 'isFreezed': unitItem.state.isLocked(), 'isRestricted': unitItem.isRosterSet, 'description': unitItem.description}) diff.append(index) if self._selectedIdx is None and selectedID in self.mapping: self._selectedIdx = self.mapping[selectedID] if isFullUpdate: self.refresh() elif len(diff): self.updateItems(diff) return self._selectedIdx
def onUnitRosterChanged(self): super(FortBattleRoomWindow, self).onUnitRosterChanged() chat = self.chat if chat: _, unit = self.unitFunctional.getUnit() commanderID = unit.getCommanderDBID() if commanderID != getPlayerDatabaseID(): getter = storage_getter('users') commander = getter().getUser(commanderID) division = getDivisionNameByUnit(unit) divisionName = i18n.makeString(I18N_SYSTEM_MESSAGES.unit_notification_divisiontype(division)) key = I18N_SYSTEM_MESSAGES.UNIT_NOTIFICATION_CHANGEDIVISION txt = i18n.makeString(key, name=commander.getName(), division=divisionName) chat.addNotification(txt)
def updateListItem(self, userDBID): for item in self.collection: creator = item.get("creator", None) if creator is None: return creatorDBID = creator.get("dbID", None) if userDBID == creatorDBID: userGetter = storage_getter("users")().getUser colorGetter = g_settings.getColorScheme("rosters").getColors colors = colorGetter(userGetter(creatorDBID).getGuiType()) creator["colors"] = colors self.refresh() return return
def _buildData(self, candidates): if self.app is not None: isPlayerSpeaking = self.app.voiceChatManager.isPlayerSpeaking else: isPlayerSpeaking = lambda dbID: False userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors mapping = map(lambda pInfo: (pInfo, userGetter(pInfo.dbID)), candidates.itervalues()) sortedList = sorted(mapping, cmp=getUnitCandidatesComparator()) for pInfo, user in sortedList: dbID = pInfo.dbID self._mapping[dbID] = len(self._list) self._list.append( self._makePlayerVO(pInfo, user, colorGetter, isPlayerSpeaking(dbID)))
def buildList(self, selectedID, result, syncUserInfo=True): self.clear() userGetter = storage_getter("users")().getUser colorGetter = g_settings.getColorScheme("rosters").getColors ratingFormatter = BigWorld.wg_getIntegralFormat self._selectedIdx = -1 self._lastResult = result data = [] for clubItem in result: cfdUnitID = clubItem.getID() creatorID = clubItem.getCreatorID() rating = self.getUserRating(creatorID) creator = self._UserEntityAdapter(creatorID, clubItem, userGetter(creatorID), self) creatorName = creator.getName() creatorVO = makeUserVO(creator, colorGetter) index = len(self.collection) if cfdUnitID == selectedID: self._selectedIdx = index self.mapping[cfdUnitID] = index data.append( ( rating, { "cfdUnitID": cfdUnitID, "unitMgrID": cfdUnitID, "creator": creatorVO, "creatorName": creatorName, "rating": self.getGuiUserRating(creatorID), "playersCount": clubItem.getMembersCount(), "commandSize": clubItem.getCommandSize(), "inBattle": False, "isFreezed": False, "isRestricted": False, "description": html.escape(clubItem.getShortDescription()), "peripheryID": -1, "server": None, "ladderIcon": getLadderChevron16x16(clubItem.getDivision()), "isStatic": True, }, ) ) self.collection.extend(map(lambda (r, c): c, sorted(data, reverse=True, key=operator.itemgetter(0)))) if syncUserInfo: self.syncUsersInfo() return self._selectedIdx
def get_players(cls, in_battle=False, in_prebattle=False, clanmembers=False, friends=False): yielded_names = [] if in_battle: try: vehicles = BigWorld.player().arena.vehicles names = [] for id in vehicles: vehicle = vehicles[id] names.append(vehicle["name"]) if vehicle["name"] not in yielded_names: yield dict(name=vehicle["name"], id=vehicle["accountDBID"], in_battle=True) yielded_names.append(vehicle["name"]) log.LOG_DEBUG("Found players from battle", names) except AttributeError: pass if in_prebattle: names = [] for player in g_prebattleListener.get_players(): names.append(player["name"]) if player["name"] not in yielded_names: yield dict(player, in_battle=False) yielded_names.append(player["name"]) log.LOG_DEBUG("Found players from prebattle", names) users_storage = storage_getter('users')() if clanmembers: names = [] for member in users_storage.getClanMembersIterator(False): names.append(member.getName()) if member.getName() not in yielded_names: yield dict(name=member.getName(), id=member.getID(), in_battle=False) yielded_names.append(member.getName()) log.LOG_DEBUG("Found clan members", names) if friends: names = [] for friend in users_storage.getList(FriendsFindCriteria()): names.append(friend.getName()) if friend.getName() not in yielded_names: yield dict(name=friend.getName(), id=friend.getID(), in_battle=False) yielded_names.append(friend.getName()) log.LOG_DEBUG("Found friends", names)
def onUnitRosterChanged(self): super(FortBattleRoomWindow, self).onUnitRosterChanged() chat = self.chat if chat: _, unit = self.unitFunctional.getUnit() commanderID = unit.getCommanderDBID() if commanderID != getPlayerDatabaseID(): getter = storage_getter('users') commander = getter().getUser(commanderID) division = getDivisionNameByUnit(unit) divisionName = i18n.makeString( I18N_SYSTEM_MESSAGES.unit_notification_divisiontype( division)) key = I18N_SYSTEM_MESSAGES.UNIT_NOTIFICATION_CHANGEDIVISION txt = i18n.makeString(key, name=commander.getName(), division=divisionName) chat.addNotification(txt)
def buildList(self, selectedID, result): self.clear() userGetter = storage_getter("users")().getUser colorGetter = g_settings.getColorScheme("rosters").getColors pNameGetter = g_lobbyContext.getPeripheryName ratingFormatter = BigWorld.wg_getIntegralFormat self._selectedIdx = -1 for unitItem in result: creator = unitItem.creator if creator: dbID = creator.dbID creatorVO = makePlayerVO(creator, userGetter(dbID), colorGetter) else: creatorVO = {} if unitItem.isClub: ladderIcon = getLadderChevron16x16(unitItem.extra.divisionID) else: ladderIcon = None cfdUnitID = unitItem.cfdUnitID index = len(self.collection) if cfdUnitID == selectedID: self._selectedIdx = index self.mapping[cfdUnitID] = index self.collection.append( { "cfdUnitID": cfdUnitID, "unitMgrID": unitItem.unitMgrID, "creator": creatorVO, "creatorName": creatorVO.get("userName", ""), "rating": ratingFormatter(unitItem.rating), "playersCount": unitItem.playersCount, "commandSize": unitItem.commandSize, "inBattle": unitItem.flags.isInArena(), "isFreezed": unitItem.flags.isLocked(), "isRestricted": unitItem.isRosterSet, "description": unitItem.description, "peripheryID": unitItem.peripheryID, "server": pNameGetter(unitItem.peripheryID), "ladderIcon": ladderIcon, "isStatic": unitItem.isClub, } ) return self._selectedIdx
def buildList(self, selectedID, result): self.clear() userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors pNameGetter = g_lobbyContext.getPeripheryName ratingFormatter = BigWorld.wg_getIntegralFormat self._selectedIdx = -1 for unitItem in result: creator = unitItem.creator if creator: dbID = creator.dbID creatorVO = makePlayerVO(creator, userGetter(dbID), colorGetter) else: creatorVO = {} if unitItem.isClub: ladderIcon = getLadderChevron16x16(unitItem.extra.divisionID) else: ladderIcon = None cfdUnitID = unitItem.cfdUnitID index = len(self.collection) if cfdUnitID == selectedID: self._selectedIdx = index self.mapping[cfdUnitID] = index self.collection.append({ 'cfdUnitID': cfdUnitID, 'unitMgrID': unitItem.unitMgrID, 'creator': creatorVO, 'creatorName': creatorVO.get('userName', ''), 'rating': ratingFormatter(unitItem.rating), 'playersCount': unitItem.playersCount, 'commandSize': unitItem.commandSize, 'inBattle': unitItem.flags.isInArena(), 'isFreezed': unitItem.flags.isLocked(), 'isRestricted': unitItem.isRosterSet, 'description': unitItem.description, 'peripheryID': unitItem.peripheryID, 'server': pNameGetter(unitItem.peripheryID), 'ladderIcon': ladderIcon, 'isStatic': unitItem.isClub }) return self._selectedIdx
def __init__(self, accountsIDs, response, usersCache = None): if len(accountsIDs) > 1: errors = map(lambda (c, dbID): dbID, response.data.get('errors', [])) else: errors = [] self._successNames = [] self._errorNames = [] self._accountsIDs = accountsIDs if usersCache is None: usersGetter = storage_getter('users')() else: usersGetter = usersCache.get for dbID in accountsIDs: user = usersGetter(dbID) if not user: continue if dbID not in errors: self._successNames.append(user.getFullName(dbID)) else: self._errorNames.append(user.getFullName(dbID))
def buildList(self, selectedID, result, syncUserInfo = True): self.clear() userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors ratingFormatter = BigWorld.wg_getIntegralFormat self._selectedIdx = -1 self._lastResult = result data = [] for clubItem in result: cfdUnitID = clubItem.getID() creatorID = clubItem.getCreatorID() creator = userGetter(creatorID) rating = self.getUserRating(creatorID) if creator is None: creator = self._UserEntityAdapter(creatorID, self) creatorName = creator.getName() creatorVO = makeUserVO(creator, colorGetter) index = len(self.collection) if cfdUnitID == selectedID: self._selectedIdx = index self.mapping[cfdUnitID] = index data.append((rating, {'cfdUnitID': cfdUnitID, 'unitMgrID': cfdUnitID, 'creator': creatorVO, 'creatorName': creatorName, 'rating': ratingFormatter(rating), 'playersCount': clubItem.getMembersCount(), 'commandSize': clubItem.getCommandSize(), 'inBattle': False, 'isFreezed': False, 'isRestricted': False, 'description': html.escape(clubItem.getShortDescription()), 'peripheryID': -1, 'server': None, 'ladderIcon': getLadderChevron16x16(clubItem.getDivision()), 'isStatic': True})) self.collection.extend(map(lambda (r, c): c, sorted(data, reverse=True, key=operator.itemgetter(0)))) if syncUserInfo: self.syncUsersInfo() return self._selectedIdx
def buildList(self, selectedID, result, syncUserInfo = True): self.clear() userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors ratingFormatter = BigWorld.wg_getIntegralFormat self._selectedIdx = -1 self._lastResult = result data = [] for clubItem in result: cfdUnitID = clubItem.getID() creatorID = clubItem.getCreatorID() rating = self.getUserRating(creatorID) creator = self._UserEntityAdapter(creatorID, clubItem, userGetter(creatorID), self) creatorName = creator.getName() creatorVO = makeUserVO(creator, colorGetter) index = len(self.collection) if cfdUnitID == selectedID: self._selectedIdx = index self.mapping[cfdUnitID] = index data.append((rating, {'cfdUnitID': cfdUnitID, 'unitMgrID': cfdUnitID, 'creator': creatorVO, 'creatorName': creatorName, 'rating': self.getGuiUserRating(creatorID), 'playersCount': clubItem.getMembersCount(), 'commandSize': clubItem.getCommandSize(), 'inBattle': False, 'isFreezed': False, 'isRestricted': False, 'description': html.escape(clubItem.getShortDescription()), 'peripheryID': -1, 'server': None, 'ladderIcon': getLadderChevron16x16(clubItem.getDivision()), 'isStatic': True})) self.collection.extend(map(lambda (r, c): c, sorted(data, reverse=True, key=operator.itemgetter(0)))) if syncUserInfo: self.syncUsersInfo() return self._selectedIdx
def isIgnored(self): user = storage_getter('users')().getUser(self.getSenderID()) if user: return user.isIgnored() return False
def __findClanChannel(self): channel = storage_getter('channels')().getChannelByCriteria(self.__channelCriteria) if channel is not None: self.__initClanChannel(channel) return
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 __findClubChannel(self): channel = storage_getter('channels')().getChannelByCriteria( self.__channelCriteria) if channel is not None: self.__initClubChannel(channel)
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() if app: isPlayerSpeaking = app.voiceChatManager.isPlayerSpeaking else: isPlayerSpeaking = lambda dbID: False if unit.isSquad(): falloutBattleType = unit.getExtra().eventType isFallout = falloutBattleType != FALLOUT_BATTLE_TYPE.UNDEFINED falloutCfg = g_eventsCache.getFalloutConfig(falloutBattleType) else: falloutBattleType = FALLOUT_BATTLE_TYPE.UNDEFINED isFallout = False 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 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: if 'vehLevel' in vehicle: slotLevel = vehicle['vehLevel'] if 'vehTypeCompDescr' in vehicle: 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 == FALLOUT_BATTLE_TYPE.MULTITEAM slotLabel = makeSlotLabel(unitState, slotState, isPlayerCreator, vehCount, checkForVehicles, isRequired=isRequired) if unit.isSquad(): playerStatus = getSquadPlayerStatus(slotState, player) else: playerStatus = getPlayerStatus(slotState, player) if unit is not None: restrictions = makeUnitRosterVO(unit, pInfo, index=index, isSortie=unit.isSortie(), levelsRange=levelsRange)['conditions'] 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 isFallout: vehiclesNotify = [None, None, None] selectedVehicles = [None, None, None] if player is not None: dbID = player.dbID isCurrentPlayer = player.isCurrentPlayer() if isCurrentPlayer: if falloutBattleType == FALLOUT_BATTLE_TYPE.MULTITEAM: vehiclesNotify[0] = [i18n.makeString(MESSENGER.DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYMULTITEAM)] else: vehiclesNotify[0] = [i18n.makeString(MESSENGER.DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFY, level=text_styles.main(int2roman(falloutCfg.vehicleLevelRequired)))] if len(falloutCfg.allowedLevels) > 1: statusTemplate = i18n.makeString(MESSENGER.DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYRANGE, level=text_styles.main(toRomanRangeString(list(falloutCfg.allowedLevels), 1))) else: statusTemplate = i18n.makeString(MESSENGER.DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYMULTITEAM) for slotIdx in range(1, falloutCfg.minVehiclesPerPlayer): vehiclesNotify[slotIdx] = statusTemplate for idx, (vInvID, vehIntCD) in enumerate(unit.getExtra().accountVehicles.get(dbID, ())): selectedVehicles[idx] = makeVehicleVO(vehicleGetter(vehIntCD), falloutCfg.allowedLevels, isCurrentPlayer=isCurrentPlayer) slot['vehiclesNotify'] = vehiclesNotify slot['selectedVehicle'] = selectedVehicles slots.append(slot) return slots
def isSender(self): user = storage_getter('users')().getUser(self.getSenderID()) if user: return user.isCurrentPlayer() return False
def updateList(self, selectedID, result): isFullUpdate, diff = False, [] self._selectedIdx = None userGetter = storage_getter('users')().getUser colorGetter = g_settings.getColorScheme('rosters').getColors ratingFormatter = BigWorld.wg_getIntegralFormat result = set(result) removed = set(filter(lambda item: item[1] is None, result)) isFullUpdate = len(removed) for cfdUnitID, unitItem in removed: index = self.mapping.pop(cfdUnitID, None) if index is not None: self.collection.pop(index) if cfdUnitID == selectedID: self._selectedIdx = -1 self.rebuildIndexes() if isFullUpdate: updated = result.difference(removed) else: updated = result for cfdUnitID, unitItem in updated: try: index = self.mapping[cfdUnitID] item = self.collection[index] except (KeyError, IndexError): LOG_ERROR('Item not found', unitItem) continue creator = unitItem.creator if creator: dbID = creator.dbID creatorVO = makePlayerVO(creator, userGetter(dbID), colorGetter) else: creatorVO = None item.update({ 'creator': creatorVO, 'creatorName': creatorVO.get('userName', ''), 'rating': ratingFormatter(unitItem.rating), 'playersCount': unitItem.playersCount, 'commandSize': unitItem.commandSize, 'inBattle': unitItem.flags.isInArena() or unitItem.flags.isInPreArena(), 'isFreezed': unitItem.flags.isLocked(), 'isRestricted': unitItem.isRosterSet, 'description': unitItem.description }) diff.append(index) if self._selectedIdx is None and selectedID in self.mapping: self._selectedIdx = self.mapping[selectedID] if isFullUpdate: self.refresh() elif len(diff): self.updateItems(diff) return self._selectedIdx
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() if app: isPlayerSpeaking = app.voiceChatManager.isPlayerSpeaking else: isPlayerSpeaking = lambda dbID: False if unit.isSquad(): falloutBattleType = unit.getExtra().eventType isFallout = falloutBattleType != FALLOUT_BATTLE_TYPE.UNDEFINED falloutCfg = g_eventsCache.getFalloutConfig(falloutBattleType) else: falloutBattleType = FALLOUT_BATTLE_TYPE.UNDEFINED isFallout = False 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 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: if 'vehLevel' in vehicle: slotLevel = vehicle['vehLevel'] if 'vehTypeCompDescr' in vehicle: 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 == FALLOUT_BATTLE_TYPE.MULTITEAM slotLabel = makeSlotLabel(unitState, slotState, isPlayerCreator, vehCount, checkForVehicles, isRequired=isRequired) if unit.isSquad(): playerStatus = getSquadPlayerStatus(slotState, player) else: playerStatus = getPlayerStatus(slotState, player) if unit is not None: restrictions = makeUnitRosterVO( unit, pInfo, index=index, isSortie=unit.isSortie(), levelsRange=levelsRange)['conditions'] 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 isFallout: vehiclesNotify = [None, None, None] selectedVehicles = [None, None, None] if player is not None: dbID = player.dbID isCurrentPlayer = player.isCurrentPlayer() if isCurrentPlayer: if falloutBattleType == FALLOUT_BATTLE_TYPE.MULTITEAM: vehiclesNotify[0] = [ i18n.makeString( MESSENGER. DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYMULTITEAM ) ] else: vehiclesNotify[0] = [ i18n.makeString( MESSENGER. DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFY, level=text_styles.main( int2roman( falloutCfg.vehicleLevelRequired))) ] if len(falloutCfg.allowedLevels) > 1: statusTemplate = i18n.makeString( MESSENGER. DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYRANGE, level=text_styles.main( toRomanRangeString( list(falloutCfg.allowedLevels), 1))) else: statusTemplate = i18n.makeString( MESSENGER. DIALOGS_FALLOUTSQUADCHANNEL_VEHICLENOTIFYMULTITEAM) for slotIdx in range(1, falloutCfg.minVehiclesPerPlayer): vehiclesNotify[slotIdx] = statusTemplate for idx, (vInvID, vehIntCD) in enumerate( unit.getExtra().accountVehicles.get(dbID, ())): selectedVehicles[idx] = makeVehicleVO( vehicleGetter(vehIntCD), falloutCfg.allowedLevels, isCurrentPlayer=isCurrentPlayer) slot['vehiclesNotify'] = vehiclesNotify slot['selectedVehicle'] = selectedVehicles slots.append(slot) return slots
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 isSender(self): user = storage_getter('users')().getUser(self.getSenderID(), scope=UserEntityScope.BATTLE) return user.isCurrentPlayer() if user else False
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