[Off] (Pawn) bProteзгo. Anti Hacking
#1

https://sampforum.blast.hk/showthread.php?tid=386231

^
i

Lancado





Como alguns sabem. Estou criando um anti hacking com algumas funзхes ..

Inicialmente estou primando para a simplificaзгo do filterscript e eficiкncia do mesmo. Tambйm estou desenvolvendo voltado para os hackings mais conhecidos e que estгo dando mais problemas atualmente.

Segue aqui o trecho de versгo em desenvolvimento:
-> http://pastebin.com/Zm5fgEER


Porque em OnPlayerUpdate? Porque й alн que eu tive o melhor detalhe. Isto й, algumas funзхes que interferem em deteзгo de hackings estгo sendo hockeadas/redefinidas nativamente e nisto eu quero uma base sуlida de verifiзгo, que tenha pouco intervalo de tempo. Nгo darб lag pois tem condicionais bem condicionadas. rs. Como podem ver, OnPlayerUpdate foi essencial para o Anti Teleport, Anti Freeze e Anti Ammo hack ..

O motivo real de eu criar este tуpico й demonstrar o desenvolvimento. Tanto como pedir dicas de sistemas preventivos para aplicar no filterscript. Dicas para novos itens.

Sendo mais direto:
Qual problema de cheats principal no seu servidor? Qual seria a lуgica usada para bloquear isto?

Abraзos galera.
Quote:
Originally Posted by [FeK]DraKiNs
Посмотреть сообщение
Foi atualizado e colocado novas funcionalidades no anti hacking !! Este ainda nгo й o lanзamento real, mas todos estгo convidados para testarem a include

Й sу colocar como #include, as callbacks jб estгo hookeadas .. As seguintes funcionalidade foram implementadas:


// Detectar:
// bots,
// ataques ddos
// fake kill
// player surf vehicle (cleo)
// player car teleport
// car teleport player
// player state hack (player push/get cars) car mass spawn
// weapon hack
// ammo hack
// no reload hack
// freeze hack
// score hack
// hack
// ofensa
// flood
// spam
// publicaзгo
// teleport
// air break
// high ping
// anti spider car hack,
// cprace hack
// speed hack
// fly hack
// anti god mode
// sync lag shoot
// armour hack


Apуs plugar, deve colocar a seguinte callback:

pawn Код:
forward OnPlayerHacking(playerid, hackid);
public OnPlayerHacking(playerid, hackid) {

    if(hackid == PLAYER_BOT_LEVEL1) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv ");
        Kick(playerid);
    }
    if(hackid == PLAYER_BOT_LEVEL2) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv ");
        Kick(playerid);
    }
    if(hackid == PLAYER_BOT_LEVEL3) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv BAN ");
        BanEx(playerid, "fdppp");
    }

    if(hackid == PLAYER_DEATHFLOOD_LEVEL1 || PLAYER_DEATHFLOOD_LEVEL2 == hackid || PLAYER_DEATHFLOOD_LEVEL3 == hackid) {
        SendClientMessage(playerid, -1, "noob para de fake kill");
    }

    if(hackid == PLAYER_SURF_VEHICLE) {
        SendClientMessage(playerid, -1, "noob para de surf vehicle");
    }

    if(hackid == PLAYER_SURF_VEHICLE) {
        SendClientMessage(playerid, -1, "noob para de surf vehicle");
    }

    if(hackid == PLAYER_CAR_TELEPORT) {
        SendClientMessage(playerid, -1, "noob para de car teleport");
    }

    if(hackid == PLAYER_STATE_HACK) {
        SendClientMessage(playerid, -1, "noob para de state hack");
    }

    if(hackid == PLAYER_FREEZE_HACK) {
        SendClientMessage(playerid, -1, "noob para de freeze hack");
    }

    if(hackid == PLAYER_SCORE_HACK) {
        SendClientMessage(playerid, -1, "noob para de score hack");
    }

    if(hackid == PLAYER_MONEY_HACK) {
        SendClientMessage(playerid, -1, "noob para de money hack");
    }
    if(hackid == PLAYER_PUBLISH_TEXT) {
        SendClientMessage(playerid, -1, "ninguem quer entrar no teu sv noob");
    }
    if(hackid == PLAYER_OFFEND_TEXT) {
        SendClientMessage(playerid, -1, "vtnc, para de ofende os outros fdp");
    }
    if(hackid == PLAYER_FLOOD_TEXT) {
        SendClientMessage(playerid, -1, "calma ai mermгo, rlx cuca");
    }
   
    if(hackid == PLAYER_TELEPORT_HACK) {
        SendClientMessage(playerid, -1, "preguiзoso, USA CARRO mas nгo teleport !!1");
    }
    if(hackid == PLAYER_WEAPON_HACK) {
        SendClientMessage(playerid, -1, "nгo usa weapon hack po");
    }
    if(hackid == PLAYER_AMMO_HACK) {
        SendClientMessage(playerid, -1, "fdp nao usa ammo hack");
    }
    if(hackid == PLAYER_NORELOAD_HACK) {
        SendClientMessage(playerid, -1, "fdp nao usa no reload hack");
    }
    if(hackid == PLAYER_AIRBREAK_HACK) {
        SendClientMessage(playerid, -1, "fdp para de usa no airbreak hack");
    }
    if(hackid == PLAYER_SPIDER_HACK) {
        SendClientMessage(playerid, -1, "fdp para de usa no spider car");
    }
    if(hackid == PLAYER_CPRACE_HACK) {
        SendClientMessage(playerid, -1, "fdp para de usa no cprace hack");
    }
    if(hackid == PLAYER_SPEED_HACK) {
        SendClientMessage(playerid, -1, "fdp para de usa no speed hack");
    }
    if(hackid == PLAYER_FLY_HACK) {
        SendClientMessage(playerid, -1, "fdp para de nadar no cйu !!1");
    }

    return true;
}
http://pastebin.com/Zm5fgEER

Por Bruno e Paulor. Include ainda nгo finalizada, precisa de mais coisas e mais ajustes do que imaginбvamos.
Reply
#2

Muito bom post!

O meu principal problema, sгo aqueles Voadores, ando tao farto disso !
Reply
#3

Adorei a parte do anti no reload
E... faltou o pior o fly e o airbrk, e essa parada que OnPlayerUpdate laga o server й mito,
Pra quem nгo sabe usar laga sim, mas pra quem sabe sempre tem um jeito
Reply
#4

Quote:
Originally Posted by Edu33
Посмотреть сообщение
Adorei a parte do anti no reload
E... faltou o pior o fly e o airbrk, e essa parada que OnPlayerUpdate laga o server й mito,
Pra quem nгo sabe usar laga sim, mas pra quem sabe sempre tem um jeito
Nгo й de fato um mito, realmente pode ocorrer, mas depende de alguns fatores, como por exemplo o tipo de instruзгo que estб sendo colocado...
Reply
#5

Quote:
Originally Posted by Viniborn
Посмотреть сообщение
Nгo й de fato um mito, realmente pode ocorrer, mas depende de alguns fatores, como por exemplo o tipo de instruзгo que estб sendo colocado...
Й verdade. No caso eu estou usando vбrias condicionais, й meio raro ocorrer latкncia, mas nгo improvбvel O importa й que o sistema й eficiente.

Vou criar o anti-air break
Reply
#6

Muito bom drakins!
Reply
#7

serб ъtil.
Reply
#8

Coloquei agora anti air break. Aos poucos vou colocando mais coisas atй que finalmente seja publicado de verdade.

pawn Код:
#include <a_samp>


////////////////////////////////////////////////////////////////////////////////
//
//
//        #### ########   ######     ######## ########    ###    ##     ##
//         ##  ##     ## ##    ##       ##    ##         ## ##   ###   ###
//         ##  ##     ## ##             ##    ##        ##   ##  #### ####
//         ##  ########   ######        ##    ######   ##     ## ## ### ##
//         ##  ##              ##       ##    ##       ######### ##     ##
//         ##  ##        ##    ##       ##    ##       ##     ## ##     ##
//        #### ##         ######        ##    ######## ##     ## ##     ##
//
//
//                    Criado por Bruno da Silva (iPs DraKiNs)
//
//          Acesse meu blog sobre programaзгo http://www.brunodasilva.com.br
//
//
//              -----------------------------------
//
//                  Detectar:
//                      bots, ataques
///                     fake kill
//                      flood chat
//                      publicacao chat
//                      ofensa chat
//                      freeze hack
//                      score hack
//                      money hack
//                      state hack
//                      car teleport
//                      anti ammo hack, noreload,
//                      anti weapon hack, high ping
//
//              ------------------------------------
//
//                 http://www.brunodasilva.com.br
//
//              Ingresse tambйm na [iPs]TeaM
//              wwww.ips-team.forumeiros.com
//
//////////////////////////////////////////////////////////////////////////////////

// ------------------------

#define Hook%0(%1) \
            stock %0_Ex(%1)

// ------------------------

#define varGet(%0) \
            getproperty(0,%0)

// ------------------------

#define varSet(%0,%1) \
            setproperty(0, %0, %1)


// --------------------------



enum {
    // Anti DDos Bots
    PLAYER_BOT_LEVEL3,
    PLAYER_BOT_LEVEL2,
    PLAYER_BOT_LEVEL1,

    // Anti Cleo4 Fake-kill
    PLAYER_DEATHFLOOD_LEVEL3,
    PLAYER_DEATHFLOOD_LEVEL2,
    PLAYER_DEATHFLOOD_LEVEL1,

    // Anti Bug Cars
    PLAYER_SURF_VEHICLE,
    PLAYER_CAR_TELEPORT,
    PLAYER_STATE_HACK,

    // Ammo Weapon
    PLAYER_NORELOAD_HACK,
    PLAYER_WEAPON_HACK,
    PLAYER_AMMO_HACK,


    // hackings
    PLAYER_FREEZE_HACK,
    PLAYER_SCORE_HACK,
    PLAYER_MONEY_HACK,

    // Text Chat
    PLAYER_PUBLISH_TEXT,
    PLAYER_OFFEND_TEXT,
    PLAYER_FLOOD_TEXT,

    // pos cheat
    PLAYER_TELEPORT_HACK,
    PLAYER_AIRBREAK_HACK,
   
    // outros
    PLAYER_HIGH_PING
}



#define INVALID_CHAT_BLOCK

#define MAX_STRING_CHAT     (128)

#define WEAPON_SLOT_HACK    (015)

#define SERVER_SIDE_DELAY   (002)

#define MAX_DISTANCE_DEF        (83.1)

#define MAX_PING            (800)


// =============================================================================
//
// OBSERVAЗхES IMPORTANTES:

// #define INVALID_CHAT_BLOCK
// Em caso de nгo quiser bloquear o texto em caso de texto invбlido
// Texto invбlido, spam, flood, palavreado, ofensa, publicaзгo. etc

// Ping acima de 1 segundo (1000 ms) poderб ocorrer graves problemas de precisгo no anti cheater.
// Em caso de ping muito elevado aconselha-se o uso de SERVER_SIDE_DELAY elevado para maior precisгo

// SERVER_SIDE_DELAY equivale ao tempo de delay entre o uso de uma funзгo registrada
// que influencia no detectamento do anti cheater. Aconselhбvel 1 a 5 segundos.
// Dependendo da conexгo do servidor vocк coloca maior delay ou menor dealay

// MAX_DISTANCE_DEF й essencial para busca e detecзгo de anti-teleport e air break
// O nъmero padrгo foi calculado e nгo houve bugs por parte do sistema
// A ъnica coisa que pode influenciar serб o sistema de SetPlayerPos. Mas o SERVER_SIDE_DELAY supriu isto com precisгo

// Este sistema apenas detecta cheaters. Й aconselhavйl a checagem de um administrador humano antes de aplicar o banimento.

// ========================================================================================================

new connect = -1;
new Float:g_ucPos[4];
new databaseIP[MAX_PLAYERS][20];
new Float:g_diferencasAngle[MAX_VEHICLES];


stock resetBot(o);
stock registerBot(p);
stock registrarJogador(playerid);

// ---------------------------------------------
//  Nesta parte aparecem funзхes hookeadas
//  Elas sгo essenciais para ter controle server-side detalhado
//  Essencial para qualquer anti-hack. Controle minucioso
// ---------------------------------------------

Hook GivePlayerMoney(playerid, value)
{
    return SetPVarInt(playerid, #registerMoney, GetPVarInt(playerid, #registerMoney) + value), GivePlayerMoney(playerid, value);
}


// ---------------------------------------------

Hook SetPlayerScore(playerid, value)
{
    return SetPVarInt(playerid, #registerScore, value), SetPlayerScore(playerid, value);
}


// ---------------------------------------------

Hook PutPlayerInVehicle(playerid,vehicleid,seatid)
{
    return SetPVarInt(playerid, #registerState, gettime()-SERVER_SIDE_DELAY), PutPlayerInVehicle(playerid, vehicleid, seatid);
}


// ---------------------------------------------

Hook SetPlayerPos(playerid,Float:x,Float:y,Float:z)
{

    return SetPVarInt(playerid,"tposSet", gettime()), SetPlayerPos(playerid, x, y, z);
}


Hook GivePlayerWeapon(playerid, weaponid, ammo)
{
    return SetPVarInt(playerid, #ammoTime, gettime()), GivePlayerWeapon(playerid, weaponid, ammo), SetPVarInt(playerid, getWeaponNameID(weaponid), ammo + GetPVarInt(playerid, getWeaponNameID(weaponid)));
}


stock getWeaponNameID(id)
{
    static stringWeapon[12];
    return format(stringWeapon, 12, "wepid%d", id), stringWeapon;
}


// ---------------------------------------------

Hook TogglePlayerControllable(playerid, bool:control)
{

    if(control) {

        static Float:x, Float:y, Float:z;

        GetPlayerPos(playerid,x, y, z);
        SetPVarFloat(playerid,"xposControll", x),
            SetPVarFloat(playerid,"yposControll", y),
            SetPVarFloat(playerid,"zposControll", z);
    }
    else {
        SetPVarFloat(playerid,"xposControll", 0.0);
        SetPVarFloat(playerid,"yposControll", 0.0);
        SetPVarFloat(playerid,"zposControll", 0.0);
    }

    return SetPVarInt(playerid, "PlayerControllable", _:control), TogglePlayerControllable(playerid, control);
}


// ---------------------------------------------

Hook SetPlayerHealth(playerid, Float:health)
{
    return SetPVarFloat(playerid,"healthServerside", health), SetPlayerHealth(playerid, health);
}


// ---------------------------------------------

Hook SetPlayerArmour(playerid, Float:armour)
{
    return SetPVarFloat(playerid,"armourServerside", armour), SetPlayerArmour(playerid, armour);
}


// ---------------------------------------------

public OnPlayerConnect(playerid)
{
    // registrar conexгo logo que o jogador entra
    return registrarJogador(playerid);
}


public OnFilterScriptInit()
{
    // parte importante para registrar cada jogador em timers e variбveis no inicio do game mode
    // em caso de reloadfs / loadfs
    for(new i; i != MAX_PLAYERS; i++) if(IsPlayerConnected(i)) registrarJogador(i);
}


public OnPlayerDisconnect(playerid, reason)
{
    // Nгo retire estб parte. Isto serve para nгo enviar mensagens de desconecзгo quando o player й bot ddos
    if(GetPVarInt(playerid, #jogadorDisponivel)) return false;
    return true;
}

new const palavreado[][24] = {
    "daputa","babaca","baitola","piranha","bicha","bichona","biscat","bitch","bix", "boiola","boiolona","buceta","bucetudo","cuzona","bund","burr","fude","cacet",
    "viad","caral","vadi","carai","rola","chup","idiot","corno","nocu","eucu""ocu","cusa","cusi","cuza","cuzinho","piroca","embecil","fdp","foda",
    "fode","fuck","fud","hetard","homo","imbess","jegu","kacet","karai","karaleo","kct","kral", "krl","noku","lasarent","lazarent","mula","otari","pnc","pereb","penis","pint","prosti","punhet",
    "put","retardado","tnc","viad","viadi","vsf","vtnc","sobe","vogelz","baranga", "vagab","broxa","ignorant","comed",
    "ejacu","prosti","cachorr", "surub","peni","chup","pau","viad","perere", "bucet","bicha.","bixa","gay","desgra", "troxa", "tomanocu", "seucu"
};

public OnPlayerText(playerid, text[])
{

    /*--------------------------------------------------
     *
     *  Anti Publicaзгo de IP Inteligente
     *   Usando OnPlayerText com manipulaзгo de strings e outros
     *   A precisгo deste sistema estб em torno de 95%
     *
     * Detecta: 127.0.0.1 | 1 2    7 .   0  0 1 etc
    -------------------------------------------------*/


    static szText[MAX_STRING_CHAT], numerosNochat, j;

    numerosNochat = -1, j = -1;
    for(new i; text[i]; i++) {
        if(text[i] >= '0' && '9' >= text[i]) {
            numerosNochat ++ ;
            if(numerosNochat >= 8) {
                CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_PUBLISH_TEXT);
                #if defined INVALID_CHAT_BLOCK
                return false;
                #endif

            }
        }
        switch(text[i]) {
            case '0':{ szText[j] = 'o'; j++; continue; }
            case '1':{ szText[j] = 'i'; j++; continue; }
            case '2':{ szText[j] = 'z'; j++; continue; }
            case '3':{ szText[j] = 'e'; j++; continue; }
            case '4':{ szText[j] = 'a'; j++; continue; }
            case '5':{ szText[j] = 's'; j++; continue; }
            case '6':{ szText[j] = 'g'; j++; continue; }
            case '7':{ szText[j] = 't'; j++; continue; }
            case '8':{ szText[j] = 'b'; j++; continue; }
            case 65 .. 90, 97 .. 122: { szText[j] = tolower(text[i]); j++; continue; }
        }
    }

    /*--------------------------------------------------
     *
     *  Anti Palavreado Inteligente
     *   Usando OnPlayerText com manipulaзгo de strings e outros
     *   A precisгo deste sistema estб em torno de 85%
     *
     * Detecta: buceta, b - u c |e t-a, buc 3 7 4 etc
    -------------------------------------------------*/


    for(new i = 0; i < sizeof(palavreado); i++) {
        if(strfind(szText, palavreado[i], false) != -1) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_OFFEND_TEXT);
            #if defined INVALID_CHAT_BLOCK
            return false;
            #endif
        }
    }

    /*--------------------------------------------------
     *
     *  Anti Flood
     *   Usando OnPlayerText com gettime e outros
     *   A precisгo deste sistema estб em torno de 95%
     *
    -------------------------------------------------*/


    if(gettime() - GetPVarInt(playerid, #floodChat) < 3) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_FLOOD_TEXT);
        #if defined INVALID_CHAT_BLOCK
        return false;
        #endif
    }

    SetPVarInt(playerid, #floodChat, gettime());
    return true;
}


public resetBot(o)
{
    varSet(databaseIP[o],0);
    return databaseIP[o][0] = EOS;
}


public registerBot(p)
{

    /*--------------------------------------------------
     *
     *  Anti DDos Bots
     *   Usando GetPlayerPing/OnPlayerConnect com gettime e outros
     *   A precisгo deste sistema estб dividido em partes
     *
     *  PLAYER_BOT_LEVEL1 -> 70%
     *  PLAYER_BOT_LEVEL2 -> 90%
     *  PLAYER_BOT_LEVEL3 -> 100%
     *
     *
    -------------------------------------------------*/


    if(GetPlayerPing(p) != 0xffff && GetPlayerPing(p)  != 0) SetPVarInt(p, #jogadorDisponivel, 1);
    if(IsPlayerConnected(p) && GetPlayerPing(p)  == 0xffff) {
        static tmpip[20];
        GetPlayerIp(p, tmpip, 20);
        if(0x1c5 > gettime() - varGet(tmpip)) {
            tmpip[strlen(tmpip)-1] = 'x';
            if(varGet(tmpip) > 3) {
                return CallLocalFunction("OnPlayerHacking", "ii", p, PLAYER_BOT_LEVEL3);
            }
            CallLocalFunction("OnPlayerHacking", "ii", p, PLAYER_BOT_LEVEL2);
        }
        CallLocalFunction("OnPlayerHacking", "ii", p, PLAYER_BOT_LEVEL1);
        SetTimerEx("registerBot", 700, false, #i , p);
    }
    return false;
}



public registrarJogador(playerid)
{

    static tmpip[20];
    g_diferencasAngle[playerid] = 0;
    GetPlayerIp(playerid, tmpip, 20);
    varSet(tmpip, gettime()); ++connect;

    if(connect == MAX_PLAYERS - 1) {
        for(connect = 0; databaseIP[connect][0]; connect++) continue;
    }
    SetTimerEx("resetBot", 50000, false, "i", connect);

    tmpip[strlen(tmpip)-1] = 'x';
    format(databaseIP[connect], 20, tmpip);
    varSet(tmpip, varGet(tmpip) +1);

    SetTimerEx(#pdataCheck, 1000, true, "i", playerid);
    return SetTimerEx("registerBot", 700, false, #i , playerid);
}


public OnPlayerDeath(playerid,killerid,reason)
{

    /*--------------------------------------------------
     *
     *  Anti Fake Kill
     *   Usando OnPlayerDeath com gettime e outros
     *   A precisгo deste sistema estб dividido em partes
     *
     *  PLAYER_DEATHFLOOD_LEVEL1 -> 070%
     *  PLAYER_DEATHFLOOD_LEVEL2 -> 090%
     *  PLAYER_DEATHFLOOD_LEVEL3 -> 100%
     *
     *
    -------------------------------------------------*/


    if(gettime() - GetPVarInt(playerid, #registerDeath) < 20) {
        if(GetPVarInt(playerid, #registerValDeath) > 15) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_DEATHFLOOD_LEVEL1);
        }
        if(gettime() - GetPVarInt(playerid, #registerDeath) < 2) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_DEATHFLOOD_LEVEL2);
        }
        if(gettime() - GetPVarInt(playerid, #registerDeath) < 5) {
            if(GetPVarInt(playerid, #registerValDeath) > 3) {
                CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_DEATHFLOOD_LEVEL3);
            }
        }
    }
    SetPVarInt(playerid, #registerDeath, gettime());
    SetPVarInt(playerid, #registerValDeath, GetPVarInt(playerid, #registerValDeath) +1);
    return true;
}




public OnPlayerUpdate(playerid)
{

    /*--------------------------------------------------
     *
     *  Anti Ping Alto
     *   Usando GetPlayerScore com variбveis server sided
     *   A precisгo deste sistema fica em torno de 90%
     *
    -------------------------------------------------*/


    if(GetPlayerPing(playerid) > MAX_PING) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_HIGH_PING);
    }

    /*--------------------------------------------------
     *
     *  Anti Score Hack
     *   Usando GetPlayerScore com variбveis server sided
     *   A precisгo deste sistema fica em torno de 100%
     *
    -------------------------------------------------*/


    if(GetPlayerScore(playerid) <  GetPVarInt(playerid, #registerScore)) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_SCORE_HACK);
    }

    /*--------------------------------------------------
     *
     *  Anti Money Hack
     *   Usando GetPlayerMoney com variбveis server sided
     *   A precisгo deste sistema fica em torno de 100%
     *
    -------------------------------------------------*/


    if(GetPlayerScore(playerid) <  GetPVarInt(playerid, #registerMoney)) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_MONEY_HACK);
    }

    /*--------------------------------------------------
     *
     *  Anti No-Reload
     *   Usando GetWeaponState e GetWeaponAmmo
     *   A precisгo deste sistema fica em torno de 90%
     *
    -------------------------------------------------*/


    static keyTecla, keySetas;
    GetPlayerKeys(playerid, keyTecla, keySetas, keySetas);
    if(keyTecla == KEY_FIRE) {
        if(GetPlayerWeaponState(playerid) != 3) {
            if(GetPlayerAmmo(playerid) == GetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid)))) {

                SetPVarInt(playerid, "keyFire", GetPVarInt(playerid, "keyFire") +1);
                SetPVarInt(playerid, "keyTime", gettime());

                if(GetPVarInt(playerid, "keyFire") >= WEAPON_SLOT_HACK) {
                    SetPVarInt(playerid, #keyFire, 0);
                    CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_NORELOAD_HACK);
                }
            }
        }
        else {
            SetPVarInt(playerid, #keyFire, 0);
        }
    }

    /*--------------------------------------------------
     *
     *  Anti Weapons Hack - Weapons Ammo Hack
     *   Usando GetWeaponAmmo com variбveis server sided
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/


    if((GetPlayerAmmo(playerid) > (GetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid))) +100) > 0 || (GetPlayerAmmo(playerid) < 0 && GetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid))) < 9999))) {

        static intid;
        intid = GetPlayerInterior(playerid);

        if(intid != 1 && intid != 7 && intid != 4 && intid != 6) {
            if(GetPlayerAmmo(playerid) != 0 && gettime() - GetPVarInt(playerid, #ammoTime) > 1) {
                if(GetPVarInt(playerid, #warnAmmo) == WEAPON_SLOT_HACK) {
                    CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_AMMO_HACK);
                    SetPVarInt(playerid, #warnAmmo, 0);
                }
                SetPVarInt(playerid, #warnAmmo, GetPVarInt(playerid, #warnAmmo) +1);
            }
            else if(gettime() - GetPVarInt(playerid, #ammoTime) > 1) {
                CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_WEAPON_HACK);
            }
        }
        SetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid)), GetPlayerAmmo(playerid));
    }

    SetPVarInt(playerid, #registerMoney, GetPlayerMoney(playerid));
    SetPVarInt(playerid, #registerScore, GetPlayerScore(playerid));

    /*--------------------------------------------------
     *
     *  Anti Freeze Hack
     *   Usando GetPlayerPos com variбveis server sided
     *   A precisгo deste sistema fica em torno de 90%
     *
    -------------------------------------------------*/


    static Float:x, Float:y,Float:z;

    if(GetPVarInt(playerid, "PlayerControllable")) {
        GetPlayerPos(playerid, x, y, z);
        if((GetPVarFloat(playerid,"xposControll") != x) ||  (GetPVarFloat(playerid,"yposControll") != y) || (GetPVarFloat(playerid,"zposControll") != z)) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_FREEZE_HACK);
        }
    }
    else {

        GetPlayerPos(playerid, x, y, z);
        if(GetPVarFloat(playerid,"xposSet") != 0 && GetPVarFloat(playerid,"yposSet") != 0 && GetPVarFloat(playerid,"zposSet") != 0) {

            new Float:MAX_DISTANCE = MAX_DISTANCE_DEF;
           
            x = GetPVarFloat(playerid,"xposSet") - x;
            y = GetPVarFloat(playerid,"yposSet") - y;
            z = GetPVarFloat(playerid,"zposSet") - z;
           
            if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT && GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID){
                MAX_DISTANCE = 20.0;
            }
            if((x > MAX_DISTANCE || x < -MAX_DISTANCE ) || (y > MAX_DISTANCE  || y < -MAX_DISTANCE ) ||  (z > MAX_DISTANCE  || z < -MAX_DISTANCE )) {
                if(gettime() - GetPVarInt(playerid,"tposSet") > 3) {
               
                    GetPlayerPos(playerid, x, y, z);
                    SetPlayerPos(playerid, x, y, z + 1.0);
                   
                    SetTimerEx(#pCheckPos, 500, false, "ifff", playerid, x, y, z);
                }
            }
            MAX_DISTANCE = MAX_DISTANCE_DEF;
        }

        GetPlayerPos(playerid, x, y, z);
        SetPVarFloat(playerid,"xposSet", x);
        SetPVarFloat(playerid,"yposSet", y);
        SetPVarFloat(playerid,"zposSet", z);
    }

    return true;
}

pCheckPos(i, Float:x, Float:y, Float:z);
public pCheckPos(i, Float:x, Float:y, Float:z) {

    /*--------------------------------------------------
     *
     *  Anti Teleport Hack
     *   Usando GetPlayerPos com variбveis server sided
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/

       
    if(IsPlayerInRangeOfPoint(i, 2.012837, x, y, z)) {
        CallLocalFunction("OnPlayerHacking", "ii", i, PLAYER_TELEPORT_HACK);
    }
   
    /*--------------------------------------------------
     *
     *  Anti AirBreak Hack
     *   Usando GetPlayerPos e SetPlayerPos com variбveis server sided
     *   A precisгo deste sistema fica em torno de 95%
     *
    -------------------------------------------------*/

       
    else {
        CallLocalFunction("OnPlayerHacking", "ii", i, PLAYER_AIRBREAK_HACK);
    }
    return true;
}


public OnPlayerStateChange(playerid, newstate, oldstate)
{
    /*--------------------------------------------------
     *
     *  Anti State Hack
     *   Usando OnPlayerStateChange com gettime
     *   A precisгo deste sistema fica em torno de 95%
     *
    -------------------------------------------------*/


    if(newstate == PLAYER_STATE_DRIVER) {
        if(gettime() - GetPVarInt(playerid, #registerState) < 2) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_STATE_HACK);
        }
        SetPVarInt(playerid, #registerState, gettime());
    }
    return 1;
}


public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
{

    /*--------------------------------------------------
     *
     *  Anti Surfer Vehicle
     *   Usando OnUnoccupiedVehicleUpdate com gettime e outros
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/


    GetVehiclePos(vehicleid, g_ucPos[0], g_ucPos[1], g_ucPos[2]);

    if(IsPlayerInRangeOfPoint(playerid, 4.0, g_ucPos[0], g_ucPos[1], g_ucPos[2])) {
        GetVehicleZAngle(vehicleid, g_ucPos[3]);
        if(g_diferencasAngle[vehicleid] != g_ucPos[3]) {
            if(!IsPlayerInAnyVehicle(playerid)) {
                GetPlayerPos(vehicleid, g_ucPos[1], g_ucPos[1], g_ucPos[3]);
                if(g_ucPos[3] > g_ucPos[2]) {
                    SetPVarInt(playerid, #registrosUAF, GetPVarInt(playerid, #registrosUAF) +1);
                    if(GetPVarInt(playerid, #registrosUAF) > 15) {
                        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_SURF_VEHICLE);
                    }
                }
            }
        }
        g_diferencasAngle[vehicleid] = g_ucPos[3];
        return true;
    }

    /*--------------------------------------------------
     *
     *  Anti Teleport Vehicle
     *   Usando OnUnoccupiedVehicleUpdate com gettime e outros
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/


    else if(!IsPlayerInRangeOfPoint(playerid, 100.0, g_ucPos[0], g_ucPos[1], g_ucPos[2])) {
        if(!IsPlayerInAnyVehicle(playerid)) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_CAR_TELEPORT);
        }
    }
    return true;
}



#define GivePlayerMoney             GivePlayerMoney_Ex
#define SetPlayerScore              SetPlayerScore_Ex
#define PutPlayerInVehicle          PutPlayerInVehicle_Ex
#define PutPlayerInVehicle          PutPlayerInVehicle_Ex
#define SetPlayerArmour             SetPlayerArmour_Ex
#define SetPlayerHealth             SetPlayerHealth_Ex
#define TogglePlayerControllable    TogglePlayerControllable_Ex
#define GivePlayerWeapon            GivePlayerWeapon_Ex



/*
    Exemplo de uso para OnPlayerHacking
    INCLUDE AINDA NГO TERMINADA. FALTA CRIAR ITENS ANTI HACKINGS E HOOKEAR PUBLICAS !!!
*/

forward OnPlayerHacking(playerid, hackid);
public OnPlayerHacking(playerid, hackid) {

    if(hackid == PLAYER_BOT_LEVEL1) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv ");
        Kick(playerid);
    }
    if(hackid == PLAYER_BOT_LEVEL2) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv ");
        Kick(playerid);
    }
    if(hackid == PLAYER_BOT_LEVEL3) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv BAN ");
        BanEx(playerid, "fdppp");
    }

    if(hackid == PLAYER_DEATHFLOOD_LEVEL1 || PLAYER_DEATHFLOOD_LEVEL2 == hackid || PLAYER_DEATHFLOOD_LEVEL3 == hackid) {
        SendClientMessage(playerid, -1, "noob para de fake kill");
    }

    if(hackid == PLAYER_SURF_VEHICLE) {
        SendClientMessage(playerid, -1, "noob para de surf vehicle");
    }

    if(hackid == PLAYER_SURF_VEHICLE) {
        SendClientMessage(playerid, -1, "noob para de surf vehicle");
    }

    if(hackid == PLAYER_CAR_TELEPORT) {
        SendClientMessage(playerid, -1, "noob para de car teleport");
    }

    if(hackid == PLAYER_STATE_HACK) {
        SendClientMessage(playerid, -1, "noob para de state hack");
    }

    if(hackid == PLAYER_FREEZE_HACK) {
        SendClientMessage(playerid, -1, "noob para de freeze hack");
    }

    if(hackid == PLAYER_SCORE_HACK) {
        SendClientMessage(playerid, -1, "noob para de score hack");
    }

    if(hackid == PLAYER_MONEY_HACK) {
        SendClientMessage(playerid, -1, "noob para de money hack");
    }
    if(hackid == PLAYER_PUBLISH_TEXT) {
        SendClientMessage(playerid, -1, "ninguem quer entrar no teu sv noob");
    }
    if(hackid == PLAYER_OFFEND_TEXT) {
        SendClientMessage(playerid, -1, "vtnc, para de ofende os outros fdp");
    }
    if(hackid == PLAYER_FLOOD_TEXT) {
        SendClientMessage(playerid, -1, "calma ai mermгo, rlx cuca");
    }
    if(hackid == PLAYER_TELEPORT_HACK) {
        SendClientMessage(playerid, -1, "preguiзoso, USA CARRO mas nгo teleport !!1");
    }
    if(hackid == PLAYER_WEAPON_HACK) {
        SendClientMessage(playerid, -1, "nгo usa weapon hack po");
    }
    if(hackid == PLAYER_AMMO_HACK) {
        SendClientMessage(playerid, -1, "fdp nao usa ammo hack");
    }
    if(hackid == PLAYER_NORELOAD_HACK) {
        SendClientMessage(playerid, -1, "fdp nao usa no reload hack");
    }
    if(hackid == PLAYER_AIRBREAK_HACK) {
        SendClientMessage(playerid, -1, "fdp para de usa no airbreak hack");
    }

    return true;
}
O anti air break й bastante preciso. Mas sу detecta apуs uns 10 segundos que o jogador usou.

Se puder colaborarem com mais anti hackings. Eu estou contruindo o anti god car, god e regeneraзгo de vida. Mas existem muitos outros que ainda podem ser detectado. Dicas?
Reply
#9

уtimo trabalho, sempre inovando a board.


Sem dъvida digno de resp !
Reply
#10

Um detalhe:

pawn Код:
if(GetPlayerScore(playerid) <  GetPVarInt(playerid, #registerScore))

if(GetPlayerScore(playerid) <  GetPVarInt(playerid, #registerMoney))
Essas partes estгo erradas nгo й ?

@Edit

Outro detalhe:

No seu 'Anti Publicaзгo de IP Inteligente', vou dar um exemplo no meu GM, os telefones do meu GM tem o tamanho de 8 nъmeros, vai que ele digite o nъmero de telefone no texto, vai acusar que ele esta divulgando!
Reply
#11

Quote:
Originally Posted by paulor
View Post
Um detalhe:

pawn Code:
if(GetPlayerScore(playerid) <  GetPVarInt(playerid, #registerScore))

if(GetPlayerScore(playerid) <  GetPVarInt(playerid, #registerMoney))
Essas partes estгo erradas nгo й ?
Engraзado, eu ''estudei'' o code de cima atй em baixo e nгo percebi isso.
Kkkk'
Reply
#12

Arrumei o no-reload ..

pawn Code:
#include <a_samp>


////////////////////////////////////////////////////////////////////////////////
//
//
//        #### ########   ######     ######## ########    ###    ##     ##
//         ##  ##     ## ##    ##       ##    ##         ## ##   ###   ###
//         ##  ##     ## ##             ##    ##        ##   ##  #### ####
//         ##  ########   ######        ##    ######   ##     ## ## ### ##
//         ##  ##              ##       ##    ##       ######### ##     ##
//         ##  ##        ##    ##       ##    ##       ##     ## ##     ##
//        #### ##         ######        ##    ######## ##     ## ##     ##
//
//
//                    Criado por Bruno da Silva (iPs DraKiNs)
//
//          Acesse meu blog sobre programaзгo http://www.brunodasilva.com.br
//
//
//              -----------------------------------
//
//                  Detectar:
//                      bots, ataques
///                     fake kill
//                      flood chat
//                      publicacao chat
//                      ofensa chat
//                      freeze hack
//                      score hack
//                      money hack
//                      state hack
//                      car teleport
//                      anti ammo hack, noreload,
//                      anti weapon hack, high ping
//
//              ------------------------------------
//
//                 http://www.brunodasilva.com.br
//
//              Ingresse tambйm na [iPs]TeaM
//              wwww.ips-team.forumeiros.com
//
//////////////////////////////////////////////////////////////////////////////////

// ------------------------

#define Hook%0(%1) \
            stock %0_Ex(%1)

// ------------------------

#define varGet(%0) \
            getproperty(0,%0)

// ------------------------

#define varSet(%0,%1) \
            setproperty(0, %0, %1)


// --------------------------



enum {
    // Anti DDos Bots
    PLAYER_BOT_LEVEL3,
    PLAYER_BOT_LEVEL2,
    PLAYER_BOT_LEVEL1,

    // Anti Cleo4 Fake-kill
    PLAYER_DEATHFLOOD_LEVEL3,
    PLAYER_DEATHFLOOD_LEVEL2,
    PLAYER_DEATHFLOOD_LEVEL1,

    // Anti Bug Cars
    PLAYER_SURF_VEHICLE,
    PLAYER_CAR_TELEPORT,
    PLAYER_STATE_HACK,

    // Ammo Weapon
    PLAYER_NORELOAD_HACK,
    PLAYER_WEAPON_HACK,
    PLAYER_AMMO_HACK,


    // hackings
    PLAYER_FREEZE_HACK,
    PLAYER_SCORE_HACK,
    PLAYER_MONEY_HACK,

    // Text Chat
    PLAYER_PUBLISH_TEXT,
    PLAYER_OFFEND_TEXT,
    PLAYER_FLOOD_TEXT,

    // pos cheat
    PLAYER_TELEPORT_HACK,
    PLAYER_AIRBREAK_HACK,
   
    // outros
    PLAYER_HIGH_PING
}



#define INVALID_CHAT_BLOCK

#define MAX_STRING_CHAT     (128)

#define WEAPON_SLOT_HACK    (015)

#define SERVER_SIDE_DELAY   (002)

#define MAX_DISTANCE_DEF        (83.1)

#define MAX_PING            (800)


// =============================================================================
//
// OBSERVAЗхES IMPORTANTES:

// #define INVALID_CHAT_BLOCK
// Em caso de nгo quiser bloquear o texto em caso de texto invбlido
// Texto invбlido, spam, flood, palavreado, ofensa, publicaзгo. etc

// Ping acima de 1 segundo (1000 ms) poderб ocorrer graves problemas de precisгo no anti cheater.
// Em caso de ping muito elevado aconselha-se o uso de SERVER_SIDE_DELAY elevado para maior precisгo

// SERVER_SIDE_DELAY equivale ao tempo de delay entre o uso de uma funзгo registrada
// que influencia no detectamento do anti cheater. Aconselhбvel 1 a 5 segundos.
// Dependendo da conexгo do servidor vocк coloca maior delay ou menor dealay

// MAX_DISTANCE_DEF й essencial para busca e detecзгo de anti-teleport e air break
// O nъmero padrгo foi calculado e nгo houve bugs por parte do sistema
// A ъnica coisa que pode influenciar serб o sistema de SetPlayerPos. Mas o SERVER_SIDE_DELAY supriu isto com precisгo

// Este sistema apenas detecta cheaters. Й aconselhavйl a checagem de um administrador humano antes de aplicar o banimento.

// ========================================================================================================

new connect = -1;
new Float:g_ucPos[4];
new databaseIP[MAX_PLAYERS][20];
new Float:g_diferencasAngle[MAX_VEHICLES];


stock resetBot(o);
stock registerBot(p);
stock registrarJogador(playerid);

// ---------------------------------------------
//  Nesta parte aparecem funзхes hookeadas
//  Elas sгo essenciais para ter controle server-side detalhado
//  Essencial para qualquer anti-hack. Controle minucioso
// ---------------------------------------------

Hook GivePlayerMoney(playerid, value)
{
    return SetPVarInt(playerid, #registerMoney, GetPVarInt(playerid, #registerMoney) + value), GivePlayerMoney(playerid, value);
}


// ---------------------------------------------

Hook SetPlayerScore(playerid, value)
{
    return SetPVarInt(playerid, #registerScore, value), SetPlayerScore(playerid, value);
}


// ---------------------------------------------

Hook PutPlayerInVehicle(playerid,vehicleid,seatid)
{
    return SetPVarInt(playerid, #registerState, gettime()-SERVER_SIDE_DELAY), PutPlayerInVehicle(playerid, vehicleid, seatid);
}


// ---------------------------------------------

Hook SetPlayerPos(playerid,Float:x,Float:y,Float:z)
{

    return SetPVarInt(playerid,"tposSet", gettime()), SetPlayerPos(playerid, x, y, z);
}


Hook GivePlayerWeapon(playerid, weaponid, ammo)
{
    return SetPVarInt(playerid, #ammoTime, gettime()), GivePlayerWeapon(playerid, weaponid, ammo), SetPVarInt(playerid, getWeaponNameID(weaponid), ammo + GetPVarInt(playerid, getWeaponNameID(weaponid)));
}


stock getWeaponNameID(id)
{
    static stringWeapon[12];
    return format(stringWeapon, 12, "wepid%d", id), stringWeapon;
}


// ---------------------------------------------

Hook TogglePlayerControllable(playerid, bool:control)
{

    if(control) {

        static Float:x, Float:y, Float:z;

        GetPlayerPos(playerid,x, y, z);
        SetPVarFloat(playerid,"xposControll", x),
            SetPVarFloat(playerid,"yposControll", y),
            SetPVarFloat(playerid,"zposControll", z);
    }
    else {
        SetPVarFloat(playerid,"xposControll", 0.0);
        SetPVarFloat(playerid,"yposControll", 0.0);
        SetPVarFloat(playerid,"zposControll", 0.0);
    }

    return SetPVarInt(playerid, "PlayerControllable", _:control), TogglePlayerControllable(playerid, control);
}


// ---------------------------------------------

Hook SetPlayerHealth(playerid, Float:health)
{
    return SetPVarFloat(playerid,"healthServerside", health), SetPlayerHealth(playerid, health);
}


// ---------------------------------------------

Hook SetPlayerArmour(playerid, Float:armour)
{
    return SetPVarFloat(playerid,"armourServerside", armour), SetPlayerArmour(playerid, armour);
}


// ---------------------------------------------

public OnPlayerConnect(playerid)
{
    // registrar conexгo logo que o jogador entra
    return registrarJogador(playerid);
}


public OnFilterScriptInit()
{
    // parte importante para registrar cada jogador em timers e variбveis no inicio do game mode
    // em caso de reloadfs / loadfs
    for(new i; i != MAX_PLAYERS; i++) if(IsPlayerConnected(i)) registrarJogador(i);
}


public OnPlayerDisconnect(playerid, reason)
{
    // Nгo retire estб parte. Isto serve para nгo enviar mensagens de desconecзгo quando o player й bot ddos
    if(GetPVarInt(playerid, #jogadorDisponivel)) return false;
    return true;
}

stock armaBranca(armaid) {
    switch(armaid) {
        case 16,17,18,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43: return false;
    }
    return true;
}


new const palavreado[][24] = {
    "daputa","babaca","baitola","piranha","bicha","bichona","biscat","bitch","bix", "boiola","boiolona","buceta","bucetudo","cuzona","bund","burr","fude","cacet",
    "viad","caral","vadi","carai","rola","chup","idiot","corno","nocu","eucu""ocu","cusa","cusi","cuza","cuzinho","piroca","embecil","fdp","foda",
    "fode","fuck","fud","hetard","homo","imbess","jegu","kacet","karai","karaleo","kct","kral", "krl","noku","lasarent","lazarent","mula","otari","pnc","pereb","penis","pint","prosti","punhet",
    "put","retardado","tnc","viad","viadi","vsf","vtnc","sobe","vogelz","baranga", "vagab","broxa","ignorant","comed",
    "ejacu","prosti","cachorr", "surub","peni","chup","pau","viad","perere", "bucet","bicha.","bixa","gay","desgra", "troxa", "tomanocu", "seucu"
};

public OnPlayerText(playerid, text[])
{

    /*--------------------------------------------------
     *
     *  Anti Publicaзгo de IP Inteligente
     *   Usando OnPlayerText com manipulaзгo de strings e outros
     *   A precisгo deste sistema estб em torno de 95%
     *
     * Detecta: 127.0.0.1 | 1 2    7 .   0  0 1 etc
    -------------------------------------------------*/


    static szText[MAX_STRING_CHAT], numerosNochat, j;

    numerosNochat = -1, j = -1;
    for(new i; text[i]; i++) {
        if(text[i] >= '0' && '9' >= text[i]) {
            numerosNochat ++ ;
            if(numerosNochat >= 8) {
                CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_PUBLISH_TEXT);
                #if defined INVALID_CHAT_BLOCK
                return false;
                #endif

            }
        }
        switch(text[i]) {
            case '0':{ szText[j] = 'o'; j++; continue; }
            case '1':{ szText[j] = 'i'; j++; continue; }
            case '2':{ szText[j] = 'z'; j++; continue; }
            case '3':{ szText[j] = 'e'; j++; continue; }
            case '4':{ szText[j] = 'a'; j++; continue; }
            case '5':{ szText[j] = 's'; j++; continue; }
            case '6':{ szText[j] = 'g'; j++; continue; }
            case '7':{ szText[j] = 't'; j++; continue; }
            case '8':{ szText[j] = 'b'; j++; continue; }
            case 65 .. 90, 97 .. 122: { szText[j] = tolower(text[i]); j++; continue; }
        }
    }

    /*--------------------------------------------------
     *
     *  Anti Palavreado Inteligente
     *   Usando OnPlayerText com manipulaзгo de strings e outros
     *   A precisгo deste sistema estб em torno de 85%
     *
     * Detecta: buceta, b - u c |e t-a, buc 3 7 4 etc
    -------------------------------------------------*/


    for(new i = 0; i < sizeof(palavreado); i++) {
        if(strfind(szText, palavreado[i], false) != -1) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_OFFEND_TEXT);
            #if defined INVALID_CHAT_BLOCK
            return false;
            #endif
        }
    }

    /*--------------------------------------------------
     *
     *  Anti Flood
     *   Usando OnPlayerText com gettime e outros
     *   A precisгo deste sistema estб em torno de 95%
     *
    -------------------------------------------------*/


    if(gettime() - GetPVarInt(playerid, #floodChat) < 3) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_FLOOD_TEXT);
        #if defined INVALID_CHAT_BLOCK
        return false;
        #endif
    }

    SetPVarInt(playerid, #floodChat, gettime());
    return true;
}


public resetBot(o)
{
    varSet(databaseIP[o],0);
    return databaseIP[o][0] = EOS;
}


public registerBot(p)
{

    /*--------------------------------------------------
     *
     *  Anti DDos Bots
     *   Usando GetPlayerPing/OnPlayerConnect com gettime e outros
     *   A precisгo deste sistema estб dividido em partes
     *
     *  PLAYER_BOT_LEVEL1 -> 70%
     *  PLAYER_BOT_LEVEL2 -> 90%
     *  PLAYER_BOT_LEVEL3 -> 100%
     *
     *
    -------------------------------------------------*/


    if(GetPlayerPing(p) != 0xffff && GetPlayerPing(p)  != 0) SetPVarInt(p, #jogadorDisponivel, 1);
    if(IsPlayerConnected(p) && GetPlayerPing(p)  == 0xffff) {
        static tmpip[20];
        GetPlayerIp(p, tmpip, 20);
        if(0x1c5 > gettime() - varGet(tmpip)) {
            tmpip[strlen(tmpip)-1] = 'x';
            if(varGet(tmpip) > 3) {
                return CallLocalFunction("OnPlayerHacking", "ii", p, PLAYER_BOT_LEVEL3);
            }
            CallLocalFunction("OnPlayerHacking", "ii", p, PLAYER_BOT_LEVEL2);
        }
        CallLocalFunction("OnPlayerHacking", "ii", p, PLAYER_BOT_LEVEL1);
        SetTimerEx("registerBot", 700, false, #i , p);
    }
    return false;
}



public registrarJogador(playerid)
{

    static tmpip[20];
    g_diferencasAngle[playerid] = 0;
    GetPlayerIp(playerid, tmpip, 20);
    varSet(tmpip, gettime()); ++connect;

    if(connect == MAX_PLAYERS - 1) {
        for(connect = 0; databaseIP[connect][0]; connect++) continue;
    }
    SetTimerEx("resetBot", 50000, false, "i", connect);

    tmpip[strlen(tmpip)-1] = 'x';
    format(databaseIP[connect], 20, tmpip);
    varSet(tmpip, varGet(tmpip) +1);

    SetTimerEx(#pdataCheck, 1000, true, "i", playerid);
    return SetTimerEx("registerBot", 700, false, #i , playerid);
}


public OnPlayerDeath(playerid,killerid,reason)
{

    /*--------------------------------------------------
     *
     *  Anti Fake Kill
     *   Usando OnPlayerDeath com gettime e outros
     *   A precisгo deste sistema estб dividido em partes
     *
     *  PLAYER_DEATHFLOOD_LEVEL1 -> 070%
     *  PLAYER_DEATHFLOOD_LEVEL2 -> 090%
     *  PLAYER_DEATHFLOOD_LEVEL3 -> 100%
     *
     *
    -------------------------------------------------*/


    if(gettime() - GetPVarInt(playerid, #registerDeath) < 20) {
        if(GetPVarInt(playerid, #registerValDeath) > 15) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_DEATHFLOOD_LEVEL1);
        }
        if(gettime() - GetPVarInt(playerid, #registerDeath) < 2) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_DEATHFLOOD_LEVEL2);
        }
        if(gettime() - GetPVarInt(playerid, #registerDeath) < 5) {
            if(GetPVarInt(playerid, #registerValDeath) > 3) {
                CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_DEATHFLOOD_LEVEL3);
            }
        }
    }
    SetPVarInt(playerid, #registerDeath, gettime());
    SetPVarInt(playerid, #registerValDeath, GetPVarInt(playerid, #registerValDeath) +1);
    return true;
}




public OnPlayerUpdate(playerid)
{

    /*--------------------------------------------------
     *
     *  Anti Ping Alto
     *   Usando GetPlayerScore com variбveis server sided
     *   A precisгo deste sistema fica em torno de 90%
     *
    -------------------------------------------------*/


    if(GetPlayerPing(playerid) > MAX_PING) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_HIGH_PING);
    }

    /*--------------------------------------------------
     *
     *  Anti Score Hack
     *   Usando GetPlayerScore com variбveis server sided
     *   A precisгo deste sistema fica em torno de 100%
     *
    -------------------------------------------------*/


    if(GetPlayerScore(playerid) <  GetPVarInt(playerid, #registerScore)) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_SCORE_HACK);
    }

    /*--------------------------------------------------
     *
     *  Anti Money Hack
     *   Usando GetPlayerMoney com variбveis server sided
     *   A precisгo deste sistema fica em torno de 100%
     *
    -------------------------------------------------*/


    if(GetPlayerMoney(playerid) <  GetPVarInt(playerid, #registerMoney)) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_MONEY_HACK);
    }

    static armaJogador;
    armaJogador = GetPlayerWeapon(playerid);


    /*--------------------------------------------------
     *
     *  Anti Weapons Hack - Weapons Ammo Hack
     *   Usando GetWeaponAmmo com variбveis server sided
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/


    if(!armaBranca(armaJogador) && (GetPVarInt(playerid, getWeaponNameID(armaJogador)) == 0 && GetPlayerAmmo(playerid) > 1 || (GetPlayerAmmo(playerid) > (GetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid))) +10) > 0 || (GetPlayerAmmo(playerid) < 0 && GetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid))) < 9999)))) {

        static intid;
        intid = GetPlayerInterior(playerid);

        if(intid != 1 && intid != 7 && intid != 4 && intid != 6) {
            if(GetPVarInt(playerid, getWeaponNameID(armaJogador)) == 0 && gettime() - GetPVarInt(playerid, #ammoTime) > 1) {
                if(GetPVarInt(playerid, #warnAmmo) == WEAPON_SLOT_HACK) {
                    CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_AMMO_HACK);
                    SetPVarInt(playerid, #warnAmmo, 0);
                    SetPVarInt(playerid, getWeaponNameID(armaJogador), GetPlayerAmmo(playerid));
                }
                SetPVarInt(playerid, #warnAmmo, GetPVarInt(playerid, #warnAmmo) +1);
            }
            else if((gettime() - GetPVarInt(playerid, #ammoTime)) > 1) {
                CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_WEAPON_HACK);
                SetPVarInt(playerid, #warnAmmo, 0);
                SetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid)), GetPlayerAmmo(playerid));
            }
        }
        else {
            SetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid)), GetPlayerAmmo(playerid));
        }
    }

    SetPVarInt(playerid, #registerMoney, GetPlayerMoney(playerid));
    SetPVarInt(playerid, #registerScore, GetPlayerScore(playerid));

    /*--------------------------------------------------
     *
     *  Anti Freeze Hack
     *   Usando GetPlayerPos com variбveis server sided
     *   A precisгo deste sistema fica em torno de 90%
     *
    -------------------------------------------------*/


    static Float:x, Float:y,Float:z;

    if(GetPVarInt(playerid, "PlayerControllable")) {
        GetPlayerPos(playerid, x, y, z);
        if((GetPVarFloat(playerid,"xposControll") != x) ||  (GetPVarFloat(playerid,"yposControll") != y) || (GetPVarFloat(playerid,"zposControll") != z)) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_FREEZE_HACK);
        }
    }
    else {

        GetPlayerPos(playerid, x, y, z);
        if(GetPVarFloat(playerid,"xposSet") != 0 && GetPVarFloat(playerid,"yposSet") != 0 && GetPVarFloat(playerid,"zposSet") != 0) {

            new Float:MAX_DISTANCE = MAX_DISTANCE_DEF;
           
            x = GetPVarFloat(playerid,"xposSet") - x;
            y = GetPVarFloat(playerid,"yposSet") - y;
            z = GetPVarFloat(playerid,"zposSet") - z;
           
            if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT && GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID){
                MAX_DISTANCE = 20.0;
            }
            if((x > MAX_DISTANCE || x < -MAX_DISTANCE ) || (y > MAX_DISTANCE  || y < -MAX_DISTANCE ) ||  (z > MAX_DISTANCE  || z < -MAX_DISTANCE )) {
                if(gettime() - GetPVarInt(playerid,"tposSet") > 3) {
               
                    GetPlayerPos(playerid, x, y, z);
                    SetPlayerPos(playerid, x, y, z + 1.0);
                   
                    SetTimerEx(#pCheckPos, 500, false, "ifff", playerid, x, y, z);
                }
            }
            MAX_DISTANCE = MAX_DISTANCE_DEF;
        }

        GetPlayerPos(playerid, x, y, z);
        SetPVarFloat(playerid,"xposSet", x);
        SetPVarFloat(playerid,"yposSet", y);
        SetPVarFloat(playerid,"zposSet", z);
    }

    return true;
}

pCheckPos(i, Float:x, Float:y, Float:z);
public pCheckPos(i, Float:x, Float:y, Float:z) {

    /*--------------------------------------------------
     *
     *  Anti Teleport Hack
     *   Usando GetPlayerPos com variбveis server sided
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/

       
    if(IsPlayerInRangeOfPoint(i, 2.012837, x, y, z)) {
        CallLocalFunction("OnPlayerHacking", "ii", i, PLAYER_TELEPORT_HACK);
    }
   
    /*--------------------------------------------------
     *
     *  Anti AirBreak Hack
     *   Usando GetPlayerPos e SetPlayerPos com variбveis server sided
     *   A precisгo deste sistema fica em torno de 95%
     *
    -------------------------------------------------*/

       
    else {
        CallLocalFunction("OnPlayerHacking", "ii", i, PLAYER_AIRBREAK_HACK);
    }
    return true;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {

    /*--------------------------------------------------
     *
     *  Anti No-Reload
     *   Usando GetWeaponState e GetWeaponAmmo
     *   A precisгo deste sistema fica em torno de 90%
     *
    -------------------------------------------------*/

   
    static armaJogador;
    armaJogador = GetPlayerWeapon(playerid);
   
    if((((newkeys & (KEY_FIRE)) == (KEY_FIRE)) && ((oldkeys & (KEY_FIRE)) != (KEY_FIRE)))) {
        if(GetPlayerWeaponState(playerid) != 3) {
            if(!armaBranca(armaJogador) && GetPlayerAmmo(playerid) == GetPVarInt(playerid, getWeaponNameID(armaJogador))) {

                SetPVarInt(playerid, "keyFire", GetPVarInt(playerid, "keyFire") +1);

                if(GetPVarInt(playerid, "keyFire") >= WEAPON_SLOT_HACK) {
                    SetPVarInt(playerid, #keyFire, 0);
                    CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_NORELOAD_HACK);
                }
            }
        }
        else {
            SetPVarInt(playerid, #keyFire, 0);
        }
    }
    return true;
}



public OnPlayerStateChange(playerid, newstate, oldstate)
{
    /*--------------------------------------------------
     *
     *  Anti State Hack
     *   Usando OnPlayerStateChange com gettime
     *   A precisгo deste sistema fica em torno de 95%
     *
    -------------------------------------------------*/


    if(newstate == PLAYER_STATE_DRIVER) {
        if(gettime() - GetPVarInt(playerid, #registerState) < 2) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_STATE_HACK);
        }
        SetPVarInt(playerid, #registerState, gettime());
    }
    return 1;
}


public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
{

    /*--------------------------------------------------
     *
     *  Anti Surfer Vehicle
     *   Usando OnUnoccupiedVehicleUpdate com gettime e outros
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/


    GetVehiclePos(vehicleid, g_ucPos[0], g_ucPos[1], g_ucPos[2]);

    if(IsPlayerInRangeOfPoint(playerid, 4.0, g_ucPos[0], g_ucPos[1], g_ucPos[2])) {
        GetVehicleZAngle(vehicleid, g_ucPos[3]);
        if(g_diferencasAngle[vehicleid] != g_ucPos[3]) {
            if(!IsPlayerInAnyVehicle(playerid)) {
                GetPlayerPos(vehicleid, g_ucPos[1], g_ucPos[1], g_ucPos[3]);
                if(g_ucPos[3] > g_ucPos[2]) {
                    SetPVarInt(playerid, #registrosUAF, GetPVarInt(playerid, #registrosUAF) +1);
                    if(GetPVarInt(playerid, #registrosUAF) > 15) {
                        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_SURF_VEHICLE);
                    }
                }
            }
        }
        g_diferencasAngle[vehicleid] = g_ucPos[3];
        return true;
    }

    /*--------------------------------------------------
     *
     *  Anti Teleport Vehicle
     *   Usando OnUnoccupiedVehicleUpdate com gettime e outros
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/


    else if(!IsPlayerInRangeOfPoint(playerid, 100.0, g_ucPos[0], g_ucPos[1], g_ucPos[2])) {
        if(!IsPlayerInAnyVehicle(playerid)) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_CAR_TELEPORT);
        }
    }
    return true;
}



#define GivePlayerMoney             GivePlayerMoney_Ex
#define SetPlayerScore              SetPlayerScore_Ex
#define PutPlayerInVehicle          PutPlayerInVehicle_Ex
#define PutPlayerInVehicle          PutPlayerInVehicle_Ex
#define SetPlayerArmour             SetPlayerArmour_Ex
#define SetPlayerHealth             SetPlayerHealth_Ex
#define TogglePlayerControllable    TogglePlayerControllable_Ex
#define GivePlayerWeapon            GivePlayerWeapon_Ex



/*
    Exemplo de uso para OnPlayerHacking
    INCLUDE AINDA NГO TERMINADA. FALTA CRIAR ITENS ANTI HACKINGS E HOOKEAR PUBLICAS !!!
*/

forward OnPlayerHacking(playerid, hackid);
public OnPlayerHacking(playerid, hackid) {

    if(hackid == PLAYER_BOT_LEVEL1) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv ");
        Kick(playerid);
    }
    if(hackid == PLAYER_BOT_LEVEL2) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv ");
        Kick(playerid);
    }
    if(hackid == PLAYER_BOT_LEVEL3) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv BAN ");
        BanEx(playerid, "fdppp");
    }

    if(hackid == PLAYER_DEATHFLOOD_LEVEL1 || PLAYER_DEATHFLOOD_LEVEL2 == hackid || PLAYER_DEATHFLOOD_LEVEL3 == hackid) {
        SendClientMessage(playerid, -1, "noob para de fake kill");
    }

    if(hackid == PLAYER_SURF_VEHICLE) {
        SendClientMessage(playerid, -1, "noob para de surf vehicle");
    }

    if(hackid == PLAYER_SURF_VEHICLE) {
        SendClientMessage(playerid, -1, "noob para de surf vehicle");
    }

    if(hackid == PLAYER_CAR_TELEPORT) {
        SendClientMessage(playerid, -1, "noob para de car teleport");
    }

    if(hackid == PLAYER_STATE_HACK) {
        SendClientMessage(playerid, -1, "noob para de state hack");
    }

    if(hackid == PLAYER_FREEZE_HACK) {
        SendClientMessage(playerid, -1, "noob para de freeze hack");
    }

    if(hackid == PLAYER_SCORE_HACK) {
        SendClientMessage(playerid, -1, "noob para de score hack");
    }

    if(hackid == PLAYER_MONEY_HACK) {
        SendClientMessage(playerid, -1, "noob para de money hack");
    }
    if(hackid == PLAYER_PUBLISH_TEXT) {
        SendClientMessage(playerid, -1, "ninguem quer entrar no teu sv noob");
    }
    if(hackid == PLAYER_OFFEND_TEXT) {
        SendClientMessage(playerid, -1, "vtnc, para de ofende os outros fdp");
    }
    if(hackid == PLAYER_FLOOD_TEXT) {
        SendClientMessage(playerid, -1, "calma ai mermгo, rlx cuca");
    }
    if(hackid == PLAYER_TELEPORT_HACK) {
        SendClientMessage(playerid, -1, "preguiзoso, USA CARRO mas nгo teleport !!1");
    }
    if(hackid == PLAYER_WEAPON_HACK) {
        SendClientMessage(playerid, -1, "nгo usa weapon hack po");
    }
    if(hackid == PLAYER_AMMO_HACK) {
        SendClientMessage(playerid, -1, "fdp nao usa ammo hack");
    }
    if(hackid == PLAYER_NORELOAD_HACK) {
        SendClientMessage(playerid, -1, "fdp nao usa no reload hack");
    }
    if(hackid == PLAYER_AIRBREAK_HACK) {
        SendClientMessage(playerid, -1, "fdp para de usa no airbreak hack");
    }

    return true;
}
Acho que atй dia 15/07/2012 eu publico a versгo final pronta ..

Quote:

Outro detalhe:

No seu 'Anti Publicaзгo de IP Inteligente', vou dar um exemplo no meu GM, os telefones do meu GM tem o tamanho de 8 nъmeros, vai que ele digite o nъmero de telefone no texto, vai acusar que ele esta divulgando!

Sim й verdade. Sinto muito, mas vai ficar assim
Reply
#13

Eu nгo lenbro o nome mais sei como funciona ,

й um Mod Cl...

Quem tem o mod consegue dirigir o carro do outro , isso atrapalha muito ^^

Nгo sei se voce ja pois esse, tem tambem o de Bugar um jogador e aparece a mensagem Stay within world acho que й isso.

Mais esse do Bug se voce Simplismente voltar a seleзгo de classe ou morrer, mais й cahto voce ta em um x1 o cara te buga ou atй no drift o cara comeзa dirigr teu carro '-'
Reply
#14

Quote:
Originally Posted by BreakDriFT
View Post
Eu nгo lenbro o nome mais sei como funciona ,

й um Mod Cl...

Quem tem o mod consegue dirigir o carro do outro , isso atrapalha muito ^^

Nгo sei se voce ja pois esse, tem tambem o de Bugar um jogador e aparece a mensagem stay in the world acho que й isso.
Quote:

Nгo sei se voce ja pois esse, tem tambem o de Bugar um jogador e aparece a mensagem stay in the world acho que й isso.

Esse de bugar o jogador й teleporte. Jб estб adicionado o modo de jogo. Mas detectar antes de ele bugar o outro jogador, й impossнvel.

Estou meio com dor de cabeзa hoje (dias sem dormir, tenso olha hora dos posts), vou deitar e assistir tv. Se eu falei alguma asneira aqui me desculpem

Vou lб, flw

-

Break me manda o mod por mp. Eu vou estudar ele para ver se pode fazer uma engenharia reversa aн, se for necessбrio faзo atй um disassembly nele para melhores resultados
Reply
#15

pawn Code:
if(GetPlayerScore(playerid) <  GetPVarInt(playerid, #registerScore)) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_SCORE_HACK);
    }

    if(GetPlayerMoney(playerid) <  GetPVarInt(playerid, #registerMoney)) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_MONEY_HACK);
    }
Ae bruno seria '>' ali e nгo '<', se nгo porque o cara iria querer diminuir o seu dinheiro e seu lvl ? nгo faz sentido neh!
Reply
#16

Й, estou meio ruim hoje e deixo algumas coisa passar. Valeu por avisar amigo

pawn Code:
#include <a_samp>


////////////////////////////////////////////////////////////////////////////////
//
//
//        #### ########   ######     ######## ########    ###    ##     ##
//         ##  ##     ## ##    ##       ##    ##         ## ##   ###   ###
//         ##  ##     ## ##             ##    ##        ##   ##  #### ####
//         ##  ########   ######        ##    ######   ##     ## ## ### ##
//         ##  ##              ##       ##    ##       ######### ##     ##
//         ##  ##        ##    ##       ##    ##       ##     ## ##     ##
//        #### ##         ######        ##    ######## ##     ## ##     ##
//
//
//                    Criado por Bruno da Silva (iPs DraKiNs)
//
//          Acesse meu blog sobre programaзгo http://www.brunodasilva.com.br
//
//
//              -----------------------------------
//
//                  Detectar:
//                      bots, ataques
///                     fake kill
//                      flood chat
//                      publicacao chat
//                      ofensa chat
//                      freeze hack
//                      score hack
//                      money hack
//                      state hack
//                      car teleport
//                      anti ammo hack, noreload,
//                      anti weapon hack, high ping
//
//              ------------------------------------
//
//                 http://www.brunodasilva.com.br
//
//              Ingresse tambйm na [iPs]TeaM
//              wwww.ips-team.forumeiros.com
//
//////////////////////////////////////////////////////////////////////////////////

// ------------------------

#define Hook%0(%1) \
            stock %0_Ex(%1)

// ------------------------

#define varGet(%0) \
            getproperty(0,%0)

// ------------------------

#define varSet(%0,%1) \
            setproperty(0, %0, %1)


// --------------------------



enum {
    // Anti DDos Bots
    PLAYER_BOT_LEVEL3,
    PLAYER_BOT_LEVEL2,
    PLAYER_BOT_LEVEL1,

    // Anti Cleo4 Fake-kill
    PLAYER_DEATHFLOOD_LEVEL3,
    PLAYER_DEATHFLOOD_LEVEL2,
    PLAYER_DEATHFLOOD_LEVEL1,

    // Anti Bug Cars
    PLAYER_SURF_VEHICLE,
    PLAYER_CAR_TELEPORT,
    PLAYER_STATE_HACK,

    // Ammo Weapon
    PLAYER_NORELOAD_HACK,
    PLAYER_WEAPON_HACK,
    PLAYER_AMMO_HACK,


    // hackings
    PLAYER_FREEZE_HACK,
    PLAYER_SCORE_HACK,
    PLAYER_MONEY_HACK,

    // Text Chat
    PLAYER_PUBLISH_TEXT,
    PLAYER_OFFEND_TEXT,
    PLAYER_FLOOD_TEXT,

    // pos cheat
    PLAYER_TELEPORT_HACK,
    PLAYER_AIRBREAK_HACK,
   
    // outros
    PLAYER_HIGH_PING
}



#define INVALID_CHAT_BLOCK

#define MAX_STRING_CHAT     (128)

#define WEAPON_SLOT_HACK    (015)

#define SERVER_SIDE_DELAY   (002)

#define MAX_DISTANCE_DEF        (83.1)

#define MAX_PING            (800)


// =============================================================================
//
// OBSERVAЗхES IMPORTANTES:

// #define INVALID_CHAT_BLOCK
// Em caso de nгo quiser bloquear o texto em caso de texto invбlido
// Texto invбlido, spam, flood, palavreado, ofensa, publicaзгo. etc

// Ping acima de 1 segundo (1000 ms) poderб ocorrer graves problemas de precisгo no anti cheater.
// Em caso de ping muito elevado aconselha-se o uso de SERVER_SIDE_DELAY elevado para maior precisгo

// SERVER_SIDE_DELAY equivale ao tempo de delay entre o uso de uma funзгo registrada
// que influencia no detectamento do anti cheater. Aconselhбvel 1 a 5 segundos.
// Dependendo da conexгo do servidor vocк coloca maior delay ou menor dealay

// MAX_DISTANCE_DEF й essencial para busca e detecзгo de anti-teleport e air break
// O nъmero padrгo foi calculado e nгo houve bugs por parte do sistema
// A ъnica coisa que pode influenciar serб o sistema de SetPlayerPos. Mas o SERVER_SIDE_DELAY supriu isto com precisгo

// Este sistema apenas detecta cheaters. Й aconselhavйl a checagem de um administrador humano antes de aplicar o banimento.

// ========================================================================================================

new connect = -1;
new Float:g_ucPos[4];
new databaseIP[MAX_PLAYERS][20];
new Float:g_diferencasAngle[MAX_VEHICLES];


stock resetBot(o);
stock registerBot(p);
stock registrarJogador(playerid);

// ---------------------------------------------
//  Nesta parte aparecem funзхes hookeadas
//  Elas sгo essenciais para ter controle server-side detalhado
//  Essencial para qualquer anti-hack. Controle minucioso
// ---------------------------------------------

Hook GivePlayerMoney(playerid, value)
{
    return SetPVarInt(playerid, #registerMoney, GetPVarInt(playerid, #registerMoney) + value), GivePlayerMoney(playerid, value);
}


// ---------------------------------------------

Hook SetPlayerScore(playerid, value)
{
    return SetPVarInt(playerid, #registerScore, value), SetPlayerScore(playerid, value);
}


// ---------------------------------------------

Hook PutPlayerInVehicle(playerid,vehicleid,seatid)
{
    return SetPVarInt(playerid, #registerState, gettime()-SERVER_SIDE_DELAY), PutPlayerInVehicle(playerid, vehicleid, seatid);
}


// ---------------------------------------------

Hook SetPlayerPos(playerid,Float:x,Float:y,Float:z)
{

    return SetPVarInt(playerid,"tposSet", gettime()), SetPlayerPos(playerid, x, y, z);
}


Hook GivePlayerWeapon(playerid, weaponid, ammo)
{
    return SetPVarInt(playerid, #ammoTime, gettime()), GivePlayerWeapon(playerid, weaponid, ammo), SetPVarInt(playerid, getWeaponNameID(weaponid), ammo + GetPVarInt(playerid, getWeaponNameID(weaponid)));
}


stock getWeaponNameID(id)
{
    static stringWeapon[12];
    return format(stringWeapon, 12, "wepid%d", id), stringWeapon;
}


// ---------------------------------------------

Hook TogglePlayerControllable(playerid, bool:control)
{

    if(control) {

        static Float:x, Float:y, Float:z;

        GetPlayerPos(playerid,x, y, z);
        SetPVarFloat(playerid,"xposControll", x),
            SetPVarFloat(playerid,"yposControll", y),
            SetPVarFloat(playerid,"zposControll", z);
    }
    else {
        SetPVarFloat(playerid,"xposControll", 0.0);
        SetPVarFloat(playerid,"yposControll", 0.0);
        SetPVarFloat(playerid,"zposControll", 0.0);
    }

    return SetPVarInt(playerid, "PlayerControllable", _:control), TogglePlayerControllable(playerid, control);
}


// ---------------------------------------------

Hook SetPlayerHealth(playerid, Float:health)
{
    return SetPVarFloat(playerid,"healthServerside", health), SetPlayerHealth(playerid, health);
}


// ---------------------------------------------

Hook SetPlayerArmour(playerid, Float:armour)
{
    return SetPVarFloat(playerid,"armourServerside", armour), SetPlayerArmour(playerid, armour);
}


// ---------------------------------------------

public OnPlayerConnect(playerid)
{
    // registrar conexгo logo que o jogador entra
    return registrarJogador(playerid);
}


public OnFilterScriptInit()
{
    // parte importante para registrar cada jogador em timers e variбveis no inicio do game mode
    // em caso de reloadfs / loadfs
    for(new i; i != MAX_PLAYERS; i++) if(IsPlayerConnected(i)) registrarJogador(i);
}


public OnPlayerDisconnect(playerid, reason)
{
    // Nгo retire estб parte. Isto serve para nгo enviar mensagens de desconecзгo quando o player й bot ddos
    if(GetPVarInt(playerid, #jogadorDisponivel)) return false;
    return true;
}

stock armaBranca(armaid) {
    switch(armaid) {
        case 16,17,18,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43: return false;
    }
    return true;
}


new const palavreado[][24] = {
    "daputa","babaca","baitola","piranha","bicha","bichona","biscat","bitch","bix", "boiola","boiolona","buceta","bucetudo","cuzona","bund","burr","fude","cacet",
    "viad","caral","vadi","carai","rola","chup","idiot","corno","nocu","eucu""ocu","cusa","cusi","cuza","cuzinho","piroca","embecil","fdp","foda",
    "fode","fuck","fud","hetard","homo","imbess","jegu","kacet","karai","karaleo","kct","kral", "krl","noku","lasarent","lazarent","mula","otari","pnc","pereb","penis","pint","prosti","punhet",
    "put","retardado","tnc","viad","viadi","vsf","vtnc","sobe","vogelz","baranga", "vagab","broxa","ignorant","comed",
    "ejacu","prosti","cachorr", "surub","peni","chup","pau","viad","perere", "bucet","bicha.","bixa","gay","desgra", "troxa", "tomanocu", "seucu"
};

public OnPlayerText(playerid, text[])
{

    /*--------------------------------------------------
     *
     *  Anti Publicaзгo de IP Inteligente
     *   Usando OnPlayerText com manipulaзгo de strings e outros
     *   A precisгo deste sistema estб em torno de 95%
     *
     * Detecta: 127.0.0.1 | 1 2    7 .   0  0 1 etc
    -------------------------------------------------*/


    static szText[MAX_STRING_CHAT], numerosNochat, j;

    numerosNochat = -1, j = -1;
    for(new i; text[i]; i++) {
        if(text[i] >= '0' && '9' >= text[i]) {
            numerosNochat ++ ;
            if(numerosNochat >= 8) {
                CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_PUBLISH_TEXT);
                #if defined INVALID_CHAT_BLOCK
                return false;
                #endif

            }
        }
        switch(text[i]) {
            case '0':{ szText[j] = 'o'; j++; continue; }
            case '1':{ szText[j] = 'i'; j++; continue; }
            case '2':{ szText[j] = 'z'; j++; continue; }
            case '3':{ szText[j] = 'e'; j++; continue; }
            case '4':{ szText[j] = 'a'; j++; continue; }
            case '5':{ szText[j] = 's'; j++; continue; }
            case '6':{ szText[j] = 'g'; j++; continue; }
            case '7':{ szText[j] = 't'; j++; continue; }
            case '8':{ szText[j] = 'b'; j++; continue; }
            case 65 .. 90, 97 .. 122: { szText[j] = tolower(text[i]); j++; continue; }
        }
    }

    /*--------------------------------------------------
     *
     *  Anti Palavreado Inteligente
     *   Usando OnPlayerText com manipulaзгo de strings e outros
     *   A precisгo deste sistema estб em torno de 85%
     *
     * Detecta: buceta, b - u c |e t-a, buc 3 7 4 etc
    -------------------------------------------------*/


    for(new i = 0; i < sizeof(palavreado); i++) {
        if(strfind(szText, palavreado[i], false) != -1) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_OFFEND_TEXT);
            #if defined INVALID_CHAT_BLOCK
            return false;
            #endif
        }
    }

    /*--------------------------------------------------
     *
     *  Anti Flood
     *   Usando OnPlayerText com gettime e outros
     *   A precisгo deste sistema estб em torno de 95%
     *
    -------------------------------------------------*/


    if(gettime() - GetPVarInt(playerid, #floodChat) < 3) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_FLOOD_TEXT);
        #if defined INVALID_CHAT_BLOCK
        return false;
        #endif
    }

    SetPVarInt(playerid, #floodChat, gettime());
    return true;
}


public resetBot(o)
{
    varSet(databaseIP[o],0);
    return databaseIP[o][0] = EOS;
}


public registerBot(p)
{

    /*--------------------------------------------------
     *
     *  Anti DDos Bots
     *   Usando GetPlayerPing/OnPlayerConnect com gettime e outros
     *   A precisгo deste sistema estб dividido em partes
     *
     *  PLAYER_BOT_LEVEL1 -> 70%
     *  PLAYER_BOT_LEVEL2 -> 90%
     *  PLAYER_BOT_LEVEL3 -> 100%
     *
     *
    -------------------------------------------------*/


    if(GetPlayerPing(p) != 0xffff && GetPlayerPing(p)  != 0) SetPVarInt(p, #jogadorDisponivel, 1);
    if(IsPlayerConnected(p) && GetPlayerPing(p)  == 0xffff) {
        static tmpip[20];
        GetPlayerIp(p, tmpip, 20);
        if(0x1c5 > gettime() - varGet(tmpip)) {
            tmpip[strlen(tmpip)-1] = 'x';
            if(varGet(tmpip) > 3) {
                return CallLocalFunction("OnPlayerHacking", "ii", p, PLAYER_BOT_LEVEL3);
            }
            CallLocalFunction("OnPlayerHacking", "ii", p, PLAYER_BOT_LEVEL2);
        }
        CallLocalFunction("OnPlayerHacking", "ii", p, PLAYER_BOT_LEVEL1);
        SetTimerEx("registerBot", 700, false, #i , p);
    }
    return false;
}



public registrarJogador(playerid)
{

    static tmpip[20];
    g_diferencasAngle[playerid] = 0;
    GetPlayerIp(playerid, tmpip, 20);
    varSet(tmpip, gettime()); ++connect;

    if(connect == MAX_PLAYERS - 1) {
        for(connect = 0; databaseIP[connect][0]; connect++) continue;
    }
    SetTimerEx("resetBot", 50000, false, "i", connect);

    tmpip[strlen(tmpip)-1] = 'x';
    format(databaseIP[connect], 20, tmpip);
    varSet(tmpip, varGet(tmpip) +1);

    SetTimerEx(#pdataCheck, 1000, true, "i", playerid);
    return SetTimerEx("registerBot", 700, false, #i , playerid);
}


public OnPlayerDeath(playerid,killerid,reason)
{

    /*--------------------------------------------------
     *
     *  Anti Fake Kill
     *   Usando OnPlayerDeath com gettime e outros
     *   A precisгo deste sistema estб dividido em partes
     *
     *  PLAYER_DEATHFLOOD_LEVEL1 -> 070%
     *  PLAYER_DEATHFLOOD_LEVEL2 -> 090%
     *  PLAYER_DEATHFLOOD_LEVEL3 -> 100%
     *
     *
    -------------------------------------------------*/


    if(gettime() - GetPVarInt(playerid, #registerDeath) < 20) {
        if(GetPVarInt(playerid, #registerValDeath) > 15) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_DEATHFLOOD_LEVEL1);
        }
        if(gettime() - GetPVarInt(playerid, #registerDeath) < 2) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_DEATHFLOOD_LEVEL2);
        }
        if(gettime() - GetPVarInt(playerid, #registerDeath) < 5) {
            if(GetPVarInt(playerid, #registerValDeath) > 3) {
                CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_DEATHFLOOD_LEVEL3);
            }
        }
    }
    SetPVarInt(playerid, #registerDeath, gettime());
    SetPVarInt(playerid, #registerValDeath, GetPVarInt(playerid, #registerValDeath) +1);
    return true;
}




public OnPlayerUpdate(playerid)
{

    /*--------------------------------------------------
     *
     *  Anti Ping Alto
     *   Usando GetPlayerScore com variбveis server sided
     *   A precisгo deste sistema fica em torno de 90%
     *
    -------------------------------------------------*/


    if(GetPlayerPing(playerid) > MAX_PING) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_HIGH_PING);
    }

    /*--------------------------------------------------
     *
     *  Anti Score Hack
     *   Usando GetPlayerScore com variбveis server sided
     *   A precisгo deste sistema fica em torno de 100%
     *
    -------------------------------------------------*/


    if(GetPlayerScore(playerid) >  GetPVarInt(playerid, #registerScore)) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_SCORE_HACK);
    }

    /*--------------------------------------------------
     *
     *  Anti Money Hack
     *   Usando GetPlayerMoney com variбveis server sided
     *   A precisгo deste sistema fica em torno de 100%
     *
    -------------------------------------------------*/


    if(GetPlayerMoney(playerid) > GetPVarInt(playerid, #registerMoney)) {
        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_MONEY_HACK);
    }

    static armaJogador;
    armaJogador = GetPlayerWeapon(playerid);


    /*--------------------------------------------------
     *
     *  Anti Weapons Hack - Weapons Ammo Hack
     *   Usando GetWeaponAmmo com variбveis server sided
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/


    if(!armaBranca(armaJogador) && (GetPVarInt(playerid, getWeaponNameID(armaJogador)) == 0 && GetPlayerAmmo(playerid) > 1 || (GetPlayerAmmo(playerid) > (GetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid))) +10) > 0 || (GetPlayerAmmo(playerid) < 0 && GetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid))) < 9999)))) {

        static intid;
        intid = GetPlayerInterior(playerid);

        if(intid != 1 && intid != 7 && intid != 4 && intid != 6) {
            if(GetPVarInt(playerid, getWeaponNameID(armaJogador)) == 0 && gettime() - GetPVarInt(playerid, #ammoTime) > 1) {
                if(GetPVarInt(playerid, #warnAmmo) == WEAPON_SLOT_HACK) {
                    CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_AMMO_HACK);
                    SetPVarInt(playerid, #warnAmmo, 0);
                    SetPVarInt(playerid, getWeaponNameID(armaJogador), GetPlayerAmmo(playerid));
                }
                SetPVarInt(playerid, #warnAmmo, GetPVarInt(playerid, #warnAmmo) +1);
            }
            else if((gettime() - GetPVarInt(playerid, #ammoTime)) > 1) {
                CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_WEAPON_HACK);
                SetPVarInt(playerid, #warnAmmo, 0);
                SetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid)), GetPlayerAmmo(playerid));
            }
        }
        else {
            SetPVarInt(playerid, getWeaponNameID(GetPlayerWeapon(playerid)), GetPlayerAmmo(playerid));
        }
    }

    SetPVarInt(playerid, #registerMoney, GetPlayerMoney(playerid));
    SetPVarInt(playerid, #registerScore, GetPlayerScore(playerid));

    /*--------------------------------------------------
     *
     *  Anti Freeze Hack
     *   Usando GetPlayerPos com variбveis server sided
     *   A precisгo deste sistema fica em torno de 90%
     *
    -------------------------------------------------*/


    static Float:x, Float:y,Float:z;

    if(GetPVarInt(playerid, "PlayerControllable")) {
        GetPlayerPos(playerid, x, y, z);
        if((GetPVarFloat(playerid,"xposControll") != x) ||  (GetPVarFloat(playerid,"yposControll") != y) || (GetPVarFloat(playerid,"zposControll") != z)) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_FREEZE_HACK);
        }
    }
    else {

        GetPlayerPos(playerid, x, y, z);
        if(GetPVarFloat(playerid,"xposSet") != 0 && GetPVarFloat(playerid,"yposSet") != 0 && GetPVarFloat(playerid,"zposSet") != 0) {

            new Float:MAX_DISTANCE = MAX_DISTANCE_DEF;
           
            x = GetPVarFloat(playerid,"xposSet") - x;
            y = GetPVarFloat(playerid,"yposSet") - y;
            z = GetPVarFloat(playerid,"zposSet") - z;
           
            if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT && GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID){
                MAX_DISTANCE = 20.0;
            }
            if((x > MAX_DISTANCE || x < -MAX_DISTANCE ) || (y > MAX_DISTANCE  || y < -MAX_DISTANCE ) ||  (z > MAX_DISTANCE  || z < -MAX_DISTANCE )) {
                if(gettime() - GetPVarInt(playerid,"tposSet") > 3) {
               
                    GetPlayerPos(playerid, x, y, z);
                    SetPlayerPos(playerid, x, y, z + 1.0);
                   
                    SetTimerEx(#pCheckPos, 500, false, "ifff", playerid, x, y, z);
                }
            }
            MAX_DISTANCE = MAX_DISTANCE_DEF;
        }

        GetPlayerPos(playerid, x, y, z);
        SetPVarFloat(playerid,"xposSet", x);
        SetPVarFloat(playerid,"yposSet", y);
        SetPVarFloat(playerid,"zposSet", z);
    }

    return true;
}

pCheckPos(i, Float:x, Float:y, Float:z);
public pCheckPos(i, Float:x, Float:y, Float:z) {

    /*--------------------------------------------------
     *
     *  Anti Teleport Hack
     *   Usando GetPlayerPos com variбveis server sided
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/

       
    if(IsPlayerInRangeOfPoint(i, 2.012837, x, y, z)) {
        CallLocalFunction("OnPlayerHacking", "ii", i, PLAYER_TELEPORT_HACK);
    }
   
    /*--------------------------------------------------
     *
     *  Anti AirBreak Hack
     *   Usando GetPlayerPos e SetPlayerPos com variбveis server sided
     *   A precisгo deste sistema fica em torno de 95%
     *
    -------------------------------------------------*/

       
    else {
        CallLocalFunction("OnPlayerHacking", "ii", i, PLAYER_AIRBREAK_HACK);
    }
    return true;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {

    /*--------------------------------------------------
     *
     *  Anti No-Reload
     *   Usando GetWeaponState e GetWeaponAmmo
     *   A precisгo deste sistema fica em torno de 90%
     *
    -------------------------------------------------*/

   
    static armaJogador;
    armaJogador = GetPlayerWeapon(playerid);
   
    if((((newkeys & (KEY_FIRE)) == (KEY_FIRE)) && ((oldkeys & (KEY_FIRE)) != (KEY_FIRE)))) {
        if(GetPlayerWeaponState(playerid) != 3) {
            if(!armaBranca(armaJogador) && GetPlayerAmmo(playerid) == GetPVarInt(playerid, getWeaponNameID(armaJogador))) {

                SetPVarInt(playerid, "keyFire", GetPVarInt(playerid, "keyFire") +1);

                if(GetPVarInt(playerid, "keyFire") >= WEAPON_SLOT_HACK) {
                    SetPVarInt(playerid, #keyFire, 0);
                    CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_NORELOAD_HACK);
                }
            }
        }
        else {
            SetPVarInt(playerid, #keyFire, 0);
        }
    }
    return true;
}



public OnPlayerStateChange(playerid, newstate, oldstate)
{
    /*--------------------------------------------------
     *
     *  Anti State Hack
     *   Usando OnPlayerStateChange com gettime
     *   A precisгo deste sistema fica em torno de 95%
     *
    -------------------------------------------------*/


    if(newstate == PLAYER_STATE_DRIVER) {
        if(gettime() - GetPVarInt(playerid, #registerState) < 2) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_STATE_HACK);
        }
        SetPVarInt(playerid, #registerState, gettime());
    }
    return 1;
}


public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
{

    /*--------------------------------------------------
     *
     *  Anti Surfer Vehicle
     *   Usando OnUnoccupiedVehicleUpdate com gettime e outros
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/


    GetVehiclePos(vehicleid, g_ucPos[0], g_ucPos[1], g_ucPos[2]);

    if(IsPlayerInRangeOfPoint(playerid, 4.0, g_ucPos[0], g_ucPos[1], g_ucPos[2])) {
        GetVehicleZAngle(vehicleid, g_ucPos[3]);
        if(g_diferencasAngle[vehicleid] != g_ucPos[3]) {
            if(!IsPlayerInAnyVehicle(playerid)) {
                GetPlayerPos(vehicleid, g_ucPos[1], g_ucPos[1], g_ucPos[3]);
                if(g_ucPos[3] > g_ucPos[2]) {
                    SetPVarInt(playerid, #registrosUAF, GetPVarInt(playerid, #registrosUAF) +1);
                    if(GetPVarInt(playerid, #registrosUAF) > 15) {
                        CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_SURF_VEHICLE);
                    }
                }
            }
        }
        g_diferencasAngle[vehicleid] = g_ucPos[3];
        return true;
    }

    /*--------------------------------------------------
     *
     *  Anti Teleport Vehicle
     *   Usando OnUnoccupiedVehicleUpdate com gettime e outros
     *   A precisгo deste sistema fica em torno de 85%
     *
    -------------------------------------------------*/


    else if(!IsPlayerInRangeOfPoint(playerid, 100.0, g_ucPos[0], g_ucPos[1], g_ucPos[2])) {
        if(!IsPlayerInAnyVehicle(playerid)) {
            CallLocalFunction("OnPlayerHacking", "ii", playerid, PLAYER_CAR_TELEPORT);
        }
    }
    return true;
}



#define GivePlayerMoney             GivePlayerMoney_Ex
#define SetPlayerScore              SetPlayerScore_Ex
#define PutPlayerInVehicle          PutPlayerInVehicle_Ex
#define PutPlayerInVehicle          PutPlayerInVehicle_Ex
#define SetPlayerArmour             SetPlayerArmour_Ex
#define SetPlayerHealth             SetPlayerHealth_Ex
#define TogglePlayerControllable    TogglePlayerControllable_Ex
#define GivePlayerWeapon            GivePlayerWeapon_Ex



/*
    Exemplo de uso para OnPlayerHacking
    INCLUDE AINDA NГO TERMINADA. FALTA CRIAR ITENS ANTI HACKINGS E HOOKEAR PUBLICAS !!!
*/

forward OnPlayerHacking(playerid, hackid);
public OnPlayerHacking(playerid, hackid) {

    if(hackid == PLAYER_BOT_LEVEL1) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv ");
        Kick(playerid);
    }
    if(hackid == PLAYER_BOT_LEVEL2) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv ");
        Kick(playerid);
    }
    if(hackid == PLAYER_BOT_LEVEL3) {
        SendClientMessage(playerid, -1, "noob para de ddos no meu sv BAN ");
        BanEx(playerid, "fdppp");
    }

    if(hackid == PLAYER_DEATHFLOOD_LEVEL1 || PLAYER_DEATHFLOOD_LEVEL2 == hackid || PLAYER_DEATHFLOOD_LEVEL3 == hackid) {
        SendClientMessage(playerid, -1, "noob para de fake kill");
    }

    if(hackid == PLAYER_SURF_VEHICLE) {
        SendClientMessage(playerid, -1, "noob para de surf vehicle");
    }

    if(hackid == PLAYER_SURF_VEHICLE) {
        SendClientMessage(playerid, -1, "noob para de surf vehicle");
    }

    if(hackid == PLAYER_CAR_TELEPORT) {
        SendClientMessage(playerid, -1, "noob para de car teleport");
    }

    if(hackid == PLAYER_STATE_HACK) {
        SendClientMessage(playerid, -1, "noob para de state hack");
    }

    if(hackid == PLAYER_FREEZE_HACK) {
        SendClientMessage(playerid, -1, "noob para de freeze hack");
    }

    if(hackid == PLAYER_SCORE_HACK) {
        SendClientMessage(playerid, -1, "noob para de score hack");
    }

    if(hackid == PLAYER_MONEY_HACK) {
        SendClientMessage(playerid, -1, "noob para de money hack");
    }
    if(hackid == PLAYER_PUBLISH_TEXT) {
        SendClientMessage(playerid, -1, "ninguem quer entrar no teu sv noob");
    }
    if(hackid == PLAYER_OFFEND_TEXT) {
        SendClientMessage(playerid, -1, "vtnc, para de ofende os outros fdp");
    }
    if(hackid == PLAYER_FLOOD_TEXT) {
        SendClientMessage(playerid, -1, "calma ai mermгo, rlx cuca");
    }
    if(hackid == PLAYER_TELEPORT_HACK) {
        SendClientMessage(playerid, -1, "preguiзoso, USA CARRO mas nгo teleport !!1");
    }
    if(hackid == PLAYER_WEAPON_HACK) {
        SendClientMessage(playerid, -1, "nгo usa weapon hack po");
    }
    if(hackid == PLAYER_AMMO_HACK) {
        SendClientMessage(playerid, -1, "fdp nao usa ammo hack");
    }
    if(hackid == PLAYER_NORELOAD_HACK) {
        SendClientMessage(playerid, -1, "fdp nao usa no reload hack");
    }
    if(hackid == PLAYER_AIRBREAK_HACK) {
        SendClientMessage(playerid, -1, "fdp para de usa no airbreak hack");
    }

    return true;
}
Enfim. Ainda nгo foi lanзado, nгo precisa se preucupar em achar bugs. Dando-me dicas estб bom, o resto eu arrumo conforme os testes e o tempo.

Para checar lб se й um nъmero de telefone eu farei um sistema "Mais inteligente" dedicado .. Й um tanto fбcil. Os endereзos de IP variam de 128000000 a 192168255255

Abraзos !!
Reply
#17

Quote:
Originally Posted by BreakDriFT
View Post
Eu nгo lenbro o nome mais sei como funciona ,

й um Mod Cl...

Quem tem o mod consegue dirigir o carro do outro , isso atrapalha muito ^^

Nгo sei se voce ja pois esse, tem tambem o de Bugar um jogador e aparece a mensagem Stay within world acho que й isso.

Mais esse do Bug se voce Simplismente voltar a seleзгo de classe ou morrer, mais й cahto voce ta em um x1 o cara te buga ou atй no drift o cara comeзa dirigr teu carro '-'
Sobre o Car Control й fбcil, basta verificar se tem 2 PLAYER_STATE_DRIVER no mesmo veiculo, e qual deles estiver com o oldstate == PLAYER_STATE_PASSANGER й o cara que usa o Cleo!

Dica: Se quiser pode usar esse Anti AFK que detecta aqueles xiters que o player estando de AFK ele mexe o player para nгo detectar!
http://forum.sa-mp.com/showpost.php?...58&postcount=7

2 desafios vamos dizer assim, Anti AutoAim e Anti AutoCbug esses sгo uns app novos que foi criados esses tempos, que sгo muito fodas, espero que consiga algo que detecte!
Reply
#18

Quote:
Originally Posted by paulor
View Post
Sobre o Car Control й fбcil, basta verificar se tem 2 PLAYER_STATE_DRIVER no mesmo veiculo, e qual deles estiver com o oldstate == PLAYER_STATE_PASSANGER й o cara que usa o Cleo!

Dica: Se quiser pode usar esse Anti AFK que detecta aqueles xiters que o player estando de AFK ele mexe o player para nгo detectar!
http://forum.sa-mp.com/showpost.php?...58&postcount=7

2 desafios vamos dizer assim, Anti AutoAim e Anti AutoCbug esses sгo uns app novos que foi criados esses tempos, que sгo muito fodas, espero que consiga algo que detecte!
LOL!

Nгo quero acusar mais jб tem muito AntiAFK parecido com esse..
Pra min vocк sу alterou o nome das var
Reply
#19

Quote:
Originally Posted by Mr.Hardy
View Post
LOL!

Nгo quero acusar mais jб tem muito AntiAFK parecido com esse..
Pra min vocк sу alterou o nome das var
Mostra ae entгo! Eu criei do ZERO, se foi copia, copiaram do meu!
Reply
#20

Quote:
Originally Posted by paulor
View Post
Mostra ae entгo! Eu criei do ZERO, se foi copia, copiaram do meu!
https://sampforum.blast.hk/showthread.php?tid=315716
https://sampforum.blast.hk/showthread.php?tid=171808
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)