SA-MP Forums Archive
[Tutorial] Criando um Anti Money Hack funcional - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Tutorial] Criando um Anti Money Hack funcional (/showthread.php?tid=604059)



Criando um Anti Money Hack funcional - F1N4L - 31.03.2016

Atualizado 01/04/2016

PS: Este tutorial й voltado para quem estб comeзando e desenvolvendo seus prуprios sistemas, por isso nгo o julgue!

Ainda hб quem pense que й difнcil criar um simples verificador de dinheiro e estou aqui para provar o contrбrio e mostrar que com algumas linhas podemos evitar QUALQUER Cheat de dinheiro no servidor.

Algo comum e ainda utilizado, mesmo nгo tendo necessidade, sгo stocks que substituem a funзгo nativa GivePlayerMoney(playerid, amount);
A verdade й que essa nгo й a ъnica soluзгo e nгo precisamos criar mais stocks no GM/FS para setar dinheiro a um player.

Em primeiro lugar, se vocк jб tiver uma variбvel definida para salvar o dinheiro, use-a e pule esta etapa (lembre-se de alterar as demais variбveis do tutorial):

Crie a variбvel Var_Money
PHP код:
new Var_Money[MAX_PLAYERS]; 

Em seguida, criaremos um Timer responsбvel por verificar o dinheiro do player
PHP код:
public OnGameModeInit() // GM
ou
public OnFilterScriptInit() // FS
{
    
SetTimer("MoneyCheck"1000true);
    return 
1;

MoneyCheck й a funзгo chamada para verificar o dinheiro do player.
1000 sгo os milissegundos em que a verificaзгo irб ocorrer.
true farб com que o Timer repita a verificaзгo (loop)



Hora de criar a callback que serб chamada para verificar o dinheiro
PHP код:
forward MoneyCheck();
public 
MoneyCheck()
{
    for(new 
0MAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i))
        {
            if(
GetPlayerMoney(i) != Var_Money[i])
            {        
                
ResetPlayerMoney(i);
                
GivePlayerMoney(iVar_Money[i]);
            }
        }
    }
    return 
1;

for(new i = 0; i < MAX_PLAYERS; i++)
LOOP em todos os slots do servidor.

if(IsPlayerConnected(i))
Verifica somente os players que estгo conectados.

if(GetPlayerMoney(i) != Var_Money[i])
Condicional principal, onde serб comparado o dinheiro do player (HUD) com a variбvel Var_Money
Caso o dinheiro no HUD do player for diferente do valor contido na variбvel, chamarб o restante da funзгo...

ResetPlayerMoney(i);
GivePlayerMoney(i, Var_Money[i]);

Reseta e seta o dinheiro contido na variбvel para o player respectivamente.


OBS: Caso o player gastar dinheiro com mбquinas de bebidas e talz, o dinheiro volta ao normal, mas se vocк quer que o dinheiro PERDIDO nгo seja resetado faзa o seguinte:

PHP код:
forward MoneyCheck();
public 
MoneyCheck()
{
    for(new 
0MAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i))
        {
            if(
GetPlayerMoney(i) > Var_Money[i])
            {        
                
ResetPlayerMoney(i);
                
GivePlayerMoney(iVar_Money[i]);
            }
        }
    }
    return 
1;

for(new i = 0; i < MAX_PLAYERS; i++)
LOOP em todos os slots do servidor.

if(IsPlayerConnected(i))
Verifica somente os players que estгo conectados.

if(GetPlayerMoney(i) > Var_Money[i])
Condicional principal, onde serб comparado o dinheiro do player (HUD) com a variбvel Var_Money
Caso o dinheiro no HUD do player for maior que o valor contido na variбvel, chamarб o restante da funзгo...
Caso o dinheiro no HUD do player for menor que o valor contido na variбvel, nгo irб fazer nada, porйm para nгo haver BUGs, recomendo utilizar a funзгo e salvar o dinheiro do player de 1 em 1 segundo, assim nгo terб problema com a variбvel.

ResetPlayerMoney(i);
GivePlayerMoney(i, Var_Money[i]);

Reseta e seta o dinheiro contido na variбvel para o player respectivamente.


Colocando o cуdigo em prбtica:

PHP код:
CMD:getmoney(playerid)
{
    
// Utilizamos a variбvel juntamente com um valor dentro da funзгo.
        // Este й o mйtodo correto para dar dinheiro a um player, pois vocк deu dinheiro e jб definiu um valor para a variбvel.
    
GivePlayerMoney(playeridVar_Money[playerid] += 100);
    
SendClientMessage(playerid, -1"SERVER: Vocк pegou R$100,00 do banco!");
    return 
1;
}
CMD:givemoney(playerid)
{
    
// Utilizamos somente um valor dentro da funзгo.
        // Este mйtodo й incorreto para dar dinheiro a um player, pois a alteraзгo nгo ocorre na variбvel, e sim, no HUD do player.
    
GivePlayerMoney(playerid100);
    
SendClientMessage(playerid, -1"SERVER: Vocк ganhou R$100,00 do banco!");
    return 
1;


Utilizando stocks (o que nгo й necessбrio):

PHP код:
stock GivePlayerMoneyEx(playeridamount)
{
    
ResetPlayerMoney(playerid);
    
GivePlayerMoney(playeridVar_Money[playerid] += amount);
    return 
1;

Esse й o modo mais simples com stock.

Basicamente um tutorial explicando como funciona o cуdigo e a simplicidade do mesmo!


Re: Criando um Anti Money Hack funcional - ZombieSmash - 31.03.2016

Bom tutorial, parabйns!


Re: Criando um Anti Money Hack funcional - F1N4L - 31.03.2016

Quote:
Originally Posted by ZombieSmash
Посмотреть сообщение
Bom tutorial, parabйns!
Obrigado!


Re: Criando um Anti Money Hack funcional - Carlos001 - 31.03.2016

Tutorial Legal, Parabens ae!


Re: Criando um Anti Money Hack funcional - F1N4L - 31.03.2016

Quote:
Originally Posted by Carlos001
Посмотреть сообщение
Tutorial Legal, Parabens ae!
Thx!


Re: Criando um Anti Money Hack funcional - Coreia - 31.03.2016

Simples e ъtil, parabйns mano, tф gostando de seus projetos alйm de simples, mas o importante й a intenзгo.

+rep ai pra tu.


Re: Criando um Anti Money Hack funcional - F1N4L - 31.03.2016

Quote:
Originally Posted by Coreia
Посмотреть сообщение
Simples e ъtil, parabйns mano, tф gostando de seus projetos alйm de simples, mas o importante й a intenзгo.

+rep ai pra tu.
Obrigado mesmo cara...