• 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!

CreatureEvent BEST FREE Anti-Bot System !+tutorial (100% ELFBOT PROOF)

supomglol

Member
Joined
Jan 29, 2012
Messages
195
Reaction score
10
Thats right! Take me up on the challenge!
We even have an AFK Training friendly script! (Optional)

How it works:

Like many other anti-bot system, its based off of a code that is randomly generated. Where mine differs though, is rather in the chat log, the code appears in a pop up window. Thus requiring players to either remember, or write down in notepad briefly. It could easily be altered to NOT show the symbols as well.


BASED OFF SCRIPTS BY! :http://otland.net/f81/talkaction-creatureevent-antibot-system-126461/

Add this to Creaturescripts->scripts->login
Code:
local timeStorage = 65117
local codeStorage = 65118
local kickStorage = 65119
local timesStorage = 65121
registerCreatureEvent(cid, "Antibot")
doCreatureSetStorage(cid, codeStorage, 0)
doCreatureSetStorage(cid, kickStorage, 0)
doCreatureSetStorage(cid, timesStorage, 0)
doCreatureSetStorage(cid, timeStorage, 0)
in CreatureScripts->Creaturescripts

add :
Code:
 <event type="think" name="Antibot" event="script" value="antibot.lua"/>
in CreatueEvent->Scripts->Antibot
**Set the coords a tile in your trainers area, or temple. Behind a door, or teleporter is recommended.
Code:
local symbols = {"*", "^", "¿", "%", "&", "$"}
 
local timeBetweenQuestion = 35 * 60 --35 minutes
local timeToKick = 2 * 45 --1.5 minutes
local timeStorage = 65117
local codeStorage = 65118
local kickStorage = 65119
local timesStorage = 65121
 
 
function onThink(cid, interval)
	if not isPlayer(cid) or getPlayerGroupId(cid) >= 3 then
		return
	end
 
	if getCreatureStorage(cid, timeStorage) < 1 then doCreatureSetStorage(cid, timeStorage, os.time() + timeBetweenQuestion) end
 
	if getCreatureStorage(cid, kickStorage) > 0 and os.time() >= getCreatureStorage(cid, kickStorage) then
		local tmp = {timeStorage, kickStorage, timesStorage, codeStorage}
		for i = 1, #tmp do
			doCreatureSetStorage(cid, tmp[i], 0)
	end
		return 			doTeleportThing(cid, {x = 26026, y = 26036, z = 5})
	end
 
	if os.time() >= getCreatureStorage(cid, timeStorage) then
		local code, set = "", 0
		set = math.random(1, 100000)
		local s, e = 1, 1
		for i = 1, string.len(set) do
			code = (code == "" and string.sub(set, s, e) or code .. symbols[math.random(#symbols)] .. string.sub(set, s, e))
			s, e = s + 1, e + 1
		end
 
		doCreatureSetStorage(cid, codeStorage, set)
		doCreatureSetStorage(cid, kickStorage, os.time() + timeToKick)
		doCreatureSetStorage(cid, timeStorage, os.time() + timeBetweenQuestion)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Anti-Bot]: Please say !antibot followed by your code without symbols.")
		doPlayerPopupFYI (cid, "Here is your code!  !antibot"..code.." Type in the numbers without symbols.")
	end
	return
end

Now in talkactions->scripts->antibot
**REMEMBER TO CHANGE THE COORDS AGAIN!
Code:
local codeStorage = 65118
local kickStorage = 65119
local timesStorage = 65121
local times = 3
function onSay(cid, words, param, channel)
 
	if getCreatureStorage(cid, codeStorage) == 0 then
		return doPlayerSendCancel(cid, "Not yet.")
	elseif tonumber(param) == tonumber(getCreatureStorage(cid, codeStorage)) then
		doCreatureSetStorage(cid, codeStorage, 0)
		doCreatureSetStorage(cid, kickStorage, 0)
		doCreatureSetStorage(cid, timesStorage, 0)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Antibot]: Enjoy your time!")
		return true
	else
		if getCreatureStorage(cid, timesStorage) < 0 then doCreatureSetStorage(cid, timesStorage, 0) end
 
		doCreatureSetStorage(cid, timesStorage, getCreatureStorage(cid, timesStorage) + 1)
		if getCreatureStorage(cid, timesStorage) == times then
			doCreatureSetStorage(cid, codeStorage, 0)
			doCreatureSetStorage(cid, kickStorage, 0)
			doCreatureSetStorage(cid, timesStorage, 0)
			doTeleportThing(cid, {x = 26026, y = 26036, z = 5})
			return true
		else
		return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Antibot]: You have 3 total opportunities to try to get the correct answer.")
		end
	end
	return true
end

In talkactions->talkactions
Code:
	<talkaction log="yes" access="4" words="/botcheck;!botcheck" event="script" value="botcheck.lua"/>
	 <talkaction words="!antibot" event="script" value="antibot.lua"/>
/botcheck player_name
used to instantly require a player to enter a code.

In talk actions->scripts->botcheck

Code:
-- BY SUPOMGLOL

local timeStorage = 65117
local codeStorage = 65118
local kickStorage = 65119
local timesStorage = 65121
local timeBetweenQuestion = 9999 * 60 --training time
local timeToKick = 2 * 45 --1.5 minutes




function onSay(cid, words, param, channel)
	local pid = 0
	if(param == '') then
		pid = getCreatureTarget(cid)
		if(pid == 0) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
			return true
		end
	else
		pid = getPlayerByNameWildcard(param)
	end

	if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " is not currently online.")
		return true
	end

	if(isPlayer(pid) and getPlayerAccess(pid) >= getPlayerAccess(cid)) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You cannot botcheck this player.")
		return true
	end

	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getCreatureName(pid) .. " has been botchecked.")
		doCreatureSetStorage(pid, codeStorage, set)
		doCreatureSetStorage(pid, kickStorage, os.time() + timeToKick)
		doCreatureSetStorage(pid, timeStorage, os.time()- timeBetweenQuestion)
		doPlayerPopupFYI(pid, "You are under GM watch. Respond now.")
	return true
end
OPTIONAL!:::


Want your server to allow AFK training?


in Movements->Movements.xml

Code:
	<movement type="StepIn" actionid="8410" event="script" value="training tiles.lua"/>
	<movement type="StepIn" actionid="8411" event="script" value="training tiles.lua"/>

Next -> Movements->Scripts->Training Tiles.lua
Code:
-- BY SUPOMGLOL

local timeStorage = 65117
local codeStorage = 65118
local kickStorage = 65119
local timesStorage = 65121
local timeBetweenQuestion = 9999 * 60 --training time
local timeToKick = 2 * 45 --1.5 minutes

function onStepIn(cid, item, position, fromPosition)
	if item.actionid == 8410 then
		doCreatureSetStorage(cid, codeStorage, set)
		doCreatureSetStorage(cid, kickStorage, 0)
		doCreatureSetStorage(cid, timeStorage, os.time() + timeBetweenQuestion)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Anti-Bot]: You're welcome to use a bot to train. You have 9999 minutes of training left!")
		doPlayerPopupFYI (cid, "You will no longer recieve ANTI-BOT checks!")

	

	elseif item.actionid == 8411 then
		doCreatureSetStorage(cid, codeStorage, set)
		doCreatureSetStorage(cid, kickStorage, os.time() + timeToKick)
		doCreatureSetStorage(cid, timeStorage, os.time()- timeBetweenQuestion)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You will now recieve random ANTI-BOT checks!")

	return end	
	end



So you would set your tile in the trainers as action id 8410, and your exit tile out of trainers as action id 8411. (on your map editor ofcourse!)


As explained here:

1.jpg

and here:

2.jpg






Like this? Help me out!

<3

paypal-donate-button.jpg
https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MQPE2W49WRN5E
 
Last edited:
This bot is confirmed auto-respond proof.

Haven't seen a botter in days on my server.
 
Last edited:
Is to make him summon such a creature called "GM" GM with access to get people whistling in bot? that it is following him until he answers
 
in CreatueEvent->Scripts->Antibot

Replace :
Code:
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Anti-Bot]: Please say !antibot followed by your code without symbols.")
		doPlayerPopupFYI (cid, "Here is your code!  !antibot"..code.." Type in the numbers without symbols.")

with


Code:
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Anti-Bot]: Please say !antibot " .. code .. " without symbols.")
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "*****EXAMPLE CODE: 1*5^8¿6%9 -> !antibot 15869. Remember that you have " .. timeToKick / 60 .. " minutes to do that or you will be kicked.")
		doPlayerPopupFYI (cid, "[Anti-Bot]: Type in the numbers without symbols.")


This will make a pop up box, that will break most AFK bots, and still provide the code, however in the chat log, as this person requested :)




<3
 
Seems like a good script however, I have a problem. When people doesn't respond they don't get kicked?
 
Sending a FYI pop-up to a player is a bad way to stop botting.

One, it breaks gameflow for those that are ACTUALLY playing your server, and can lead to them dieing, and being massively annoyed.

Two, Most players WILL NOT even read the pop up, because it is a POP UP, they see it and hit enter at once to get back to playing the game.

Due to that, non-botting players will get banned as well making this system horrible.

Also, to really combat Elf botters, all you have to do is update your server from 8.6 and they won't have access to the bot, and it would drastically decrease the amount of botters on your server.

The only real point to have a 8.6 server is to cater to players who WANT to bot, if you want to remove botting, there is no good reason for to keep the server 8.6
 
You come here just to flame, you troll?

- - - Updated - - -

Noone said you had to use it, its just a little something I wrote, and shared with others. No need to hate me, troll.

- - - Updated - - -

The system does NOT auto ban, it simply sends them to trainers if they dont respond. You could have it kick, ban, or delete their char... its all really whatever you want it to be.
 
In reply to Sportacus's concern

it could be extended with a globalevent that runs every half hour that checks the players experience compares it with a storage containing the players experience as of last check (stoned as sqrt if need be) and flags a storage if the players exp has increased, and only do this to players who are actively hunting.

additionally, one could store the players position, teleport them to a safe location ( where if they die they are intercepted by onPrepareDeath like common PvP arena scripts, in case the have damage conditions active ) perhaps flagged as noLogOut until they reply and are teleported back.

and just for good measure it could check the player's life and or mana (depending on vocation) so player's in a tight spot with dangerous monsters aren't killed as a side effect. also check if players are currently skulled, because those engaged in PvP wouldn't be happy about such a check interfering.
 
Isnt this a problem when players are afk in temple??
Or it´s only checking players who are in Battle?
 
This script will not block botters. It will be baad for your servers:
1. some players that know any lame programmer will make little change to make their anti-kick bot answer with 'code' without symbols
2. some players will be angry, because they die by this script or their enemy get kicked 5 seconds before his death on war
3. some players will be angry, because few % that got better bot will make level 24/7 and they with their not modified elfbot will get kicks
4. everyone will think that everyone else use bot and get levels [and no kicks/bans] and only they can't, they will leave server

If you want detect and ban/delete botters you need script that will save if player is online/hunt/is in-fight/hp/mana/does he heal/does he drink potions/IP/death count/kills count/does he kill solo or in team/names of killed monsters and their position, save it all in database for few days and then analyse informations from database by some script to detect players that used bot. It's not possible to play 16 hours each day for 7 days or hunts for 10 hours on one demons spawn without bot ;)
 
Users of newer revs should just use modal dialogs incase they want a bot free server, as I don't know a bot which would possibly answer those..
 
Back
Top