• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Solved Item top priority with transform item

Exoltes

Novia OTserv Developer
Joined
Jul 2, 2009
Messages
563
Reaction score
47
Location
Belgium
I'm working on a 8.54 Open Tibia Server using The Forgotten Server - Version 0.2.7 (Mystic Spirit).

Before:
2e399vq.png


During:
2l8cj0p.png


After:
rhrcyo.png


Code:
local function doTransformBack(Position, itemid, transformid)
    return doTransformItem(getTileItemById(Position, transformid).uid, itemid)
end

function onUse(cid, item, fromPosition, itemEx, toPosition)

        if itemEx.itemid == 1945 and item.actionid == 65535 then
            doSendMagicEffect(toPosition,CONST_ME_ICEAREA)
            doTargetCombatHealth(0, cid, COMBAT_ICEDAMAGE, -1000, -1000, CONST_ME_ICEAREA)
            addEvent(doTransformBack, 2*6*1000, toPosition, itemEx.itemid, 7021)
            doTransformItem(itemEx.uid, 7021)


/~/
addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7}, 4738, 8060)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7}, 4738).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1012, z = 7}, 4738, 8060)
doTransformItem(getTileItemById({x = 758, y = 1012, z = 7}, 4738).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1011, z = 7}, 4744, 8060)
doTransformItem(getTileItemById({x = 758, y = 1011, z = 7}, 4744).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 759, y = 1011, z = 7}, 4739, 8060)
doTransformItem(getTileItemById({x = 759, y = 1011, z = 7}, 4739).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 760, y = 1011, z = 7}, 4743, 8060)
doTransformItem(getTileItemById({x = 760, y = 1011, z = 7}, 4743).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 760, y = 1012, z = 7}, 4747, 8060)
doTransformItem(getTileItemById({x = 760, y = 1012, z = 7}, 4747).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 761, y = 1012, z = 7}, 4743, 8060)
doTransformItem(getTileItemById({x = 761, y = 1012, z = 7}, 4743).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 761, y = 1013, z = 7}, 4741, 8060)
doTransformItem(getTileItemById({x = 761, y = 1013, z = 7}, 4741).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 760, y = 1013, z = 7}, 4745, 8060)
doTransformItem(getTileItemById({x = 760, y = 1013, z = 7}, 4745).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 759, y = 1016, z = 7}, 4742, 8060)
doTransformItem(getTileItemById({x = 759, y = 1016, z = 7}, 4742).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 760, y = 1016, z = 7}, 4737, 8060)
doTransformItem(getTileItemById({x = 760, y = 1016, z = 7}, 4737).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 761, y = 1016, z = 7}, 4746, 8060)
doTransformItem(getTileItemById({x = 761, y = 1016, z = 7}, 4746).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 761, y = 1017, z = 7}, 4742, 8060)
doTransformItem(getTileItemById({x = 761, y = 1017, z = 7}, 4742).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 762, y = 1017, z = 7}, 4737, 8060)
doTransformItem(getTileItemById({x = 762, y = 1017, z = 7}, 4737).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 763, y = 1017, z = 7}, 4741, 8060)
doTransformItem(getTileItemById({x = 763, y = 1017, z = 7}, 4741).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 763, y = 1016, z = 7}, 4740, 8060)
doTransformItem(getTileItemById({x = 763, y = 1016, z = 7}, 4740).uid, 8060)

addEvent(doTransformBack, 2*6*1000, {x = 763, y = 1015, z = 7}, 4743, 8060)
doTransformItem(getTileItemById({x = 763, y = 1015, z = 7}, 4743).uid, 8060)
/~/

end
     return TRUE
end

Maybe someone can help me out? :)

Thanks in advance.
 
Last edited:
a possible solution was posted by Xikini at a different thread where I was having a related problem.

Code:
addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7, stackpos = 0}, 103, 671)
doSendMagicEffect({x = 758, y = 1013, z = 7},CONST_ME_ICEAREA)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7, stackpos = 0}, 103).uid, 671)

addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7, stackpos = 1}, 4551, 4746)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7, stackpos = 1}, 4551).uid, 4746)

addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7, stackpos = 2}, 4738, 8060)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7, stackpos = 2}, 4738).uid, 8060)

But this also doesn't seem to work.
 
Last edited:
It's mostly when you activate the transform event and how you do so.
PHkAzqh.png

If you look at the pictures in order.. you transform the same spot twice.
So since you didn't use stackpos in any of them you're transforming the top item.

So you transformed snow border to larger snow border, then large snow border to large grass border.
If you use /r on that green tile, I can 100% guarantee there is an identical grass border underneath, and no small snow border.

In this case it is easy to fix, simply change the transform into the small snow border again, as the grass border is never being touched.


Cheers,

Xikini
 
To be fair, I can't see the script, and I can't see the positions in a picture.
Your making me guess. :p


Try using stackpos, and changing each tile to exactly what you want.
Ke97Po.gif

Code:
doTransformItem(getThingfromPos({x = 1400, y = 1422, z = 7, stackpos = 1}).uid, 4746)
doTransformItem(getThingfromPos({x = 1400, y = 1422, z = 7, stackpos = 2}).uid, 4746)
addEvent (function () doTransformItem(getThingfromPos({x = 1400, y = 1422, z = 7, stackpos = 1}).uid, 4551) end, 2000)
addEvent (function () doTransformItem(getThingfromPos({x = 1400, y = 1422, z = 7, stackpos = 2}).uid, 4738) end, 2000)
 
Last edited by a moderator:
To be fair, I can't see the script, and I can't see the positions in a picture.
Your making me guess. :p


Try using stackpos, and changing each tile to exactly what you want.
Ke97Po.gif

Code:
doTransformItem(getThingfromPos({x = 1400, y = 1422, z = 7, stackpos = 1}).uid, 4746)
doTransformItem(getThingfromPos({x = 1400, y = 1422, z = 7, stackpos = 2}).uid, 4746)
addEvent (function () doTransformItem(getThingfromPos({x = 1400, y = 1422, z = 7, stackpos = 1}).uid, 4551) end, 2000)
addEvent (function () doTransformItem(getThingfromPos({x = 1400, y = 1422, z = 7, stackpos = 2}).uid, 4738) end, 2000)

a possible solution was posted by Xikini at a different thread where I was having a related problem.

Code:
addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7, stackpos = 0}, 103, 671)
doSendMagicEffect({x = 758, y = 1013, z = 7},CONST_ME_ICEAREA)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7, stackpos = 0}, 103).uid, 671)

addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7, stackpos = 1}, 4551, 4746)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7, stackpos = 1}, 4551).uid, 4746)

addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7, stackpos = 2}, 4738, 8060)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7, stackpos = 2}, 4738).uid, 8060)

But this also doesn't seem to work.


As posted above the 3 first lines make the change from the buttom item: Dirt (103) into Ice (671) and back

The next 2 lines of code change the first border: grass (4551) into snow (4746) and back

The last 2 lines of code change the top snow (4738) border into an invisible (8060) item and back.

all coördinates mentioned are the same "x = 758, y = 1013, z = 7" which all refer to the sqm which is surrounded by a red circle in the picture


All changes work perfectly except for the stackposition they are given when they transform back
 
Either way I found a solution. I just make the grass change to the big snow border and when turning back i make it change into the small snow border.
And with the small snow border I make it turn into the invisible item and later I let it turn into the grass border.

imrw40.png


Code:
local function doTransformBack(Position, itemid, transformid)
return doTransformItem(getTileItemById(Position, transformid).uid, itemid)
end

function onUse(cid, item, fromPosition, itemEx, toPosition)

if itemEx.itemid == 1945 and item.actionid == 65535 then
doSendMagicEffect(toPosition,CONST_ME_ICEAREA)
doTargetCombatHealth(0, cid, COMBAT_ICEDAMAGE, -1000, -1000, CONST_ME_ICEAREA)
addEvent(doTransformBack, 2*6*1000, toPosition, itemEx.itemid, 7021)
doTransformItem(itemEx.uid, 7021)

addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7, stackpos = 0}, 103, 671)
doSendMagicEffect({x = 758, y = 1013, z = 7},CONST_ME_ICEAREA)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7, stackpos = 0}, 103).uid, 671)

addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7, stackpos = 1}, 4551, 8060)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7, stackpos = 1}, 4551).uid, 4746)

addEvent(doTransformBack, 2*6*1000, {x = 758, y = 1013, z = 7, stackpos = 2}, 4738, 4746)
doTransformItem(getTileItemById({x = 758, y = 1013, z = 7, stackpos = 2}, 4738).uid, 8060)


end
     return TRUE
end
 
Back
Top