Ir para conteúdo

Featured Replies

Postado

Boa galera estou com um erro em actions.lua do meu servidor tfs 1.3 preciso de ajuda não consegui resolver esse erro.

action.lua

Citar

local groundIds = {354, 355} -- pick usable ground
local sandIds = {231, 9059} -- desert sand
local holeId = { -- usable rope holes, for rope spots see global.lua
    294, 369, 370, 383, 392, 408, 409, 410, 427, 428, 429, 430, 462, 469, 470, 482,
    484, 485, 489, 924, 1369, 3135, 3136, 4835, 4837, 7933, 7938, 8170, 8249, 8250,
    8251, 8252, 8254, 8255, 8256, 8276, 8277, 8279, 8281, 8284, 8285, 8286, 8323,
    8567, 8585, 8595, 8596, 8972, 9606, 9625, 13190, 14461, 19519, 21536, 23713,
    26020
}
local holes = {468, 481, 483, 7932, 23712} -- holes opened by shovel

local JUNGLE_GRASS = { 2782, 3985, 19433 }
local WILD_GROWTH = { 1499, 11099, 2101, 1775, 1447, 1446}

local fruits = {2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2684, 2685, 5097, 8839, 8840, 8841}

local lava = {
    Position(32808, 32336, 11),
    Position(32809, 32336, 11),
    Position(32810, 32336, 11),
    Position(32808, 32334, 11),
    Position(32807, 32334, 11),
    Position(32807, 32335, 11),
    Position(32807, 32336, 11),
    Position(32807, 32337, 11),
    Position(32806, 32337, 11),
    Position(32805, 32337, 11),
    Position(32805, 32338, 11),
    Position(32805, 32339, 11),
    Position(32806, 32339, 11),
    Position(32806, 32338, 11),
    Position(32807, 32338, 11),
    Position(32808, 32338, 11),
    Position(32808, 32337, 11),
    Position(32809, 32337, 11),
    Position(32810, 32337, 11),
    Position(32811, 32337, 11),
    Position(32811, 32338, 11),
    Position(32806, 32338, 11),
    Position(32810, 32338, 11),
    Position(32810, 32339, 11),
    Position(32809, 32339, 11),
    Position(32809, 32338, 11),
    Position(32811, 32336, 11),
    Position(32811, 32335, 11),
    Position(32810, 32335, 11),
    Position(32809, 32335, 11),
    Position(32808, 32335, 11),
    Position(32809, 32334, 11),
    Position(32809, 32333, 11),
    Position(32810, 32333, 11),
    Position(32811, 32333, 11),
    Position(32806, 32338, 11),
    Position(32810, 32334, 11),
    Position(32811, 32334, 11),
    Position(32812, 32334, 11),
    Position(32813, 32334, 11),
    Position(32814, 32334, 11),
    Position(32812, 32333, 11),
    Position(32810, 32334, 11),
    Position(32812, 32335, 11),
    Position(32813, 32335, 11),
    Position(32814, 32335, 11),
    Position(32814, 32333, 11),
    Position(32813, 32333, 11)
}

local function revertItem(position, itemId, transformId)
    local item = Tile(position):getItemById(itemId)
    if item then
        item:transform(transformId)
    end
end

local function removeRemains(toPosition)
    local item = Tile(toPosition):getItemById(2248)
    if item then
        item:remove()
    end
end

local function revertCask(position)
    local caskItem = Tile(position):getItemById(2249)
    if caskItem then
        caskItem:transform(5539)
        position:sendMagicEffect(CONST_ME_MAGIC_GREEN)
    end
end

local cutItems = {
    [3794] = 3959, [3795] = 3959, [3796] = 3958, [3797] = 3958, [3798] = 3958, [3799] = 3958,
    [1614] = 2251, [1615] = 2251, [1616] = 2251, [1619] = 2251, [1650] = 2253, [1651] = 2253,
    [1652] = 2253, [1653] = 2253, [1658] = 2252, [1659] = 2252, [1660] = 2252, [1661] = 2252,
    [1666] = 2252, [1667] = 2252, [1668] = 2252, [1669] = 2252, [1670] = 2252, [1671] = 2252,
    [1672] = 2252, [1673] = 2252, [1674] = 2253, [1676] = 2252, [1677] = 2253, [1714] = 2251,
    [1715] = 2251, [1716] = 2251, [1724] = 2252, [1725] = 2252, [1726] = 2252, [1727] = 2252,
    [1728] = 2254, [1729] = 2254, [1730] = 2254, [1731] = 2254, [1732] = 2254, [1733] = 2254,
    [1735] = 2254, [1775] = 2250, [2034] = 2252, [4996] = 2252, [2116] = 2254, [2116] = 2254,
    [2117] = 2254, [2118] = 2254, [2119] = 2254, [6123] = 2254, [2080] = 2254, [2081] = 2254,
    [2082] = 2254, [2083] = 2254, [2084] = 2254, [2085] = 2254, [2093] = 2250, [2094] = 2250,
    [2095] = 2250, [2098] = 2250, [2099] = 2250, [2101] = 2250, [2106] = 2250, [2105] = 2250,
    [2562] = 2257, [2581] = 2258, [2582] = 2258, [2582] = 2258, [2583] = 2258, [3805] = 6267,
    [3806] = 6267, [3807] = 2252, [3808] = 2252, [3809] = 2252, [3810] = 2252, [3811] = 2255,
    [3812] = 6267, [3813] = 2252, [3814] = 2252, [3815] = 2252, [3816] = 2252, [3817] = 2252,
    [3818] = 2252, [3819] = 2252, [3820] = 2252, [3821] = 2255, [3832] = 2255, [3833] = 2255,
    [3834] = 2255, [3835] = 2255, [6356] = 2257, [6357] = 2257, [6358] = 2257, [6359] = 2257,
    [6360] = 2257, [6361] = 2257, [6363] = 2257, [6368] = 2250, [6369] = 2250, [6370] = 2250,
    [6371] = 2250, [1738] = 2250, [1739] = 2251, [1740] = 2250, [1741] = 2255, [1747] = 2250,
    [1748] = 2250, [1749] = 1750, [1750] = 2254, [1751] = 2254, [1752] = 2254, [1753] = 2254,
    [1770] = 2251, [1774] = 2250, [6085] = 2254, [7481] = 2251, [7482] = 2251, [7483] = 2251,
    [7484] = 2250, [7706] = 2251, [7707] = 2251, [1738] = 2250, [1739] = 2251, [6109] = 2254,
    [6110] = 2254, [6111] = 2254, [6112] = 2254, [7538] = 7544, [7539] = 7545, [7585] = 7586,
    [29087] = 0, [29088] = 0
}

local function containsId(table, id)
    for i, v in pairs(table) do
        if (i == id) then
            return true
        end
    end

    return false
end

function onDestroyItem(player, item, fromPosition, target, toPosition, isHotkey)
    if not target or type(target) ~= "userdata" or not target:isItem() then
        return false
    end

    if target:hasAttribute(ITEM_ATTRIBUTE_UNIQUEID) or target:hasAttribute(ITEM_ATTRIBUTE_ACTIONID) then
        return false
    end

    if toPosition.x == CONTAINER_POSITION then
        player:sendCancelMessage(Game.getReturnMessage(RETURNVALUE_NOTPOSSIBLE))
        return true
    end

    local targetId = target.itemid
    local destroyId = cutItems[targetId] or ItemType(targetId):getDestroyId()
    if destroyId == 0 then
        if targetId ~= 29087 and targetId ~= 29088 then
            return false
        end
    end

    if math.random(7) == 1 then
        local item = Game.createItem(destroyId, 1, toPosition)
        if item ~= nil then
            item:decay()
        end

        -- Against The Spider Cult (Spider Eggs)
        if targetId == 7585 then
            local eggStorage = player:getStorageValue(Storage.TibiaTales.AgainstTheSpiderCult)
            if eggStorage >= 1 and eggStorage < 5 then
                player:setStorageValue(Storage.TibiaTales.AgainstTheSpiderCult, math.max(1, eggStorage) + 1)
            end

            Game.createMonster("Giant Spider", Position(33181, 31869, 12))
        end

        -- Move items outside the container
        if target:isContainer() then
            for i = target:getSize() - 1, 0, -1 do
                   local containerItem = target:getItem(i)
                if containerItem then
                    containerItem:moveTo(toPosition)
                end
            end
        end
        if targetId == 29087 or targetId == 29088 then -- energy barrier na threatned dreams quest (feyrist)
            addEvent(Game.createItem, math.random(13000, 17000), targetId, 1, toPosition)
        end
        target:remove(1)
    end

    toPosition:sendMagicEffect(CONST_ME_POFF)
    return true
end

function onUseRope(player, item, fromPosition, target, toPosition, isHotkey)
    if toPosition.x == CONTAINER_POSITION then
        return false
    end

    local targetId = target.itemid

    local tile = Tile(toPosition)
    local ground = tile:getGround()
    if ground and isInArray(ropeSpots, ground.itemid) or tile:getItemById(14435) then
        player:teleportTo(toPosition:moveUpstairs())
        if targetId == 8592 then
            if player:getStorageValue(Storage.RookgaardTutorialIsland.tutorialHintsStorage) < 22 then
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have successfully used your rope to climb out of the hole. Congratulations! Now continue to the east.')
            end
        end
        return true
    elseif isInArray(holeId, targetId) then
        toPosition.z = toPosition.z + 1
        tile = Tile(toPosition)
        if tile then
            local thing = tile:getTopVisibleThing()
            if thing:isItem() and thing:getType():isMovable() then
                return thing:moveTo(toPosition:moveUpstairs())
            elseif thing:isCreature() and thing:isPlayer() then
                return thing:teleportTo(toPosition:moveUpstairs())
            end
        end

        player:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return true
    end

    return false
end

function onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
    local tile = Tile(toPosition)
    if not tile then
        return false
    end

    local ground = tile:getGround()
    if not ground then
        return false
    end

    local targetId = target.itemid
    local groundId = ground:getId()

    if table.contains(holes, targetId) then
        target:transform(targetId + 1)
        target:decay()
        toPosition.z = toPosition.z + 1
        tile:relocateTo(toPosition)

    elseif table.contains(sandIds, groundId) then
        local randomValue = math.random(1, 100)
        if target.actionid == 100 and randomValue <= 20 then
            ground:transform(489)
            ground:decay()
        elseif randomValue == 1 then
            Game.createItem(2159, 1, toPosition)
        elseif randomValue > 95 then
            Game.createMonster("Scarab", toPosition)
        end
        toPosition:sendMagicEffect(CONST_ME_POFF)

        -- Wrath of the emperor quest
    elseif targetId == 351 and targetActionId == 8024 then
        player:addItem(12297, 1)
        player:say("You dig out a handful of earth from this sacred place.", TALKTYPE_MONSTER_SAY)

    -- RookgaardTutorialIsland
    elseif targetId == 8579 and player:getStorageValue(Storage.RookgaardTutorialIsland.tutorialHintsStorage) < 20 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You dug a hole! Walk onto it as long as it is open to jump down into the forest cave.')
        player:setStorageValue(Storage.RookgaardTutorialIsland.tutorialHintsStorage, 19)
        Position(32070, 32266, 7):sendMagicEffect(CONST_ME_TUTORIALARROW)
        Position(32070, 32266, 7):sendMagicEffect(CONST_ME_TUTORIALSQUARE)
        target:transform(469)
        addEvent(revertItem, 30 * 1000, toPosition, 469, 8579)

    -- Gravedigger Quest
    elseif targetActionId == 3076 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission14a) == 1 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission14b) < 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You found a dragon tear. This one is warm to the touch and burns in a fiery light.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        player:addItem(21401, 1)
        player:setStorageValue(Storage.GravediggerOfDrefia.Mission14b, 1)
    elseif targetActionId == 3077 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission14b) == 1 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission14c) < 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You found a dragon tear. This one shines and shimmers as if still liquid.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        player:addItem(21401, 1)
        player:setStorageValue(Storage.GravediggerOfDrefia.Mission14c, 1)
    elseif targetActionId == 3075 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission14c) == 1 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission14) < 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You found a dragon tear. It glows in an unearthli orange light.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        player:addItem(21401, 1)
        player:setStorageValue(Storage.GravediggerOfDrefia.Mission14, 1)
    elseif targetActionId == 4654 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission49) == 1 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission50) < 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You found a piece of the scroll. You pocket it quickly.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        player:addItem(21250, 1)
        player:setStorageValue(Storage.GravediggerOfDrefia.Mission50, 1)

    elseif targetActionId == 4668 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission69) == 1 and player:getStorageValue(Storage.GravediggerOfDrefia.Mission70) < 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'A torn scroll piece emerges. Probably gnawed off by rats.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        player:addItem(21250, 1)
        player:setStorageValue(Storage.GravediggerOfDrefia.Mission70, 1)

    -- ferumbras ascendant
    elseif targetActionId == 53803 then
        if player:getStorageValue(Storage.FerumbrasAscension.Ring) >= 1 then
            return false
        end
        player:addItem(24826, 1)
        player:setStorageValue(Storage.FerumbrasAscension.Ring, 1)

    -- ???
    elseif targetActionId == 50118 then
        local wagonItem = Tile(Position(32717, 31492, 11)):getItemById(7131)
        if wagonItem then
            Game.createItem(8749, 1, wagonItem:getPosition())
            toPosition:sendMagicEffect(CONST_ME_POFF)
        end

    elseif targetId == 8749 then
        local coalItem = Tile(Position(32699, 31492, 11)):getItemById(8749)
        if coalItem then
            coalItem:remove(1)
            toPosition:sendMagicEffect(CONST_ME_POFF)

            local crucibleItem = Tile(Position(32699, 31494, 11)):getItemById(8642)
            if crucibleItem then
                crucibleItem:setActionId(50119)
            end
        end

    elseif isInArray({9632, 20230, 17672, 18586, 18580}, targetId) then
        if player:getStorageValue(Storage.SwampDiggingTimeout) >= os.time() then
            toPosition:sendMagicEffect(CONST_ME_POFF)
            return false
        end

        local config = { {from = 1, to = 39, itemId = 2817}, {from = 40, to = 79, itemId = 2145}, {from = 80, to = 100, itemId = 20138} }
        local chance = math.random(100)

        for i = 1, #config do
            local randItem = config
            if chance >= randItem.from and chance <= randItem.to then
                player:addItem(randItem.itemId, 1)
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You dug up a ' .. ItemType(randItem.itemId):getName() .. '.')
                player:setStorageValue(Storage.SwampDiggingTimeout, os.time() + 604800)
                toPosition:sendMagicEffect(CONST_ME_GREEN_RINGS)
                break
            end
        end


    elseif targetId == 22674 then
        if not player:removeItem(5091, 1) then
            return false
        end

        target:transform(5731)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_POFF)
    else
        return false
    end

    return true
end

function onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
    local stonePos = Position(32648, 32134, 10)
    if (toPosition == stonePos) then
        local tile = Tile(stonePos)
        local stone = tile:getItemById(1285)
        if (stone) then
            stone:remove(1)
            toPosition:sendMagicEffect(CONST_ME_POFF)
            addEvent(function() Game.createItem(1285, 1, stonePos) end, 20000)

            return true
        end
    end

    local targetId, targetActionId = target.itemid, target.actionid
    if isInArray({354, 355}, targetId) and (target:hasAttribute(ITEM_ATTRIBUTE_UNIQUEID) or target:hasAttribute(ITEM_ATTRIBUTE_ACTIONID)) then
        target:transform(392)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_POFF)
        
    elseif targetId == 23759 then
        target:remove()
        toPosition:sendMagicEffect(CONST_ME_POFF)
        player:addItem(23760, 1)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You picked a beautiful lion's mane flower.")

    -- shiny stone refining
    elseif target.itemid == 11227 then
        local chance = math.random(1,100)

        if chance == 1 then
            player:addItem(2160, 1) -- 1% chance of getting crystal coin
        elseif chance <= 6 then
            player:addItem(2148, 1) -- 5% chance of getting gold coin
        elseif chance <= 51 then
            player:addItem(2152, 1) -- 45% chance of getting platinum coin
        else
            player:addItem(2145, 1) -- 49% chance of getting small diamond
        end
        target:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT)
        target:remove(1)

    elseif targetId == 11227 then
        target:remove(1)
        toPosition:sendMagicEffect(CONST_ME_POFF)
        player:addItem(2152, 10)

    elseif targetId == 7200 then
        target:transform(7236)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_HITAREA)

    elseif targetId == 468 then
        target:transform(469)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_HITAREA)

    elseif targetId == 6299 then
        target:transform(482)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_HITAREA)

    elseif targetId == 23712 then
        target:transform(23713)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_HITAREA)

    elseif targetId == 481 then
        target:transform(482)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_HITAREA)

    elseif targetId == 483 then
        target:transform(484)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_HITAREA)

    elseif targetId == 7932 then
        target:transform(7933)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_HITAREA)

    elseif targetId == 103 and targetActionId == 4205 then
        if player:getStorageValue(Storage.TibiaTales.IntoTheBonePit) ~= 1 then
            return false
        end

        local remains = Game.createItem(2248, 1, toPosition)
        if remains then
            remains:setActionId(4206)
        end
        toPosition:sendMagicEffect(CONST_ME_HITAREA)
        addEvent(removeRemains, 60000, toPosition)

    --sea of light
    elseif targetId == 8634 then
        if target.actionid == 4224 then
            if player:getStorageValue(Storage.SeaOfLightQuest.Questline) == 4 and player:getStorageValue(target.actionid) ~= 1 then
                player:addItem(10614, 1)
                toPosition:sendMagicEffect(CONST_ME_ENERGYHIT)
                player:setStorageValue(target.actionid, 1)
                player:setStorageValue(Storage.SeaOfLightQuest.Questline, 5)
                player:say("*crush*", TALKTYPE_MONSTER_SAY)
            end
        end

    -- Shadows of Yalahar
    elseif targetId == 8933 then
        if player:getStorageValue(Storage.ShadownofYalahar.Questline) == 10 then
        player:sendTextMessage(TALKTYPE_ORANGE_1, 'You have unearthed a crystal!')
        player:addItem(10169, 1)
        toPosition:sendMagicEffect(CONST_ME_POFF)
        end

    -- grimvale quest
    elseif targetId == 24731 then
        if player:getStorageValue(Storage.Grimvale.SilverVein) < os.time() then
            local chance = math.random(1, 10)
            if chance >= 5 then
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Even after a thorough and frustrating search you could not find enough liquified silver in this vein to fill a flask.')
            elseif chance <= 4 then
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Carefully you gather some of the liquified silver from this vein in a small flask. You now feel strangely affected to the moon.')
                player:addItem(24714)
                target:transform(4475)
                addEvent(revertItem, 10 * 60 * 1000, toPosition, 4475, 24731)
            end
            player:setStorageValue(Storage.Grimvale.SilverVein, os.time() + 2 * 60)
        else
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You are still exhausted from earlier attempts. Getting liquid silver out of the mountain needs concentration and a steady hand.')
        end

    --The Ice Islands Quest, Nibelor 1: Breaking the Ice
    elseif targetId == 3621 and targetActionId == 12026 then
        local missionProgress, pickAmount = player:getStorageValue(Storage.TheIceIslands.Mission02), player:getStorageValue(Storage.TheIceIslands.PickAmount)
        if missionProgress < 1 or pickAmount >= 3 or player:getStorageValue(Storage.TheIceIslands.Questline) ~= 3 then
            return false
        end

        player:setStorageValue(Storage.TheIceIslands.PickAmount, math.max(0, pickAmount) + 1)
        player:setStorageValue(Storage.TheIceIslands.Mission02, missionProgress + 1) -- Questlog The Ice Islands Quest, Nibelor 1: Breaking the Ice

        if pickAmount >= 2 then
            player:setStorageValue(Storage.TheIceIslands.Questline, 4)
            player:setStorageValue(Storage.TheIceIslands.Mission02, 4) -- Questlog The Ice Islands Quest, Nibelor 1: Breaking the Ice
        end

        local crackItem = Tile(toPosition):getItemById(7185)
        if crackItem then
            crackItem:transform(7186)
            addEvent(revertItem, 60 * 1000, toPosition, 7186, 7185)
        end

        local chakoyas = {"chakoya toolshaper", "chakoya tribewarden", "chakoya windcaller"}
        Game.createMonster(chakoyas[math.random(#chakoyas)], toPosition)
        toPosition:sendMagicEffect(CONST_ME_TELEPORT)

    elseif targetId == 1304 then
    --The Pits of Inferno Quest
        if target.uid == 1022 then
            for i = 1, #lava do
                Game.createItem(5815, 1, lava)
            end
            target:transform(2256)
            toPosition:sendMagicEffect(CONST_ME_SMOKE)

    -- naginata quest
        elseif targetActionId == 50058 then
            local stoneStorage = Game.getStorageValue(GlobalStorage.NaginataStone)
            if stoneStorage ~= 5 then
                Game.setStorageValue(GlobalStorage.NaginataStone, math.max(0, stoneStorage) + 1)
            elseif stoneStorage == 5 then
                target:remove(1)
                Game.setStorageValue(GlobalStorage.NaginataStone)
            end
            toPosition:sendMagicEffect(CONST_ME_POFF)
            doTargetCombatHealth(0, player, COMBAT_PHYSICALDAMAGE, -31, -39, CONST_ME_NONE)
        end

     --The Banshee Quest
    elseif targetId == 9025 and targetActionId == 101 then
        target:transform(392)
        target:decay()
        toPosition:sendMagicEffect(CONST_ME_POFF)

     -- The Hidden City of Beregar Quest
    elseif targetActionId == 50090 then
        if player:getStorageValue(Storage.hiddenCityOfBeregar.WayToBeregar) == 1 then
            player:teleportTo(Position(32566, 31338, 10))
        end

    elseif targetActionId == 50114 then
        if Tile(Position(32617, 31513, 9)):getItemById(1027) and Tile(Position(32617, 31514, 9)):getItemById(1205) then
            local rubbleItem = Tile(Position(32619, 31514, 9)):getItemById(5709)
            if rubbleItem then
                rubbleItem:remove(1)
            end
        else
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You can't remove this pile since it's currently holding up the tunnel.")
        end

    -- Pythius The Rotten (Firewalker Boots)
    elseif targetActionId == 50127 then
        if player:getStorageValue(Storage.QuestChests.FirewalkerBoots) == 1 then
            return false
        end
        target:remove(1)

        local stoneItem = Tile(toPosition):getItemById(1304)
        if stoneItem then
            stoneItem:remove(1)
        end

        iterateArea(
            function(position)
                local groundItem = Tile(position):getGround()
                if groundItem and groundItem.itemid == 598 then
                    groundItem:transform(5815)
                end
            end,
            Position(32550, 31373, 15),
            Position(32551, 31379, 15)
        )
        iterateArea(
            function(position)
                position:sendMagicEffect(CONST_ME_POFF)
            end,
            Position(32551, 31374, 15),
            Position(32551, 31379, 15)
        )

        local portal = Game.createItem(1387, 1, Position(32551, 31376, 15))
        if portal then
            portal:setActionId(50126)
        end

        -- The Asure
    elseif targetActionId == 50091 then
        player:teleportTo(Position(32960, 32676, 4))

        -- Wrath of the emperor quest
    elseif targetId == 12296 then
        player:addItem(12295, 1)
        player:say("The cracked part of the table lets you cut out a large chunk of wood with your pick.", TALKTYPE_MONSTER_SAY)

    elseif targetId == 22671 then
        target:transform(392)
        target:decay()
    end
--Lower Roshamuul
if (target ~= nil) and target:isItem() and (target:getId() == 22469) then
    if math.random(100) > 50 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Crushing the stone produces some fine gravel.")
        target:transform(22467)
        target:decay()
    else
        Game.createMonster("Frazzlemaw", toPosition)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Crushing the stone yields nothing but slightly finer, yet still unusable rubber.")
        target:transform(22468)
        target:decay()
    end
        return true
    end
    return true
end

function onUseMachete(player, item, fromPosition, target, toPosition, isHotkey)
    local targetId = target.itemid
    if isInArray(JUNGLE_GRASS, targetId) then
        target:transform(targetId == 19433 and 19431 or targetId - 1)
        target:decay()
        return true
    end

    if isInArray(WILD_GROWTH, targetId) then
        toPosition:sendMagicEffect(CONST_ME_POFF)
        target:remove()
        return true
    end

    return onDestroyItem(player, item, fromPosition, target, toPosition, isHotkey)
end

function onUseCrowbar(player, item, fromPosition, target, toPosition, isHotkey)
    if not isInArray({2416, 10515}, item.itemid) then
        return false
    end

    local targetActionId, targetUniqueId = target.actionid, target.uid

    -- In Service Of Yalahar Quest
    if targetUniqueId == 3071 then
        if player:getStorageValue(Storage.InServiceofYalahar.SewerPipe01) < 1 then
--            doSetMonsterOutfit(player, 'skeleton', 3 * 1000)
            fromPosition:sendMagicEffect(CONST_ME_ENERGYHIT)
            player:setStorageValue(Storage.InServiceofYalahar.SewerPipe01, 1)
            player:setStorageValue(Storage.InServiceofYalahar.Mission01, player:getStorageValue(Storage.InServiceofYalahar.Mission01) + 1) -- StorageValue for Questlog 'Mission 01: Something Rotten'
            local position = player:getPosition()
            for x = -1, 1 do
                for y = -1, 1 do
                    position = position + Position(x, y, 0)
                    position:sendMagicEffect(CONST_ME_YELLOWENERGY)
                end
            end
        end

    elseif targetUniqueId == 3072 then
        if player:getStorageValue(Storage.InServiceofYalahar.SewerPipe02) < 1 then
            player:setStorageValue(Storage.InServiceofYalahar.SewerPipe02, 1)
            player:setStorageValue(Storage.InServiceofYalahar.Mission01, player:getStorageValue(Storage.InServiceofYalahar.Mission01) + 1) -- StorageValue for Questlog 'Mission 01: Something Rotten'
            local position = player:getPosition()
            for x = -1, 1 do
                for y = -1, 1 do
                    if math.random(2) == 2 then
                        position = position + Position(x, y, 0)
                        Game.createMonster('rat', position)
                        position:sendMagicEffect(CONST_ME_TELEPORT)
                    end
                end
            end
        end

    elseif targetUniqueId == 3073 then
        if player:getStorageValue(Storage.InServiceofYalahar.SewerPipe03) < 1 then
            player:say('You have used the crowbar on a grate.', TALKTYPE_MONSTER_SAY)
            player:setStorageValue(Storage.InServiceofYalahar.SewerPipe03, 1)
            player:setStorageValue(Storage.InServiceofYalahar.Mission01, player:getStorageValue(Storage.InServiceofYalahar.Mission01) + 1) -- StorageValue for Questlog 'Mission 01: Something Rotten'
        end

    elseif targetUniqueId == 3074 then
        if player:getStorageValue(Storage.InServiceofYalahar.SewerPipe04) < 1 then
--            doSetMonsterOutfit(player, 'bog raider', 5 * 1000)
            player:say('You have used the crowbar on a knot.', TALKTYPE_MONSTER_SAY)
            player:setStorageValue(Storage.InServiceofYalahar.SewerPipe04, 1)
            player:setStorageValue(Storage.InServiceofYalahar.Mission01, player:getStorageValue(Storage.InServiceofYalahar.Mission01) + 1) -- StorageValue for Questlog 'Mission 01: Something Rotten'
        end

    elseif targetActionId == 100 then
        local targetId = target.itemid

        -- Postman Quest
        if targetId == 2593 then
            if player:getStorageValue(Storage.postman.Mission02) == 1 then
                player:setStorageValue(Storage.postman.Mission02, 2)
                toPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
            end

        -- The Ape City - Mission 7
        elseif targetId == 5539 then
            local cStorage = player:getStorageValue(Storage.TheApeCity.Casks)
            if cStorage < 3 then
                player:setStorageValue(Storage.TheApeCity.Casks, math.max(0, cStorage) + 1)
                target:transform(2249)
                toPosition:sendMagicEffect(CONST_ME_EXPLOSIONAREA)
                addEvent(revertCask, 3 * 60 * 1000, toPosition)
            end
        end

    -- Secret Service Quest
    elseif targetActionId == 12566 and player:getStorageValue(Storage.secretService.TBIMission06) == 1 then
        local yellPosition = Position(32204, 31157, ?
        if player:getOutfit().lookType == 137 then -- amazon lookType
            player:setStorageValue(Storage.secretService.TBIMission06, 2)
            Game.createMonster('barbarian skullhunter', yellPosition) -- say
            player:say("Nooooo! What have you done??", TALKTYPE_MONSTER_SAY, false, 0, yellPosition)
            yellPosition.y = yellPosition.y - 1
            Game.createMonster('barbarian skullhunter', yellPosition)
        end
    else
        return false
    end

    return true
end

function onUseSpoon(player, item, fromPosition, target, toPosition, isHotkey)
    local targetId = target.itemid

    --The Ice Islands Quest
    if targetId == 388 then
        if player:getStorageValue(Storage.TheIceIslands.Questline) >= 20 then
            if player:getStorageValue(Storage.TheIceIslands.SulphurLava) < 1 then
                player:addItem(7247, 1) -- fine sulphur
                player:setStorageValue(Storage.TheIceIslands.SulphurLava, 1)
                toPosition:sendMagicEffect(CONST_ME_MAGIC_RED)
                player:say('You retrive a fine sulphur from a lava hole.', TALKTYPE_MONSTER_SAY)
            end
        end

    elseif targetId == 4184 then
        if player:getStorageValue(Storage.TheIceIslands.Questline) >= 20 then
            if player:getStorageValue(Storage.TheIceIslands.SporesMushroom) < 1 then
                player:addItem(7251, 1)
                player:setStorageValue(Storage.TheIceIslands.SporesMushroom, 1)
                toPosition:sendMagicEffect(CONST_ME_MAGIC_RED)
                player:say('You retrive spores from a mushroom.', TALKTYPE_MONSTER_SAY)
            end
        end

    -- What a foolish Quest - Mission 8 (Sulphur)
    elseif targetId == 8573 or targetId == 388 then
        if player:getStorageValue(Storage.WhatAFoolishQuest.Questline) ~= 21
                or player:getStorageValue(Storage.WhatAFoolishQuest.InflammableSulphur) == 1 then
            return false
        end

        player:setStorageValue(Storage.WhatAFoolishQuest.InflammableSulphur, 1)
        player:addItem(8204, 1) -- easily inflammable sulphur
        toPosition:sendMagicEffect(CONST_ME_YELLOW_RINGS)
    else
        return false
    end

    return true
end

function onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
    if not isInArray({2550, 10513}, item.itemid) then
        return false
    end

    local targetId, targetActionId = target.itemid, target.actionid
    if targetId == 5465 then
        target:transform(5464)
        target:decay()
        Game.createItem(5467, 1, toPosition)
        return true
    end

    if targetId == 2739 then
        target:transform(2737)
        target:decay()
        Game.createItem(2694, 1, toPosition)
        return true
    end
        -- Secret Library
    if targetActionId == 64028 then
        player:teleportTo(Position(32515, 32535, 12))
        return true
    end

    return onDestroyItem(player, item, fromPosition, target, toPosition, isHotkey)
end

function onUseSickle(player, item, fromPosition, target, toPosition, isHotkey)
    if target.itemid == 5465 then
        target:transform(5464)
        target:decay()
        Game.createItem(5467, 1, toPosition)
    end
    return true
end

function onUseKitchenKnife(player, item, fromPosition, target, toPosition, isHotkey)
    if not isInArray({2566, 10511, 10515}, item.itemid) then
        return false
    end

    local targetId = target.itemid

    -- by vikingtibia
    if targetId == 2992 then
        --if player:getStorageValue(Storage.TheIceIslands.Questline) >= 21 then
            --if player:getStorageValue(cid, 41600) >= 0  then
                player:addItem(13159, 1)
                target:transform(2993)
                --player:setStorageValue(Storage.TheIceIslands.FrostbiteHerb, 1)
                toPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
                player:say('You cut a Rabbits Foot from a rabbit.', TALKTYPE_MONSTER_SAY)

        end

    --The Ice Islands Quest
    if targetId == 7261 then
        if player:getStorageValue(Storage.TheIceIslands.Questline) >= 20 then
            if player:getStorageValue(Storage.TheIceIslands.FrostbiteHerb) < 1 then
                player:addItem(7248, 1)
                player:setStorageValue(Storage.TheIceIslands.FrostbiteHerb, 1)
                toPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
                player:say('You cut a leaf from a frostbite herb.', TALKTYPE_MONSTER_SAY)
            end
        end

    elseif targetId == 2733 then
        if player:getStorageValue(Storage.TheIceIslands.Questline) >= 20 then
            if player:getStorageValue(Storage.TheIceIslands.FlowerCactus) < 1 then
                player:addItem(7245, 1)
                player:setStorageValue(Storage.TheIceIslands.FlowerCactus, 1)
                target:transform(2723)
                addEvent(revertItem, 60 * 1000, toPosition, 2723, 2733)
                toPosition:sendMagicEffect(CONST_ME_MAGIC_GREEN)
                player:say('You cut a flower from a cactus.', TALKTYPE_MONSTER_SAY)
            end
        end

    elseif targetId == 4017 then
        if player:getStorageValue(Storage.TheIceIslands.Questline) >= 20 then
            if player:getStorageValue(Storage.TheIceIslands.FlowerBush) < 1 then
                player:addItem(7249, 1)
                player:setStorageValue(Storage.TheIceIslands.FlowerBush, 1)
                target:transform(4014)
                addEvent(revertItem, 60 * 1000, toPosition, 4014, 4017)
                toPosition:sendMagicEffect(CONST_ME_MAGIC_GREEN)
                player:say('You cut a flower from a bush.', TALKTYPE_MONSTER_SAY)
            end
        end

    -- What a foolish Quest (Mission 1)
    elseif target.actionid == 4200 then
        if toPosition.x == 32349 and toPosition.y == 32361 and toPosition.z == 7 then
            player:addItem(7476, 1)
            player:say('The stubborn flower has ruined your knife but at least you got it.', TALKTYPE_MONSTER_SAY, false, player, toPosition)
            item:remove(1)
        else
            player:say('This flower is too pathetic.', TALKTYPE_MONSTER_SAY, false, player, toPosition)
        end

    -- What a foolish Quest (Mission 5)
    elseif targetId == 7480 then
        if player:getStorageValue(Storage.WhatAFoolishQuest.EmperorBeardShave) == 1 then
            player:say('God shave the emperor. Some fool already did it.', TALKTYPE_MONSTER_SAY)
            return true
        end

        player:setStorageValue(Storage.WhatAFoolishQuest.EmperorBeardShave, 1)
        player:say('This is probably the most foolish thing you\'ve ever done!', TALKTYPE_MONSTER_SAY)
        player:addItem(7479, 1)
        Game.createMonster('dwarf guard', Position(32656, 31853, 13))

    -- What a foolish Quest (Mission ?
    elseif targetId == 4008 then
        if player:getStorageValue(Storage.WhatAFoolishQuest.Questline) ~= 22
                or player:getStorageValue(Storage.WhatAFoolishQuest.SpecialLeaves) == 1 then
            return false
        end

        player:setStorageValue(Storage.WhatAFoolishQuest.SpecialLeaves, 1)
        player:addItem(8109, 1)
        toPosition:sendMagicEffect(CONST_ME_BLOCKHIT)

    elseif isInArray(fruits, targetId) and player:removeItem(6278, 1) then
        target:remove(1)
        player:addItem(6279, 1)
        player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
    else
        return false
    end

    return true
end

 

Erro:

Lua Script Error: [Action Interface]
data/actions/scripts/tools/shovel.lua:onUse
data/actions/lib/actions.lua:322: attempt to index local 'player' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/actions/lib/actions.lua:322: in function <data/actions/lib/actions.
lua:219> 

 

Alguém me da essa força tem meu like vlw.

 

Postado

 Boaa

 

Em  data/actions/lib/actions.lua Substitua o código na linha 219: tente assim:

 

function onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
    local tile = Tile(toPosition)
    if not tile then
        return false
    end

 

Substitua o código na linha 322 tente assim:

 

    elseif isInArray({9632, 20230, 17672, 18586, 18580}, targetId) then
        if player:getStorageValue(Storage.SwampDiggingTimeout) >= os.time() then
            toPosition:sendMagicEffect(CONST_ME_POFF)
            return false
        end

 

 

E em Items data/actions/scripts/tools/shovel.lua vc Substitua por esse:

 

shovel.lua

 

Abçç! 

Editado por Heitorzera13 (veja o histórico de edições)

Postado
  • Autor
10 horas atrás, Heitorzera13 disse:

 Boaa

 

Em  data/actions/lib/actions.lua Substitua o código na linha 219: tente assim:

 

function onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
    local tile = Tile(toPosition)
    if not tile then
        return false
    end

 

Substitua o código na linha 322 tente assim:

 

    elseif isInArray({9632, 20230, 17672, 18586, 18580}, targetId) then
        if player:getStorageValue(Storage.SwampDiggingTimeout) >= os.time() then
            toPosition:sendMagicEffect(CONST_ME_POFF)
            return false
        end

 

 

E em Items data/actions/scripts/tools/shovel.lua vc Substitua por esse:

 

shovel.lua 144 B · 1 download

 

Abçç! 

Boa amigo eu ja estou usando esses códigos. o erro é na 322 no actions.lua

Postado

Boa tarde! Segue um script funcional... actions/tools/shovel

local config = {
    swampId = {20230, 18589, 18584, 18141}, -- ids dos tiles de swamp que pode ser usado a shovel
    itemGain = {{itemId = 2818, quantGain = 1}, -- itemid que ganha, e quantidade maxima do msm.
                {itemId = 2145, quantGain = 1},
                {itemId = 20138, quantGain = 1}
                }
}

local exhausth = 3600 --em quantos segundos podera usar denovo


local holes = {468, 481, 483, 7932, 23712}
local pools = {2016, 2017, 2018, 2019, 2020, 2021, 2025, 2026, 2027, 2028, 2029, 2030}
function onUse(cid, item, fromPosition, itemEx, toPosition)
if isInArray(pools, itemEx.itemid) then
        itemEx = Tile(toPosition):getGround()
    end
    if(isInArray(config.swampId, itemEx.itemid)) then
        if (getPlayerStorageValue(cid, 32901) <= os.time()) then
        if math.random(0,500) > 255 then
            local posGain = math.random(1, #config.itemGain)
            local quantGain = math.random(1,config.itemGain[posGain].quantGain)
            doPlayerAddItem(cid, config.itemGain[posGain].itemId, quantGain)
            doSendMagicEffect(toPosition, 8)
            doCreatureSay(cid,  "You dug up ".. quantGain .." ".. getItemName(config.itemGain[posGain].itemId) ..".", TALKTYPE_ORANGE_1)  
            setPlayerStorageValue(cid, 32901, os.time()+exhausth)  
        end
    else
            doPlayerSendCancel(cid, "You are exhausted, use again in 1 hour.")
        end
    else
        return shovelNormal(cid, item, fromPosition, itemEx, toPosition)
    end
    return true
end

function shovelNormal(cid, item, fromPosition, itemEx, toPosition)
local target = itemEx
    local player = Player(cid)
    local iEx = Item(itemEx.uid)
    if isInArray(holes, itemEx.itemid) then
        iEx:transform(itemEx.itemid + 1)
        iEx:decay()
 elseif isInArray(pools, target.itemid) then
        local hole = 0
        for i = 1, #holes do
            local tile = Tile(target:getPosition()):getItemById(holes[i])
            if tile then
                hole = tile
            end
        end
        if hole ~= 0 then
            hole:transform(hole:getId() + 1)
            hole:decay()
        else
            return false
        end   
    elseif itemEx.itemid == 231 or itemEx.itemid == 9059 or itemEx.itemid == 22672 then
        local rand = math.random(1, 100)
        if(itemEx.actionid  == 100 and rand <= 20) then
        iEx:transform(489)
        iEx:decay()
        elseif rand == 1 then
            Game.createItem(2159, 1, toPosition)
        elseif rand > 95 then
            Game.createMonster("Scarab", toPosition)
        end
        toPosition:sendMagicEffect(CONST_ME_POFF)
    elseif itemEx.actionid == 4654 and player:getStorageValue(9925) == 1 and player:getStorageValue(9926) < 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You found a piece of the scroll. You pocket it quickly.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        player:addItem(21250, 1)
        player:setStorageValue(9926, 1)
    elseif itemEx.actionid == 4668 and player:getStorageValue(12902) == 1 and player:getStorageValue(12903) < 1 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'A torn scroll piece emerges. Probably gnawed off by rats.')
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        player:addItem(21250, 1)
        player:setStorageValue(12903, 1)
    else
        return false
    end
    return true
end

 

Espero ter ajudado

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo