def create_character(cls, character, **kwargs): if character is None and 'p_id' in kwargs: myPlayer = Player(kwargs['p_id']) character = myPlayer.character # account for error here? if character == "unassigned": warnings.warn( "Character created with no role. Could lead to undefined behaviour if player: " + kwargs['p_id'] + " was expected to be a character. You have likely instantiated a game that hasn't begun yet." ) return Character(**kwargs) if character == "werewolf": return Werewolf(**kwargs) if character == "witch": return Witch(**kwargs) if character == "human": return Human(**kwargs)
def developer(self, **kwargs): if kwargs['action'] == "test_game": for x in range(1, int(kwargs['player_count'])): player = Player(session_key=User(session_key=x).session_key) player.find_game() myPlayer = Player(session_key=kwargs['session_key']) myPlayer.find_game() elif kwargs['action'] == "ask_update": myPlayer = Player(session_key=kwargs['session_key']) myGame = Game(session_key=kwargs['session_key']) publish_dict = GameManager.publish_detailed_game( g_id=myGame.g_id, p_id=myPlayer.p_id) #filtered_json = myGame.filter_JSON(full_json, myPlayer.knows_about) # include this somehow? self.send(publish_dict) elif kwargs[ 'action'] == "ask_shallow_update_on_all_games": # call out to Game Manager shallow update games_dict = {} data_dict = {} publish_dict = GameManager.publish_all_games() self.send(publish_dict) elif kwargs['action'] == "gain_info": if 'attribute_filter' in kwargs: attribute_filter = kwargs['attribute_filter'].split(",") else: attribute_filter = ['state'] myGame = Game(session_key=kwargs['session_key']) myPlayer = myGame.players[0] print(myPlayer.knows_about) myPlayer.gain_info(attribute_filter=attribute_filter, info_player=myGame.players[1]) print(myPlayer.knows_about) self.send("added info on player: " + myGame.players[1].p_id + "\n for this player: " + myPlayer.p_id) elif kwargs['action'] == "lose_info": if 'attribute_filter' in kwargs: attribute_filter = kwargs['attribute_filter'].split(",") else: attribute_filter = ['state'] myGame = Game(session_key=kwargs['session_key']) myPlayer = myGame.players[0] print(myPlayer.knows_about) myPlayer.lose_info(attribute_filter=attribute_filter, info_player=myGame.players[1]) print(myPlayer.knows_about) self.send("lost info on player: " + myGame.players[1].p_id + "\n for this player: " + myPlayer.p_id)
def matchmaking(self, **kwargs): response = { } # an object used to return information to the client directly. if 'action' not in kwargs: return self.send({"error": "no action given"}) session_data = SessionStore(session_key=kwargs['session_key']) if kwargs['action'] == "flush_db": ww_redis_db.flushall( ) # use to clear redis of all keys to start afresh session_data.flush() self.send("flushed!") return ############################################################ # Initialise player ############################################################ if "p_id" in session_data: player = Player(session_data['p_id']) else: print("error: p_id not been assigned to session") raise TypeError ############################################################ # Join game ############################################################ if kwargs['action'] == "join_game": response = player.find_game( **kwargs) # this should really be done throug the game manager ############################################################ # Leave game ############################################################ elif kwargs['action'] == "leave_game": try: if 'g_id' in kwargs: player_game = Game(kwargs['g_id']) elif hasattr(player, "g_id"): player_game = Game(player.g_id) elif 'g_id' in self.session: player_game = Game(player.session['g_id']) log_handler.log( log_type="INFO", log_code="Player", log_message= "g_id was passed via session and not via kwargs", log_detail=7, context_id=player.p_id) elif not player.is_ingame(): response['error'] = "Player not currently in a game." log_handler.log( log_type="ERROR", log_code="Player", log_message= "This player tried to leave their game when they weren't in any game", log_detail=3, context_id=player.p_id) raise ValueError("Player not current in a game") else: response['error'] = "Game not found" log_handler.log( log_type="ERROR", log_code="Player", log_message= "No game could be found that is associate with this player", log_detail=3, context_id=player.p_id) raise ValueError("Game not found") if player.p_id in player_game.players: player_game.remove_player(leaving_player=player) response['response'] = "Player removed from game" else: response[ 'error'] = "Player not found in game: " + player_game.g_id log_handler.log( log_type="ERROR", log_code="Player", log_message="Could not find this player in the game " + player_game.g_id, log_detail=4, context_id=player.p_id) except ValueError: log_handler.log( log_type="ERROR", log_code="Player", log_message="Could not find this player in the game " + player_game.g_id, log_detail=4, context_id=player.p_id) ############################################################ # Create game ############################################################ elif kwargs['action'] == "create_game": user_config = {} if 'config' in kwargs: user_config = kwargs['config'] newGame = Game(config=user_config) if player.is_ingame(): Game(player.g_id).remove_player(player.p_id) response = newGame.add_player(player.p_id) ############################################################ # Send response to client ############################################################ self.send(response)
def developer(self, **kwargs): if kwargs['action'] == "test_game": for x in range(1,int(kwargs['player_count'])): player = Player(session_key=User(session_key=x).session_key) player.find_game() myPlayer = Player(session_key=kwargs['session_key']) myPlayer.find_game() elif kwargs['action'] == "ask_update": myPlayer = Player(session_key=kwargs['session_key']) myGame = Game(session_key=kwargs['session_key']) publish_dict = GameManager.publish_detailed_game(g_id=myGame.g_id, p_id=myPlayer.p_id) #filtered_json = myGame.filter_JSON(full_json, myPlayer.knows_about) # include this somehow? self.send(publish_dict) elif kwargs['action'] == "ask_shallow_update_on_all_games": # call out to Game Manager shallow update games_dict = {} data_dict = {} publish_dict = GameManager.publish_all_games() self.send(publish_dict) elif kwargs['action'] == "gain_info": if 'attribute_filter' in kwargs: attribute_filter = kwargs['attribute_filter'].split(",") else: attribute_filter = ['state'] myGame = Game(session_key=kwargs['session_key']) myPlayer = myGame.players[0] print(myPlayer.knows_about) myPlayer.gain_info(attribute_filter=attribute_filter, info_player=myGame.players[1]) print(myPlayer.knows_about) self.send("added info on player: " + myGame.players[1].p_id + "\n for this player: "+myPlayer.p_id) elif kwargs['action'] == "lose_info": if 'attribute_filter' in kwargs: attribute_filter = kwargs['attribute_filter'].split(",") else: attribute_filter = ['state'] myGame = Game(session_key=kwargs['session_key']) myPlayer = myGame.players[0] print(myPlayer.knows_about) myPlayer.lose_info(attribute_filter=attribute_filter, info_player=myGame.players[1]) print(myPlayer.knows_about) self.send("lost info on player: " + myGame.players[1].p_id + "\n for this player: "+myPlayer.p_id)
def matchmaking(self, **kwargs): response = {} # an object used to return information to the client directly. if 'action' not in kwargs: return self.send({"error":"no action given"}) session_data = SessionStore(session_key=kwargs['session_key']) if kwargs['action'] == "flush_db": ww_redis_db.flushall() # use to clear redis of all keys to start afresh session_data.flush() self.send("flushed!") return ############################################################ # Initialise player ############################################################ if "p_id" in session_data: player = Player(session_data['p_id']) else: print("error: p_id not been assigned to session") raise TypeError ############################################################ # Join game ############################################################ if kwargs['action'] == "join_game": response = player.find_game(**kwargs) # this should really be done throug the game manager ############################################################ # Leave game ############################################################ elif kwargs['action'] == "leave_game": try: if 'g_id' in kwargs: player_game = Game(kwargs['g_id']) elif hasattr(player, "g_id"): player_game = Game(player.g_id) elif 'g_id' in self.session: player_game = Game(player.session['g_id']) log_handler.log( log_type = "INFO", log_code = "Player", log_message = "g_id was passed via session and not via kwargs", log_detail = 7, context_id = player.p_id ) elif not player.is_ingame(): response['error'] = "Player not currently in a game." log_handler.log( log_type = "ERROR", log_code = "Player", log_message = "This player tried to leave their game when they weren't in any game", log_detail = 3, context_id = player.p_id ) raise ValueError ("Player not current in a game") else: response['error'] = "Game not found" log_handler.log( log_type = "ERROR", log_code = "Player", log_message = "No game could be found that is associate with this player", log_detail = 3, context_id = player.p_id ) raise ValueError ("Game not found") if player.p_id in player_game.players: player_game.remove_player(leaving_player=player) response['response'] = "Player removed from game" else: response['error'] = "Player not found in game: "+player_game.g_id log_handler.log( log_type = "ERROR", log_code = "Player", log_message = "Could not find this player in the game "+player_game.g_id, log_detail = 4, context_id = player.p_id ) except ValueError: log_handler.log( log_type = "ERROR", log_code = "Player", log_message = "Could not find this player in the game "+player_game.g_id, log_detail = 4, context_id = player.p_id ) ############################################################ # Create game ############################################################ elif kwargs['action'] == "create_game": user_config = {} if 'config' in kwargs: user_config = kwargs['config'] newGame = Game(config=user_config) if player.is_ingame(): Game(player.g_id).remove_player(player.p_id) response = newGame.add_player(player.p_id) ############################################################ # Send response to client ############################################################ self.send(response)