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

Annihilator doesnt work

blixt22

New Member
Joined
Jul 16, 2008
Messages
40
Reaction score
1
Okay,
so I've been trying to put in both Anni and Arena in my server but non of them seem to work.

Annihilator doesnt spawn any demon tho I get teleported, does anyone know what the problem with my script is?
I've removed three "stand positions" just to be able to test it with my GM.

Lua:
local config = {
        daily = "no", -- allow only one team to enter per day? (like in global Tibia)
        level = 1,
        storage = 30015,
        room = {
                {x = 218, y = 656, z = 8},
                {x = 225, y = 662, z = 8}
        },
        stand = {
                {x = 1064, y = 836, z = 8}
        },
        destination = {
                {x = 222, y = 659, z = 8},
                {x = 221, y = 659, z = 8},
                {x = 220, y = 671, z = 8},
                {x = 219, y = 671, z = 8}
        },
        wall = {
                {x = 225, y = 659, z = 8}
        },
        rocks = {
                {x = 219, y = 657, z = 8},
                {x = 221, y = 657, z = 8},
                {x = 219, y = 659, z = 8},
                {x = 220, y = 659, z = 8},
                {x = 221, y = 659, z = 8},
                {x = 222, y = 659, z = 8},
                {x = 223, y = 659, z = 8},
                {x = 224, y = 659, z = 8},
                {x = 220, y = 661, z = 8},
                {x = 222, y = 661, z = 8}
        },
        demons = {
                {x = 219, y = 657, z = 8},
                {x = 221, y = 657, z = 8},
                {x = 223, y = 659, z = 8},
                {x = 224, y = 659, z = 8},
                {x = 220, y = 661, z = 8},
                {x = 222, y = 661, z = 8}
        }
}

local function areaCheck(area)
        local monsters, players = {}, {}
        for x = config.room[1].x, config.room[2].x do
                for y = config.room[1].y, config.room[2].y do
                        local t = getThingFromPos({x=x, y=y, z=config.room[1].z, stackpos=253})
                        if t.uid > 0 then
                                if isPlayer(t.uid) then
                                        table.insert(players, t.uid)
                                elseif isMonster(t.uid) then
                                        table.insert(monsters, t.uid)
                                end
                        end
                end
        end
        return monsters, players
end

config.daily = getBooleanFromString(config.daily)
function onUse(cid, item, fromPosition, itemEx, toPosition)
        if(item.itemid == 1945) then
                if(config.daily) then
                        return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
                else
                        local monsters, players = areaCheck(config.room)
                        if #players > 0 then
                                return doPlayerSendCancel(cid, "There are players inside, please be patient.")
                        elseif #monsters > 0 then
                                for _, k in pairs(monsters) do
                                        doRemoveThing(k)
                                end
                        end

                        for _, v in ipairs(config.rocks) do
                                doCreateItem(1285, 1, v)
                        end

                        local closed, open = getTileItemById(config.wall[1], 5108), getTileItemById(config.wall[1], 5109)
                        if(closed.uid > 0) then
                                doTransformItem(closed.uid, 1025)
                        elseif(open.uid > 0) then
                                doTransformItem(open.uid, 1025)
                        end

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

        if(item.itemid ~= 1946) then
                return true
        end

        local players = {}
        for _, position in ipairs(config.stand) do
                local pid = getTopCreature(position).uid
                if(pid == 0 or not isPlayer(pid)) then
                        return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
                elseif(getCreatureStorage(pid, config.storage) > 0) then
                        return doPlayerSendCancel(cid, "Someone has already completed this quest.")
                elseif(getPlayerLevel(pid) < config.level) then
                        return doPlayerSendCancel(cid, "Someone is below level 100.")
                end

                table.insert(players, pid)
        end

        local stones = {}
        for _, v in ipairs(config.rocks) do
                local st = getTileItemById(v, 1285)
                table.insert(stones, st)
        end

        for _, st in ipairs(stones) do
                doRemoveItem(st.uid, 1)
        end

        local wall = getTileItemById(config.wall[1], 1025)
        if(wall.uid > 0) then
                doTransformItem(wall.uid, 5108)
        end

        for _, pos in ipairs(config.demons) do
                doCreateMonster("Demon", pos, false, false)
                doSendMagicEffect(pos, CONST_ME_ENERGYAREA)
        end

        for i, pid in ipairs(players) do
                doSendMagicEffect(config.stand[i], CONST_ME_POFF)
                doTeleportThing(pid, config.destination[i], false)
                doSendMagicEffect(config.destination[i], CONST_ME_TELEPORT)
        end

        doTransformItem(item.uid, item.itemid - 1)
        return true
end
[/i][/i][/i]
 
Indentation is important, I didn't fix anything I just indented the code
Code:
local config = {
    daily = "no", -- allow only one team to enter per day? (like in global Tibia)
    level = 1,
    storage = 30015,
    room = {
        {x = 218, y = 656, z = 8},
        {x = 225, y = 662, z = 8}
    },
    stand = {
        {x = 1064, y = 836, z = 8}
    },
    destination = {
        {x = 222, y = 659, z = 8},
        {x = 221, y = 659, z = 8},
        {x = 220, y = 671, z = 8},
        {x = 219, y = 671, z = 8}
    },
    wall = {
        {x = 225, y = 659, z = 8}
    },
    rocks = {
        {x = 219, y = 657, z = 8},
        {x = 221, y = 657, z = 8},
        {x = 219, y = 659, z = 8},
        {x = 220, y = 659, z = 8},
        {x = 221, y = 659, z = 8},
        {x = 222, y = 659, z = 8},
        {x = 223, y = 659, z = 8},
        {x = 224, y = 659, z = 8},
        {x = 220, y = 661, z = 8},
        {x = 222, y = 661, z = 8}
    },
    demons = {
        {x = 219, y = 657, z = 8},
        {x = 221, y = 657, z = 8},
        {x = 223, y = 659, z = 8},
        {x = 224, y = 659, z = 8},
        {x = 220, y = 661, z = 8},
        {x = 222, y = 661, z = 8}
    }
}

local function areaCheck(area)
    local monsters, players = {}, {}
    for x = config.room[1].x, config.room[2].x do
        for y = config.room[1].y, config.room[2].y do
            local t = getThingFromPos({x=x, y=y, z=config.room[1].z, stackpos=253})
            if t.uid > 0 then
                if isPlayer(t.uid) then
                    table.insert(players, t.uid)
                elseif isMonster(t.uid) then
                    table.insert(monsters, t.uid)
                end
            end
        end
    end
    return monsters, players
end

config.daily = getBooleanFromString(config.daily)
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(item.itemid == 1945) then
        if(config.daily) then
            return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
        else
            local monsters, players = areaCheck(config.room)
            if #players > 0 then
                return doPlayerSendCancel(cid, "There are players inside, please be patient.")
            elseif #monsters > 0 then
                for _, k in pairs(monsters) do
                    doRemoveThing(k)
                end
            end
            for _, v in ipairs(config.rocks) do
                doCreateItem(1285, 1, v)
            end
            local closed, open = getTileItemById(config.wall[1], 5108), getTileItemById(config.wall[1], 5109)
            if(closed.uid > 0) then
                doTransformItem(closed.uid, 1025)
            elseif(open.uid > 0) then
                doTransformItem(open.uid, 1025)
            end
            doTransformItem(item.uid, item.itemid + 1)
        end
        return true
    end

    if(item.itemid ~= 1946) then
        return true
    end

    local players = {}
    for _, position in ipairs(config.stand) do
        local pid = getTopCreature(position).uid
        if(pid == 0 or not isPlayer(pid)) then
            return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
        elseif(getCreatureStorage(pid, config.storage) > 0) then
            return doPlayerSendCancel(cid, "Someone has already completed this quest.")
        elseif(getPlayerLevel(pid) < config.level) then
            return doPlayerSendCancel(cid, "Someone is below level 100.")
        end
    table.insert(players, pid)
    end

    local stones = {}
    for _, v in ipairs(config.rocks) do
        local st = getTileItemById(v, 1285)
        table.insert(stones, st)
    end

    for _, st in ipairs(stones) do
        doRemoveItem(st.uid, 1)
    end

    local wall = getTileItemById(config.wall[1], 1025)
    if(wall.uid > 0) then
        doTransformItem(wall.uid, 5108)
    end

    for _, pos in ipairs(config.demons) do
        doCreateMonster("Demon", pos, false, false)
        doSendMagicEffect(pos, CONST_ME_ENERGYAREA)
    end

    for i, pid in ipairs(players) do
        doSendMagicEffect(config.stand, CONST_ME_POFF)
        doTeleportThing(pid, config.destination, false)
        doSendMagicEffect(config.destination, CONST_ME_TELEPORT)
    end
    doTransformItem(item.uid, item.itemid - 1)
    return true
end
 
Back
Top