16.10.2013, 15:29
(
Последний раз редактировалось White_116; 16.10.2013 в 19:19.
)
AQRC v1.0 by White_116
Не большой инклуд по просьбам участников форума. Инклуд не дает игроку быстро реконектится после выхода. Если пауза между выходом и входом одного и того же игрока меньше 15(настраивается) сек, то войти он не сможет. Если у игрока был просто тайм аут соединения, то его этот запрет не коснется. Так же добавлен фикс кика и бана для серверов X версии, что позволяет выводить причину игроку. Присутствует защита на перезаход без выполнения выхода и мультиконнект игроков, т.е. с одного ип адреса может зайти лишь один игрок.Так же присутствует защита от "сохранения бана игроков" при падений мода. Когда после падение мода временно забаненные игроки оставались забаненные. Для хранения временно забаненных игроков используется БД 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[]);//переводит ип из строки в число.
pawn Код:
#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 - это означает, что только там может располагаться ваш код.
Просмотреть/Скачать: Pastebin
Немного изменил код. Теперь можно самому выбрать наказание за "плохие" подключения.