Admin Necro ADMINISTRADOR
Mensajes : 64 Fecha de inscripción : 04/11/2010 Edad : 27 Localización : Mi Casa
| Tema: Sistema AntiBot Sáb Nov 06, 2010 9:21 am | |
| Sistema AntiBot¿Cómo funciona? Basicamente estás jugando y te llega un mensaje con una simple operación matemática, ej: 5+2= ? y tu contestas !antibot 7¿Cómo aplicarlo? En creaturescripts.xml agrega estas lineas - Código:
-
-- configs local mintoanswer = 2 -- minutos para responder al antibot local delayAntiBot = 30 -- minutes of delay of delayAntiBot local maxgroupid = 1 -- a partir de que groupid no aplica el antibot local prisionpos = {x=83,y=122,z=7} -- si no respondes bien, coordenadas a donde seras enviado local prisionminutes = 10 -- tiempo dentro de la prision local templepos = {x=95, y=117, z=7} -- despues de la sentencia lugar a donde seras enviado -- end configs -- local variables local storages = {first_num = 20123, second_num = 20124, result = 20125, answer = 20126, prisioned = 20127, prisiontime = 20128, wrong_answers = 20129} -- end local variables function onLogin(cid) local prisioned = getPlayerStorageValue(cid,storages.prisioned) if (prisioned == 1) then local prisiontime = getPlayerStorageValue(cid,storages.prisiontime) local timenow = os.time() if (timenow >= prisiontime) then setPlayerStorageValue(cid,storages.prisiontime,0) setPlayerStorageValue(cid,storages.prisioned,0) doTeleportThing(cid, templepos) else prisionEvent = addEvent(checkprisioned,1000,{cid=cid}) doTeleportThing(cid, prisionpos) end end if (delayAntiBot <= mintoanswer) then debugPrint("Error! Anti Bot System debugs: variable delayAntiBot need to be higher than mintoanswer.") else if (getPlayerGroupId(cid) <= maxgroupid) then antiBotEvent = addEvent(antiBot,1000,{cid=cid}) else doPlayerSendTextMessage(cid, 20, "People with group ID higher than ".. maxgroupid .." don't have this system.") end end return TRUE end function onLogout(cid) stopEvent(prisionEvent) stopEvent(antiBotEvent) stopEvent(checkAnswerEvent) setPlayerStorageValue(cid,storages.first_num,0) setPlayerStorageValue(cid,storages.second_num,0) setPlayerStorageValue(cid,storages.result,0) setPlayerStorageValue(cid,storages.answer,0) setPlayerStorageValue(cid,storages.wrong_answers,0) return TRUE end function antiBot(parameters) local cid = parameters.cid local playerpos = getCreaturePosition(cid) local playerpz = getTilePzInfo(playerpos) local playername = getPlayerName(cid) local prisioned = getPlayerStorageValue(cid,storages.prisioned) if (playerpz ~= 1 and prisioned ~= 1) then local first_num = math.random(1,9) local second_num = math.random(1,9) local result = first_num+second_num setPlayerStorageValue(cid,storages.first_num,first_num) setPlayerStorageValue(cid,storages.second_num,second_num) setPlayerStorageValue(cid,storages.result,result) doPlayerSendTextMessage(cid, 20, "Necro Anti Bot System: Hola, "..playername.."! Tienes ".. mintoanswer .." minute(s) para responder cuanto es ".. first_num .." + ".. second_num ..". Para responder di: !antibot "number.") doPlayerSendTextMessage(cid, 20, "Necro Anti Bot System: Example: 20+20 = 40, then you would say !antibot "40.") checkAnswerEvent = addEvent(checkAnswer,mintoanswer*60*1000,{cid=cid}) end antiBotEvent = addEvent(antiBot,delayAntiBot*60*1000,{cid=cid}) end function checkAnswer(parameters) local cid = parameters.cid local first_num, second_num, result, answer, prisioned = getPlayerStorageValue(cid,storages.first_num), getPlayerStorageValue(cid,storages.second_num), getPlayerStorageValue(cid,storages.second_num), getPlayerStorageValue(cid,storages.result), getPlayerStorageValue(cid,storages.answer), getPlayerStorageValue(cid,storages.prisioned) local wrong_answers = getPlayerStorageValue(cid,storages.wrong_answers) if (wrong_answers > 3) then doTeleportThing(cid, prisionpos) setPlayerStorageValue(cid,storages.wrong_answers,0) setPlayerStorageValue(cid,storages.first_num,0) setPlayerStorageValue(cid,storages.second_num,0) setPlayerStorageValue(cid,storages.result,0) setPlayerStorageValue(cid,storages.answer,0) setPlayerStorageValue(cid,storages.prisioned,1) setPlayerStorageValue(cid,storages.prisiontime,os.time()+(prisionminutes*60)) doPlayerSendTextMessage(cid, 20, "Time limit! You had been prisioned for ".. prisionminutes .." minute(s) because answered many wrong times.") prisionEvent = addEvent(checkprisioned,1000,{cid=cid}) else if (answer ~= 1 and prisioned ~= 1 and result > 0) then doTeleportThing(cid, prisionpos) setPlayerStorageValue(cid,storages.first_num,0) setPlayerStorageValue(cid,storages.second_num,0) setPlayerStorageValue(cid,storages.result,0) setPlayerStorageValue(cid,storages.answer,0) setPlayerStorageValue(cid,storages.prisioned,1) setPlayerStorageValue(cid,storages.wrong_answers,0) setPlayerStorageValue(cid,storages.prisiontime,os.time()+(prisionminutes*60)) doPlayerSendTextMessage(cid, 20, "Time limit! You had been prisioned for ".. prisionminutes .." minute(s).") prisionEvent = addEvent(checkprisioned,1000,{cid=cid}) else setPlayerStorageValue(cid,storages.first_num,0) setPlayerStorageValue(cid,storages.second_num,0) setPlayerStorageValue(cid,storages.result,0) setPlayerStorageValue(cid,storages.answer,0) setPlayerStorageValue(cid,storages.prisioned,0) setPlayerStorageValue(cid,storages.wrong_answers,0) doPlayerSendTextMessage(cid, 20, "Necro Anti Bot System: Correcto, pero volveras a ser cuestionado dentro de un tiempo.") end end end function checkprisioned(parameters) local cid = parameters.cid local prisioned = getPlayerStorageValue(cid,storages.prisioned) local prisiontime = getPlayerStorageValue(cid,storages.prisiontime) local timenow = os.time() if (prisioned == 1) then if (timenow >= prisiontime) then doPlayerSendTextMessage(cid, 20, "Haz completado tu sentencia, relogea para ir a la ciudad.") else prisionEvent = addEvent(checkprisioned,1000,{cid=cid}) end end end
Y agregar en talkactions.xml - Código:
-
-- local variables local storages = {first_num = 20123, second_num = 20124, result = 20125, answer = 20126, prisioned = 20127, prisiontime = 20128, wrong_answers = 20129} -- end local variables function onSay(cid, words, param) local first_num, second_num, result, answer, prisioned = getPlayerStorageValue(cid,storages.first_num), getPlayerStorageValue(cid,storages.second_num), getPlayerStorageValue(cid,storages.second_num), getPlayerStorageValue(cid,storages.result), getPlayerStorageValue(cid,storages.answer), getPlayerStorageValue(cid,storages.prisioned) param = tonumber(param) if (prisioned ~= 1 and answer ~= 1 and result > 0) then if (param == result) then if (getPlayerStorageValue(cid,storages.wrong_answers) <= 3) then doPlayerSendTextMessage(cid, 20, "Necro Anti Bot System: Right answer, thank you for answering.") setPlayerStorageValue(cid,storages.wrong_answers,0) setPlayerStorageValue(cid,storages.answer,1) setPlayerStorageValue(cid,storages.first_num,0) setPlayerStorageValue(cid,storages.second_num,0) setPlayerStorageValue(cid,storages.result,0) else doPlayerSendTextMessage(cid, 20, "Necro Anti Bot System: Right answer, but you had already answered more than 3 wrong times.") end else doPlayerSendTextMessage(cid, 20, "Necro Anti Bot System: Wrong answer!") wrong_answers_now = getPlayerStorageValue(cid,storages.wrong_answers) setPlayerStorageValue(cid,storages.wrong_answers,wrong_answers_now+1) doPlayerSendTextMessage(cid, 20, "Necro Anti Bot System: You had already got ".. getPlayerStorageValue(cid,storages.wrong_answers).." wrong answers! The limit is 3.") end end end
CREDITOS: Creditos: Yunie De: otland | |
|