Пример #1
0
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
Пример #2
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)
Пример #3
0
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
Пример #4
0
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")
Пример #5
0
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)
Пример #6
0
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
Пример #7
0
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
Пример #8
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
Пример #9
0
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
Пример #10
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)
Пример #11
0
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)
Пример #12
0
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)
Пример #13
0
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
Пример #14
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)
Пример #15
0
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
Пример #16
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
Пример #17
0
def prepare_for_room_rm(player):
    print_to_player(player, PrintArg.PRINT_ROOM_REMOVAL_CONFIRM)
    player.wait_state = PlayerWaitStates.WAIT_ROOM_REMOVAL_CONFIRM
Пример #18
0
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)
Пример #19
0
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
Пример #20
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)