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))
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.' ))
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)
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)))
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
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)
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)