def handle_existing_pass(player, command): player_db = lookup_player(player.name) if player_db is None: print_to_player(player, PrintArg.UNABLE_TO_RETRIEVE_CHAR) player.wait_state = PlayerWaitStates.THEIR_NAME return 1 pid = player_db.id # clear pnames if this fails, cause failures are being logged # again, what if not check_player_pass(player_db, command): print_to_player(player, PrintArg.INCORRECT_PASSWORD) player.name = '' player.wait_state = PlayerWaitStates.THEIR_NAME return 1 roomResult = lookup_room(player.coords) if roomResult is None: assert adjust_player_location(player, 0) == 0 player.id = pid print_room_to_player(player, roomResult) reset_player_state(player) player.connected = True print("Player name " + player.name + " connected on socket " + str( player.socket_num)) return 0
def prepare_for_room_mk(player, command): if src.players.PlayerManagement.ensure_player_moving_valid_dir( player, command) is 1: reset(player) return player.store = command player.wait_state = PlayerWaitStates.WAIT_ROOM_CREATION_CONF print_to_player(player, PrintArg.PRINT_ROOM_CREATION_CONFIRMALL)
def ensure_player_moving_valid_dir(player, command): from src.io.OutputBuilder import print_to_player, PrintArg if command.type == CommandInterpreter.Movement: return 0 print_to_player(player, PrintArg.PRINT_INVAL_DIR) print_to_player(player, PrintArg.PRINT_EXITING_CMD_WAIT) reset_player_state(player) return 1
def do_info_cmd(player, info): if info.subtype == InfoRequest.INFO_ROOM: roomResult = lookup_room(player.coords) print_room_to_player(player, roomResult.results()) if info.subtype == InfoRequest.INFO_COMMANDS: print_to_player(player, PrintArg.PLAYER_SHOW_COMMANDS) if info.subtype == InfoRequest.INFO_PLAYERS: print_to_player(player, PrintArg.LISTPLAYERS) if info.subtype == InfoRequest.INFO_MAP: print("ADD ME")
def alter_room_links(player, command): if (src.players.PlayerManagement.ensure_player_moving_valid_dir( player, command)) == 1: src.players.PlayerManagement.reset_player_state(player) return 1 dest_coords = src.players.PlayerMovement.calc_coords_from_playerloc_and_dir( player) src_room = lookup_room(player.coords) dest_room = lookup_room(dest_coords) if dest_room is None: print_to_player(player, PrintArg.PRINT_COULDNT_EXIT_NO_ROOM) if compare_room_owner(player, player.coords) == 1: print_to_player(player, PrintArg.PRINT_INSUFFICIENT_PERMISSIONS) info = get_command_info(command) rv = link_rooms(info.subtype, src_room, dest_room) if rv == 0: print_to_player(player, PrintArg.PRINT_TOGGLED_ROOM_EXIT) elif rv == 1: print_to_player(player, PrintArg.PRINT_COULDNT_TOGGLE_EXIT) reset(player)
def check_if_player_is_already_online(player, name): from src.io.OutputBuilder import PrintArg, print_to_player playersList = ActivePlayers.activePlayers print("num of players on: " + str(playersList.__len__())) for i in playersList: if name != i.name: continue print_to_player(player, PrintArg.PLAYER_ALREADY_ONLINE) player.wait_state = PlayerWaitStates.THEIR_NAME return True, PrintArg.PLAYER_ALREADY_ONLINE return False
def insert_player(player, pw): from src.io.OutputBuilder import print_to_player, PrintArg salt = os.urandom(50) hashed = bcrypt.hashpw(pw, salt) queryResult = SQLiteHelper.SQLExecution( "INSERT INTO PLAYERS (name, hash, salt, last_ip, loc_id) VALUES (" ":name,:hash,:salt,:last_ip,:loc_id)", {"name": player.name, "hash": hashed, "salt": salt, "last_ip": "-", "loc_id": 0}, SQLiteHelper.DBTypes.PLAYER_DB) if len(queryResult.results) == 0: return 1 print_to_player(player, PrintArg.PLAYER_CREATION_SUCCESS) return 0
def handle_incoming_name(player, command): from src.io.OutputBuilder import print_to_player, PrintArg if check_if_name_is_valid(player, command) is False: return False if check_if_name_is_reserved(command) is True: return False if check_if_player_is_already_online(player, command) is True: return False player.name = command plookup = lookup_player(player.name) if plookup is not None: print_to_player(player, PrintArg.REQUEST_PW_FOR_EXISTING) player.wait_state = PlayerWaitStates.THEIR_PASSWORD_EXISTING else: print_to_player(player, PrintArg.REQUEST_PW_FOR_NEW) player.wait_state = PlayerWaitStates.THEIR_PASSWORD_NEWPRELIM return True
def remove_players_from_room(coords, target_room, players_in_room): from src.io.OutputBuilder import print_to_player, print_room_to_player from src.players.PlayerManagement import get_player_by_id, adjust_player_location queryResult = players_in_room(target_room.rid) for i in range(0, len(queryResult.results)): if queryResult.results[i].id == 0: break player = get_player_by_id(queryResult.results[i].id) if not player.coords.x == coords.x and player.coords.y == coords.y and player.coords.z == coords.z: continue print_to_player(player, OutputBuilder.PrintArg.PRINT_REMOVED_FROM_ROOM) room = lookup_room(coords) adjust_player_location(player, room.rid) room = lookup_room(player.coords) print_room_to_player(player, room) return 0
def handle_room_removal(player, command): if command is not None and command[0] is not 'y': print_to_player(player, PrintArg.PRINT_EXITING_CMD_WAIT) reset(player) # TODO: check exits etc handled & players in room moved result = remove_room(player) if result == 0: print_to_player(player, PrintArg.PRINT_ROOM_REMOVAL_SUCCESS) elif result == -1: print_to_player(player, PrintArg.PRINT_ROOM_REMOVAL_FAILURE) elif result == -2: print_to_player(player, PrintArg.PRINT_INSUFFICIENT_PERMISSIONS) reset(player)
def alter_room_name(player, command): if command is not None and command[0] is not 'y': print_to_player(player, PrintArg.PRINT_EXITING_CMD_WAIT) reset() result = adjust_room_name(player) if result == 0: print_to_player(player, PrintArg.PRINT_ADJUSTMENT_SUCCESSFUL) elif result == 1: print_to_player(player, PrintArg.PRINT_COULDNT_ADJUST_ROOM) elif result == 2: print_to_player(player, PrintArg.PRINT_INSUFFICIENT_PERMISSIONS) reset(player) roomResult = lookup_room(player.coords) print_room_to_player(player, roomResult)
def alter_room_desc(player, command): if command is not None and command[0] is not 'y': print_to_player(player, PrintArg.PRINT_EXITING_CMD_WAIT) src.players.PlayerManagement.reset_player_state(player) result = adjust_room_desc(player) if result == 0: print_to_player(player, PrintArg.PRINT_ADJUSTMENT_SUCCESSFUL) elif result is 1: print_to_player(player, PrintArg.PRINT_COULDNT_ADJUST_ROOM) elif result is 2: print_to_player(player, PrintArg.PRINT_INSUFFICIENT_PERMISSIONS) reset(player) roomResult = lookup_room(player.coords) print_room_to_player(player, roomResult)
def interpret_command(player): command = player.buffer.lower() print("player command: " + str(command)) commandInfo = get_command_info(command) if player.holding_for_input is False: if commandInfo.type == CommandTypes.COMMAND_NOT: return print_to_player(player, PrintArg.INVALCMD) return do_cmd_action(player, commandInfo.info) # should probably handle 'quit' if they want to exit this process, or C - C if player.wait_state == src.players.PlayerManagement.PlayerWaitStates.THEIR_NAME: src.players.PlayerManagement.handle_incoming_name(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.THEIR_PASSWORD: src.players.PlayerManagement.handle_existing_pass(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.THEIR_PASSWORD_NEWPRELIM: src.players.PlayerManagement.set_player_confirm_new_pw(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.THEIR_PASSWORD_NEWFINAL: src.players.PlayerManagement.handle_new_pass(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_ENTER_NEW_ROOM_NAME: prepare_for_new_room_name(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_CONFIRM_NEW_ROOM_NAME: alter_room_name(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_ENTER_NEW_ROOM_DESC: prepare_for_new_room_desc(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_CONFIRM_NEW_ROOM_DESC: alter_room_desc(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_ROOM_REMOVAL_CHECK: prepare_for_room_rm(player) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_ROOM_REMOVAL_CONFIRM: handle_room_removal(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_ROOM_CREATION_DIR: prepare_for_room_mk(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_ROOM_CREATION_CONF: handle_room_creation(player, command) elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_ENTER_FLAG_NAME: print("dead code") elif player.wait_state == src.players.PlayerManagement.PlayerWaitStates.WAIT_ENTER_EXIT_NAME: alter_room_links(player, command) else: print( "Unhandled wait state " + player.wait_state + " on player " + player.name) return 0
def handle_room_creation(player, command): if command is not None and command[0] is not 'y': print_to_player(player, PrintArg.PRINT_EXITING_CMD_WAIT) reset(player) dest_coords = src.players.PlayerMovement.calc_coords_from_playerloc_and_dir( player) roomResult = lookup_room(dest_coords) if roomResult.id > 0: print_to_player(player, PrintArg.PRINT_ROOM_ALREADY_EXISTS) reset(player) return # check here for their perms # print_to_player(player, PRINT_INSUFFICIENT_PERMISSIONS) rconfig = RoomBlueprint() rconfig.name = "NULL SPACE" rconfig.coords = dest_coords rconfig.desc = "It is pitch black. You are likely to be eaten by a null character." rconfig.owner = player.name rconfig.flags = "none" existing = lookup_room(player.coords) new = insert_room(rconfig) if new is None: print_to_player(player, PrintArg.PRINT_ROOM_CREATION_FAILURE) return print_to_player(player, PrintArg.PRINT_ROOM_CREATION_SUCCESS) info = get_command_info(player.store) link_rooms(info.subtype, existing, new) existing = lookup_room(player.coords) print_room_to_player(player, existing) reset(player)
def handle_new_pass(player, command): from src.io.OutputBuilder import print_to_player, PrintArg, print_room_to_player if command != player.store or len(command) != len(player.store): print_to_player(player, PrintArg.MISMATCH_PW_SET) player.wait_state = PlayerWaitStates.THEIR_NAME player.store = '' return 1 print_to_player(player, PrintArg.ATTEMPT_CREATE_USR) if insert_player(player, command) == -1: print_to_player(player, PrintArg.PLAYER_CREATION_FAILED) shutdown_socket(player) return 1 reset_player_state(player) roomResult = lookup_room_by_id(0) print_room_to_player(player, roomResult) print("Player name " + player.name + " connected on socket " + str( player.socket_num)) return 0
def do_room_cmd(player, info): if info.subtype == RoomChange.ROOM_SET_NAME: print_to_player(player, PrintArg.PRINT_PROVIDE_NEW_ROOM_NAME) player.holding_for_input = 1 player.wait_state = PlayerWaitStates.WAIT_ENTER_NEW_ROOM_NAME elif info.subtype == RoomChange.ROOM_SET_DESC: print_to_player(player, PrintArg.PRINT_PROVIDE_NEW_ROOM_DESC) player.wait_state = PlayerWaitStates.WAIT_ENTER_NEW_ROOM_DESC player.holding_for_input = True elif info.subtype == RoomChange.ROOM_SET_EXIT: print_to_player(player, PrintArg.PRINT_PROVIDE_ROOM_EXIT_NAME) player.wait_state = PlayerWaitStates.WAIT_ENTER_EXIT_NAME player.holding_for_input = True elif info.subtype == RoomChange.ROOM_SET_FLAG: print_to_player(player, PrintArg.PRINT_PROVIDE_ROOM_FLAG_NAME) player.wait_state = PlayerWaitStates.WAIT_ENTER_FLAG_NAME player.holding_for_input = True elif info.subtype == RoomChange.ROOM_MK: print_to_player(player, PrintArg.PRINT_ROOM_CREATION_GIVE_DIR) player.wait_state = PlayerWaitStates.WAIT_ROOM_CREATION_DIR player.holding_for_input = True elif info.subtype == RoomChange.ROOM_RM: print_to_player(player, PrintArg.PRINT_ROOM_REMOVAL_CHECK) player.wait_state = PlayerWaitStates.WAIT_ROOM_REMOVAL_CHECK player.holding_for_input = True
def prepare_for_room_rm(player): print_to_player(player, PrintArg.PRINT_ROOM_REMOVAL_CONFIRM) player.wait_state = PlayerWaitStates.WAIT_ROOM_REMOVAL_CONFIRM
def prepare_for_new_room_name(player, command): player.store = command player.wait_state = PlayerWaitStates.WAIT_CONFIRM_NEW_ROOM_NAME print_to_player(player, PrintArg.PRINT_CONFIRM_NEW_ROOM_NAME)
def set_player_confirm_new_pw(player, command): from src.io.OutputBuilder import print_to_player, PrintArg player.store = command print_to_player(player, PrintArg.REQUEST_PW_CONFIRM) player.wait_state = PlayerWaitStates.THEIR_PASSWORD_NEWFINAL return 0
def do_movement_cmd(player, info): direction = Movement.DIR_NOT origin = player.coords destination = {0} if info.subtype == Movement.DIR_NORTH: direction = Movement.DIR_NORTH destination.y = origin.y + 1 elif info.subtype == Movement.DIR_EAST: direction = Movement.DIR_EAST destination.x = origin.x + 1 elif info.subtype == Movement.DIR_SOUTH: direction = Movement.DIR_SOUTH destination.y = origin.y - 1 elif info.subtype == Movement.DIR_WEST: direction = Movement.DIR_WEST destination.x = origin.x - 1 elif info.subtype == Movement.DIR_DOWN: direction = Movement.DIR_DOWN destination.z = origin.z - 1 elif info.subtype == Movement.DIR_UP: direction = Movement.DIR_UP destination.z = origin.z + 1 elif info.subtype == Movement.DIR_NORTHWEST: direction = Movement.DIR_NORTHWEST destination.x = origin.x - 1 destination.y = origin.y + 1 elif info.subtype == Movement.DIR_NORTHEAST: direction = Movement.DIR_NORTHEAST destination.x = origin.x + 1 destination.y = origin.y + 1 elif info.subtype == Movement.DIR_SOUTHWEST: direction = Movement.DIR_SOUTHWEST destination.x = origin.x - 1 destination.y = origin.y - 1 elif info.subtype == Movement.DIR_SOUTHEAST: direction = Movement.DIR_SOUTHEAST destination.x = origin.x + 1 destination.y = origin.y - 1 dest_room = lookup_room(destination) if dest_room is None: print("oh no") # do something rv = lookup_room_exits(origin, dest_room) if rv == -1: print_to_player(player, PrintArg.PRINT_INVAL_DIR) return elif rv == -2: # send them back to origin room, somewhere they shouldn't be destination.x = 0 destination.y = 0 destination.z = 0 print_to_player(player, PrintArg.PRINT_INVAL_DIR) # check me else: print_to_player(player, direction) adjust_player_location(player, dest_room.id) print_room_to_player(player, dest_room)