SA-MP Forums Archive
Античит - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Античит (/showthread.php?tid=559110)



Античит - SanDev - 21.01.2015

Здравствуйте, я не так силён в античитах.
Взял античит который взял с какого-то инклуда.
Но при коннекте меня кикает, и я не знаю какую проверку поставить.
PHP код:
public onCheckAirBrk(playerid)
{
       new 
FloatAC::Pos[3], Floatdistance;
       
GetPlayerPos(playeridAC::Pos[0], AC::Pos[1], AC::Pos[2]);
       
distance floatround(GetPlayerDistanceFromPoint(playeridAC::Info[playerid][AC::Pos_X], AC::Info[playerid][AC::Pos_Y], AC::Info[playerid][AC::Pos_Z]));
       if(
GetPVarInt(playerid"Protect") == 0)
       {
           if(
GetPlayerState(playerid) == 1)
           {
             if(
distance 40CheatKick(playerid"3");
           }
           else
           {
               if(
distance 80CheatKick(playerid"3");
           }
       }
    
AC::Info[playerid][AC::Pos_X] = AC::Pos[0];
     
AC::Info[playerid][AC::Pos_Y] = AC::Pos[1];
      
AC::Info[playerid][AC::Pos_Z] = AC::Pos[2];
       if(
GetTickCount() - AC::Info[playerid][AC::LastUpdate] > 2000SetPVarInt(playerid"Protect"500);
       
AC::Info[playerid][AC::LastUpdate] = GetTickCount();
       return 
true;




Re: Античит - ZiGGi - 21.01.2015

pawn Код:
stock IsPlayerSpawn(playerid)
{
    return GetPVarInt(playerid, "IsSpawn") != 0;
}

stock SetPlayerSpawnStatus(playerid, status)
{
    SetPVarInt(playerid, "IsSpawn", status);
}

public OnPlayerSpawn(playerid)
{
    SetPlayerSpawnStatus(playerid, 1);
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    SetPlayerSpawnStatus(playerid, 0);
    return 1;
}

public onCheckAirBrk(playerid)
{
    if (!IsPlayerSpawn(playerid)) {
        return 0;
    }
    new Float: AC::Pos[3], Float: distance;
    GetPlayerPos(playerid, AC::Pos[0], AC::Pos[1], AC::Pos[2]);
    distance = floatround(GetPlayerDistanceFromPoint(playerid, AC::Info[playerid][AC::Pos_X], AC::Info[playerid][AC::Pos_Y], AC::Info[playerid][AC::Pos_Z]));
    if(GetPVarInt(playerid, "Protect") == 0)
    {
        if(GetPlayerState(playerid) == 1)
        {
            if(distance > 40) CheatKick(playerid, "3");
        }
        else
        {
            if(distance > 80) CheatKick(playerid, "3");
        }
    }
    AC::Info[playerid][AC::Pos_X] = AC::Pos[0];
    AC::Info[playerid][AC::Pos_Y] = AC::Pos[1];
    AC::Info[playerid][AC::Pos_Z] = AC::Pos[2];
    if(GetTickCount() - AC::Info[playerid][AC::LastUpdate] > 2000) SetPVarInt(playerid, "Protect", 500);
    AC::Info[playerid][AC::LastUpdate] = GetTickCount();
    return 1;
}
Но как показала практика, вызов SetPlayerSpawnStatus(playerid, 1) лучше производить через некоторое время после вызова OnPlayerSpawn.


Re: Античит - Mutha_X - 21.01.2015

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
[PAWN]
Но как показала практика, вызов SetPlayerSpawnStatus(playerid, 1) лучше производить через некоторое время после вызова OnPlayerSpawn.
Это вы ввели собственную условную функцию (SetPlayerSpawnStatus)?


Re: Античит - ZiGGi - 21.01.2015

Quote:
Originally Posted by Mutha_X
Посмотреть сообщение
Это вы ввели собственную условную функцию (SetPlayerSpawnStatus)?
Ну да, две функции, выше они описаны. Ну вот ещё раз:
pawn Код:
stock IsPlayerSpawn(playerid)
{
    return GetPVarInt(playerid, "IsSpawn") != 0;
}

stock SetPlayerSpawnStatus(playerid, status)
{
    SetPVarInt(playerid, "IsSpawn", status);
}



Re: Античит - SanDev - 21.01.2015

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
Ну да, две функции, выше они описаны. Ну вот ещё раз:
pawn Код:
stock IsPlayerSpawn(playerid)
{
    return GetPVarInt(playerid, "IsSpawn") != 0;
}

stock SetPlayerSpawnStatus(playerid, status)
{
    SetPVarInt(playerid, "IsSpawn", status);
}
Все равно кикает, но при спавне.


Re: Античит - Stepashka - 21.01.2015

SetPVarInt(playerid, "Protect", 500); при коннекте.

Я так полагаю что изначально AC::Info[*][AC::Pos_*] равно нулю и соответствено система считает что вы телепортировались, потому что вы явно после подключения человека перемещаете куда-то.


Re: Античит - SanDev - 21.01.2015

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
SetPVarInt(playerid, "Protect", 500); при коннекте.

Я так полагаю что изначально AC::Info[*][AC::Pos_*] равно нулю и соответствено система считает что вы телепортировались, потому что вы явно после подключения человека перемещаете куда-то.
Его ставлю античит вообще не кикает


Re: Античит - SanDev - 21.01.2015

PHP код:
stock CheatKick(id,code[])
{
    if(
GetPVarInt(id"cheater") > 0) return true;
    if(
IsPlayerInAnyVehicle(id)) SetVehicleToRespawn(GetPlayerVehicleID(id));
    
SendClientMessage(idCOLOR_LIGHTRED"Примечание: К ложным определениям античита могут привести следующие факторы:");
    
SendClientMessage(idCOLOR_LIGHTRED"Высокий пинг, слабое интернет-соединение, проблемы на сервере, настоящие читы");
    
format(stringer128"[Античит] Вы были кикнуты в связи с подозрением в читерстве. Код события: #00%i"code);
     
SendClientMessage(idCOLOR_LIGHTREDstringer);
    
SetPVarInt(id"cheater"GetPVarInt(id"cheater") + 1);
    
GKick(id);
    return 
true;




Re: Античит - Stepashka - 21.01.2015

Продебагай вот эти моменты:


Поставь перед if printf и выведи результат проверки, что бы понят что именно срабатывает.


Re: Античит - ZiGGi - 21.01.2015

Тогда ещё это вверх добавь:
pawn Код:
stock oSetPlayerPos(playerid, Float:x, Float:y, Float:z)
{
    AC::Info[playerid][AC::Pos_X] = x;
    AC::Info[playerid][AC::Pos_Y] = y;
    AC::Info[playerid][AC::Pos_Z] = z;
    SetPlayerPos(playerid, x, y, z);
}

#define SetPlayerPos oSetPlayerPos



Re: Античит - SanDev - 21.01.2015

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
Тогда ещё это вверх добавь:
pawn Код:
stock oSetPlayerPos(playerid, Float:x, Float:y, Float:z)
{
    AC::Info[playerid][AC::Pos_X] = x;
    AC::Info[playerid][AC::Pos_Y] = y;
    AC::Info[playerid][AC::Pos_Z] = z;
    SetPlayerPos(playerid, x, y, z);
}

#define SetPlayerPos oSetPlayerPos
Все равно кикает.


Re: Античит - SanDev - 21.01.2015

Если есть лучше и рабочий то плз выложите сюда


Re: Античит - Jon_De - 21.01.2015

твой античит в 1 посте ну в лучшем случае 20% от готового (да и то не особо хорошее начало). там кучу всего предусмотреть надо, от игроков, которые телепортируются только через пол секунды (а то и через минутЫ, если АФК) после вызова SetPlayerPos, до игроков, которые выпрыгивают с самолета и тд