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

Anni bug

Krzkru

New Member
Joined
Jan 10, 2013
Messages
89
Reaction score
1
Location
Poland
When i pull switch it changes to glossy wall... Whats could be the problem?

Code:
local playerPosition =
{
    {x = 1224, y = 969, z = 11, stackpos = STACKPOS_TOP_CREATURE},
    {x = 1223, y = 969, z = 11, stackpos = STACKPOS_TOP_CREATURE},
    {x = 1222, y = 969, z = 11, stackpos = STACKPOS_TOP_CREATURE},
    {x = 1221, y = 969, z = 11, stackpos = STACKPOS_TOP_CREATURE}
}

local newPosition =
{
    {x = 1224, y = 969, z = 12},
     {x = 1223, y = 969, z = 12},
    {x = 1222, y = 969, z = 12},
    {x = 1221, y = 969, z = 12}
}

-- Do not modify the declaration lines below.
local player = {0, 0, 0, 0}
local failed = FALSE

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if item.itemid == 1945 then
        for i = 1, 4 do
            failed = TRUE
            player[i] = getThingfromPos(playerPosition[i])
            if player[i].itemid > 0 then
                if isPlayer(player[i].uid) == TRUE then
                    if getPlayerStorageValue(player[i].uid, 9001) == -1 then
                        if getPlayerLevel(player[i].uid) >= 100 then
                            failed = FALSE
                        end
                    end
                end
            end
            if failed == TRUE then
                doTransformItem(item.uid, item.itemid - 1)
                return TRUE
            end
        end
        for i = 1, 4 do
            doSendMagicEffect(playerPosition[i], CONST_ME_POFF)
            doTeleportThing(player[i].uid, newPosition[i], FALSE)
            doSendMagicEffect(newPosition[i], CONST_ME_ENERGYAREA)
        end
        doTransformItem(item.uid, item.itemid + 1)
    elseif item.itemid == 1946 then
        doTransformItem(item.uid, item.itemid - 1)
    end
    return TRUE
end
 
use this code, the best anihi code, made by @Apollos :
 
data/actions/scripts/anni.lua
Lua:
local config = {
        daily = "no", -- allow only one team to enter per day? (like in global Tibia)
        level = 100,
        storage = 30015,
        room = {
                {x = 33218, y = 31656, z = 13},
                {x = 33225, y = 31662, z = 13}
        },
        stand = {
                {x = 33225, y = 31671, z = 13},
                {x = 33224, y = 31671, z = 13},
                {x = 33223, y = 31671, z = 13},
                {x = 33222, y = 31671, z = 13}
        },
        destination = {
                {x = 33222, y = 31659, z = 13},
                {x = 33221, y = 31659, z = 13},
                {x = 33220, y = 31671, z = 13},
                {x = 33219, y = 31671, z = 13}
        },
        wall = {
                {x = 33225, y = 31659, z = 13}
        },
        rocks = {
                {x = 33219, y = 31657, z = 13},
                {x = 33221, y = 31657, z = 13},
                {x = 33219, y = 31659, z = 13},
                {x = 33220, y = 31659, z = 13},
                {x = 33221, y = 31659, z = 13},
                {x = 33222, y = 31659, z = 13},
                {x = 33223, y = 31659, z = 13},
                {x = 33224, y = 31659, z = 13},
                {x = 33220, y = 31661, z = 13},
                {x = 33222, y = 31661, z = 13}
        },
        demons = {
                {x = 33219, y = 31657, z = 13},
                {x = 33221, y = 31657, z = 13},
                {x = 33223, y = 31659, z = 13},
                {x = 33224, y = 31659, z = 13},
                {x = 33220, y = 31661, z = 13},
                {x = 33222, y = 31661, z = 13}
        }
}

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) --TFS 0.3.6 -> [ doCreateMonster("Demon", pos) ]
                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

data/actions/actions.xml

XML:
<action actionid="5000" event="script" value="quests/anni.lua"/>
Try this and check that link if you get any errors, its all explained there.
Action - The Annihilator Quest (Map and Script) (https://otland.net/threads/the-annihilator-quest-map-and-script.196219/)
 
@Krzkru I didn't tested whole script, but answering your question why it change into mossy wall. You have if item.itemid == 1945 then and then inside
Code:
            if failed == TRUE then
                doTransformItem(item.uid, item.itemid - 1)
                return TRUE
            end
1945 - 1 = 1944 - mossy wall. All you need to do is change to
Code:
            if failed == TRUE then
                doTransformItem(item.uid, item.itemid + 1)
                return TRUE
            end
 
Back
Top