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 cheaterCodice:
//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 cheaterCodice:
//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 cheaterCodice:
//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
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

Se trovate bugs, segnalate =D
Vietato copiare la guida senza inserire i crediti!
Enjoy ^^