Moj mistrz
Monster Creator
Hello, I've got a little problem with skinning script. Obviously it wasn't made by me so I have no idea how to reproduce errors with corpse owner check. To the point - there's the script with little function which SHOULD check corpse owner. If the owner is correct the script should let him skin that corpse, else it should return YOUARENOTTHEOWNER.
The bug is that whenever I use my obsidian knife it returns me you are not the owner. Even when I am. It also returns it when I use obsidian knife on the item which is not a corpse at all.
Any help is appreciated.
Code:
local config = {
[5908] = {
-- Minotaurs
[5969] = {value = 25000, newItem = 5878, after = 2831}, -- [2830] original
[2871] = {value = 25000, newItem = 5878},
[2866] = {value = 25000, newItem = 5878},
[2876] = {value = 25000, newItem = 5878},
[3090] = {value = 25000, newItem = 5878},
[23463] = {value = 25000, newItem = 5878},
[23467] = {value = 25000, newItem = 5878},
[23471] = {value = 25000, newItem = 5878},
-- Low Class Lizards
[4259] = {value = 25000, newItem = 5876},
[4262] = {value = 25000, newItem = 5876},
[4256] = {value = 25000, newItem = 5876},
-- High Class Lizards
[11288] = {value = 25000, newItem = 5876},
[11280] = {value = 25000, newItem = 5876},
[11272] = {value = 25000, newItem = 5876},
[11284] = {value = 25000, newItem = 5876},
-- Dragons
[3104] = {value = 25000, newItem = 5877},
[2844] = {value = 25000, newItem = 5877},
-- Dragon Lords
[2881] = {value = 25000, newItem = 5948},
-- Behemoths
[2931] = {value = 35000, newItem = 5893},
-- Bone Beasts
[3031] = {value = 25000, newItem = 5925},
-- The Mutated Pumpkin
[8961] = { { value = 5000, newItem = 7487 }, { value = 10000, newItem = 7737 }, { value = 20000, 6492 }, { value = 30000, newItem = 8860 }, { value = 45000, newItem = 2683 }, { value = 60000, newItem = 2096 }, { value = 90000, newItem = 9005, amount = 50 } },
-- Marble
[11343] = { {value = 10000, newItem = 11345, desc = "This shoddy work was made by |PLAYERNAME|." }, {value = 35000, newItem = 11345, desc = "This little figurine made by |PLAYERNAME| has some room for improvement." }, { value = 60000, newItem = 11346, desc = "This little figurine of Tibiasula was masterfully sculpted by |PLAYERNAME|." } },
-- Ice Cube
[7441] = {value = 25000, newItem = 7442},
[7442] = {value = 25000, newItem = 7444},
[7444] = {value = 25000, newItem = 7445},
[7445] = {value = 25000, newItem = 7446},
},
[5942] = {
-- Demon
[2916] = {value = 25000, newItem = 5906},
-- Vampires
[2956] = {value = 25000, newItem = 5905},
[9654] = {value = 25000, newItem = 5905, after = 9658},
[8938] = {value = 25000, newItem = 5905},
[21275] = {value = 25000, newItem= 5905}
}
}
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
local skin = config[item.itemid][target.itemid]
local owner = target:hasAttribute(ITEM_ATTRIBUTE_CORPSEOWNER)
if owner ~= 0 and owner ~= player:getId() then
player:sendTextMessage(MESSAGE_STATUS_SMALL, "You are not the owner.")
return true
end
if not skin then
player:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
return true
end
local random, effect, transform = math.random(1, 100000), CONST_ME_MAGIC_GREEN, true
if type(skin[1]) == 'table' then
local added = false
local _skin
for i = 1, #skin do
_skin = skin[i]
if random <= _skin.value then
if target.itemid == 11343 then
effect = CONST_ME_ICEAREA
local gobletItem = player:addItem(_skin.newItem, _skin.amount or 1)
if gobletItem then
gobletItem:setDescription(_skin.desc:gsub('|PLAYERNAME|', player:getName()))
end
added = true
elseif isInArray({7441, 7442, 7444, 7445}, target.itemid) then
player:addItem(_skin.newItem, _skin.amount or 1)
effect = CONST_ME_HITAREA
added = true
else
player:addItem(_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
end
elseif random <= skin.value then
if target.itemid == 11343 then
effect = CONST_ME_ICEAREA
local gobletItem = player:addItem(skin.newItem, skin.amount or 1)
if gobletItem then
gobletItem:setDescription(skin.desc:gsub('|PLAYERNAME|', player:getName()))
end
elseif isInArray({7441, 7442, 7444, 7445}, target.itemid) then
if skin.newItem == 7446 then
player:addAchievement('Ice Sculptor')
end
player:addItem(skin.newItem, skin.amount or 1)
effect = CONST_ME_HITAREA
else
player:addItem(skin.newItem, skin.amount or 1)
end
else
if isInArray({7441, 7442, 7444, 7445}, target.itemid) then
player:say('The attempt of sculpting failed miserably.', TALKTYPE_MONSTER_SAY)
effect = CONST_ME_HITAREA
else
effect = CONST_ME_POFF
end
end
toPosition:sendMagicEffect(effect)
if transform then
target:transform(skin.after or target.itemid + 1)
end
return true
end
The bug is that whenever I use my obsidian knife it returns me you are not the owner. Even when I am. It also returns it when I use obsidian knife on the item which is not a corpse at all.
Any help is appreciated.