• 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!
  • New resources must be posted under Resources tab. A discussion thread will be created automatically, you can't open threads manually anymore.

CreatureEvent Fix/Patch exploit of bot to crash/lag servers and clone items

LucasFerraz

Systems Analyst
Joined
Jun 10, 2010
Messages
2,858
Reaction score
96
Location
Brazil
Hello,
as some of you know there is an exploit using elfbot/magebot(...) to crash/lag server and possibiliting cloning.

Elf Hotkey to lag server:
Code:
auto 50 dropitemsxyzamount $posx [$posy+2] $posz 3590 1 |dropitemsxyzamount $posx [$posy+2] $posz 6569 1 |dropitemsxyzamount $posx [$posy+2] $posz 3591 1 |dropitemsxyzamount $posx [$posy+2] $posz 130 1 |dropitemsxyzamount $posx [$posy+2] $posz 3588 1
No matter if this key is used in a house or not, it will lag anyway.

How to fix
http://otland.net/f35/creatureevent-onmove-very-advanced-134016/

and

XML:
<event type="move" name="onMove" event="script" value="Custom/onMove.lua"/>
Lua:
local storage = 61894
local exhause_time = 500 -- in milli seconds

local function resetStorage(cid)
    if isPlayer(cid) then
        setPlayerStorageValue(cid, storage, 0)
    end
end 
 
local function doExhaust(cid)
	-- exhaust divided by 1000 can be 0 (500 / 1000 = 0), but in onMoveItem(..) we check if time is >= os.time()
	setPlayerStorageValue(cid,storage,os.time()+(exhause_time / 1000))
	-- so if 'event' does not execute, it won't be a problem (just block for 1 second [not 0.5 sec] IF you relog)
	addEvent(resetStorage, exhause_time, cid)
end
 
function onMoveItem(cid, item, fromPosition, toPosition, fromItem, toItem, fromGround, toGround, status)
	-- and here we check time, not 1/0 value
	if getPlayerStorageValue(cid,storage) >= os.time() then
		doPlayerSendCancel(cid, "You cannot move objects that fast.")
		return false
	end
	doExhaust(cid)

	if (getTileInfo(fromPosition).house) then
		doPlayerSave(cid)
		doSaveHouse(getHouseFromPos(fromPosition))
	elseif (getTileInfo(toPosition).house) then
		doPlayerSave(cid)
		doSaveHouse(getHouseFromPos(toPosition))
	end
	return true
end

Thanks to Kito2.
Thanks to Gesior.pl for optimizing this script.
Thanks to Summ for adding check if player exist.

PS.: I'm posting here again because the last one is in wrong board.
 
Back
Top