• 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 Problem with toolgear.lua

peteralto

Member
Joined
Nov 1, 2020
Messages
93
Solutions
1
Reaction score
17
I would like to understand why the pocket knives cannot perform the scythe function. There is no error in the distro, but when I try to use it, it doesn't work.

toolgear.lua
Lua:
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    return onUseMachete(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseRope(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
    or onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseCrowbar(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
end

TFS 1.3
 
Solution

actions.xml
XML:
<action itemid="10511" script="tools/toolgear.lua" />
<action itemid="10513" script="tools/toolgear.lua" />
<action itemid="10515" script="tools/toolgear.lua" />

lib/actions.lua
Lua:
local holeId = {
    294, 369, 370, 383, 392, 408, 409, 410, 427, 428, 430, 462, 469, 470, 482,
    484, 485, 489, 924, 3135, 3136, 7933, 7938, 8170, 8286, 8285, 8284, 8281,
    8280, 8279, 8277, 8276, 8567, 8585, 8596, 8595, 8249, 8250, 8251,
    8252, 8253, 8254, 8255, 8256, 8592, 8972, 9606, 9625, 13190, 14461, 19519, 21536, 26020
}


local holes = {468, 481, 483, 7932, 23712}


local JUNGLE_GRASS = { 2782, 3985, 19433 }
local JUNGLE_GRASS1 = { 35458 }
local WILD_GROWTH = { 1499, 11099, 2101...
Does machette/rope/shovel work?

mine looks the same, but works fine

Test the other functions to see if they work, it might be returning true on an earlier tool for some reason when it shouldnt.
 
remember that only item 10513 have the scythe function

The function is like this, and with the item scythe id 2550 it works as normal.

Lua:
function onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
    if not isInArray({2550, 10511, 10513, 10515}, 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

    return onDestroyItem(player, item, fromPosition, target, toPosition, isHotkey)
end
 
Lua:
if not isInArray({2550, 10511, 10513, 10515}, item.itemid) then
    return false
end
Just add id of your item to the array.
 
Do the other functions of the special tools work, or only scythe not working?
All work except scythe.
Post automatically merged:

Lua:
if not isInArray({2550, 10511, 10513, 10515}, item.itemid) then
    return false
end
Just add id of your item to the array.
But these are the IDs I need to work.
 
All work except scythe.
Post automatically merged:


But these are the IDs I need to work.
Can we just confirm that you are attempting to cut wheat and not jungle grass in-game?

Just in case it's something stupid like that. xD

--
Assuming it's not the above issue, the actual issue would be that one of the other functions is returning true at some point, instead of false.

Can you post your lib file that contains all the functions?
 
Can we just confirm that you are attempting to cut wheat and not jungle grass in-game?

Just in case it's something stupid like that. xD

--
Assuming it's not the above issue, the actual issue would be that one of the other functions is returning true at some point, instead of false.

Can you post your lib file that contains all the functions?


actions.xml
XML:
<action itemid="10511" script="tools/toolgear.lua" />
<action itemid="10513" script="tools/toolgear.lua" />
<action itemid="10515" script="tools/toolgear.lua" />

lib/actions.lua
Lua:
local holeId = {
    294, 369, 370, 383, 392, 408, 409, 410, 427, 428, 430, 462, 469, 470, 482,
    484, 485, 489, 924, 3135, 3136, 7933, 7938, 8170, 8286, 8285, 8284, 8281,
    8280, 8279, 8277, 8276, 8567, 8585, 8596, 8595, 8249, 8250, 8251,
    8252, 8253, 8254, 8255, 8256, 8592, 8972, 9606, 9625, 13190, 14461, 19519, 21536, 26020
}


local holes = {468, 481, 483, 7932, 23712}


local JUNGLE_GRASS = { 2782, 3985, 19433 }
local JUNGLE_GRASS1 = { 35458 }
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() 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 targetId, targetActionId = target.itemid, target.actionid
    if isInArray(holes, targetId) then
        target:transform(targetId + 1)
        target:decay()


    elseif isInArray({231, 9059}, targetId) then
        local rand = math.random(100)
        if target.actionid == 100 and rand <= 20 then
            target:transform(489)
            target: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 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[i]
            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 == 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)


        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 == 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 == 1304 then
    --The Pits of Inferno Quest
        if target.uid == 1022 then
            for i = 1, #lava do
                Game.createItem(5815, 1, lava[i])
            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)


    -- 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
    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(JUNGLE_GRASS1, targetId) then
        target:transform(targetId == 35458)
        target:transform(35459)
        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)
    local targetActionId, targetUniqueId = target.actionid, target.uid


    if 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, 8)
        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) >= 21 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) >= 21 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, 10511, 10513, 10515}, 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


    return onDestroyItem(player, item, fromPosition, target, toPosition, isHotkey)
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


    --
    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) >= 21 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) >= 21 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) >= 21 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


    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
 
try:
Lua:
function onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
    local targetId = target.itemid
    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
    
    return onDestroyItem(player, item, fromPosition, target, toPosition, isHotkey)
end
 
try:
Lua:
function onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
    local targetId = target.itemid
    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
   
    return onDestroyItem(player, item, fromPosition, target, toPosition, isHotkey)
end
It remains the same, working only on ID 2550 (scythe).
 

actions.xml
XML:
<action itemid="10511" script="tools/toolgear.lua" />
<action itemid="10513" script="tools/toolgear.lua" />
<action itemid="10515" script="tools/toolgear.lua" />

lib/actions.lua
Lua:
local holeId = {
    294, 369, 370, 383, 392, 408, 409, 410, 427, 428, 430, 462, 469, 470, 482,
    484, 485, 489, 924, 3135, 3136, 7933, 7938, 8170, 8286, 8285, 8284, 8281,
    8280, 8279, 8277, 8276, 8567, 8585, 8596, 8595, 8249, 8250, 8251,
    8252, 8253, 8254, 8255, 8256, 8592, 8972, 9606, 9625, 13190, 14461, 19519, 21536, 26020
}


local holes = {468, 481, 483, 7932, 23712}


local JUNGLE_GRASS = { 2782, 3985, 19433 }
local JUNGLE_GRASS1 = { 35458 }
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() 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 targetId, targetActionId = target.itemid, target.actionid
    if isInArray(holes, targetId) then
        target:transform(targetId + 1)
        target:decay()


    elseif isInArray({231, 9059}, targetId) then
        local rand = math.random(100)
        if target.actionid == 100 and rand <= 20 then
            target:transform(489)
            target: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 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[i]
            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 == 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)


        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 == 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 == 1304 then
    --The Pits of Inferno Quest
        if target.uid == 1022 then
            for i = 1, #lava do
                Game.createItem(5815, 1, lava[i])
            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)


    -- 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
    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(JUNGLE_GRASS1, targetId) then
        target:transform(targetId == 35458)
        target:transform(35459)
        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)
    local targetActionId, targetUniqueId = target.actionid, target.uid


    if 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, 8)
        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) >= 21 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) >= 21 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, 10511, 10513, 10515}, 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


    return onDestroyItem(player, item, fromPosition, target, toPosition, isHotkey)
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


    --
    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) >= 21 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) >= 21 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) >= 21 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


    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
Inside your onUsePick function, the very last line
change return true
to return false
 
Solution
Inside your onUsePick function, the very last line
change return true
to return false
Did not work.

I noticed that if I put the item as a primary function, it works, like this:

Lua:
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    return onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
    or onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseCrowbar(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseMachete(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseRope(player, item, fromPosition, target, toPosition, isHotkey)
end

On the other hand, both the Machete and the Rope stop working.
 
Did not work.

I noticed that if I put the item as a primary function, it works, like this:

Lua:
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    return onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
    or onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseCrowbar(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseMachete(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseRope(player, item, fromPosition, target, toPosition, isHotkey)
end

On the other hand, both the Machete and the Rope stop working.
:/

I literally installed your lib and your toolgear copy-paste and had no issue, after changing that return true to return false.

I'll test 1 more time, everything.

and.. yep still working.
View attachment bandicam 2021-09-03 15-08-01-520.mp4
Here's the edited code.
Lua:
    <!-- Tools -->
    <action itemid="2120" script="tools/rope.lua" />
    <action itemid="2416" script="tools/crowbar.lua" />
    <action itemid="2420" script="tools/machete.lua" />
    <action itemid="2442" script="tools/machete.lua" />
    <action itemid="2550" script="tools/scythe.lua" />
    <action itemid="2553" script="tools/pick.lua" />
    <action itemid="2566" script="tools/kitchen_knife.lua" />
    <action itemid="2580" script="tools/fishing.lua" allowfaruse="1" />
    <action itemid="2554" script="tools/shovel.lua" />
    <action itemid="5710" script="tools/shovel.lua" />
    <action itemid="7731" script="tools/rope.lua" />
    <action itemid="10511" script="tools/tool_gear.lua" />
    <action itemid="10513" script="tools/tool_gear.lua" />
    <action itemid="10515" script="tools/tool_gear.lua" />
Lua:
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    return onUseMachete(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseRope(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
    or onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseCrowbar(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
end
Post automatically merged:

and the other code. there was more then 15k characters apparently?
I wonder how you were able to post it. xD
 
:/

I literally installed your lib and your toolgear copy-paste and had no issue, after changing that return true to return false.

I'll test 1 more time, everything.

and.. yep still working.
View attachment 61786
Here's the edited code.
Lua:
    <!-- Tools -->
    <action itemid="2120" script="tools/rope.lua" />
    <action itemid="2416" script="tools/crowbar.lua" />
    <action itemid="2420" script="tools/machete.lua" />
    <action itemid="2442" script="tools/machete.lua" />
    <action itemid="2550" script="tools/scythe.lua" />
    <action itemid="2553" script="tools/pick.lua" />
    <action itemid="2566" script="tools/kitchen_knife.lua" />
    <action itemid="2580" script="tools/fishing.lua" allowfaruse="1" />
    <action itemid="2554" script="tools/shovel.lua" />
    <action itemid="5710" script="tools/shovel.lua" />
    <action itemid="7731" script="tools/rope.lua" />
    <action itemid="10511" script="tools/tool_gear.lua" />
    <action itemid="10513" script="tools/tool_gear.lua" />
    <action itemid="10515" script="tools/tool_gear.lua" />
Lua:
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    return onUseMachete(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseRope(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseShovel(player, item, fromPosition, target, toPosition, isHotkey)
    or onUsePick(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseCrowbar(player, item, fromPosition, target, toPosition, isHotkey)
    or onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
end
Post automatically merged:

and the other code. there was more then 15k characters apparently?
I wonder how you were able to post it. xD
First, thank you for your attention.

What seems strange to me is that if I invert the position of the tools in the code it works one and the other ones stop working hahaha.

Apparently it's 28k, but I didn't even know about the limitation.😁
 
In TFS master only the scythe and tool kit 10513 can cut wheat

see the file data/actions/lib/actions.lua
Lua:
function onUseScythe(player, item, fromPosition, target, toPosition, isHotkey)
    if not table.contains({2550, 10513}, item.itemid) then
        return false
    end

if id not is 2550 or 10513 then return false
 
Inside your onUsePick function, the very last line
change return true
to return false

I retraced the steps and realized that this return false was not validated.

In short, the problem was in the Pick function, which didn't allow to continue with the other functions in the code because it returned true. ☺️

Thank you @Xikini and the rest of the guys who somehow tried to help me.
 
Back
Top