From bf80fa89190ef2f3fb627db8e32874b819aacb91 Mon Sep 17 00:00:00 2001 From: ErikasKontenis Date: Wed, 7 Apr 2021 21:37:48 +0300 Subject: [PATCH] rope for 7.4 --- data/actions/scripts/misc/rope.lua | 63 +++++++++++++----------------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/data/actions/scripts/misc/rope.lua b/data/actions/scripts/misc/rope.lua index 049eecb..358df38 100644 --- a/data/actions/scripts/misc/rope.lua +++ b/data/actions/scripts/misc/rope.lua @@ -8,39 +8,30 @@ local holeSpots = { 595, 607, 609, 610, 615, 1066, 1067, 1080 } -function onUse(player, item, fromPosition, target, toPosition) - local tile = Tile(toPosition) - if not tile then - return false - end - - if not tile:getGround() then - return false - end - - if table.contains(ropeSpots, tile:getGround():getId()) and tile:getThingCount() <= 1 then - player:teleportTo(target:getPosition():moveRel(0, 1, -1)) - return true - elseif table.contains(holeSpots, tile:getGround():getId()) or target:getId() == 435 then - local tile = Tile(target:getPosition():moveRel(0, 0, 1)) - if not tile then - return false - end - - local thing = tile:getTopCreature() - if not thing then - thing = tile:getTopVisibleThing() - end - - if thing:isCreature() then - thing:teleportTo(target:getPosition():moveRel(0, 1, 0), false) - return true - end - if thing:isItem() and thing:getType():isMovable() then - thing:moveTo(target:getPosition():moveRel(0, 1, 0)) - return true - end - return true - end - return false -end +local pools = {2886, 2887, 2888, 2889, 2890, 2891, 2895, 2896, 2897, 2898, 2899, 2900} + +-- Rope for 7.4 protocol. +function onUse(cid, item, frompos, item2, topos) + local newPos = {x = topos.x, y = topos.y, z = topos.z, stackpos = 0} + local groundItem = getThingfromPos(newPos) + local blockingItem = getThingfromPos({x = topos.x, y = topos.y, z = topos.z, stackpos = 255}) + if table.contains(ropeSpots, groundItem.itemid) then + newPos.y = newPos.y + 1 + newPos.z = newPos.z - 1 + if((blockingItem.itemid > 0 and not isInArray(pools, blockingItem.itemid)) or isCreature(blockingItem.uid)) then + doPlayerSendCancel(cid, "You cannot use this object.") + else + doTeleportThing(cid, newPos) + end + elseif table.contains(holeSpots, groundItem.itemid) then + newPos.y = newPos.y + 1 + local downPos = {x = topos.x, y = topos.y, z = topos.z + 1, stackpos = 255} + local downItem = getThingfromPos(downPos) + if(downItem.itemid > 0) then + doTeleportThing(downItem.uid, newPos) + else + doPlayerSendCancel(cid, "You cannot use this object.") + end + end + return true +end \ No newline at end of file