def playerDied(self, player, *args, **kwargs): self.world.sendServerCommand( SetPlayerTeamMsg(player.id, NEUTRAL_TEAM_ID)) listener = self.playerDeathListeners.pop(player) player.onDied.removeListener(listener) self.onRabbitKilled(player) if not self.playerDeathListeners: self.onNoMoreRabbits()
async def run(self): try: self.setTeamName(self.blueTeam, 'Hunters') self.setTeamName(self.redTeam, 'Hunted') self.redTeam.abilities.set(aggression=False) for player in self.world.players: if not player.bot: self.world.sendServerCommand( SetPlayerTeamMsg(player.id, self.redTeam.id)) zone = self.world.selectZoneForTeam(self.redTeam.id) self.world.magicallyMovePlayer(player, zone.defn.pos, alive=True) SlowlyIncrementLivePlayerCoinsTrigger(self).activate() scoreTrigger = PlayerLifeScoreTrigger(self, teams={self.redTeam }).activate() PlayerKillScoreTrigger(self, dieScore=0).activate() botTrigger = AddLimitedBotsTrigger(self, MIN_HUNTERS, MAX_HUNTERS, 'terminator', 'Terminator', self.blueTeam).activate() self.world.setActiveAchievementCategories({ACHIEVEMENT_TACTICAL}) self.setUserInfo('Hunted', ( '* Die as few times as possible', '* Players score points for every second they are alive', ), BOT_GOAL_KILL_THINGS) self.world.abilities.set(zoneCaps=False, balanceTeams=False) self.world.uiOptions.set(teamIdsHumansCanJoin=[b'B']) if self.duration: self.world.clock.startCountDown(self.duration) else: self.world.clock.stop() self.world.clock.propagateToClients() await self.world.clock.onZero.wait_future() # Game over! self.world.finaliseStats() scoreTrigger.deactivate() botTrigger.deactivate() playerScores = self.world.scoreboard.playerScores maxScore = max(playerScores.values()) winners = [ p for p, score in list(playerScores.items()) if score == maxScore and p.team == self.redTeam ] self.playSound('game-over-whistle.ogg') for winner in winners: self.notifyAll('{} wins'.format(winner.nick)) self.world.sendServerCommand( AwardPlayerCoinMsg(winner.id, BONUS_COINS_FOR_WINNER)) await self.world.sleep_future(3) finally: self.redTeam.abilities.set(aggression=True)
async def run(self): self.setTeamName(self.blueTeam, 'Cats') self.setTeamName(self.redTeam, 'Pigeons') for player in self.world.players: if not player.bot: self.world.sendServerCommand( SetPlayerTeamMsg(player.id, self.blueTeam.id)) SlowlyIncrementLivePlayerCoinsTrigger(self).activate() scoreTrigger = PlayerKillScoreTrigger(self).activate() RespawnOnJoinTrigger(self).activate() botTrigger = AddLimitedBotsTrigger(self, MIN_PIGEONS, MAX_PIGEONS, 'sirrobin', 'Pigeon', self.redTeam).activate() self.world.setActiveAchievementCategories({ACHIEVEMENT_TACTICAL}) self.setUserInfo('Cat Among Pigeons', ('* Kill as many enemy players as you can', ), BOT_GOAL_HUNT_RABBITS) self.world.abilities.set(zoneCaps=False, balanceTeams=False) self.world.uiOptions.set(teamIdsHumansCanJoin=[b'A']) if self.duration: self.world.clock.startCountDown(self.duration) else: self.world.clock.stop() self.world.clock.propagateToClients() await self.world.clock.onZero.wait_future() # Game over! self.world.finaliseStats() scoreTrigger.deactivate() botTrigger.deactivate() playerScores = self.world.scoreboard.playerScores maxScore = max(playerScores.values()) winners = [ p for p, score in list(playerScores.items()) if score == maxScore and p.team == self.blueTeam ] self.playSound('game-over-whistle.ogg') for winner in winners: self.notifyAll('{} wins'.format(winner.nick)) self.world.sendServerCommand( AwardPlayerCoinMsg(winner.id, BONUS_COINS_FOR_WINNER)) await self.world.sleep_future(3)
def doActivate(self): for player in self.world.players: if player.team is None: continue if player.dead: self.world.sendServerCommand( SetPlayerTeamMsg(player.id, NEUTRAL_TEAM_ID)) else: listener = partial(self.playerDied, player) player.onDied.addListener(listener) self.playerDeathListeners[player] = listener self.world.onPlayerAdded.addListener(self.newPlayerAdded) self.world.onPlayerRemoved.addListener(self.playerRemoved) if not self.playerDeathListeners: self.onNoMoreRabbits()
async def run(self): for player in self.world.players: if player.team is not None: self.world.sendServerCommand( SetPlayerTeamMsg(player.id, NEUTRAL_TEAM_ID)) if not player.bot: self.world.sendServerCommand(PlayerIsReadyMsg( player.id, False)) MakeNewPlayersNeutralTrigger(self).activate() if not self.world.isOnceOnly(): self.world.uiOptions.set( showReadyStates=True, teamIdsHumansCanJoin=[NEUTRAL_TEAM_ID], ) AddBotsForLobbyTrigger(self).activate() StartGameWhenReadyTrigger(self).activate() autoStartTime = self.lobbySettings.getAutoStartCountDown() title = 'Lobby' userInfo = ( '* Free for all', '* Select preferred options from top menu', '* A match will start when enough players select "ready"', ) else: title = 'Game Over' userInfo = ('Use the menu in the bottom left to leave game', ) autoStartTime = None self.setUserInfo(title, userInfo, BOT_GOAL_NONE) self.world.abilities.set(zoneCaps=False, renaming=True) self.world.onChangeVoiceChatRooms([], []) if autoStartTime is not None: self.world.clock.startCountDown(autoStartTime) self.world.clock.propagateToClients() await self.world.clock.onZero.wait_future() self.world.voteArbiter.startSomeGameNow() # Lobby never finishes until it is canceled because a new level is # started. await asyncio.get_event_loop().create_future()
async def run(self): for player in self.world.players: self.world.sendServerCommand( SetPlayerTeamMsg(player.id, NEUTRAL_TEAM_ID)) SlowlyIncrementLivePlayerCoinsTrigger(self).activate() ElephantDurationScoreTrigger(self).activate() EnsureElephantIsInGameTrigger(self).activate() AddOneBotTrigger(self).activate() self.world.setActiveAchievementCategories({ACHIEVEMENT_TACTICAL}) self.setUserInfo('Elephant King', ( '* To get the elephant, kill the player who has it', '* The player who holds the elephant for the longest wins', ), BOT_GOAL_KILL_THINGS) self.world.abilities.set(zoneCaps=False, balanceTeams=False) self.world.uiOptions.set( teamIdsHumansCanJoin=[NEUTRAL_TEAM_ID], highlightElephant=True, ) if self.duration: self.world.clock.startCountDown(self.duration) else: self.world.clock.stop() self.world.clock.propagateToClients() await self.world.clock.onZero.wait_future() # Game over! playerScores = self.world.scoreboard.playerScores maxScore = max(playerScores.values()) winners = [ p for p, score in playerScores.items() if score == maxScore] self.playSound('game-over-whistle.ogg') for winner in winners: self.notifyAll('{} wins'.format(winner.nick)) self.world.sendServerCommand( AwardPlayerCoinMsg(winner.id, BONUS_COINS_FOR_WINNER))
async def run(self): for player in self.world.players: if not player.bot: self.world.sendServerCommand( SetPlayerTeamMsg(player.id, NEUTRAL_TEAM_ID)) SlowlyIncrementLivePlayerCoinsTrigger(self).activate() PlayerKillScoreTrigger(self, dieScore=-0.5).activate() AddOneBotTrigger(self).activate() self.world.setActiveAchievementCategories({ACHIEVEMENT_TACTICAL}) self.setUserInfo('Free for All', ( '* Kill as many other players as you can', '* You gain 1 point per kill', '* You lose ½ point if you are killed', ), BOT_GOAL_KILL_THINGS) self.world.abilities.set(zoneCaps=False, balanceTeams=False) self.world.uiOptions.set(teamIdsHumansCanJoin=[NEUTRAL_TEAM_ID]) if self.duration: self.world.clock.startCountDown(self.duration) else: self.world.clock.stop() self.world.clock.propagateToClients() await self.world.clock.onZero.wait_future() # Game over! playerScores = self.world.scoreboard.playerScores maxScore = max(playerScores.values()) winners = [ p for p, score in list(playerScores.items()) if score == maxScore ] self.playSound('game-over-whistle.ogg') for winner in winners: self.notifyAll('{} wins'.format(winner.nick)) self.world.sendServerCommand( AwardPlayerCoinMsg(winner.id, BONUS_COINS_FOR_WINNER))
def start(self): for player in self.world.players: if player.team is not None: self.world.sendServerCommand( SetPlayerTeamMsg(player.id, NEUTRAL_TEAM_ID)) MakeNewPlayersNeutralTrigger(self).activate() if not self.world.isOnceOnly(): self.world.uiOptions.set(showReadyStates=True) AddBotsForLobbyTrigger(self).activate() StartGameWhenReadyTrigger(self).activate() title = 'Lobby' userInfo = ( '* Free for all', '* Select preferred options from top menu', '* A match will start when enough players select "ready"', ) else: title = 'Game Over' userInfo = ('Use the menu in the bottom left to leave game', ) self.setUserInfo(title, userInfo, BOT_GOAL_NONE) self.world.abilities.set(zoneCaps=False, renaming=True) self.world.onChangeVoiceChatRooms([], [])
def newPlayerAdded(self, player): if player.team is not None: self.world.sendServerCommand( SetPlayerTeamMsg(player.id, NEUTRAL_TEAM_ID))