PDA

Просмотр полной версии : [Include] Anti Quick ReConnect



Osetin
25.10.2013, 22:25
Инклуд не дает игроку быстро реконектится после выхода. Если пауза между выходом и входом одного и того же игрока меньше 15сек, то войти он не сможет. Если у игрока был просто тайм аут соединения, то его этот запрет не коснется. Присутствует защита на перезаход без выполнения выхода и мультиконнект игроков, т.е. с одного ип адреса может зайти лишь один игрок. Для хранения временно забаненных игроков используется БД SQL.

Инклуд содержит функции:

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[]);//переводит ип из строки в число.

Пример использования:

#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

Salvacore
13.11.2013, 01:41
Понравилось!
Вскоре поставлю.

Osetin
24.01.2014, 15:53
Немного изменен код. Теперь можно самому выбрать наказание.

DesmoNd
01.02.2014, 19:10
Отлично. Заслужил плюс. Спасибо.

Дёня
08.08.2014, 22:38
Пару вопросиков.


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;
}

2. Для чего вот это?


public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(KEY_YES & newkeys)
{
SendClientMessage(playerid,-1,"ты был кикнут.");
AQRC_Kick(playerid);
}
return 1;
}

3.
В моде в место return 1;, поставить return AQRC_OnPlayerDisconnect(playerid, reason);???

public OnPlayerDisconnect(playerid,reason)
{
//CODE нельзя выйти раньше, должен выполниться AQRC_OnPlayerDisconnect!
return AQRC_OnPlayerDisconnect(playerid, reason);
}

Caypen
12.08.2014, 13:35
public OnPlayerConnect(playerid)
{
new reason;
if(reason=AQRC_OnPlayerConnect(playerid))
{
printf("Не верная попытка входа. Причина: %d",reason);
AQRC_Ban(playerid, "Плохое подключение.");//забаним игрока
Ban(playerid);//ускорим процесс бана
}
//CODE
return 1;
}

а не проще ли?


public OnPlayerConnect(playerid)
{
if(AQRC_OnPlayerConnect(playerid))
{
printf("Не верная попытка входа. Причина: %d",reason);
AQRC_Ban(playerid, "Плохое подключение.");//забаним игрока
Ban(playerid);//ускорим процесс бана
}
//CODE
return 1;
}

Salvacore
12.08.2014, 13:37
public OnPlayerConnect(playerid)
{
new reason;
if(reason=AQRC_OnPlayerConnect(playerid))
{
printf("Не верная попытка входа. Причина: %d",reason);
AQRC_Ban(playerid, "Плохое подключение.");//забаним игрока
Ban(playerid);//ускорим процесс бана
}
//CODE
return 1;
}

а не проще ли?


public OnPlayerConnect(playerid)
{
if(AQRC_OnPlayerConnect(playerid))
{
printf("Не верная попытка входа. Причина: %d",reason);
AQRC_Ban(playerid, "Плохое подключение.");//забаним игрока
Ban(playerid);//ускорим процесс бана
}
//CODE
return 1;
}


reason