GTA-Center.com » Forum
http://www.gta-center.com/forums/

[GUIDA] Creare un Anti MoneyHack
http://www.gta-center.com/forums/viewtopic.php?f=40&t=229
Pagina 1 di 1

Autore:  Peppinux AKA Peppe_Stasu [ 05/11/2010, 21:30 ]
Oggetto del messaggio:  [GUIDA] Creare un Anti MoneyHack

Salve a tutti in questa guida spiegherò come creare un Anti MoneyHack funzionante. Questo Anti MoneyHack si baserà sul salvataggio dei soldi di un player in una variabile. Se i soldi della variabile dati con la rispettiva funzione non corrispondono a quelli che si hanno in game, viene richiamata la funzione OnPlayerMoneyHack e voi potrete decidere cosa fare.

Iniziamo!

Per prima cosa, in cima alla GameMode, inseriamo:
Codice:
new Cash[MAX_PLAYERS];

Così facendo creeremo la variabile dove salveremo i soldi non hackerati del player.

Fatto questo, sotto l'OnPlayerConnect, inseriamo:
Codice:
SetTimerEx("CheckPlayerCash", 1000, true, "d", playerid);

E così abbiamo creato il timer che controllerà i soldi del player

Adesso, fuori da tutto, inseriamo:
Codice:
stock GivePlayerCash(playerid, soldi)
{
   GivePlayerMoney(playerid, soldi);
   Cash[playerid] += soldi;
}

stock SetPlayerCash(playerid, soldi)
{
   ResetPlayerMoney(playerid);
   GivePlayerMoney(playerid, soldi);
   Cash[playerid] = soldi;
}

stock ResetPlayerCash(playerid)
{
   ResetPlayerMoney(playerid);
   Cash[playerid] = 0;
}

stock GetPlayerCash(playerid)
{
   return Cash[playerid];
}

Che saranno le funzioni che serviranno per dare, settare, resettare e ghettare i soldi non hackerati al player

E sempre fuori da tutto:
Codice:
forward CheckPlayerCash(playerid);
public CheckPlayerCash(playerid)
{
   if(GetPlayerMoney(playerid) > Cash[playerid])
   {
      new hackedmoney = GetPlayerMoney(playerid) - Cash[playerid];
      OnPlayerMoneyHack(playerid, hackedmoney);
   }
   return 1;
}

forward OnPlayerMoneyHack(playerid, hackedmoney);
public OnPlayerMoneyHack(playerid, hackedmoney)
{
   return 1;
}

Così abbiamo implementato nella GameMode una funzione che controlla quando il player hackera dei soldi ed una che viene richiamata quando i soldi vengono hackerati.

L'unica cosa che ci rimane da fare è decidere cosa far avvenire quando un player hackera dei soldi. Ciò che dovrà avvenire lo dovremo inserire sotto la funzione OnPlayerMoneyHack, creata precedentemente.
Esempi:
Togliere solo i soldi hackerati al cheater
Codice:
//Sotto OnPlayerMoneyHack
new
   string[128],
   pName[24];
GetPlayerName(playerid, pName, 24);
SetPlayerCash(playerid, GetPlayerMoney(playerid) - GetPlayerCash(playerid));
format(string, 128, "[AVVISO:] %s ha hackerato $%d e gli sono stati settati i suoi vecchi soldi ($%d).", pName, hackedmoney, GetPlayerCash(playerid));
SendClientMessageToAll(0xF60000AA, string);


Resettare tutti i soldi al cheater
Codice:
//Sotto OnPlayerMoneyHack
new
   string[128],
   pName[24];
GetPlayerName(playerid, pName, 24);
ResetPlayerCash(playerid);
format(string, 128, "[AVVISO:] %s ha hackerato $%d e gli sono stati resettati i soldi.", pName, hackedmoney);
SendClientMessageToAll(0xF60000AA, string);


Bannare il cheater
Codice:
//Sotto OnPlayerMoneyHack
new
   string[128],
   pName[24];
GetPlayerName(playerid, pName, 24);
format(string, 128, "[AVVISO:] %s ha hackerato $%d ed è stato bannato.", pName, hackedmoney);
SendClientMessageToAll(0xF60000AA, string);
Ban(playerid);


Beh altre funzioni da far accadere quando si hackerano dei soldi potete anche crearle voi :D

Nuove funzioni:
GivePlayerCash: Da soldi non hackerati al player
SetPlayerCash: Setta soldi non hackerati al player
ResetPlayerCash: Resetta soldi non hackerati al player
GetPlayerCash: Ghetta soldi non hackerati al player

Ultime cose da fare:
Per finire, l'unica cosa che dovrete fare, sarà sostituire GivePlayerMoney, ResetPlayerMoney e GetPlayerMoney con GivePlayerCash, ResetPlayerCash e GetPlayerCash. Se non farete così, anche quando darete dei soldi usando le normali funzioni come GivePlayerMoney il player sarà riconosciuto come cheater. Vi consiglio di usare la combinazione di tasti CTRL+H sul PAWN per sostituire velocemente le funzioni.

"Bugs":
Se per esempio vincerete soldi al casinò oppure guadagnerete soldi stuntando verrete riconosciuti come cheater. Quindi è meglio stare attenti!

Ultimi avvertimenti:
Questo AntiCheat potrebbe andare in conflitto con la vostra GM se usate un sistema di registrazione dato che i soldi della variabile saranno diversi da quelli salvati nel file del player. Si può facilmente ovviare mettendo nella funzione dove viene eseguito il login, alla fine di tutto,
Codice:
Cash[playerid] = GetPlayerMoney(playerid);


Spero di aver fatto un buon lavoro. Aspetto commenti : WohoW :
Se trovate bugs, segnalate =D
Vietato copiare la guida senza inserire i crediti! : Fuck You :

Enjoy ^^

Autore:  Angelo [ 05/11/2010, 21:36 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti MoneyHack

Anche se già ne esisteva una, concordo dicendo che questa è migliore xD

peccato il bug del casinò =( cmq bel lavoro :D

Autore:  Peppinux AKA Peppe_Stasu [ 05/11/2010, 21:40 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti MoneyHack

Grazie mille Angelo! E' bello ricevere i complimenti da un moderatore della sezione ;). Comunque l'ho creata proprio perchè l'altra, postata da NOS ma presa dal SA:MP Forum non avrebbe mai potuto funzionare a causa di svariati bugs. Comunque aspetto altri pareri :D

Autore:  Giuseppe_Mazzei [ 07/11/2010, 13:05 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti MoneyHack

Ora la inserisco tra le varie guide

Autore:  Peppinux AKA Peppe_Stasu [ 07/11/2010, 13:41 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti MoneyHack

Grazie :D

Autore:  barletheking [ 03/01/2011, 19:01 ]
Oggetto del messaggio:  Re: [GUIDA] Creare un Anti MoneyHack

Per disattivare gli stunt, mettere in OnGameModeInit/OnFilterScriptInit questo:
Codice:
EnableStuntBonusForAll(0);


Scusate l'up di una discussione vecchia ma penso sia utile per chi seguirà la guida.

Pagina 1 di 1 Tutti gli orari sono UTC + 1 ora [ ora legale ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/