• Страница 1 из 1
  • 1
Модератор форума: valych  
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Информация для новичков » Анти-Крэш
Анти-Крэш
1 Вариант (Тупо обламывает Крашера):

Code
public OnVehicleMod(playerid,vehicleid,componentid)  
{  
RemoveVehicleComponent(vehicleid,componentid);  
return 0;  
}  


2. Вариант кикаем:

Code
public OnVehicleMod(playerid,vehicleid, componentid){if(GetPlayerInterior(playerid) == 0 && GetPlayerState(playerid) == PLAYER_STATE_DRIVER){Kick(playerid);}return 1;}   


Причина вылетов была:

Вы заходите на сервер..
садитесь в 2ух дверную тачку, например инфернус ( от него больше вылетов)
и приватный соб создает левые Спойлеры, юбки, бампера и т.д ( ну многие знают что они не ставятся ( ошибаетесь ) их тупо не видно!
и просто остается воспользоватся тп к игроку и хватит, что бы весь сервер вылетел.

а так же есть и другой краш ну его про фиксил Владокс.
Ко всем глобалаьным new:

Code
static const MaxPassengers[27] =   
{  
     0x10331113, 0x11311131, 0x11331313, 0x80133301,  
     0x1381F110, 0x10311103, 0x10001F10, 0x11113311,  
     0x13113311, 0x31101100, 0x30001301, 0x11031311,  
     0x11111331, 0x10013111, 0x01131100, 0x11111110,  
     0x11100031, 0x11130221, 0x33113311, 0x11111101,  
     0x33101133, 0x101001F0, 0x03133111, 0xFF11113F,  
     0x13330111, 0xFF131111, 0x0000FF3F  
}; // HEX смещения макс. кол-ва пассажиров на основной транспорт


в OnPlayerStateChange:

Code
if(newstate == PLAYER_STATE_DRIVER)  
{  
     new model = GetPlayerVehicleSeat(playerid);  
     if(model != 128)  
     {  
     if(!model)  
     {  
         model = GetVehicleModel(GetPlayerVehicleID(playerid));  
         if(!(400 <= model <= 611) || MaxPassengers[model - 400 >>> 3] >>> ((model - 400 & 7) << 2) & 0xF == 15) return Kick(playerid);  
     }  
     else return Kick(playerid);  
     }  
}  
else if(newstate == PLAYER_STATE_PASSENGER)  
{  
     new model = GetVehicleModel(GetPlayerVehicleID(playerid));  
     if(400 <= model <= 611)  
     {  
     model -= 400;  
     new seat = GetPlayerVehicleSeat(playerid);  
     if(seat != 128)  
     {  
         model = (MaxPassengers[model >>> 3] >>> ((model & 7) << 2)) & 0xF;  
         if(!model || model == 15) return Kick(playerid);  
         else if(!(0 < seat <= model)) return Kick(playerid);  
     }  
     else return Kick(playerid);  
     }  
}


Описания этого краша:
Этот краш так же создает вылеты сервера ( Но только другим способом )
Пример использования этого краша..
Чувак подсаживается к вам в транспорт и сажает вас на 5 место...
происходит вылет...

1.Убирает флуд смены мест

Code
public OnPlayerStateChange(playerid, newstate, oldstate)  
{  
     if((newstate == 2 && oldstate == 3) || (newstate == 3 && oldstate == 2)) return Kick(playerid);  
     return 1;  
}


2.Не пускает больше 2х соединений на сервер с одного IP (привет создателям RakSAMP Bot)

Code
public OnPlayerConnect(playerid)  
{  
     new ip[2][16];  
     GetPlayerIp(playerid,ip[0],16);  
     for(new i, m = GetMaxPlayers(), x; i != m; i++)  
     {  
         if(!IsPlayerConnected(i) || i == playerid) continue;  
         GetPlayerIp(i,ip[1],16);  
         if(!strcmp(ip[0],ip[1],true)) x++;  
         if(x > 2) return Kick(i);  
     }  
     return 1;  
}  


3.Убирает краш сервера путем флуда в киллчат

Code
public OnPlayerSpawn(playerid)  
{  
     SetPVarInt(playerid,"K_Times",0);  
     return 1;  
}  

public OnPlayerDeath(playerid, killerid, reason)  
{  
     SetPVarInt(playerid,"K_Times",GetPVarInt(playerid,"K_Times") + 1);  
     if(GetPVarInt(playerid,"K_Times") > 1) return Kick(playerid);  
     return 1;  
}


Убирает баг подмены диалогов через ArtMoney:

Code
//в начало после инклудов (обязательно!!!)  
SPSD(playerid, dialogid, style, caption[], info[], button1[], button2[])  
{  
     SetPVarInt(playerid,"DialogID",dialogid);  
     return ShowPlayerDialog(playerid,dialogid,style,caption,info,button1,button2);  
}  

#define ShowPlayerDialog SPSD  

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])  
{  
     if(GetPVarInt(playerid,"DialogID") != dialogid) return Kick(playerid);  
     return 0;  
}  

public OnPlayerConnect(playerid)  
{  
     SetPVarInt(playerid,"DialogID",-1);  
     return 1;  
}  


Защита от соб от сайта CheatMaster:

Защита от чита вылета из тачки
Например: Если Установлен собейт от CheatMaster то когда не срабатывает функция RemovePlayerFromVehicle т.е не выкидывает из транспорта
и так преступим исправлению этого чита.
И так ко всем new добавляем

Code
new anticheat;


Создаем паблик

Code
forward AntiCheat(playerid);  
public AntiCheat(playerid)  
{  
if(IsPlayerInAnyVehicle(playerid) && GetPVarInt(playerid,"Remove")==1) SetPVarInt(playerid,"Remove",0),Kick(playerid),KillTimer(anticheat); //Если игрок в транспорте то Кикаем  
else if(!IsPlayerInAnyVehicle(playerid) && GetPVarInt(playerid,"Remove")==1) SetPVarInt(playerid,"Remove",0),KillTimer(anticheat); //А если нет, то просто Онулируем  !  
}  
// ===== и в конец мода  
stock RemoveFromVehicle(playerid)  
{  
SetPVarInt(playerid,"Remove",1);  //Присваиваем один  
RemovePlayerFromVehicle(playerid); //Выкидываем из транспорта  
anticheat = SetTimerEx("AntiCheat",2000,0,"i",playerid); //Запускаем таймер  
return 1;  
}


Автор решения вылетов с Тюнингом: AnGeL
Автор решения вылетов с Cажанием на другое место: BJIADOKC
Ув, огромное спасибо BJIADOKC то что показал все АнтиКраши
16.07.2012 в 20:41
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Информация для новичков » Анти-Крэш
  • Страница 1 из 1
  • 1
Поиск: