• 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 Skinning script errors

E

Evil Puncker

Guest
TFS 1.3

Hey guys, once again I'm trying to get something into official TFS (as seen here) but the script has a few things not working and I'm not able to fix them:

  • when skinning/dusting a monster it should display CONST_ME_HITAREA and not CONST_ME_POFF
  • when sculpting item 11343, the "setDescription" is giving a console error (you need to try it a several times)

here is the script, any help is appreciated, and if you can test it any further, even better!

Lua:
local config = {
    [5908] = {
        -- Minotaurs
        [3090] = {chance = 7000, newItem = 5878, after = 2831}, -- minotaur
        [5969] = {chance = 7000, newItem = 5878, after = 2831}, -- minotaur, after being killed
        [2871] = {chance = 7000, newItem = 5878, after = 2872}, -- minotaur archer
        [5982] = {chance = 7000, newItem = 5878, after = 2872}, -- minotaur archer, after being killed
        [2866] = {chance = 7000, newItem = 5878, after = 2867}, -- minotaur mage
        [5981] = {chance = 7000, newItem = 5878, after = 2867}, -- minotaur mage, after being killed
        [2876] = {chance = 7000, newItem = 5878, after = 2877}, -- minotaur guard
        [5983] = {chance = 7000, newItem = 5878, after = 2877}, -- minotaur guard, after being killed
        [23463] = {chance = 7000, newItem = 5878, after = 23464}, -- mooh'tah warrior
        [23462] = {chance = 7000, newItem = 5878, after = 23464}, -- mooh'tah warrior, after being killed
        [23467] = {chance = 7000, newItem = 5878, after = 23468}, -- minotaur hunter
        [23466] = {chance = 7000, newItem = 5878, after = 23468}, -- minotaur hunter, after being killed
        [23471] = {chance = 7000, newItem = 5878, after = 23472}, -- worm priestess
        [23470] = {chance = 7000, newItem = 5878, after = 23472}, -- worm priestess, after being killed
        [23371] = {chance = 7000, newItem = 5878, after = 23373}, -- minotaur amazon
        [23372] = {chance = 7000, newItem = 5878, after = 23373}, -- minotaur amazon, after being killed
        [23375] = {chance = 7000, newItem = 5878, after = 23377}, -- execowtioner
        [23376] = {chance = 7000, newItem = 5878, after = 23377}, -- execowtioner, after being killed
        [23367] = {chance = 7000, newItem = 5878, after = 23369}, -- moohtant
        [23368] = {chance = 7000, newItem = 5878, after = 23369}, -- moohtant, after being killed

        -- Low Class Lizards
        [4259] = {chance = 6000, newItem = 5876, after = 4260}, -- lizard sentinel
        [6040] = {chance = 6000, newItem = 5876, after = 4260}, -- lizard sentinel, after being killed
        [4262] = {chance = 6000, newItem = 5876, after = 4263}, -- lizard snakecharmer
        [6041] = {chance = 6000, newItem = 5876, after = 4263}, -- lizard snakecharmer, after being killed
        [4256] = {chance = 6000, newItem = 5876, after = 4257}, -- lizard templar
        [4251] = {chance = 6000, newItem = 5876, after = 4257}, -- lizard templar, after being killed

        -- High Class Lizards
        [11285] = {chance = 10000, newItem = 5876, after = 11286}, -- lizard chosen,
        [11288] = {chance = 10000, newItem = 5876, after = 11286}, -- lizard chosen, after being killed
        [11277] = {chance = 10000, newItem = 5876, after = 11278}, -- lizard dragon priest
        [11280] = {chance = 10000, newItem = 5876, after = 11278}, -- lizard dragon priest, after being killed
        [11269] = {chance = 10000, newItem = 5876, after = 11270}, -- lizard high guard
        [11272] = {chance = 10000, newItem = 5876, after = 11270}, -- lizard high guard, after being killed
        [11281] = {chance = 10000, newItem = 5876, after = 11282}, -- lizard zaogun
        [11284] = {chance = 10000, newItem = 5876, after = 11282}, -- lizard zaogun, after being killed

        -- Dragon
        [3104] = {chance = 5000, newItem = 5877, after = 3105},
        [5973] = {chance = 5000, newItem = 5877, after = 3105}, -- after being killed

        -- Dragon Lord
        [2881] = {chance = 5000, newItem = 5948, after = 2882},
        [5984] = {chance = 5000, newItem = 5948, after = 2882}, -- after being killed

        -- Behemoth
        [2931] = {chance = 10000, newItem = 5893, after = 2932},
        [5999] = {chance = 10000, newItem = 5893, after = 2932}, -- after being killed

        -- Bone Beast
        [3031] = {chance = 6000, newItem = 5925, after = 3032},
        [6030] = {chance = 6000, newItem = 5925, after = 3032}, -- after being killed

        -- Clomp
        [25399] = {chance = 50000, newItem = 24842, after = 25400},
        [25398] = {chance = 50000, newItem = 24842, after = 25400}, -- after being killed

        -- Piece of Marble Rock
        [11343] = {
            {chance = 530, newItem = 11346, desc = "This little figurine of a goddess was masterfully sculpted by |PLAYERNAME|."},
            {chance = 9600, newItem = 11345, desc = "This little figurine made by |PLAYERNAME| has some room for improvement."},
            {chance = 24000, newItem = 11344, desc = "This shoddy work was made by |PLAYERNAME|."}
        },

        -- Ice Cube
        [7441] = {chance = 22000, newItem = 7442},
        [7442] = {chance = 4800, newItem = 7444},
        [7444] = {chance = 900, newItem = 7445},
        [7445] = {chance = 40, newItem = 7446}
    },
    [5942] = {
        -- Demon
        [2916] = {chance = 3000, newItem = 5906, after = 2917},
        [5995] = {chance = 3000, newItem = 5906, after = 2917}, -- after being killed

        -- Vampires
        [2956] = {chance = 6000, newItem = 5905, after = 2957}, -- vampire
        [6006] = {chance = 6000, newItem = 5905, after = 2957}, -- vampire, after being killed
        [9654] = {chance = 6000, newItem = 5905, after = 9658}, -- vampire bride
        [9660] = {chance = 6000, newItem = 5905, after = 9658}, -- vampire bride, after being killed
        [21275] = {chance = 6000, newItem = 5905, after = 21276}, -- vampire viscount
        [21278] = {chance = 6000, newItem = 5905, after = 21276} -- vampire viscount, after being killed
    }
}

local skinning = Action()

function skinning.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local skin = config[item.itemid][target.itemid]
    if not skin then
        player:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return true
    end

    local randomChance = math.random(1, 100000)
    local effect = CONST_ME_MAGIC_GREEN
    local transform = true
    if type(skin[1]) == "table" then
        local added = false
        local _skin
        for i = 1, #skin do
            _skin = skin[i]
            if randomChance <= _skin.chance then
                if target.itemid == 11343 then
                    target:getPosition():sendMagicEffect(CONST_ME_ICEAREA)
                    local marble = player:addItem(_skin.newItem, _skin.amount or 1)
                    if marble then
                        marble:setDescription(_skin.desc:gsub("|PLAYERNAME|", player:getName()))
                    end
                    target:remove()
                    added = true
                else
                    target:transform(_skin.newItem, _skin.amount or 1)
                    added = true
                end
                break
            end
        end

        if not added and target.itemid == 8961 then
            effect = CONST_ME_POFF
            transform = false
        elseif not added and target.itemid == 11343 then
            effect = CONST_ME_POFF
            transform = false
            target:remove()
        end
    elseif randomChance <= skin.chance then
        if table.contains({7441, 7442, 7444, 7445}, target.itemid) then
            target:transform(skin.newItem, 1)
            effect = CONST_ME_HITAREA
        else
            player:addItem(skin.newItem, skin.amount or 1)
        end
    else
        if table.contains({7441, 7442, 7444, 7445}, target.itemid) then
            player:say("The attempt of sculpting failed miserably.", TALKTYPE_MONSTER_SAY)
            effect = CONST_ME_HITAREA
            target:remove()
        else
            effect = CONST_ME_POFF
        end
    end
    toPosition:sendMagicEffect(effect)
    if transform then
        target:transform(skin.after or target:getType():getDecayId() or target.itemid + 1)
    else
        target:remove()
    end

    return true
end

skinning:id(5908, 5942)
skinning:register()

please if possible test skinning, dusting and the marble sculpt
 
Solution
E
okay I managed to fix the set description thing and the wrong effect, also removed an unused if,

now the only remaining problem is the effect thing, it is so messed up, it works when items are on ground but not when items are on the backpack,

the current code is now this one:

Lua:
local config = {
    [5908] = {
        -- Minotaurs
        [3090] = {chance = 7000, newItem = 5878, after = 2831}, -- minotaur
        [5969] = {chance = 7000, newItem = 5878, after = 2831}, -- minotaur, after being killed
        [2871] = {chance = 7000, newItem = 5878, after = 2872}, -- minotaur archer
        [5982] = {chance = 7000, newItem = 5878, after = 2872}, -- minotaur archer, after being killed
        [2866] = {chance = 7000, newItem = 5878, after = 2867}, --...
okay I managed to fix the set description thing and the wrong effect, also removed an unused if,

now the only remaining problem is the effect thing, it is so messed up, it works when items are on ground but not when items are on the backpack,

the current code is now this one:

Lua:
local config = {
    [5908] = {
        -- Minotaurs
        [3090] = {chance = 7000, newItem = 5878, after = 2831}, -- minotaur
        [5969] = {chance = 7000, newItem = 5878, after = 2831}, -- minotaur, after being killed
        [2871] = {chance = 7000, newItem = 5878, after = 2872}, -- minotaur archer
        [5982] = {chance = 7000, newItem = 5878, after = 2872}, -- minotaur archer, after being killed
        [2866] = {chance = 7000, newItem = 5878, after = 2867}, -- minotaur mage
        [5981] = {chance = 7000, newItem = 5878, after = 2867}, -- minotaur mage, after being killed
        [2876] = {chance = 7000, newItem = 5878, after = 2877}, -- minotaur guard
        [5983] = {chance = 7000, newItem = 5878, after = 2877}, -- minotaur guard, after being killed
        [23463] = {chance = 7000, newItem = 5878, after = 23464}, -- mooh'tah warrior
        [23462] = {chance = 7000, newItem = 5878, after = 23464}, -- mooh'tah warrior, after being killed
        [23467] = {chance = 7000, newItem = 5878, after = 23468}, -- minotaur hunter
        [23466] = {chance = 7000, newItem = 5878, after = 23468}, -- minotaur hunter, after being killed
        [23471] = {chance = 7000, newItem = 5878, after = 23472}, -- worm priestess
        [23470] = {chance = 7000, newItem = 5878, after = 23472}, -- worm priestess, after being killed
        [23371] = {chance = 7000, newItem = 5878, after = 23373}, -- minotaur amazon
        [23372] = {chance = 7000, newItem = 5878, after = 23373}, -- minotaur amazon, after being killed
        [23375] = {chance = 7000, newItem = 5878, after = 23377}, -- execowtioner
        [23376] = {chance = 7000, newItem = 5878, after = 23377}, -- execowtioner, after being killed
        [23367] = {chance = 7000, newItem = 5878, after = 23369}, -- moohtant
        [23368] = {chance = 7000, newItem = 5878, after = 23369}, -- moohtant, after being killed

        -- Low Class Lizards
        [4259] = {chance = 6000, newItem = 5876, after = 4260}, -- lizard sentinel
        [6040] = {chance = 6000, newItem = 5876, after = 4260}, -- lizard sentinel, after being killed
        [4262] = {chance = 6000, newItem = 5876, after = 4263}, -- lizard snakecharmer
        [6041] = {chance = 6000, newItem = 5876, after = 4263}, -- lizard snakecharmer, after being killed
        [4256] = {chance = 6000, newItem = 5876, after = 4257}, -- lizard templar
        [4251] = {chance = 6000, newItem = 5876, after = 4257}, -- lizard templar, after being killed

        -- High Class Lizards
        [11285] = {chance = 10000, newItem = 5876, after = 11286}, -- lizard chosen,
        [11288] = {chance = 10000, newItem = 5876, after = 11286}, -- lizard chosen, after being killed
        [11277] = {chance = 10000, newItem = 5876, after = 11278}, -- lizard dragon priest
        [11280] = {chance = 10000, newItem = 5876, after = 11278}, -- lizard dragon priest, after being killed
        [11269] = {chance = 10000, newItem = 5876, after = 11270}, -- lizard high guard
        [11272] = {chance = 10000, newItem = 5876, after = 11270}, -- lizard high guard, after being killed
        [11281] = {chance = 10000, newItem = 5876, after = 11282}, -- lizard zaogun
        [11284] = {chance = 10000, newItem = 5876, after = 11282}, -- lizard zaogun, after being killed

        -- Dragon
        [3104] = {chance = 5000, newItem = 5877, after = 3105},
        [5973] = {chance = 5000, newItem = 5877, after = 3105}, -- after being killed

        -- Dragon Lord
        [2881] = {chance = 5000, newItem = 5948, after = 2882},
        [5984] = {chance = 5000, newItem = 5948, after = 2882}, -- after being killed

        -- Behemoth
        [2931] = {chance = 10000, newItem = 5893, after = 2932},
        [5999] = {chance = 10000, newItem = 5893, after = 2932}, -- after being killed

        -- Bone Beast
        [3031] = {chance = 6000, newItem = 5925, after = 3032},
        [6030] = {chance = 6000, newItem = 5925, after = 3032}, -- after being killed

        -- Clomp
        [25399] = {chance = 50000, newItem = 24842, after = 25400},
        [25398] = {chance = 50000, newItem = 24842, after = 25400}, -- after being killed

        -- Piece of Marble Rock
        [11343] = {
            {chance = 530, newItem = 11346, desc = "This little figurine of a goddess was masterfully sculpted by |PLAYERNAME|."},
            {chance = 9600, newItem = 11345, desc = "This little figurine made by |PLAYERNAME| has some room for improvement."},
            {chance = 24000, newItem = 11344, desc = "This shoddy work was made by |PLAYERNAME|."}
        },

        -- Ice Cube
        [7441] = {chance = 22000, newItem = 7442},
        [7442] = {chance = 4800, newItem = 7444},
        [7444] = {chance = 900, newItem = 7445},
        [7445] = {chance = 40, newItem = 7446}
    },
    [5942] = {
        -- Demon
        [2916] = {chance = 3000, newItem = 5906, after = 2917},
        [5995] = {chance = 3000, newItem = 5906, after = 2917}, -- after being killed

        -- Vampires
        [2956] = {chance = 6000, newItem = 5905, after = 2957}, -- vampire
        [6006] = {chance = 6000, newItem = 5905, after = 2957}, -- vampire, after being killed
        [9654] = {chance = 6000, newItem = 5905, after = 9658}, -- vampire bride
        [9660] = {chance = 6000, newItem = 5905, after = 9658}, -- vampire bride, after being killed
        [21275] = {chance = 6000, newItem = 5905, after = 21276}, -- vampire viscount
        [21278] = {chance = 6000, newItem = 5905, after = 21276} -- vampire viscount, after being killed
    }
}

local skinning = Action()

function skinning.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local skin = config[item.itemid][target.itemid]
    if not skin then
        player:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return true
    end

    local randomChance = math.random(1, 100000)
    local effect = CONST_ME_MAGIC_GREEN
    local transform = true
    if type(skin[1]) == "table" then
        local added = false
        local _skin
        for i = 1, #skin do
            _skin = skin[i]
            if randomChance <= _skin.chance then
                if target.itemid == 11343 then
                    local marble = player:addItem(_skin.newItem, _skin.amount or 1)
                    if marble then
                        marble:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, _skin.desc:gsub("|PLAYERNAME|", player:getName()))
                    end
                    effect = CONST_ME_HITAREA
                    target:remove()
                    added = true
                else
                    target:transform(_skin.newItem, _skin.amount or 1)
                    effect = CONST_ME_HITAREA
                    added = true
                end
                break
            end
        end

        if not added and target.itemid == 11343 then
            effect = CONST_ME_HITAREA
            player:say("Your attempt at shaping that marble rock failed miserably.", TALKTYPE_MONSTER_SAY)
            transform = false
            target:remove()
        end
    elseif randomChance <= skin.chance then
        if table.contains({7441, 7442, 7444, 7445}, target.itemid) then
            target:transform(skin.newItem, 1)
            effect = CONST_ME_HITAREA
        else
            player:addItem(skin.newItem, skin.amount or 1)
        end
    else
        if table.contains({7441, 7442, 7444, 7445}, target.itemid) then
            player:say("The attempt of sculpting failed miserably.", TALKTYPE_MONSTER_SAY)
            effect = CONST_ME_HITAREA
            target:remove()
        else
            effect = CONST_ME_BLOCKHIT
        end
    end
    toPosition:sendMagicEffect(effect)
    if transform then
        target:transform(skin.after or target:getType():getDecayId() or target.itemid + 1)
    else
        target:remove()
    end

    return true
end

skinning:id(5908, 5942)
skinning:register()

seems like this is the problematic code:

toPosition:sendMagicEffect(effect)
it works on ground but not if items are on backpack
Post automatically merged:

toPosition:sendMagicEffect(effect)
it works on ground but not if items are on backpack
fixed it by using the following:
Lua:
    if toPosition.x == CONTAINER_POSITION then
        toPosition = player:getPosition()
    end
    toPosition:sendMagicEffect(effect)
 
Last edited by a moderator:
Solution
Was playing with this yesterday but couldn't find a perfect solution.

As I understand RL Tibia works very straight forward - the magiceffect will display wherever the target item is (inside a depot, inside player backpack, next to the player... etc)

Your solution makes the magiceffect over the player whenever they are inside a container, no matter where the container is.

using

Code:
item:getPosition()

Will show effect on the obsidian knife no matter where it is. Haven't found a solution to do something similar but for the target item instead.

Nonetheless good job
 
Was playing with this yesterday but couldn't find a perfect solution.

As I understand RL Tibia works very straight forward - the magiceffect will display wherever the target item is (inside a depot, inside player backpack, next to the player... etc)

Your solution makes the magiceffect over the player whenever they are inside a container, no matter where the container is.

using

Code:
item:getPosition()

Will show effect on the obsidian knife no matter where it is. Haven't found a solution to do something similar but for the target item instead.

Nonetheless good job
indeed, neither target:getPosition():sendMagicEffect(effect) or toPosition:sendMagicEffect(effect) works as intended in these cases, maybe tfs bug
 
Back
Top