Errormentesítve :D
és egy SendClientMessageToAll hozzáadva :DD
így jobb :)
#include <a_samp>
#define red 0xFF0000AA
new string [190];
forward CheckCash(playerid);
new cash[MAX_PLAYERS];
#if defined FILTERSCRIPT
#else
main()
{
print(\"\\n--------------------------------------\");
print(\" Anti PÉNZ Cheat betöltve!\");
print(\"--------------------------------------\\n\");
}
#endif
public 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);
}
Dupla hozzászólás automatikusan összefûzve. ( 2012. január 09. - 16:36:03 )
E: Error script elejére: new cash[MAX_PLAYERS];
Dupla hozzászólás automatikusan összefûzve. ( 2012. január 09. - 16:37:27 )
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
#else
main()
{
print(\"\\n--------------------------------------\");
print(\" Anti Cheat betöltve!\");
print(\"--------------------------------------\\n\");
}
#endif
public 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]
Így menni fog :D