Esempio n. 1
0
    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)
Esempio n. 2
0
    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))
Esempio n. 4
0
    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))
Esempio n. 5
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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))
Esempio n. 12
0
 def newPlayerAdded(self, player):
     self.world.sendServerCommand(AwardPlayerCoinMsg(player.id, self.coins))
Esempio n. 13
0
    def doActivate(self):
        for player in self.world.players:
            self.world.sendServerCommand(
                AwardPlayerCoinMsg(player.id, self.coins))

        self.world.onPlayerAdded.addListener(self.newPlayerAdded)