Пример #1
0
    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()
Пример #2
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)
Пример #3
0
    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)
Пример #4
0
    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()
Пример #5
0
    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))
Пример #7
0
    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))
Пример #8
0
    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([], [])
Пример #9
0
 def newPlayerAdded(self, player):
     if player.team is not None:
         self.world.sendServerCommand(
             SetPlayerTeamMsg(player.id, NEUTRAL_TEAM_ID))