• 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!

Lua isInArray problem!

danick10

Intermediate OT User
Joined
Apr 11, 2009
Messages
196
Solutions
4
Reaction score
141
Hi, Im using tfs 04 and I cant open door or use any script that use If isInArray somehow !
exemple :
if(isInArray(horizontalOpenDoors, item.itemid)

Attemp to call 'if isInArray' a nil value, and the door won't open....

I dont know if there is suppose to be a file global.xml somewhere that tells what Id are the horizontalOpenDoors but i cant find it! can someone help me please ? :eek:
 
I really don't know why it doesnt work, added limos option and my door still wont open... :p ! any other solution ?
 
Add this function in data/lib/050-function.lua. Nil value means the function doesn't exist in your server, so adding the function would solve that.
If there are still errors, post them.
 
What happens when you click use on the doors? Do you have this with all doors? Do you get textmessages, like a cancel message "You cannot use this object"?
You can also try to use the default doors.lua from your server (from the data folder that came with your server).
 
ahaha ! :p i had a syntax error and fixed it! but now it says 'attemp to call global 'getThingFromPos' howcome is there so many function missing in my libs ? :O
 
You are probable using a datapack (data folder) from a different server. If you have errors, post the full error.
 
Error - Action Interface
data/actions/scripts/other/doors.lua: onUse
description:
data/actions/scripts/others/doors.lua:3: attemps to call global 'getThingFromPos' (a nil value)
stack traceback:
data/actions/scripts/others/doors.lua:3: in function 'checkStackPos'
data/actons/scripts/others/dooors.lua:157: in function<data /actions/scripts/other/doors.lua:11>

Thx for helping me limos!
 
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

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(getItemLevelDoor(item.itemid) > 0) then
        if(item.actionid == 189) then
            if(isPremium(cid) ~= TRUE) then
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
                return TRUE
            end

            doTransformItem(item.uid, item.itemid + 1)
            doTeleportThing(cid, toPosition, TRUE)
            return TRUE
        end

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

            doTransformItem(item.uid, item.itemid + 1)
            doTeleportThing(cid, toPosition, TRUE)
            return TRUE
        end

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

            doTransformItem(item.uid, item.itemid + 1)
            doTeleportThing(cid, toPosition, TRUE)
            return TRUE
        end

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

            doTransformItem(item.uid, item.itemid + 1)
            doTeleportThing(cid, toPosition, TRUE)
            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

            doTransformItem(item.uid, item.itemid + 1)
            doTeleportThing(cid, toPosition, TRUE)
            return TRUE
        end

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

        return TRUE
    end

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

        return TRUE
    end

    if(isInArray(keys, item.itemid) == TRUE) 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) == TRUE 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
            if(getTileInfo(doorPosition).protection and not getTileInfo(newPosition).protection and doorCreature.uid ~= cid) then
                doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
            else
                doTeleportThing(doorCreature.uid, newPosition, TRUE)
                if(isInArray(closingDoors, item.itemid) ~= TRUE) 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) == TRUE 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, TRUE)
                if(isInArray(closingDoors, item.itemid) ~= TRUE) 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

Here is my doors script.
 
Do you have the link? I can't find it. You can also look yourself in luascript.cpp if that function is added there or something with a similar name.
 
Back
Top