• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Solved House Doors "Cant use that object" after updating to 10.1

nugo

Australia OT Mapper
Joined
Apr 1, 2009
Messages
398
Solutions
4
Reaction score
197
Usually im alright at figuring problems out but this one has got my puzzled. I had an 8.60 ot that i updated to 10.1 the only problem so fare is even when you own the house or have the right level you cant open a house door it just says "unable to use that object". Any ideas?
 
I think you may need to edit your map if RLMap - door to door, as this engine uses the current system of doors in items.xml "transformUseTo".
 
This is the 8.60 Door Script
Code:
local function checkStackpos(item, position)
        position.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
        local thing = getThingFromPos(position)

        position.stackpos = STACKPOS_TOP_FIELD
        local field = getThingFromPos(position)

        return (item.uid == thing.uid or thing.itemid < 100 or field.itemid == 0)
end

local function doorEnter(cid, item, toPosition)
        doTransformItem(item.uid, item.itemid + 1)
        doTeleportThing(cid, toPosition)
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
        if(fromPosition.x ~= CONTAINER_POSITION and isPlayerPzLocked(cid) and getTileInfo(fromPosition).protection) then
                doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
                return true
        end

        if(getItemLevelDoor(item.itemid) > 0) then
                if(item.actionid == 189) then
                        if(not isPremium(cid)) then
                                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
                                return true
                        end

                        doorEnter(cid, item, toPosition)
                        return true
                end

                local gender = item.actionid - 186
                if(isInArray({PLAYERSEX_FEMALE,  PLAYERSEX_MALE, PLAYERSEX_GAMEMASTER}, gender)) then
                        if(gender ~= getPlayerSex(cid)) then
                                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
                                return true
                        end

                        doorEnter(cid, item, toPosition)
                        return true
                end

                local skull = item.actionid - 180
                if(skull >= SKULL_NONE and skull <= SKULL_BLACK) then
                        if(skull ~= getCreatureSkullType(cid)) then
                                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
                                return true
                        end

                        doorEnter(cid, item, toPosition)
                        return true
                end

                local group = item.actionid - 150
                if(group >= 0 and group < 30) then
                        if(group > getPlayerGroupId(cid)) then
                                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
                                return true
                        end

                        doorEnter(cid, item, toPosition)
                        return true
                end

                local vocation = item.actionid - 100
                if(vocation >= 0 and vocation < 50) then
                        local playerVocationInfo = getVocationInfo(getPlayerVocation(cid))
                        if(playerVocationInfo.id ~= vocation and playerVocationInfo.fromVocation ~= vocation) then
                                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
                                return true
                        end

                        doorEnter(cid, item, toPosition)
                        return true
                end

                if(item.actionid == 190 or (item.actionid ~= 0 and getPlayerLevel(cid) >= (item.actionid - getItemLevelDoor(item.itemid)))) then
                        doorEnter(cid, item, toPosition)
                else
                        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
                end

                return true
        end

        if(isInArray(specialDoors, item.itemid)) then
                if(item.actionid == 100 or (item.actionid ~= 0 and getPlayerStorageValue(cid, item.actionid) > 0)) then
                        doorEnter(cid, item, toPosition)
                else
                        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The door seems to be sealed against unwanted intruders.")
                end

                return true
        end

        if(isInArray(keys, item.itemid)) then
                if(itemEx.actionid > 0) then
                        if(item.actionid == itemEx.actionid and doors[itemEx.itemid] ~= nil) then
                                doTransformItem(itemEx.uid, doors[itemEx.itemid])
                                return true
                        end

                        doPlayerSendCancel(cid, "The key does not match.")
                        return true
                end

                return false
        end

        if(isInArray(horizontalOpenDoors, item.itemid) and checkStackpos(item, fromPosition)) then
                local newPosition = toPosition
                newPosition.y = newPosition.y + 1
                local doorPosition = fromPosition
                doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
                local doorCreature = getThingfromPos(doorPosition)
                if(doorCreature.itemid ~= 0) then
                        local pzDoorPosition = getTileInfo(doorPosition).protection
                        local pzNewPosition = getTileInfo(newPosition).protection
                        if((pzDoorPosition and not pzNewPosition and doorCreature.uid ~= cid) or
                                (not pzDoorPosition and pzNewPosition and doorCreature.uid == cid and isPlayerPzLocked(cid))) then
                                doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
                        else
                                doTeleportThing(doorCreature.uid, newPosition)
                                if(not isInArray(closingDoors, item.itemid)) then
                                        doTransformItem(item.uid, item.itemid - 1)
                                end
                        end

                        return true
                end

                doTransformItem(item.uid, item.itemid - 1)
                return true
        end

        if(isInArray(verticalOpenDoors, item.itemid) and checkStackpos(item, fromPosition)) then
                local newPosition = toPosition
                newPosition.x = newPosition.x + 1
                local doorPosition = fromPosition
                doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
                local doorCreature = getThingfromPos(doorPosition)
                if(doorCreature.itemid ~= 0) then
                        if(getTileInfo(doorPosition).protection and not getTileInfo(newPosition).protection and doorCreature.uid ~= cid) then
                                doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
                        else
                                doTeleportThing(doorCreature.uid, newPosition)
                                if(not isInArray(closingDoors, item.itemid)) then
                                        doTransformItem(item.uid, item.itemid - 1)
                                end
                        end

                        return true
                end

                doTransformItem(item.uid, item.itemid - 1)
                return true
        end

        if(doors[item.itemid] ~= nil and checkStackpos(item, fromPosition)) then
                if(item.actionid == 0) then
                        doTransformItem(item.uid, doors[item.itemid])
                else
                        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.")
                end

                return true
        end

        return false
end
 
Last edited:
This is the 10.1 door script wich is the default one from the forgotton server. I need to convert my old 8.60 one to my 10.1

Code:
local function doorEnter(cid, uid, id, position)
    doTransformItem(uid, id)
    doTeleportThing(cid, position)
    return true
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(fromPosition.x ~= CONTAINER_POSITION and isPlayerPzLocked(cid) and getTileInfo(fromPosition).protection) then
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
        return true
    end

    local locked = DOORS[item.itemid]
    if(locked) then
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.")
        return true
    end

    local door = getItemInfo(item.itemid)
    if(door.levelDoor > 0) then
        if(item.aid == 189) then
            if(not isPremium(cid)) then
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Only the worthy may pass.")
                return true
            end

            return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
        end

        local gender = item.aid - 186
        if(isInArray({PLAYERSEX_FEMALE,  PLAYERSEX_MALE}, gender)) then
            if(gender ~= getPlayerSex(cid)) then
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Only the worthy may pass.")
                return true
            end

            return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
        end

        local skull = item.aid - 180
        if(skull >= SKULL_NONE and skull <= SKULL_BLACK) then
            if(skull ~= getCreatureSkullType(cid)) then
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Only the worthy may pass.")
                return true
            end

            return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
        end

        local group = item.aid - 150
        if(group >= 0 and group < 30) then
            if(group > getPlayerGroupId(cid)) then
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Only the worthy may pass.")
                return true
            end

            return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
        end

        local vocation = item.aid - 100
        if(vocation >= 0 and vocation < 50) then
            local vocationEx = getVocationInfo(getPlayerVocation(cid))
            if(vocationEx.id ~= vocation and vocationEx.fromVocation ~= vocation) then
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Only the worthy may pass.")
                return true
            end

            return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
        end

        if(item.aid == 190 or (item.aid ~= 0 and getPlayerLevel(cid) >= (item.aid - door.levelDoor))) then
            return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
        end

        doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Only the worthy may pass.")
        return true
    end

    if(door.specialDoor) then
        if(item.aid == 100 or (item.aid ~= 0 and getCreatureStorage(cid, item.aid) > 0)) then
            return doorEnter(cid, item.uid, door.transformUseTo, toPosition)
        end

        doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "The door seems to be sealed against unwanted intruders.")
        return true
    end

    toPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
    local fields, thing = getTileItemsByType(fromPosition, ITEM_TYPE_MAGICFIELD), getThingFromPosition(toPosition)
    if(item.uid ~= thing.uid and thing.itemid >= 100 and table.maxn(fields) ~= 0) then
        return true
    end

    local doorCreature = getThingFromPosition(toPosition)
    if(doorCreature.itemid ~= 0) then
        toPosition.x = toPosition.x + 1
        local query = doTileQueryAdd(doorCreature.uid, toPosition, 20) -- allow to stack outside doors, but not on teleports or floor changing tiles
        if(query == RETURNVALUE_NOTPOSSIBLE) then
            toPosition.x = toPosition.x - 1
            toPosition.y = toPosition.y + 1
            query = doTileQueryAdd(doorCreature.uid, toPosition, 20) -- repeat until found
        end

        if(query ~= RETURNVALUE_NOERROR) then
            doPlayerSendDefaultCancel(cid, query)
            return true
        end

        doTeleportThing(doorCreature.uid, toPosition)
        if(not door.closingDoor) then
            doTransformItem(item.uid, door.transformUseTo)
        end

        return true
    end

    return false
end

When i place my 8.60 door script into my 10.1 data/actions i get this error when using a door. I know theres a version incompatibility issues not sure how to fix it though.

Error action interfaction
data/actions/scripts/other/doors.lau:eek:nUse
Description
Data/lib/050-function.lau:10 bad argument #1 to 'ippairs' <table expected got nill>

Double post, exceeded the word count -,-
 
Back
Top