Античит
#1

Здравствуйте, я не так силён в античитах.
Взял античит который взял с какого-то инклуда.
Но при коннекте меня кикает, и я не знаю какую проверку поставить.
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;

Reply
#2

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.
Reply
#3

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

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

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

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

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

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

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

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

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

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;

Reply
#9

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


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

Тогда ещё это вверх добавь:
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
Reply
#11

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
Все равно кикает.
Reply
#12

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

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


Forum Jump:


Users browsing this thread: 1 Guest(s)