forgottenserver/data/scripts/actions/tools/skinning.lua
sundance 973855c3e0
Fix ice cube sculpting chance (#4766)
Set the correct chance for ice mammoth sculpting.

* Use stats from tibia-stats research (bigger sample size)
2024-07-17 21:25:36 -03:00

201 lines
8.7 KiB
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
-- Bonebeast
[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 = 30000, newItem = 7442},
[7442] = {chance = 19000, newItem = 7444},
[7444] = {chance = 10000, newItem = 7445},
[7445] = {chance = 7000, newItem = 7446},
-- The Mutated Pumpkin
[13583] = {
{chance = 5000, newItem = 8860}, -- spiderwebs
{chance = 5000, newItem = 9006}, -- toy spider
{chance = 5000, newItem = 6492}, -- bat decoration
{chance = 50000, newItem = 6526}, -- skeleton decoration
{chance = 50000, newItem = 9005, amount = 20}, -- yummy gummy worm
{chance = 5000, newItem = 6570}, -- surprise bag (red)
{chance = 50000, newItem = 6571}, -- surprise bag (blue)
{chance = 50000, newItem = 6574}, -- bar of chocolate
{chance = 50000, newItem = 2096}, -- pumpkinhead
{chance = 50000, newItem = 2683}, -- pumpkin
{chance = 50000, newItem = 2688, amount = 50}, -- candy cane
{chance = 50000, newItem = 6569, amount = 50} -- candy
},
},
[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
for _, skinChild in ipairs(skin) do
if randomChance <= skinChild.chance and not target.itemid == 13583 then
if target.itemid == 11343 then
local marble = player:addItem(skinChild.newItem, skinChild.amount or 1)
if marble then
marble:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, skinChild.desc:gsub("|PLAYERNAME|", player:getName()))
end
if skinChild.newItem == 11346 then
player:addAchievement("Marblelous")
player:addAchievementProgress("Marble Madness", 5)
end
effect = CONST_ME_HITAREA
target:remove()
added = true
else
target:transform(skinChild.newItem, skinChild.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
if skin.newItem == 7446 then
player:addAchievement("Ice Sculptor")
player:addAchievementProgress("Cold as Ice", 10)
end
target:transform(skin.newItem, 1)
effect = CONST_ME_HITAREA
else
if table.contains({5906, 5905}, skin.newItem) then
player:addAchievementProgress("Ashes to Dust", 500)
else
player:addAchievementProgress("Skin-Deep", 500)
end
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
if transform then
target:transform(skin.after or target:getType():getDecayId() or target.itemid + 1)
else
target:remove()
end
if target:getId() == 13583 then
if player:getStorageValue(PlayerStorageKeys.mutatedPumpkin) > os.time() then
player:sendCancelMessage("You already used your knife on the corpse.")
return true
end
player:setStorageValue(PlayerStorageKeys.mutatedPumpkin, os.time() + 4 * 60 * 60)
player:say("Happy Halloween!", TALKTYPE_MONSTER_SAY)
player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
player:addAchievement("Mutated Presents")
local reward = math.random(1, #skin)
player:addItem(skin[reward].newItem, skin[reward].amount or 1)
effect = CONST_ME_HITAREA
end
if toPosition.x == CONTAINER_POSITION then
toPosition = player:getPosition()
end
toPosition:sendMagicEffect(effect)
return true
end
skinning:id(5908, 5942)
skinning:register()