• 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 Error with premium tile in movement script tiles.lua

Thaian Citizen

Hexenjäger
Joined
Apr 5, 2013
Messages
144
Solutions
4
Reaction score
17
Location
germany
Hello,
I am using tfs 0.3.6 - 8.6 crying damson distro..

I got following problem: When I walk on a premium tile it kicks me back, even though that player/acc has premium. I dont think the problem is within the check-for-premium lines in the code, but somewhere else in the code. I get to this assumption, because:

I get the message -> "The tile seems to be protected against unwanted intruders."
and not this one ->"You need premium account to enter this zone."

So I think that the server doesn't even get as far as checking if the player has premium or if the tile has the action id 189, instead it stops after it has checked some previous lines that denied entry.. I just can't find the misstake.

Would be nice if someone could take a look at it..

This is my tiles.lua file:
Code:
local config = {
    maxLevel = getConfigInfo('maximumDoorLevel')
}

local increasingItems = {[416] = 417, [426] = 425, [446] = 447, [3216] = 3217, [3202] = 3215, [11059] = 11060}
local decreasingItems = {[417] = 416, [425] = 426, [447] = 446, [3217] = 3216, [3215] = 3202, [11060] = 11059}
local depots = {2589, 2590, 2591, 2592}

local checkCreature = {isPlayer, isMonster, isNpc}
local function pushBack(cid, position, fromPosition, displayMessage)
    doTeleportThing(cid, fromPosition, false)
    doSendMagicEffect(position, CONST_ME_MAGIC_BLUE)
    if(displayMessage) then
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The tile seems to be protected against unwanted intruders.")
    end
end
function onStepIn(cid, item, position, fromPosition)
    if(not increasingItems[item.itemid]) then
        return false
    end
    if(not isPlayerGhost(cid)) then
        doTransformItem(item.uid, increasingItems[item.itemid])
    end

    if(item.actionid >= 194 and item.actionid <= 196) then
        local f = checkCreature[item.actionid - 193]
        if(f(cid)) then
            pushBack(cid, position, fromPosition, false)
        end

        return true
    end
    if(item.actionid >= 191 and item.actionid <= 193) then
        local f = checkCreature[item.actionid - 190]
        if(not f(cid)) then
            pushBack(cid, position, fromPosition, false)
        end

        return true
    end
    if(not isPlayer(cid)) then
        return true
    end

    if(item.actionid == 189 and not isPremium(cid)) then
        pushBack(cid, position, fromPosition, true)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "You need premium account to enter this zone.")
        return true
    end
    local gender = item.actionid - 186
    if(isInArray({PLAYERSEX_FEMALE,  PLAYERSEX_MALE, PLAYERSEX_GAMEMASTER}, gender)) then
        if(gender ~= getPlayerSex(cid)) then
            pushBack(cid, position, fromPosition, true)
        end

        return true
    end
    local skull = item.actionid - 180
    if(skull >= SKULL_NONE and skull <= SKULL_BLACK) then
        if(skull ~= getCreatureSkullType(cid)) then
            pushBack(cid, position, fromPosition, true)
        end
        return true
    end

    local group = item.actionid - 150
    if(group >= 0 and group < 30) then
        if(group > getPlayerGroupId(cid)) then
            pushBack(cid, position, fromPosition, true)
        end
        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
            pushBack(cid, position, fromPosition, true)
        end

        return true
    end
   
    local level = item.actionid - 1000
    if(level >= 1 and level <= (config.maxLevel)) then
        if(getPlayerLevel(cid) < level) then
            pushBack(cid, position, fromPosition, true)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "You need at least level " .. level .. " to enter this zone.")
        end
        return true
    end
    if(item.actionid ~= 0 and getPlayerStorageValue(cid, item.actionid) <= 0) then
        pushBack(cid, position, fromPosition, true)
        return true
    end
    if(getTileInfo(position).protection) then
        local depotPos, depot = getCreatureLookPosition(cid), {}
        depotPos.stackpos = STACKPOS_GROUND
        while(true) do
            if(not getTileInfo(depotPos).depot) then
                break
            end
            depotPos.stackpos = depotPos.stackpos + 1
            depot = getThingFromPos(depotPos)
            if(depot.uid == 0) then
                break
            end
            if(isInArray(depots, depot.itemid)) then
                local depotItems = getPlayerDepotItems(cid, getDepotId(depot.uid))
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "Your depot contains " .. depotItems .. " item" .. (depotItems > 1 and "s" or "") .. ".")
                break
            end
        end

        return true
    end

    return false
end
function onStepOut(cid, item, position, fromPosition)
    if(not decreasingItems[item.itemid]) then
        return false
    end
    if(not isPlayerGhost(cid)) then
        doTransformItem(item.uid, decreasingItems[item.itemid])
        return true
    end

    return false
end
 
write this line:
print("test1")
to first IF statement where you call pushback
then
print("test2")
to second IF statement where you call pushback
until all if statements have this line.

Then run the server and in the console if you see text : test(number)
you know what statement gives you bad wibes.
 
if you found a statement what gives problem and you don't know why, post it here.
Maybe i can help you understand it
 
Back
Top