def getRosters(self, keys=None): rosters = prb_getters.getPrebattleRosters() if keys is None: result = { PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1: [], PREBATTLE_ROSTER.ASSIGNED_IN_TEAM2: [], PREBATTLE_ROSTER.UNASSIGNED: [] } else: result = {} for key in keys: if PREBATTLE_ROSTER.UNASSIGNED & key != 0: result[PREBATTLE_ROSTER.UNASSIGNED] = [] result[key] = [] hasTeam1 = PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1 in result hasTeam2 = PREBATTLE_ROSTER.ASSIGNED_IN_TEAM2 in result hasUnassigned = PREBATTLE_ROSTER.UNASSIGNED in result for key, roster in rosters.iteritems(): accounts = map( lambda accInfo: prb_items.PlayerPrbInfo( accInfo[0], entity=self, roster=key, **accInfo[1]), roster.iteritems()) team, assigned = decodeRoster(key) if assigned: if hasTeam1 and team == 1: result[PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1] = accounts elif hasTeam2 and team == 2: result[PREBATTLE_ROSTER.ASSIGNED_IN_TEAM2] = accounts if hasUnassigned: result[PREBATTLE_ROSTER.UNASSIGNED].extend(accounts) return result
def getRosters(self, keys = None): rosters = prb_getters.getPrebattleRosters() if keys is None: result = {PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1: [], PREBATTLE_ROSTER.ASSIGNED_IN_TEAM2: [], PREBATTLE_ROSTER.UNASSIGNED: []} else: result = {} for key in keys: if PREBATTLE_ROSTER.UNASSIGNED & key != 0: result[PREBATTLE_ROSTER.UNASSIGNED] = [] else: result[key] = [] hasTeam1 = PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1 in result hasTeam2 = PREBATTLE_ROSTER.ASSIGNED_IN_TEAM2 in result hasUnassigned = PREBATTLE_ROSTER.UNASSIGNED in result for key, roster in rosters.iteritems(): accounts = map(lambda accInfo: prb_items.PlayerPrbInfo(accInfo[0], functional=self, roster=key, **accInfo[1]), roster.iteritems()) team, assigned = decodeRoster(key) if assigned: if hasTeam1 and team is 1: result[PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1] = accounts elif hasTeam2 and team is 2: result[PREBATTLE_ROSTER.ASSIGNED_IN_TEAM2] = accounts elif hasUnassigned: result[PREBATTLE_ROSTER.UNASSIGNED].extend(accounts) return result
def _canAddPlayers(self): clientPrb = prb_getters.getClientPrebattle() result = False if clientPrb is not None: settings = prb_getters.getPrebattleSettings(prebattle=clientPrb) rosters = prb_getters.getPrebattleRosters(prebattle=clientPrb) result, _ = limits.MaxCount().check(rosters, 1, settings.getTeamLimits(1)) return result
def _canAddPlayers(self): clientPrb = prb_getters.getClientPrebattle() result = False if clientPrb is not None: settings = prb_getters.getPrebattleSettings(prebattle=clientPrb) rosters = prb_getters.getPrebattleRosters(prebattle=clientPrb) result, _ = MaxCount().check(rosters, 1, settings.getTeamLimits(1)) return result
def isTeamsValid(self): settings = self.__entity.getSettings() rosters = prb_getters.getPrebattleRosters() for team in [1, 2]: teamLimits = settings.getTeamLimits(team) for limit in self.__teamLimits: result, errorCode = limit.check(rosters, team, teamLimits) if not result: return ValidationResult(result, errorCode)
def getRosters(self, keys = None): rosters = prb_getters.getPrebattleRosters() prbRosters = PREBATTLE_ROSTER.getRange(self.getEntityType(), self.getPlayerTeam()) result = dict(((r, []) for r in prbRosters)) for roster in prbRosters: if roster in rosters: result[roster] = map(lambda accInfo: prb_items.PlayerPrbInfo(accInfo[0], functional=self, roster=roster, **accInfo[1]), rosters[roster].iteritems()) return result
def getRosterKey(self, pID = None): rosters = prb_getters.getPrebattleRosters() rosterRange = PREBATTLE_ROSTER.getRange(self.getEntityType()) if pID is None: pID = account_helpers.getPlayerID() for roster in rosterRange: if roster in rosters and pID in rosters[roster].keys(): return roster return PREBATTLE_ROSTER.UNKNOWN
def getPlayerInfoByDbID(self, dbID): rosters = prb_getters.getPrebattleRosters() rosterRange = PREBATTLE_ROSTER.getRange(self.getEntityType()) for roster in rosterRange: if roster in rosters: for pID, data in rosters[roster].iteritems(): if data['dbID'] == dbID: return prb_items.PlayerPrbInfo(pID, functional=self, roster=roster, **rosters[roster][pID]) return prb_items.PlayerPrbInfo(-1L)
def isTeamsValid(self): settings = self.__functional.getSettings() rosters = prb_getters.getPrebattleRosters() for team in [1, 2]: teamLimits = settings.getTeamLimits(team) for limit in self.__teamLimits: result, errorCode = limit.check(rosters, team, teamLimits) if not result: return (result, errorCode) return (True, '')
def _canAddPlayers(self): """ Can new player be added to team according to max limit """ clientPrb = prb_getters.getClientPrebattle() result = False if clientPrb is not None: settings = prb_getters.getPrebattleSettings(prebattle=clientPrb) rosters = prb_getters.getPrebattleRosters(prebattle=clientPrb) result, _ = MaxCount().check(rosters, 1, settings.getTeamLimits(1)) return result
def init(self, clientPrb = None, ctx = None): if clientPrb is None: clientPrb = prb_getters.getClientPrebattle() if clientPrb is not None: clientPrb.onSettingsReceived += self.prb_onSettingsReceived clientPrb.onRosterReceived += self.prb_onRosterReceived if prb_getters.isPrebattleSettingsReceived(prebattle=clientPrb): self.prb_onSettingsReceived() if prb_getters.getPrebattleRosters(prebattle=clientPrb): self.prb_onRosterReceived() return FUNCTIONAL_FLAG.UNDEFINED
def isTeamValid(self, team=None): if team is None: team = self.__entity.getPlayerTeam() settings = self.__entity.getSettings() teamLimits = settings.getTeamLimits(team) rosters = prb_getters.getPrebattleRosters() for limit in self.__teamLimits: result, errorCode = limit.check(rosters, team, teamLimits) if not result: return ValidationResult(result, errorCode) return
def init(self, clientPrb=None, ctx=None): result = super(LegacyInitEntity, self).init(clientPrb=clientPrb, ctx=ctx) if clientPrb is None: clientPrb = prb_getters.getClientPrebattle() if clientPrb is not None: clientPrb.onSettingsReceived += self.prb_onSettingsReceived clientPrb.onRosterReceived += self.prb_onRosterReceived if prb_getters.isPrebattleSettingsReceived(prebattle=clientPrb): self.prb_onSettingsReceived() if prb_getters.getPrebattleRosters(prebattle=clientPrb): self.prb_onRosterReceived() return result
def _getRoleByDatabaseID(self, dbID=None, team=None): if dbID is None: dbID = account_helpers.getAccountDatabaseID() rosters = prb_getters.getPrebattleRosters() possibleRosters = PREBATTLE_ROSTER.getRange(self.getEntityType(), team) for roster in possibleRosters: if roster in rosters: for data in rosters[roster].itervalues(): if data['dbID'] == dbID: return data.get('role', 0) return 0
def isTeamValid(self, team = None): result, errorCode = True, '' if team is None: team = self.__functional.getPlayerTeam() settings = self.__functional.getSettings() teamLimits = settings.getTeamLimits(team) rosters = prb_getters.getPrebattleRosters() for limit in self.__teamLimits: result, errorCode = limit.check(rosters, team, teamLimits) if not result: break return (result, errorCode)
def canAssignToTeam(self, team = 1): result = super(BattleSessionPermissions, self).canAssignToTeam(team) if not result: return False else: clientPrb = prb_getters.getClientPrebattle() result = False if clientPrb is not None: settings = prb_getters.getPrebattleSettings(prebattle=clientPrb) rosters = prb_getters.getPrebattleRosters(prebattle=clientPrb) prbType = prb_getters.getPrebattleType(clientPrb, settings) result, _ = TeamNoPlayersInBattle(prbType).check(rosters, team, settings.getTeamLimits(team)) return result
def canAssignToTeam(self, team = 1): result = super(BattleSessionPrbPermissions, self).canAssignToTeam(team) if not result: return False else: clientPrb = prb_getters.getClientPrebattle() result = False if clientPrb is not None: settings = prb_getters.getPrebattleSettings(prebattle=clientPrb) rosters = prb_getters.getPrebattleRosters(prebattle=clientPrb) prbType = prb_getters.getPrebattleType(clientPrb, settings) result, _ = limits.TeamNoPlayersInBattle(prbType).check(rosters, team, settings.getTeamLimits(team)) return result
def __checkPrebattleLockedVehicle(self): clientPrb = prb_getters.getClientPrebattle() if clientPrb is not None: rosters = prb_getters.getPrebattleRosters(prebattle=clientPrb) for rId, roster in rosters.iteritems(): if BigWorld.player().id in roster: vehCompDescr = roster[BigWorld.player().id].get('vehCompDescr', '') if len(vehCompDescr): vehDescr = vehicles.VehicleDescr(vehCompDescr) vehicle = g_itemsCache.items.getItemByCD(vehDescr.type.compactDescr) if vehicle is not None: return vehicle.invID return 0
def getPlayerInfo(self, pID = None, rosterKey = None): rosters = prb_getters.getPrebattleRosters() if pID is None: pID = account_helpers.getPlayerID() if rosterKey is not None: if rosterKey in rosters and pID in rosters[rosterKey].keys(): return prb_items.PlayerPrbInfo(pID, functional=self, roster=rosterKey, **rosters[rosterKey][pID]) else: rosterRange = PREBATTLE_ROSTER.getRange(self.getEntityType()) for roster in rosterRange: if roster in rosters and pID in rosters[roster].keys(): return prb_items.PlayerPrbInfo(pID, functional=self, roster=roster, **rosters[roster][pID]) return prb_items.PlayerPrbInfo(-1L)
def __checkPrebattleLockedVehicle(self): from gui.prb_control import prb_getters clientPrb = prb_getters.getClientPrebattle() if clientPrb is not None: rosters = prb_getters.getPrebattleRosters(prebattle=clientPrb) for _, roster in rosters.iteritems(): if BigWorld.player().id in roster: vehCompDescr = roster[BigWorld.player().id].get('vehCompDescr', '') if vehCompDescr: vehDescr = VehicleDescr(vehCompDescr) vehicle = self.itemsCache.items.getItemByCD(vehDescr.type.compactDescr) if vehicle is not None: return vehicle.invID return 0
def isMaxCountValid(self, team, assigned): """ Checks is players max count valid. Args: team: team nubmer assigned: check only assigned/unassigned Returns: validation result """ settings = self.__entity.getSettings() rosters = prb_getters.getPrebattleRosters() result, errorCode = MaxCount(assigned=assigned).check( rosters, team, settings.getTeamLimits(team)) if not result: return ValidationResult(result, errorCode)
def getRosters(self, keys = None): rosters = prb_getters.getPrebattleRosters() if keys is None: result = {PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1: [], PREBATTLE_ROSTER.UNASSIGNED_IN_TEAM1: []} else: result = {} for key in keys: if key in [PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1, PREBATTLE_ROSTER.UNASSIGNED_IN_TEAM1]: result[key] = [] for key, roster in rosters.iteritems(): if key in result: result[key] = map(lambda accInfo: prb_items.PlayerPrbInfo(accInfo[0], functional=self, roster=key, **accInfo[1]), roster.iteritems()) return result
def getRosters(self, keys=None): rosters = prb_getters.getPrebattleRosters() if keys is None: result = { PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1: [], PREBATTLE_ROSTER.UNASSIGNED_IN_TEAM1: [] } else: result = {} for key in keys: if key in [ PREBATTLE_ROSTER.ASSIGNED_IN_TEAM1, PREBATTLE_ROSTER.UNASSIGNED_IN_TEAM1 ]: result[key] = [] for key, roster in rosters.iteritems(): if key in result: result[key] = map( lambda accInfo: prb_items.PlayerPrbInfo( accInfo[0], functional=self, roster=key, **accInfo[1]), roster.iteritems()) return result
def isMaxCountValid(self, team, assigned): settings = self.__functional.getSettings() rosters = prb_getters.getPrebattleRosters() return MaxCount(assigned=assigned).check(rosters, team, settings.getTeamLimits(team))
def isMaxCountValid(self, team, assigned): settings = self.__entity.getSettings() rosters = prb_getters.getPrebattleRosters() result, errorCode = MaxCount(assigned=assigned).check(rosters, team, settings.getTeamLimits(team)) return ValidationResult(result, errorCode) if not result else None