GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Leírások/Útmutatók => A témát indította: Game94 - 2012. Január 09. - 14:36:14

Cím: Pénzcheat elleni védelem
Írta: Game94 - 2012. Január 09. - 14:36:14
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]
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();
public OnFilterScripInit()
{
        SetTimer(\"CheckCash\", 1000, true);
return 1;
}
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]
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();
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()
{
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;
}
stock GivePlayerCash(playerid, ammount)
{
cash[playerid] += amount;
GivePlayerMoney(playerid, ammount);
}
stock SetPlayerCash(playerid, ammount)
{
cash[playerid] = ammont;
GivePlayerMoney(playerid, ammount);
}[/pawn]
Cím: Pénzcheat elleni védelem
Írta: Norby - 2012. Január 09. - 14:42:08
Jó lett.
De :
Szerintem kihagytál egy pontos vesszõt ( ; )
Innen :
stock SetPlayerCash(playerid, ammount)
{
cash[playerid] = ammont
GivePlayerMoney(playerid, ammount);
}
Cím: Pénzcheat elleni védelem
Írta: Game94 - 2012. Január 09. - 14:43:11
Igen, tényleg kihagytam, köszönöm.
Javítva.
Cím: Pénzcheat elleni védelem
Írta: lackos888 - 2012. Január 09. - 15:48:30
A változónevek rosszak amikor hozzáadod.
Cím: Pénzcheat elleni védelem
Írta: Dead - 2012. Január 09. - 16:35:08
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 )

Idézetet írta: Game94 date=1326116174\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"15403\" data-ipsquote-contentclass=\"forums_Topic
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
Cím: Pénzcheat elleni védelem
Írta: Game94 - 2012. Január 09. - 17:16:50
Hoppá.. :D
Az elején leírtam hogy létrehozzuk a változót, de nem is hoztam létre.
Cím: Pénzcheat elleni védelem
Írta: Zsolesszka - 2012. Január 09. - 17:56:23
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]
Cím: Pénzcheat elleni védelem
Írta: kurta999 - 2012. Január 10. - 03:23:50
Mi lesz a stuntbónusszal meg a tuning garázsokkal? (Kis trükkel lehet is javítani, de az \"meghackelhetõvé\" teszi)
Mert jelen esetben akkor is bannolni fog.
Egyébként a ban az nem éppen megfelelõ erre, inkább csak állítsd vissza a pénzét.
Cím: Pénzcheat elleni védelem
Írta: Game94 - 2012. Január 10. - 14:56:31
Idézetet írta: ɐʞzssǝlosz date=1326128183\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"15403\" data-ipsquote-contentclass=\"forums_Topic
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]
 
Tegnap nem igazán voltam a toppon, köszi hogy kijavítottad.
kurta: erre nem is gondoltam és a ban szerintem is túlzás, az én módomban is úgy van hogy nullázza a pénzt, meg a változót is. De ez már szerintem meg tudja oldani mindenki magának.
Cím: Pénzcheat elleni védelem
Írta: Ezel - 2012. Január 11. - 10:21:09
Szép script
Cím: Pénzcheat elleni védelem
Írta: N@rbirock - 2012. Január 12. - 12:22:54
engem automatikusan banol miért?
Cím: Pénzcheat elleni védelem
Írta: Game94 - 2012. Január 13. - 16:06:21
Van regisztráció rendszered ?
Ha van akkor azért, mert nem ezzel a függvénnyel adod oda a pénzt.
Cím: Pénzcheat elleni védelem
Írta: buci11 - 2012. Február 13. - 10:57:17
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
Cím: Pénzcheat elleni védelem
Írta: Csabesz - 2012. Február 13. - 18:59:21
Idézetet írta: buci11 date=1329127037\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"15403\" data-ipsquote-contentclass=\"forums_Topic
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
 
Van benne ciklus, ami az online játékosokat vizsgálja. Úgyhogy nincs benne hiba  :)
Cím: Pénzcheat elleni védelem
Írta: Benceee - 2012. Február 13. - 21:07:19
Szép. Viszont a ban-t soknak tartom. Inkább csak állítsa vissza a pénzt, és küldje el az online ( Rcon ) adminisztrátoroknak.
Cím: Pénzcheat elleni védelem
Írta: kurta999 - 2012. Február 13. - 21:44:45
Jelen esetben ne küldje el sehova!
Azt is csalásnak veszi, ha valaki átfesti a kocsiját, vagy stuntal pénzt szerez.
Elég lenne csak szimplán visszarakni neki a pénzét, ami azelõtt volt és \"minden\" probléma megvan oldva.
Cím: Pénzcheat elleni védelem
Írta: Benceee - 2012. Február 13. - 21:46:23
Idézetet írta: kurta999 date=1329165885\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"15403\" data-ipsquote-contentclass=\"forums_Topic
Jelen esetben ne küldje el sehova!
Azt is csalásnak veszi, ha valaki átfesti a kocsiját, vagy stuntal pénzt szerez.
Elég lenne csak szimplán vissz*rakni neki a pénzét, ami azelõtt volt és \"minden\" probléma megvan oldva.
 
Igazad van. Felesleges az adminisztrátoroknak is elküldeni.. Csalni úgysem tud, onnantól meg mindegy.
Cím: Pénzcheat elleni védelem
Írta: The - 2012. Február 13. - 21:52:28
Igen úgy lenne a legjobb, hogy csak a pénzét vissza rakja.
Cím: Pénzcheat elleni védelem
Írta: tonyo - 2012. Február 17. - 08:56:11
Nekem feltûnt még valami.
[pawn]stock SetPlayerCash(playerid, ammount)
{
cash[playerid] = ammont;
GivePlayerMoney(playerid, ammount);
}[/pawn]
Akkor ha nekem vagy mondjuk 10k-m, és ezzel beállítom 30-ra, akkor a cash az 30 lesz, de mivel ad még 30-at, így a GetPlayerMoney már 40-et fog visszaadni, és lecheaterez... Szóval szerintem így kéne a SetPlayerCash-nak kinéznie:
[pawn]stock SetPlayerCash(playerid, ammount)
{
cash[playerid] = ammont;
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, ammount);
}[/pawn]
Egyébként nem rossz dolog, mi már nagyon régóta használjuk, és mivel nálunk a pay\'n\'spray le van zárva, stuntbónuszt nem kap, így egy report rendszer jelenti is logba, ha valami gyanús (tuningolást meg megoldottam szépen, hogy mûködjön, de hackelhetetlen legyen az is ^^).
Cím: Pénzcheat elleni védelem
Írta: kurta999 - 2012. Február 17. - 09:05:30
A tuningolást meg a Pay \'n\' Spray-t azt könnyebben meglehet oldani, de a stuntbónuszal már más a helyzet.
Én arra is csináltam benne egy trükköt, meg is adja, csak az még egy módszerrel mindig kijátszható :D
De eddig szerencsére még nem vettem észre, hogy valaki kijátszotta volna  ::|
Cím: Pénzcheat elleni védelem
Írta: tonyo - 2012. Február 17. - 09:56:20
RP szerveren úgyis felesleges a stunt bonus, szal nálunk ki van véve.