Вот, как и обещал. Нет ещё ботов, способных видеть текстдравы.
Также тут присутствует минутный таймаут на ввод кода
Начнем:
В начало мода, к глобальным переменным:
PHP код:
new PlayerText:Captcha[MAX_PLAYERS];
forward CaptchaTimeOut(playerid);
public CaptchaTimeOut(playerid) Kick(playerid);
В OnPlayerConnect (Обязательно убрать вывод регистрации/авторизации. Их нужно будет выводить только после успешного ввода кода)
PHP код:
SetPVarInt(playerid, "RandomCode", random(1000) + random(1000) + random(1000)); new OPC_Captcha_Str[16];
format(OPC_Captcha_Str, 16, "CODE: %i", GetPVarInt(playerid, "RandomCode"));
Captcha[playerid] = CreatePlayerTextDraw(playerid, 217.333389, 131.413543, OPC_Captcha_Str);
PlayerTextDrawLetterSize(playerid, Captcha[playerid], 0.449999, 1.600000);
PlayerTextDrawAlignment(playerid, Captcha[playerid], 1);
PlayerTextDrawColor(playerid, Captcha[playerid], -1);
PlayerTextDrawSetShadow(playerid, Captcha[playerid], 0);
PlayerTextDrawSetOutline(playerid, Captcha[playerid], -1);
PlayerTextDrawBackgroundColor(playerid, Captcha[playerid], 51);
PlayerTextDrawFont(playerid, Captcha[playerid], 1);
PlayerTextDrawSetProportional(playerid, Captcha[playerid], 1);
PlayerTextDrawShow(playerid, Captcha[playerid]);
SetPVarInt(playerid, "CaptchaTimer", SetTimerEx("CaptchaTimeOut", 1000*60, false, "i", playerid));
ShowPlayerDialog(playerid, 1215, DIALOG_STYLE_INPUT, "Проверка", "Введите цифры, которые написаны выше\nУ вас есть минута на ввод защитного кода", "Далее", "Выйти");
В OnDialogResponse
PHP код:
if(dialogid == 1215)
{
if(strval(inputtext) != GetPVarInt(playerid, "RandomCode") || (!response))
{
SendClientMessage(playerid, 0xF79D44AA, "Вы ввели неверный код. Дальнешние действия невозможны!");
return Kick(playerid);
}
PlayerTextDrawHide(playerid, Captcha[playerid]);
PlayerTextDrawDestroy(playerid, Captcha[playerid]);
KillTimer(GetPVarInt(playerid, "CaptchaTimer"));
SpawnPlayer(playerid); // Или же ваш вывод регистрации / авторизации
}
В OnPlayerDisconnect
PHP код:
PlayerTextDrawHide(playerid, Captcha[playerid]);
PlayerTextDrawDestroy(playerid, Captcha[playerid]);
KillTimer(GetPVarInt(playerid, "CaptchaTimer"));
Готово!
Автор: 7Zip
Размещение на сторонних порталах без разрешения автора запрещено!