[Tutorial] Creando 2 anticheats | Bбsicos | Ъtiles
#2

Muy buen tutorial, tienes un error en la funciуn dar vida:

pawn Код:
stock DarVida(playerid, vida)
{
  SetPlayerHealth(playerid, vida)
  InfoJugador[playerid][pVida] += vida;
}
Si usted pone = sin sumar el valor que ya contiene la variable entonces se setearб el valor puesto en la funciуn DarVida.

Yo prefiero hacer algo asi:

pawn Код:
#include <a_samp>

enum
{
   PLAYER_MONEY_HACK
};

static gFHACK[1];

public OnPlayerUpdate(playerid)
{
    if(playerid != INVALID_PLAYER_ID)
    {
         if(GetPlayerMoney(playerid) != GetPVarInt(playerid, "FAntiMoneyHack"))
         {
             ResetPlayerMoney(playerid);
             GivePlayerMoney(playerid, GetPVarInt(playerid, "FAntiMoneyHack"));
             CallLocalFunction("OnPlayerHack", "ii", playerid, PLAYER_MONEY_HACK);
         }
    }
    return 1;
}

stock AntiMoneyHack(playerid, dinero)
{
    switch(dinero)
    {
        case '-':
        {
           SetPVarInt(playerid, "FAntiMoneyHack", GetPVarInt(playerid, "FAntiMoneyHack")-dinero);
           MONEY: GivePlayerMoney(playerid, GetPVarInt(playerid, "FAntiMoneyHack"));
        }
        default:
        {
           SetPVarInt(playerid, "FAntiMoneyHack", GetPVarInt(playerid, "FAntiMoneyHack")+dinero);
           goto MONEY;
        }
    }
    return 1;
}

#if defined _FHACK_GivePlayerMoney
    #undef GivePlayerMoney
#else
    #define _FHACK_GivePlayerMoney
#endif
#define GivePlayerMoney AntiMoneyHack

forward OnPlayerHack(playerid, hackid);

public OnGameModeInit()
{
    gFHACK[0] = funcidx("FHACK_GivePlayerMoney") != -1;
    if (funcidx("FHACK_OnGameModeInit") != -1)
    {
        return CallLocalFunction("FHACK_OnGameModeInit", "");
    }
    return 1;
}

#if defined _FHACK_OnGameModeInit
    #undef OnGameModeInit
#else
    #define _FHACK_OnGameModeInit
#endif
#define OnGameModeInit FHACK_OnGameModeInit
forward FHACK_OnGameModeInit();
Modo de uso:

pawn Код:
CMD:dinero(playerid, params[])
{
    GivePlayerMoney(playerid, 100);
    return 1;
}
Usted puede utilizar la funciуn GivePlayerMoney sin necesidad de utilizar otra.

pawn Код:
public OnPlayerHack(playerid, hackid)
{
    if(hackid == PLAYER_MONEY_HACK)
    {
        SendClientMessage(playerid, -1, "El AntiCheat detect[o que usaste un MoneyHack.");
    }
    return 1;
}
No lo testee pero deberia funcionar.

Muy buйn tutorial.

Un saludo.
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)