def handleScore(self, team, player): self.playSound('short-whistle.ogg') self.world.trosballManager.placeInNet(team) self.world.scoreboard.teamScored(team) if self.totalDuration is not None: self.world.clock.pause() self.world.clock.propagateToClients() self.roundDuration = self.world.clock.value if player is not None: if player.team == team: message = '%s scored for %s!' % (player.nick, team.teamName) else: message = '%s scores an own goal!' % (player.nick, ) self.world.sendServerCommand( AwardPlayerCoinMsg(player.id, count=BONUS_COINS_FOR_TROSBALL_SCORE)) else: message = 'Score for %s!' % (team.teamName, ) self.notifyAll(message) teams = list(self.world.teams) message = '%s: %d - %s: %d' % ( teams[0].teamName, self.world.scoreboard.teamScores[teams[0]], teams[1].teamName, self.world.scoreboard.teamScores[teams[1]], ) self.notifyAll(message)
def start(self): try: SlowlyIncrementLivePlayerCoinsTrigger(self).activate() startingCoinsTrigger = AwardStartingCoinsTrigger(self).activate() winTrigger = StandardGameVictoryTrigger(self).activate() if self.keepPlayerScores: PlayerZoneScoreTrigger(self).activate() onClockZero = self.world.clock.onZero self.initPregameCountdown() yield onClockZero.wait() startingCoinsTrigger.deactivate() zoneCapTrigger = StandardZoneCaptureTrigger(self).activate() self.initMainPhase() event, args = yield waitForEvents( [onClockZero, winTrigger.onVictory]) self.gameOver() winTrigger.deactivate() zoneCapTrigger.deactivate() rabbitHuntTrigger = RabbitHuntTrigger(self).activate() result = yield rabbitHuntTrigger.onComplete.wait() for player in result['liveRabbits']: self.world.sendServerCommand( AwardPlayerCoinMsg(player.id, BONUS_COINS_FOR_RABBIT_SURVIVAL)) self.world.game.achievementManager.triggerAchievement( player, 'rabbitSurvival') yield self.world.sleep(3) finally: self.endLevel()
async def run(self): self.setTeamName(self.team, 'Racers') for player in self.world.players: self.world.sendServerCommand( SetPlayerTeamMsg(player.id, self.team.id)) SlowlyIncrementLivePlayerCoinsTrigger(self).activate() self.world.setActiveAchievementCategories({ACHIEVEMENT_TACTICAL}) self.world.scoreboard.setMode(players=True) self.world.abilities.set(zoneCaps=False, balanceTeams=False) self.world.uiOptions.set(teamIdsHumansCanJoin=[b'A']) await self.pregameCountdownPhase() await self.mainPhase() # 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 everyFiveSeconds(self): self.world.callLater(5, self.everyFiveSeconds) for player in self.world.players: if not player.dead: self.world.sendServerCommand( AwardPlayerCoinMsg(player.id, count=self.factor * BONUS_COINS_PER_5_SECONDS))
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 rabbitHuntPhase(self, finalSleepTime=3): rabbitHuntTrigger = RabbitHuntTrigger(self).activate() result = await rabbitHuntTrigger.onComplete.wait_future() for player in result['liveRabbits']: self.world.sendServerCommand( AwardPlayerCoinMsg(player.id, BONUS_COINS_FOR_RABBIT_SURVIVAL)) self.world.game.achievementManager.triggerAchievement( player, b'rabbitSurvival') await self.world.sleep_future(finalSleepTime)
def collidedWithPlayer(self, player): self.world.sendServerCommand( AwardPlayerCoinMsg(player.id, self.value, sound=True)) if self.vanished: # It's already been removed from the main set of coins. self.world.deadCoins.remove(self) else: del self.world.collectableCoins[self.id] self.world.sendServerCommand(RemoveCollectableCoinMsg(self.id)) self.world.onCollectableCoinRemoved(self.id)
def buildMessages(self): if not self.finalised: self.finalise() for zone, captureInfo in list(self.capturedZones.items()): tagger = captureInfo['player'] playerId = tagger.id if tagger else NO_PLAYER team = captureInfo['team'] teamId = team.id if team else NEUTRAL_TEAM_ID yield TaggingZoneMsg(zone.id, playerId, teamId) if tagger: coins = self.coinsForZone[zone] yield AwardPlayerCoinMsg(tagger.id, count=coins) helpers = captureInfo['attackers'] - {tagger} if helpers: coins = int(self.coinsForZone[zone] * COIN_FACTOR_FOR_ASSIST / len(helpers) + 0.5) for helper in helpers: yield AwardPlayerCoinMsg(helper.id, count=coins) for zone in self.neutralisedZones: yield TaggingZoneMsg(zone.id, NO_PLAYER, NEUTRAL_TEAM_ID)
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)
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 newPlayerAdded(self, player): self.world.sendServerCommand(AwardPlayerCoinMsg(player.id, self.coins))
def doActivate(self): for player in self.world.players: self.world.sendServerCommand( AwardPlayerCoinMsg(player.id, self.coins)) self.world.onPlayerAdded.addListener(self.newPlayerAdded)