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

TFS 0.X [7.72] Anihilator problem

potinho

Advanced OT User
Joined
Oct 11, 2009
Messages
1,402
Solutions
17
Reaction score
150
Location
Brazil
Hello everyone, everything good?

I have an anihilator action that works, but if a single player (or 3) is on the floor and pulls the lever, it moves normally and gives an error on the console. No message is returned in the game that "4 players are needed". Here is an error in the console and script:

anihilator.lua
Lua:
-- Annihilator script v2.1 by GriZzm0.
--
-- Variables used:
--
-- player?pos     = The position of the players before teleport.
-- player?     = Get the thing from playerpos.
-- player?level = Get the players levels.
-- questslevel  = The level you have to be to do this quest.
-- questtatus?     = Get the quest status of the players.
-- demon?pos     = The position of the demons.
-- nplayer?pos     = The position where the players should be teleported too.
--
-- UniqueIDs used:
--
-- 9006 = The switch.
-- 9007 = Demon Armor chest.
-- 9008 = Magic Sword chest.
-- 9009 = Stonecutter Axe chest.
-- 9010 = Thunder Hammer chest.
--

function onUse(cid, item, frompos, item2, topos)
    if item.uid == 9006 then
        if item.itemid == 1945 then

            player1pos = {x=191, y=118, z=9, stackpos=253}
            player1 = getThingfromPos(player1pos)

            player2pos = {x=192, y=118, z=9, stackpos=253}
            player2 = getThingfromPos(player2pos)

            player3pos = {x=193, y=118, z=9, stackpos=253}
            player3 = getThingfromPos(player3pos)

            player4pos = {x=194, y=118, z=9, stackpos=253}
            player4 = getThingfromPos(player4pos)



            if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then

                player1level = getPlayerLevel(player1.uid)
                player2level = getPlayerLevel(player2.uid)
                player3level = getPlayerLevel(player3.uid)
                player4level = getPlayerLevel(player4.uid)

                questlevel = 100

                if player1level >= questlevel and player2level >= questlevel and player3level >= questlevel and player4level >= questlevel then    
                        
                        demon1pos = {x=195, y=118, z=10}
                        demon2pos = {x=196, y=118, z=10}
                        demon3pos = {x=194, y=120, z=10}
                        demon4pos = {x=192, y=120, z=10}
                        demon5pos = {x=189, y=118, z=10}
                        demon6pos = {x=191, y=116, z=10}
                        demon7pos = {x=193, y=116, z=10}

                        doSummonCreature("Demon", demon1pos)
                        doSummonCreature("Demon", demon2pos)
                        doSummonCreature("Demon", demon3pos)
                        doSummonCreature("Demon", demon4pos)
                        doSummonCreature("Demon", demon5pos)
                        doSummonCreature("Demon", demon6pos)
                        doSummonCreature("Demon", demon7pos)
                        
                        nplayer1pos = {x=191, y=118, z=10}
                        nplayer2pos = {x=192, y=118, z=10}
                        nplayer3pos = {x=193, y=118, z=10}
                        nplayer4pos = {x=194, y=118, z=10}

                        doSendMagicEffect(player1pos,2)
                        doSendMagicEffect(player2pos,2)
                        doSendMagicEffect(player3pos,2)
                        doSendMagicEffect(player4pos,2)

                        doTeleportThing(player1.uid,nplayer1pos)
                        doTeleportThing(player2.uid,nplayer2pos)
                        doTeleportThing(player3.uid,nplayer3pos)
                        doTeleportThing(player4.uid,nplayer4pos)

                        doSendMagicEffect(nplayer1pos,10)
                        doSendMagicEffect(nplayer2pos,10)
                        doSendMagicEffect(nplayer3pos,10)
                        doSendMagicEffect(nplayer4pos,10)

                        doTransformItem(item.uid,item.itemid+1)

                else
                    doPlayerSendCancel(cid,"Sorry, not possible.")
                end
            else
                doPlayerSendCancel(cid,"Sorry, not possible.")
            end
        elseif item.itemid == 1946 then
            if getPlayerAccess(cid) == 1 then
                doTransformItem(item.uid,item.itemid-1)
            else
                doPlayerSendCancel(cid,"Sorry, not possible.")
            end
        end
    elseif item.uid == 9007 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found a demon armor.")
            doPlayerAddItem(cid,2494,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    elseif item.uid == 9008 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found a magic sword.")
            doPlayerAddItem(cid,2400,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    elseif item.uid == 9009 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found a stonecutter axe.")
            doPlayerAddItem(cid,2431,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    elseif item.uid == 9010 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found thunder hammer.")
            doPlayerAddItem(cid,2421,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    end
    item:transform(item.itemid == 1946 and 1945 or 1946)
return 1
end

error in console

[31/3/2021 7:50:13] [Error - Action Interface]
[31/3/2021 7:50:13] data/actions/scripts/annihilator.lua:eek:nUse
[31/3/2021 7:50:13] Description:
[31/3/2021 7:50:13] data/actions/scripts/annihilator.lua:139: attempt to call method 'transform' (a nil value)
[31/3/2021 7:50:13] stack traceback:
[31/3/2021 7:50:13] data/actions/scripts/annihilator.lua:139: in function <data/actions/scripts/annihilator.lua:22>
 
Solution
Didnt touch quest items for laziness but should work
Lua:
function onUse(cid, item, frompos, item2, topos)
    if item.uid == 9006 then
        local count = 0
        local config = {
            questLevel = 100,
            playerPositions = {
                {start = {x=191, y=118, z=9}, destination = {x=191, y=118, z=10}},
                {start = {x=192, y=118, z=9}, destination = {x=192, y=118, z=10}},
                {start = {x=193, y=118, z=9}, destination = {x=193, y=118, z=10}},
                {start = {x=194, y=118, z=9}, destination = {x=194, y=118, z=10}}
            },
            spawnMonsters = {
                {position = {x=195, y=118, z=10}, monster = "Demon"},
                {position = {x=196, y=118, z=10}...
Didnt touch quest items for laziness but should work
Lua:
function onUse(cid, item, frompos, item2, topos)
    if item.uid == 9006 then
        local count = 0
        local config = {
            questLevel = 100,
            playerPositions = {
                {start = {x=191, y=118, z=9}, destination = {x=191, y=118, z=10}},
                {start = {x=192, y=118, z=9}, destination = {x=192, y=118, z=10}},
                {start = {x=193, y=118, z=9}, destination = {x=193, y=118, z=10}},
                {start = {x=194, y=118, z=9}, destination = {x=194, y=118, z=10}}
            },
            spawnMonsters = {
                {position = {x=195, y=118, z=10}, monster = "Demon"},
                {position = {x=196, y=118, z=10}, monster = "Demon"},
                {position = {x=194, y=120, z=10}, monster = "Demon"},
                {position = {x=192, y=120, z=10}, monster = "Demon"},
                {position = {x=189, y=118, z=10}, monster = "Demon"},
                {position = {x=191, y=116, z=10}, monster = "Demon"},
                {position = {x=193, y=116, z=10}, monster = "Demon"}
            }
        }
        local players = {}
        for i = 1, #config.playerPositions do
            local pid = getTopCreature(config.playerPositions[i].start)
            if pid.uid > 0 then
                if isPlayer(pid.uid) then
                    if getPlayerLevel(pid.uid) >= config.questLevel then
                        table.insert(players, pid.uid)
                    end
                end
            end
        end
        if #players == #config.playerPositions then
            for i = 1, #players do
                doTeleportThing(players[i], config.playerPositions[i].destination)
                doSendMagicEffect(config.playerPositions[i].destination, CONST_ME_TELEPORT)
            end
            for v = 1, #config.spawnMonsters do
                doSummonCreature(config.spawnMonsters[v].monster, config.spawnMonsters[v].position)
                doSendMagicEffect(config.spawnMonsters[v].position, CONST_ME_TELEPORT)
            end
        else
            doPlayerSendCancel(cid, "Sorry, not possible.")
        end
    elseif item.uid == 9007 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found a demon armor.")
            doPlayerAddItem(cid,2494,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    elseif item.uid == 9008 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found a magic sword.")
            doPlayerAddItem(cid,2400,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    elseif item.uid == 9009 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found a stonecutter axe.")
            doPlayerAddItem(cid,2431,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    elseif item.uid == 9010 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found thunder hammer.")
            doPlayerAddItem(cid,2421,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    end
    return doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) and true
end
 
Solution
Didnt touch quest items for laziness but should work
Lua:
function onUse(cid, item, frompos, item2, topos)
    if item.uid == 9006 then
        local count = 0
        local config = {
            questLevel = 100,
            playerPositions = {
                {start = {x=191, y=118, z=9}, destination = {x=191, y=118, z=10}},
                {start = {x=192, y=118, z=9}, destination = {x=192, y=118, z=10}},
                {start = {x=193, y=118, z=9}, destination = {x=193, y=118, z=10}},
                {start = {x=194, y=118, z=9}, destination = {x=194, y=118, z=10}}
            },
            spawnMonsters = {
                {position = {x=195, y=118, z=10}, monster = "Demon"},
                {position = {x=196, y=118, z=10}, monster = "Demon"},
                {position = {x=194, y=120, z=10}, monster = "Demon"},
                {position = {x=192, y=120, z=10}, monster = "Demon"},
                {position = {x=189, y=118, z=10}, monster = "Demon"},
                {position = {x=191, y=116, z=10}, monster = "Demon"},
                {position = {x=193, y=116, z=10}, monster = "Demon"}
            }
        }
        local players = {}
        for i = 1, #config.playerPositions do
            local pid = getTopCreature(config.playerPositions[i].start)
            if pid.uid > 0 then
                if isPlayer(pid.uid) then
                    if getPlayerLevel(pid.uid) >= config.questLevel then
                        table.insert(players, pid.uid)
                    end
                end
            end
        end
        if #players == #config.playerPositions then
            for i = 1, #players do
                doTeleportThing(players[i], config.playerPositions[i].destination)
                doSendMagicEffect(config.playerPositions[i].destination, CONST_ME_TELEPORT)
            end
            for v = 1, #config.spawnMonsters do
                doSummonCreature(config.spawnMonsters[v].monster, config.spawnMonsters[v].position)
                doSendMagicEffect(config.spawnMonsters[v].position, CONST_ME_TELEPORT)
            end
        else
            doPlayerSendCancel(cid, "Sorry, not possible.")
        end
    elseif item.uid == 9007 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found a demon armor.")
            doPlayerAddItem(cid,2494,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    elseif item.uid == 9008 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found a magic sword.")
            doPlayerAddItem(cid,2400,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    elseif item.uid == 9009 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found a stonecutter axe.")
            doPlayerAddItem(cid,2431,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    elseif item.uid == 9010 then
        queststatus = getPlayerStorageValue(cid,5000)
        if queststatus == -1 then
            doPlayerSendTextMessage(cid,22,"You have found thunder hammer.")
            doPlayerAddItem(cid,2421,1)
            setPlayerStorageValue(cid,5000,1)
        else
            doPlayerSendTextMessage(cid,22,"It is empty.")
        end
    end
    return doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) and true
end
Works, thank you.
 
Last edited:
Back
Top