Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Лёгкая защита от Deda Vanya!

Статус
В этой теме нельзя размещать новые ответы.

Alex_Lenez

Специалист
Доброго времени суток, пользователи: Pawno-Info

Сколько я не видел в интернете защиты от этой напасти ( Покупать защиту не пробовал), все не работало!
Я решил написать лёгкую защиту от этого!

В начало мода ко всем #define:


PHP:
const   Menu:@INVALID_MENU = Menu:INVALID_MENU;
#undef  INVALID_MENU
#define INVALID_MENU @INVALID_MENU
#define INVALID_DIALOG_ID   0

Защита от команды: !attack [запустить Combo-Attack]

Заменяем свой public OnPlayerExitedMenu на мой что в низу:
PHP:
public OnPlayerExitedMenu(playerid)
{
	if(playerid == INVALID_PLAYER_ID) return Kick(playerid);
	new Menu:current = GetPlayerMenu(playerid);
	if(GetPlayerMenu(playerid) == INVALID_MENU) return Kick(playerid);
        HideMenuForPlayer(current,playerid);
	return TogglePlayerControllable(playerid,true);
}
Защита от команды: !lag [запустить/остановить Crasher]

В public OnDialogResponse
самое начало паблика:
PHP:
if(dialogid == INVALID_DIALOG_ID) return Kick(playerid);
Защита от команды: !cf [запустить/остановить Chat-Flood]

В public OnPlayerText
в самое начало паблика.

PHP:
PublicAntiFlood(playerid, "ChatFlood", 8);
Дальше в любой ваш 1 секундный таймер:
Вставляем это:


PHP:
foreach(new i : Player)
{
SetPVarInt(i, "ChatFlood",0);
}
Это на случай если у вас нет в этом паблике цикла игроков, что мало вероятно, так что лучше просто кинуть
Это в цикл всех игроков в 1 секундном таймере:

PHP:
 SetPVarInt(i, "ChatFlood",0);
Защита от команды: !dos [запустить DoS]

В public OnPlayerPickUpPickup
В начало паблика также ставим антифлудер

PHP:
PublicAntiFlood(playerid, "PickupFlood", 8);
Потом в public OnDialogResponse
В начало паблика:

PHP:
PublicAntiFlood(playerid, "DialogFlood", 8); // PublicAntiFlood(Ид игрока, "НазваниеPVar", Интервал );
Потом добавляем в 1 секундный таймер обнуление:
Примечание: В цикл игроков

PHP:
SetPVarInt(i, "PickupFlood",0);
SetPVarInt(i, "DialogFlood",0);
Что еще хочу сказать, это только защита маленькая так как пакеты могут идти даже без коннекта и вызова каких либо функций

Защита от команды: !recf [запустить/остановить Reconnect-Flood]

в public OnPlayerConnect:

PHP:
if((GetTickCount()-GetPVarInt(playerid, "ConnectionTime")) < 200 && CountIP(PlayerIP(playerid)) >= 5) Ban(playerid);
SetPVarInt(playerid, "ConnectionTime", GetTickCount());
В конец мода, или среди пабликов где-то:


PHP:
CountIP(ip[])
{
       new countip;
       foreach(new i : Player)
       if(IsPlayerConnected(i) && !strcmp(PlayerIP(i),ip))  countip++;
       return countip;
}
PlayerIP(playerid)
{
        new ip[16];
        GetPlayerIp(playerid,ip,sizeof(ip));
        return ip;
}
Если мало эфективно, пробуйте вот этот вариант:
Если есть ошибки со словом foreach то вы можете или скачать и установить данный инклуд,
Или же заменить это:
PHP:
foreach(new i : Player)
На это [НЕ РЕКОМЕНДУЕТСЯ | ЛУЧШЕ УСТАНОВИТЬ FOREACH]

PHP:
for(new i = 0; i <= MAX_PLAYERS; i++)


Между пабликами/стоками добавить новый stock

PHP:
stock PublicAntiFlood(playerid, PVarName[], interval)
{
	SetPVarInt(playerid, PVarName, GetPVarInt(playerid, PVarName) + 1);
	if(GetPVarInt(playerid,PVarName) > interval) Kick(playerid);
	return true;
}
Оптимизировано.Обновлено


Автор: Alex_Lenez
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу