Example #1
0
    def on_player_disconnected(self, player):
        if self._tist_state == tist_states.WAITING_TRAITOR:
            if self.room.playing_count < self.min_players:
                self._tist_traitor_waiting_deferred.cancel()
                self._waiting_players_message()
        elif self._tist_state == tist_states.WAITING_PLAYERS:
            self._waiting_players_message()
        elif self._tist_state == tist_states.PLAYING:
            if player is self._tist_traitor:
                self.room._broadcaster.server_message(
                    info('The traitor, {name#traitor}, has left the game.',
                         traitor=player))
                self._ended()
            else:
                alive_non_traitorous_players = [
                    p for p in self.room.players
                    if p.state.is_alive and p is not self._tist_traitor
                ]

                if len(alive_non_traitorous_players) == 0:
                    self.room._broadcaster.server_message(
                        info(
                            'The the last living innocent player, {name#player}, has left the game. The traitor, {name#traitor}, is victorious.',
                            traitor=self._tist_traitor,
                            player=player))
Example #2
0
 def _start_info_message(self):
     self.room._broadcaster.server_message(
         info(
             'Welcome to the Trouble in SauerTown gamemode. The first player to press their taunt bind will be the traitor.'
         ))
     self.room._broadcaster.server_message(
         info(
             'If no players do this a traitor will be selected at random in 5 seconds.'
         ))
Example #3
0
 def _select_traitor(self, player):
     self._tist_traitor = player
     self._tist_state = tist_states.PLAYING
     self.room._broadcaster.server_message(
         info('The traitor has been selected. Trust no one!'))
     player.client.send_server_message(
         info('You are the traitor! Go kill them all...sneakily.'))
     for player in self.room.players:
         ModeBase.on_player_request_spawn(self, player)
     self.room._broadcaster.sound(12)
Example #4
0
 def _waiting_players_message(self):
     deficit = self.min_players - self.room.playing_count
     format_args = {
         'min_players': self.min_players,
         'deficit': deficit,
         'pl': 's' if deficit > 1 else '',
     }
     self.room._broadcaster.server_message(
         info(
             'The Trouble in SauerTown gamemode must be played with at least {min_players} players. Waiting for {deficit} more player{pl}.'
             .format(**format_args)))
Example #5
0
    def on_auth_success(self, auth_success):
        if auth_success is not None:
            self.client.add_group_name_provider(auth_success.group_provider)

            if auth_success.room_message is not None and self.client.connection_sequence_complete:
                auth_success.room_message_kwargs['client'] = self.client
                self.client.room._broadcaster.server_message(
                    info(auth_success.room_message,
                         **auth_success.room_message_kwargs))

        self.auth_deferred.callback(auth_success)
        self.auth_deferred = None
Example #6
0
    def on_player_death(self, player, killer):
        if self._tist_state == tist_states.PLAYING:
            player.client.send_server_message(
                info('You have been betrayed, choose your friends more wisely.'
                     ))

            alive_non_traitorous_players = [
                p for p in self.room.players
                if p.state.is_alive and p is not self._tist_traitor
            ]

            if player is self._tist_traitor:
                if player is killer:
                    self.room._broadcaster.server_message(
                        info('The traitor, {name#traitor}, has suicided.',
                             traitor=player))
                else:
                    self.room._broadcaster.server_message(
                        info(
                            'The traitor, {name#traitor}, has been put down by {name#killer}.',
                            killer=killer,
                            traitor=player))
                self._ended()
            else:
                if len(alive_non_traitorous_players) == 0:
                    if killer is self._tist_traitor:
                        self.room._broadcaster.server_message(
                            info(
                                'The traitor, {name#traitor}, has slaughtered all the innocents, claiming victory.',
                                traitor=killer))
                    else:
                        self.room._broadcaster.server_message(
                            info(
                                'The last innocent has died. The traitor, {name#traitor}, is victorious.',
                                traitor=killer))
                    self._ended()

        ModeBase.on_player_death(self, player, killer)
Example #7
0
 def on_player_request_spawn(self, player):
     if self._tist_state == tist_states.PLAYING:
         player.client.send_server_message(
             info('Please wait until the next round to spawn.'))
     else:
         ModeBase.on_player_request_spawn(self, player)