Example #1
0
    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
Example #2
0
    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
Example #3
0
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
Example #4
0
    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
Example #5
0
 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)))
Example #6
0
 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 
Example #7
0
 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)))
Example #8
0
 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
Example #9
0
    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)
Example #11
0
    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
Example #12
0
 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)))
Example #13
0
    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
Example #14
0
	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)
Example #16
0
    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
Example #17
0
    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
Example #18
0
 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))
Example #19
0
    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
Example #20
0
    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
Example #21
0
 def isIgnored(self):
     user = storage_getter('users')().getUser(self.getSenderID())
     if user:
         return user.isIgnored()
     return False
Example #22
0
 def __findClanChannel(self):
     channel = storage_getter('channels')().getChannelByCriteria(self.__channelCriteria)
     if channel is not None:
         self.__initClanChannel(channel)
     return
Example #23
0
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
Example #24
0
 def __findClubChannel(self):
     channel = storage_getter('channels')().getChannelByCriteria(
         self.__channelCriteria)
     if channel is not None:
         self.__initClubChannel(channel)
Example #25
0
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
Example #26
0
 def isSender(self):
     user = storage_getter('users')().getUser(self.getSenderID())
     if user:
         return user.isCurrentPlayer()
     return False
Example #27
0
    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
Example #28
0
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
Example #29
0
 def isIgnored(self):
     user = storage_getter('users')().getUser(self.getSenderID())
     if user:
         return user.isIgnored()
     return False
Example #30
0
 def isSender(self):
     user = storage_getter('users')().getUser(self.getSenderID())
     if user:
         return user.isCurrentPlayer()
     return False
Example #31
0
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
Example #32
0
 def isSender(self):
     user = storage_getter('users')().getUser(self.getSenderID(),
                                              scope=UserEntityScope.BATTLE)
     return user.isCurrentPlayer() if user else False
Example #33
0
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