def _run_single_team_council(self, team: Team, losing_players: List[Player], gamedb: Database, engine: Engine): # announce winner and tribal council for losing teams gamedb.clear_votes() winning_player = [player for player in gamedb.list_players( from_team=team) if player not in losing_players][0] engine.add_event(events.NotifySingleTeamCouncilEvent(game_id=self._game_id, game_options=self._options, winning_player=winning_player, losing_players=losing_players)) tribal_council_start_timestamp = _unixtime() # wait for votes while (((_unixtime() - tribal_council_start_timestamp) < self._options.single_team_council_time_sec) and not self._stop.is_set()): log_message("Waiting for tribal council to end.") time.sleep(self._options.game_wait_sleep_interval_sec) # count votes voted_out_player = self._get_voted_out_player(team=team, gamedb=gamedb) if voted_out_player: gamedb.deactivate_player(player=voted_out_player) log_message("Deactivated player {}.".format(voted_out_player)) engine.add_event(events.NotifyPlayerVotedOutEvent(game_id=self._game_id, game_options=self._options, player=voted_out_player)) # notify all players of what happened at tribal council engine.add_event( events.NotifyTribalCouncilCompletionEvent(game_id=self._game_id, game_options=self._options))
def _run_single_tribe_council(self, winning_teams: List[Team], losing_teams: List[Team], gamedb: Database, engine: Engine): # announce winner and tribal council for losing teams gamedb.clear_votes() engine.add_event(events.NotifySingleTribeCouncilEvent( game_id=self._game_id, game_options=self._options, winning_teams=winning_teams, losing_teams=losing_teams)) tribal_council_start_timestamp = _unixtime() # wait for votes while (((_unixtime() - tribal_council_start_timestamp) < self._options.single_tribe_council_time_sec) and not self._stop.is_set()): log_message("Waiting for tribal council to end.") time.sleep(self._options.game_wait_sleep_interval_sec) # count votes for team in losing_teams: voted_out_player = self._get_voted_out_player( team=team, gamedb=gamedb) if voted_out_player: gamedb.deactivate_player(player=voted_out_player) log_message("Deactivated player {}.".format(voted_out_player)) engine.add_event(events.NotifyPlayerVotedOutEvent(game_id=self._game_id, game_options=self._options, player=voted_out_player)) else: log_message("For some reason no one got voted out...") log_message("Players = {}.".format( pprint.pformat(gamedb.list_players(from_team=team)))) # notify all players of what happened at tribal council engine.add_event( events.NotifyTribalCouncilCompletionEvent(game_id=self._game_id, game_options=self._options))
def _run_multi_tribe_council(self, winning_tribe: Tribe, losing_tribe: Tribe, gamedb: Database, engine: Engine): self._wait_for_tribal_council_start_time() # fraction of teams in losing tribe must vote non_immune_teams = list() for team in gamedb.stream_teams(from_tribe=losing_tribe): log_message(message="Found losing team {}.".format(team), game_id=self._game_id) immunity_granted = random.random( ) < self._options.multi_tribe_team_immunity_likelihood if not immunity_granted: non_immune_teams.append(team) else: engine.add_event( events.NotifyImmunityAwardedEvent( game_id=self._game_id, game_options=self._options, team=team)) # announce winner and tribal council for losing tribe gamedb.clear_votes() engine.add_event( events.NotifyMultiTribeCouncilEvent(game_id=self._game_id, game_options=self._options, winning_tribe=winning_tribe, losing_tribe=losing_tribe)) self._wait_for_tribal_council_end_time() # count votes for team in non_immune_teams: log_message( message="Counting votes for non-immune team {}.".format(team), game_id=self._game_id) voted_out_player = self._get_voted_out_player(team=team, gamedb=gamedb) if voted_out_player: gamedb.deactivate_player(player=voted_out_player) log_message( message="Deactivated player {}.".format(voted_out_player), game_id=self._game_id) engine.add_event( events.NotifyPlayerVotedOutEvent( game_id=self._game_id, game_options=self._options, player=voted_out_player)) # notify all players of what happened at tribal council engine.add_event( events.NotifyTribalCouncilCompletionEvent( game_id=self._game_id, game_options=self._options))
def _run_single_team_council(self, team: Team, losing_players: List[Player], gamedb: Database, engine: Engine): self._wait_for_tribal_council_start_time() # announce winner and tribal council for losing teams gamedb.clear_votes() winning_players = [ player for player in gamedb.list_players(from_team=team) if player not in losing_players ] if len(winning_players) > 0: winning_player = winning_players[0] else: engine.stop() raise GameError( "Unable to determine a winning player for the challenge. Have any entries been submitted?" ) engine.add_event( events.NotifySingleTeamCouncilEvent(game_id=self._game_id, game_options=self._options, winning_player=winning_player, losing_players=losing_players)) self._wait_for_tribal_council_end_time() # count votes voted_out_player = self._get_voted_out_player(team=team, gamedb=gamedb) if voted_out_player: gamedb.deactivate_player(player=voted_out_player) log_message( message="Deactivated player {}.".format(voted_out_player), game_id=self._game_id) engine.add_event( events.NotifyPlayerVotedOutEvent(game_id=self._game_id, game_options=self._options, player=voted_out_player)) # notify all players of what happened at tribal council engine.add_event( events.NotifyTribalCouncilCompletionEvent( game_id=self._game_id, game_options=self._options))
def test_notify_tribal_council_completion_event_msg(self): event = events.NotifyTribalCouncilCompletionEvent( game_id=_TEST_GAME_ID, game_options=self.game_options ) self.assertEqual( _event_messages_as_json(event.messages(gamedb=_gamedb)), json.dumps( [ { "class": "SMSEventMessage", "content": ("\nVIR-US: You have survived elimination!\nNext " "challenge starts tomorrow {tomorrow} at 12PM EDT.\n").format( tomorrow=self.game_options.game_schedule.tomorrow_localized_string), "recipient_phone_numbers": [ "751-005-3935", "962-582-3407", "388-685-3212", "331-046-5651", "802-722-8425", "704-425-0095", "555-259-3255", "877-102-2965", "835-161-1468", "436-038-5365", "994-138-5472", "514-721-1531", "191-221-0517", "142-175-7280", "312-441-3246", "114-458-3014", "245-228-6657", "917-511-9963", "461-328-0686", "381-505-3014" ] } ] ) )
def _run_single_tribe_council(self, winning_teams: List[Team], losing_teams: List[Team], gamedb: Database, engine: Engine): self._wait_for_tribal_council_start_time() # keep top K teams # announce winner and tribal council for losing teams gamedb.clear_votes() engine.add_event( events.NotifySingleTribeCouncilEvent(game_id=self._game_id, game_options=self._options, winning_teams=winning_teams, losing_teams=losing_teams)) self._wait_for_tribal_council_end_time() # count votes for team in losing_teams: voted_out_player = self._get_voted_out_player(team=team, gamedb=gamedb) if voted_out_player: gamedb.deactivate_player(player=voted_out_player) log_message( message="Deactivated player {}.".format(voted_out_player), game_id=self._game_id) engine.add_event( events.NotifyPlayerVotedOutEvent( game_id=self._game_id, game_options=self._options, player=voted_out_player)) else: log_message(message="For some reason no one got voted out...", game_id=self._game_id) log_message(message="Players = {}.".format( pprint.pformat(gamedb.list_players(from_team=team))), game_id=self._game_id) # notify all players of what happened at tribal council engine.add_event( events.NotifyTribalCouncilCompletionEvent( game_id=self._game_id, game_options=self._options))
def _run_multi_tribe_council(self, winning_tribe: Tribe, losing_tribe: Tribe, gamedb: Database, engine: Engine): non_immune_teams = list() for team in gamedb.stream_teams(from_tribe=losing_tribe): log_message("Found losing team {}.".format(team)) immunity_granted = random.random() < self._options.multi_tribe_team_immunity_likelihood if not immunity_granted: non_immune_teams.append(team) else: engine.add_event(events.NotifyImmunityAwardedEvent( game_id=self._game_id, game_options=self._options, team=team)) # announce winner and tribal council for losing tribe tribal_council_start_timestamp = _unixtime() gamedb.clear_votes() engine.add_event(events.NotifyMultiTribeCouncilEvent(game_id=self._game_id, game_options=self._options, winning_tribe=winning_tribe, losing_tribe=losing_tribe)) # wait for votes while (((_unixtime() - tribal_council_start_timestamp) < self._options.multi_tribe_council_time_sec) and not self._stop.is_set()): log_message("Waiting for tribal council to end.") time.sleep(self._options.game_wait_sleep_interval_sec) # count votes for team in non_immune_teams: log_message("Counting votes for non-immune team {}.".format(team)) voted_out_player = self._get_voted_out_player( team=team, gamedb=gamedb) if voted_out_player: gamedb.deactivate_player(player=voted_out_player) log_message("Deactivated player {}.".format(voted_out_player)) engine.add_event(events.NotifyPlayerVotedOutEvent(game_id=self._game_id, game_options=self._options, player=voted_out_player)) # notify all players of what happened at tribal council engine.add_event(events.NotifyTribalCouncilCompletionEvent( game_id=self._game_id, game_options=self._options))
game_options=_TEST_GAME_OPTIONS, winning_teams=[_TEST_TEAM1], losing_teams=[_TEST_TEAM2]), events.NotifyMultiTribeCouncilEvent(game_id=_TEST_GAME_ID, game_options=_TEST_GAME_OPTIONS, winning_tribe=_TEST_TRIBE1, losing_tribe=_TEST_TRIBE2), events.NotifyFinalTribalCouncilEvent( game_id=_TEST_GAME_ID, game_options=_TEST_GAME_OPTIONS, finalists=[_TEST_PLAYER1, _TEST_PLAYER2]), events.NotifyPlayerVotedOutEvent(game_id=_TEST_GAME_ID, game_options=_TEST_GAME_OPTIONS, player=_TEST_PLAYER1), events.NotifyTribalCouncilCompletionEvent( game_id=_TEST_GAME_ID, game_options=_TEST_GAME_OPTIONS, ), events.NotifyWinnerAnnouncementEvent(game_id=_TEST_GAME_ID, game_options=_TEST_GAME_OPTIONS, winner=_TEST_PLAYER2), events.NotifyImmunityAwardedEvent(game_id=_TEST_GAME_ID, game_options=_TEST_GAME_OPTIONS, team=_TEST_TEAM2) ] class EngineTest(unittest.TestCase): def setUp(self): self._game_options = GameOptions() self._game_options.game_schedule = STV_I18N_TABLE['US']