#include <a_samp>#define red 0xFF0000AAnew string [190];forward CheckCash(playerid);new cash[MAX_PLAYERS];#if defined FILTERSCRIPT#elsemain(){ print(\"\\n--------------------------------------\");print(\" Anti PÉNZ Cheat betöltve!\");print(\"--------------------------------------\\n\");}#endifpublic OnFilterScriptInit(){print(\"\\n--------------------------------------\");print(\" Anti PÉNZ Cheat betöltve!\");print(\"--------------------------------------\\n\");SetTimer(\"CheckCash\", 1000, true);return 1;}public OnFilterScriptExit(){return 1;}public CheckCash(playerid){new pName[MAX_PLAYER_NAME]; if(cash[playerid] != GetPlayerMoney(playerid)) { SendClientMessage(playerid, -1, \"Pénz cheat használata miatt bannoltunk!\"); format(string, sizeof(string), \"%s Bannolva Lett: {24FF0A}[ANTI-MH]\", pName); SendClientMessageToAll(red, string); Ban(playerid); } return 1;}stock GivePlayerCash(playerid, ammount){cash[playerid] += amount;GivePlayerMoney(playerid, ammount);}stock SetPlayerCash(playerid, ammount){cash[playerid] = ammont;GivePlayerMoney(playerid, ammount);}
Mivel sok olyan megoldás született már a pénzcheat elleni védelemre hogy pl ha a játékos pénze nagyobb x milliónál akkor bannoljuk (amivel semmit sem érünk, mert lehet tisztességesen szerezte a pénzt, lehet csak néhány ezret cheatel..), ezért mutatok erre egy jó megoldást:Elõször is létrehozunk egy változót amiben a játékosok pénzét tároljuk:[pawn]new cash[MAX_PLAYERS];[/pawn] IDE a New Most létrehozunk két függvényt, amivel a játékosok pénzét állíthatjuk:[pawn]stock GivePlayerCash(playerid, ammount){cash[playerid] += amount;GivePlayerMoney(playerid, ammount);}[/pawn][pawn]stock SetPlayerCash(playerid, ammount){cash[playerid] = ammont;GivePlayerMoney(playerid, ammount);}[/pawn]Mind a két függvény ugyan úgy mûködik, mint az erre megírt sa:mp függvények, csak annyi különbséggel hogy amikor növeljük a pénzét akkor a változójának az értékét is növeljük.Most pedig jön az ellenõrzés:[pawn]forward CheckCash(playerid);public OnFilterScripInit(){ SetTimer(\"CheckCash\", 1000, true);return 1;}public CheckCash(playerid){ if(cash[playerid] != GetPlayerMoney(playerid)) { SendClientMessage(playerid, -1, \"Pénz cheat használata miatt bannoltunk!\"); Ban(playerid); } return1;}[/pawn]Elõször is létrehoztuk a CheckCash callback-et.Utána amikor betöltjük a filterscriptet elindítunk egy timert. A timer másodpercenként lefuttatja a CheckCash-t.A CheckCash arra szolgál hogy leellenõrizzük hogy a játékos változójának az összege és a játékos valódi pénze megegyezik-e. Ha nem egyezik meg akkor kiírunk neki egy üzenetet és utána bannoljuk (a ban legyen mindig az utolsó mûvelet, mert különben az elõtte lévõ részek nem történnek meg. Pl nem küldi el neki az üzenetet).Remélem érthetõ volt, itt az egész FS:[pawn]#include <a_samp>forward CheckCash(playerid);new cash[MAX_PLAYERS];#if defined FILTERSCRIPT#elsemain(){ print(\"\\n--------------------------------------\");print(\" Anti Cheat betöltve!\");print(\"--------------------------------------\\n\");}#endifpublic OnFilterScriptInit(){print(\"\\n--------------------------------------\");print(\" Anti Cheat betöltve!\");print(\"--------------------------------------\\n\");SetTimer(\"CheckCash\", 1000, true);return 1;}public OnFilterScriptExit(){return 1;}public CheckCash(playerid){ if(cash[playerid] != GetPlayerMoney(playerid)) { SendClientMessage(playerid, -1, \"Pénz cheat használata miatt bannoltunk!\"); Ban(playerid); } return1;}stock GivePlayerCash(playerid, ammount){cash[playerid] += amount;GivePlayerMoney(playerid, ammount);}stock SetPlayerCash(playerid, ammount){cash[playerid] = ammont;GivePlayerMoney(playerid, ammount);}[/pawn]
A kódban szereplõ timer nem viszi magával a játékos id-ket, így a kód csak a 0 ID-vel jelölt játékosnak mûködik.Vagy minden játékosnak kellene elindítani timert ami talán hülyeség vagy be kell építeni az ellenõrzésbe egy for ciklust.[pawn]public CheckCash(){for(new forplayerid, maxp = GetMaxPlayers(); forplayerid < maxp; forplayerid++){ if(IsPlayerConnected(forplayerid)) { if(cash[forplayerid] != GetPlayerMoney(forplayerid)) { SendClientMessage(forplayerid, -1, \"Pénz cheat használata miatt bannoltunk!\"); Ban(forplayerid); } }}return 1;}[/pawn]
ez am nem csak id 0 nak megy? mert settimer az nem csak 1 playerra conatkozik szerintem settimerex el kéne playeridre állítan spawn nál de nem tom annyira nem vágom