[FilterScript] Anti God of Cars
#1

Добрый день!

Думаю многие слышали про чит God of Cars...

http://www.youtube.com/watch?feature...&v=YJ8JP_gNMHM

Данный прототип анти чита защищает сервер от его использования вне машины
Ложных сигналов - не было

Тестировалось на полностью пустом сервере с ~2000 машин

PHP Code:
    // This is a comment
    // uncomment the line below if you want to write a filterscript
    //#define FILTERSCRIPT
    //все PutPlayerInVehicle замените на putPlayerInVehicle
    #include <a_samp>
     
    
public OnPlayerEnterVehicle(playeridvehicleidispassenger){
            
SetPVarInt(playerid,"ac_car_id",vehicleid);
        return 
1;
    }
     
public 
OnPlayerUpdate(playerid){
    if(
IsPlayerInAnyVehicle(playerid)){
        if(
GetPlayerVehicleID(playerid) != GetPVarInt(playerid,"ac_car_id")){
            
SetPVarInt(playerid,"ac_car_id",-1);
            new 
Float:x,Float:y,Float:z;
            
GetPlayerPos(playerid,x,y,z);
            
SetPlayerPos(playerid,x,y,z+1);
            
SendClientMessage(playerid,-1,"Не шали засранец!");
        }
    }
    return 
1;
}
     
    
putPlayerInVehicle(playerid,vehicle,seat){
            
SetPVarInt(playerid,"ac_car_id",vehicle);
        
PutPlayerInVehicle(playerid,vehicle,seat);
    }
     
    public 
OnPlayerConnect(playerid){
        
SetPVarInt(playerid,"ac_car_id",-1);
            return 
1;
    } 
Спасибо за внимание)

Автор - Seregamil
Reply
#2

Фигня
Метод "дотолкать" веселее.
На заметку: есть вид чита когда, состояние не меняется. Достаточно сесть в машину и ваша защита не работает
Reply
#3

Quote:
Originally Posted by White_116
View Post
Фигня
Метод "дотолкать" веселее.
На заметку: есть вид чита когда, состояние не меняется. Достаточно сесть в машину и ваша защита не работает
тут только от гока, про остальные - неслышал
Reply
#4

Можно начать садиться в машину, но так и не сесть. Тогда для следующей машины античит не сработает.
Reply
#5

Quote:
Originally Posted by Alexander_Petrov
View Post
Можно начать садиться в машину, но так и не сесть. Тогда для следующей машины античит не сработает.
почему?
начнет садиться - значение станет равно 1, уйдет - ничего не измениться, решит сесть в новую - пройдет тот же алгоритм
Reply
#6

Если так и не сядет, значение останется равным одному, и тогда весь дальнейший алгоритм не имеет смысла.
Reply
#7

Quote:
Originally Posted by Alexander_Petrov
View Post
Если так и не сядет, значение останется равным одному, и тогда весь дальнейший алгоритм не имеет смысла.
согласен, однако в чите это не предусмотрено)
там просто с большой скоростью запинывает и выгоняет в машину
Reply
#8

делал поДобный античит. будет ложно срабатывать часто
Reply
#9

Не будет, если поставить исключение на PutPlayerInVehicle
Reply
#10

Обновил вторую версию, сделан фикс PutPlayerInVehicle, рекомендую заменить все PutPlayerInVehicle на putPlayerInVehicle дабы избежать сбоев в системе
Так же система теперь действует как анти-тп в авто
Reply
#11

Quote:
Originally Posted by Alexander_Petrov
View Post
Не будет, если поставить исключение на PutPlayerInVehicle
OnPlayerEnterVehicle не всегда вызывается

а всего то нужно - сделать антителепорт из тачки в тачку через OnPlayerUpdate и антифлуд на OnPlayerStateChange (не более 3 раз в секунду)
Reply
#12

Зачем делать телепорт из тачки в тачку через OnPlayerUpdate? Можно сделать так:
pawn Code:
new Vehicle[MAX_PLAYERS];
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
        if(Vehicle[playerid])
        {
            Kick(playerid);
            return 1;
        }
        Vehicle[playerid] = GetPlayerVehicleID(playerid);
    }
    else if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
    {
        Vehicle[playerid] = 0;
    }
    return 1;
}
Если это использовать, можно юзать переменную Vehicle, а не GetPlayerVehicleID, похоже на античит на деньги.
Reply
#13

Quote:
Originally Posted by Alexander_Petrov
View Post
Зачем делать телепорт из тачки в тачку через OnPlayerUpdate? Можно сделать так:
pawn Code:
new Vehicle[MAX_PLAYERS];
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
        if(Vehicle[playerid])
        {
            Kick(playerid);
            return 1;
        }
        Vehicle[playerid] = GetPlayerVehicleID(playerid);
    }
    else if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
    {
        Vehicle[playerid] = 0;
    }
    return 1;
}
До определенного момента я так и сделал, однако при ТП в машину из машины выяснилось, что каллбэки OnPlayerEnter/ExitVehicle и OnPlayerStateChange несрабатывают
Reply
#14

Не срабатывают при использовании самого чита или просто не срабатывают во время обычной игры?
Reply
#15

при использовании чита
Reply
#16

Оставлю тут. Может работать как ФС. Суть АФК бага: на одном транспорте могут ездить несколько игроков.

pawn Code:
#include <a_samp>
new NewWVehicle[MAX_PLAYERS];
new WVehicle[MAX_PLAYERS];
new EnterWVehicleTime[MAX_PLAYERS];
new WVehicleDriver[MAX_VEHICLES];

forward PutPlayerInVehicleEx(playerid, vehicleid, seatid);
public PutPlayerInVehicleEx(playerid, vehicleid, seatid)
{
    //Из-за пинга возможны проблемы. Нужно высадить и лишь потом посадить, если игрок уже был в другом транспорте.
    NewWVehicle[playerid]=vehicleid;
    EnterWVehicleTime[playerid]=0;
    return PutPlayerInVehicle(playerid, vehicleid, seatid);
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
//----------------------        AntiQuikCarChange       ------------------------
    NewWVehicle[playerid]=vehicleid;
    return 1;
}

public OnPlayerUpdate(playerid)
{
//----------------------        AntiQuikCarChange       ------------------------
    new vehicleid=GetPlayerVehicleID(playerid);
    if(vehicleid == 0)WVehicle[playerid]=0; else//exit
    {
        if(WVehicle[playerid] == 0)//enter
        {
            if(NewWVehicle[playerid] != vehicleid)
            {
                SetVehicleVelocity(vehicleid, 0.0, 0.0, 0.0);
                Kick(playerid);
                return 0;
            }
            else
            {
                if(GetTickCount()-EnterWVehicleTime[playerid] < 1500)
                {
                    SetVehicleVelocity(vehicleid, 0.0, 0.0, 0.0);
                    Kick(playerid);
                    return 0;
                }
                else
                {
                    WVehicle[playerid]=vehicleid;
                    NewWVehicle[playerid]=0;
                    EnterWVehicleTime[playerid]=GetTickCount();
//----------------------        Anti AFK Bug        ----------------------------
                    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)WVehicleDriver[vehicleid]=playerid;
                }
            }
        }
        else if(WVehicle[playerid] != vehicleid)
        {
            SetVehicleVelocity(vehicleid, 0.0, 0.0, 0.0);
            Kick(playerid);
            return 0;
        }
//----------------------        Anti AFK Bug        ----------------------------
        if(GetPlayerState(playerid)==PLAYER_STATE_DRIVER && WVehicleDriver[vehicleid] != playerid)
        {
            new Float:x, Float:y, Float:z;
            GetPlayerPos(playerid, x, y, z);
            SetPlayerPos(playerid, x, y, z);
        }
    }
//...
    return 1;
}
Reply
#17

Можно не выпихивать игрока из машины перед использованием PutPlayerInVehicle, а просто самому вызвать OnPlayerStateChange.
Reply
#18

Quote:
Originally Posted by Alexander_Petrov
View Post
Можно не выпихивать игрока из машины перед использованием PutPlayerInVehicle, а просто самому вызвать OnPlayerStateChange.
Это вы относительно какого кода?
Reply
#19

Quote:
Originally Posted by White_116
View Post
pawn Code:
forward PutPlayerInVehicleEx(playerid, vehicleid, seatid);
public PutPlayerInVehicleEx(playerid, vehicleid, seatid)
{
    //Из-за пинга возможны проблемы. Нужно высадить и лишь потом посадить, если игрок уже был в другом транспорте.
    NewWVehicle[playerid]=vehicleid;
    EnterWVehicleTime[playerid]=0;
    return PutPlayerInVehicle(playerid, vehicleid, seatid);
}
Вот.
Reply
#20

Quote:
Originally Posted by Alexander_Petrov
View Post
Вот.
В моей защите не используется OnPlayerStateChange
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)