[Include] Previnindo GOD
#1

em um tуpico OFF de discussхes algumas pessoas citaram que o SA-MP deveria tomar providкncias em relaзхes aos hacks, coisa que eu nгo discordo muito, mas ai comeзaram a citar exemplos bestas como god, dinheiro e outros que nгo me lembro, alguns destes exemplos podem ser simplesmente solvidos com o prуprio pawn, como o 'god', eu fiz essa include rapidinha aqui no bloco de notas pra demonstrar uma forma simples de inverter toda a lуgica do god, ele te aplica vida infinita e a include te aplica a vida anterior que vocк tinha antes de usa-lo.

A include em si й mais um exemplo para o pessoal ver que as coisas podem ser feitas de forma simples e sucinta se vocк souber usar a lуgica de uma coisa contra ela prуpria.

Include:
pawn Код:
//By Willian Luigi

#define HEALTH_HACK (0)
#define ARMOUR_HACK (1)

enum FLAGS
{
    Float:PLAYER_HEALTH_FLAG,
    Float:PLAYER_ARMOUR_FLAG
};
new flagsAccess[MAX_PLAYERS][FLAGS];

forward OnPlayerUseHack(playerid, hackType);

stock setHealth(playerid, Float:value)
{
    flagsAccess[playerid][PLAYER_HEALTH_FLAG] = value;
    SetPlayerHealth(playerid, value);
}
stock setArmour(playerid, Float: value)
{
    flagsAccess[playerid][PLAYER_ARMOUR_FLAG] = value;
    SetPlayerArmour(playerid, value);
}
stock Float:getHealth(playerid)
{
    return flagsAccess[playerid][PLAYER_HEALTH_FLAG];
}
stock Float:getArmour(playerid)
{
    return flagsAccess[playerid][PLAYER_ARMOUR_FLAG];
}

public OnPlayerConnect(playerid)
{
    setArmour(playerid, 0);
    setHealth(playerid, 100);
    #if defined hook_OnPlayerConnect
        hook_OnPlayerConnect(playerid);
    #endif
    return 1;
}

public OnPlayerUpdate(playerid)
{
    new Float:h, Float:a;
    GetPlayerHealth(playerid, h);
    GetPlayerArmour(playerid, a);
    if (h > getHealth(playerid) + 0x2 || h < getHealth(playerid) - 0x2)
    {
        setHealth(playerid, flagsAccess[playerid][PLAYER_HEALTH_FLAG]);
        if (funcidx("OnPlayerUseHack") != -1)
            CallLocalFunction("OnPlayerUseHack", "ii", playerid, HEALTH_HACK);
    }
    if (a > getArmour(playerid) + 0x2 || a < getArmour(playerid) - 0x2)
    {
        setArmour(playerid, flagsAccess[playerid][PLAYER_ARMOUR_FLAG]);
        if (funcidx("OnPlayerUseHack") != -1)
            CallLocalFunction("OnPlayerUseHack", "ii", playerid, ARMOUR_HACK);
    }
    #if defined hook_OnPlayerUpdate
        hook_OnPlayerUpdate(playerid);
    #endif
    return 1;
}

public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
    if (issuerid != INVALID_PLAYER_ID)
    {
        if (flagsAccess[playerid][PLAYER_ARMOUR_FLAG] < amount)
        {
            flagsAccess[playerid][PLAYER_HEALTH_FLAG] -= amount;
            flagsAccess[playerid][PLAYER_HEALTH_FLAG] += flagsAccess[playerid][PLAYER_ARMOUR_FLAG];
            setHealth(playerid, flagsAccess[playerid][PLAYER_HEALTH_FLAG]);
            setArmour(playerid, flagsAccess[playerid][PLAYER_ARMOUR_FLAG]);
        }
        else
        {
            flagsAccess[playerid][PLAYER_ARMOUR_FLAG] -= amount;
            setHealth(playerid, flagsAccess[playerid][PLAYER_HEALTH_FLAG]);
        }
    }
    else
    {
        flagsAccess[playerid][PLAYER_HEALTH_FLAG] -= amount;
        setHealth(playerid, flagsAccess[playerid][PLAYER_HEALTH_FLAG]);
    }

    #if defined hook_OnPlayerTakeDamage
        hook_OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid);
    #endif
    return 1;
}

public OnPlayerSpawn(playerid)
{
    setHealth(playerid, 100);
    #if defined hook_OnPlayerSpawn
        hook_OnPlayerSpawn(playerid);
    #endif
    return 1;
}

#if defined _ALS_OnPlayerSpawn
    #undef OnPlayerSpawn
#else
    #define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn hook_OnPlayerSpawn
#if defined _ALS_OnPlayerSpawn
    forward hook_OnPlayerSpawn(playerid);
#endif
#if defined _ALS_OnPlayerConnect
    #undef OnPlayerConnect
#else
    #define _ALS_OnPlayerConnect
#endif
#define OnPlayerConnect hook_OnPlayerConnect
#if defined hook_OnPlayerConnect
    forward hook_OnPlayerConnect(playerid);
#endif
#if defined _ALS_OnPlayerTakeDamage
    #undef OnPlayerTakeDamage
#else
    #define _ALS_OnPlayerTakeDamage
#endif
#define OnPlayerTakeDamage hook_OnPlayerTakeDamage
#if defined hook_OnPlayerTakeDamage
    forward hook_OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid);
#endif
#if defined _ALS_OnPlayerUpdate
    #undef OnPlayerUpdate
#else
    #define _ALS_OnPlayerUpdate
#endif
#define OnPlayerUpdate hook_OnPlayerUpdate
#if defined hook_OnPlayerUpdate
    forward hook_OnPlayerUpdate(playerid);
#endif
exemplo de uso:

no meu GM de teste eu exportei a include para receber a chamada quando hack for encontrado...
pawn Код:
//GM
public OnPlayerUseHack(playerid, hackType)
{
    if (hackType == HEALTH_HACK) //Verifica se tб alterando a vida(GOD)
    {
        SendClientMessage(playerid, -1, "Vocк tentou usar god hack, mas nгo funcionou :)");
    }
    return 1;
}
imagens de teste:
pra simular um god eu fiz um programa bбsico pra alterar a vida, nгo vou postar aqui porque й ilegal e a finalidade dele era somente testar o sistema.



A include tб funcionando assim:

Ela estabelece conexгo entre os valores de vida/colete com duas variбveis quaisquer, se tu alterar o valor da vida no GM, a variбvel que tб conectada a ela altera tambйm.

Como a include detecta o god ? Se tu modificar a vida por um processo externo(hack), somente a vida serб alterada, a variбvel que tб conectada a ela nгo serб alterada, e nisso a verificaзгo de igualdade serб quebrada e a callback OnPlayerUseHack serб chamada com o ID do jogador que alterou a vida de uma forma externa(hack).

OBS: A callback OnPlayerUseHack sу serve pra decidir oque serб feito com o hacker, se vocк vai kikar, vai banir ele, ou se vai avisar ou entгo nгo vai fazer nada, a include por si sу, nгo deixa vocк usar o hack, quando tentar alterar a vida de forma externa ela jб volta para o valor antigo.

Talvez eu nгo tenha explicado bem, mas se sobrar dъvidas ou achar bugs podem postar aqui que eu respondo.

Abraзos.
Reply


Messages In This Thread
Previnindo GOD - by WLSF - 15.09.2013, 18:59
Re: Previnindo GOD - by PT - 15.09.2013, 18:59
Re: Previnindo GOD - by AlieN_. - 15.09.2013, 19:02
Re: Previnindo GOD - by Prefacio - 15.09.2013, 19:04
Re: Previnindo GOD - by AlieN_. - 15.09.2013, 19:13
Re: Previnindo GOD - by Coe1 - 15.09.2013, 19:20
Re: Previnindo GOD - by Don_Speed - 15.09.2013, 21:42
Re: Previnindo GOD - by Coe1 - 15.09.2013, 21:48
Re: Previnindo GOD - by Don_Speed - 15.09.2013, 21:49
Re: Previnindo GOD - by Kuddy - 15.09.2013, 22:06

Forum Jump:


Users browsing this thread: 1 Guest(s)