Инклуд не дает игроку быстро реконектится после выхода. Если пауза между выходом и входом одного и того же игрока меньше 15сек, то войти он не сможет. Если у игрока был просто тайм аут соединения, то его этот запрет не коснется. Присутствует защита на перезаход без выполнения выхода и мультиконнект игроков, т.е. с одного ип адреса может зайти лишь один игрок. Для хранения временно забаненных игроков используется БД SQL.
Инклуд содержит функции:
PHP код:
native AQRC_Ban(playerid, reason[]);//Банитит игрока. Если указана причина то аналогичен BanEx иначе просто Ban.
native AQRC_Kick(playerid);//Кикает игрока.
native AQRC_UnBanIP(iip);//Разбанивает указаный ип в БД и в бан листе.
native AQRC_ScriptInit();//Разбанивает "псевдозабаненых" игроков. создаёт таблицу.
native AQRC_ScriptExit();//Закрывает БД.
native AQRC_OnPlayerConnect(playerid);//Проверка на "правильный" коннект.
native AQRC_OnPlayerDisconnect(playerid, reason);//"Банит" игрока.
native AQRC_OnPlayerUpdate(playerid);//Фикс кика и бана.
native int2ip(iip, szIP[]);//переводит ип из числа в строку.
native ip2int(szIP[]);//переводит ип из строки в число.
Пример использования:
PHP код:
#include <a_samp>
#include <AQRC>
public OnGameModeInit()
{
AQRC_ScriptInit();
return 1;
}
public OnGameModeExit()
{
AQRC_ScriptExit();
return 1;
}
public OnPlayerConnect(playerid)
{
new reason;
if(reason=AQRC_OnPlayerConnect(playerid))
{
printf("Не верная попытка входа. Причина: %d",reason);
AQRC_Ban(playerid, "Плохое подключение.");//забаним игрока
Ban(playerid);//ускорим процесс бана
}
//CODE
return 1;
}
public OnPlayerDisconnect(playerid,reason)
{
//CODE нельзя выйти раньше, должен выполниться AQRC_OnPlayerDisconnect!
return AQRC_OnPlayerDisconnect(playerid, reason);
}
public OnPlayerUpdate(playerid)
{
if(AQRC_OnPlayerUpdate(playerid) == 0)return 0;
//CODE
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/kick", cmdtext, true, 5) == 0)
{
print("kick");
strdel(cmdtext,0,6);
new p=strval(cmdtext);
SendClientMessage(p,-1,"ты был кикнут.");
AQRC_Kick(p);
return 1;
}
return 0;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(KEY_YES & newkeys)
{
SendClientMessage(playerid,-1,"ты был кикнут.");
AQRC_Kick(playerid);
}
return 1;
}
Внимание:
-Для бана игрока используйте AQRC_Ban иначе его разбанит через ReConnectTime мс.
-Обратите внимание в примере на //CODE - это означает, что только там может располагаться ваш код.
Просмотреть/Скачать: http://pastebin.com/hzLntTmy
Автор: White_116