Szerző Téma: Pénzcheat elleni védelem  (Megtekintve 6125 alkalommal)

Nem elérhető Game94

  • 405
    • Profil megtekintése
Pénzcheat elleni védelem
« Dátum: 2012. január 09. - 14:36:14 »
0 Show voters
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]
« Utoljára szerkesztve: 2012. január 10. - 14:53:50 írta Game94 »

Nem elérhető Norby

  • 1575
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #1 Dátum: 2012. január 09. - 14:42:08 »
0 Show voters
Jó lett.
De :
Szerintem kihagytál egy pontos vesszõt ( ; )
Innen :
stock SetPlayerCash(playerid, ammount)
{
cash[playerid] = ammont
GivePlayerMoney(playerid, ammount);
}

Nem elérhető Game94

  • 405
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #2 Dátum: 2012. január 09. - 14:43:11 »
0 Show voters
Igen, tényleg kihagytam, köszönöm.
Javítva.

Pénzcheat elleni védelem
« Válasz #3 Dátum: 2012. január 09. - 15:48:30 »
0 Show voters
A változónevek rosszak amikor hozzáadod.

Nem elérhető Dead

  • 2045
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #4 Dátum: 2012. január 09. - 16:35:08 »
0 Show voters
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
« Utoljára szerkesztve: 2012. január 09. - 16:37:27 írta Dead »

Nem elérhető Game94

  • 405
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #5 Dátum: 2012. január 09. - 17:16:50 »
0 Show voters
Hoppá.. :D
Az elején leírtam hogy létrehozzuk a változót, de nem is hoztam létre.

Pénzcheat elleni védelem
« Válasz #6 Dátum: 2012. január 09. - 17:56:23 »
0 Show voters
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]

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #7 Dátum: 2012. január 10. - 03:23:50 »
0 Show voters
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.

Nem elérhető Game94

  • 405
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #8 Dátum: 2012. január 10. - 14:56:31 »
0 Show voters
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.

Nem elérhető Ezel

  • 177
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #9 Dátum: 2012. január 11. - 10:21:09 »
0 Show voters
Szép script

Pénzcheat elleni védelem
« Válasz #10 Dátum: 2012. január 12. - 12:22:54 »
0 Show voters
engem automatikusan banol miért?

Nem elérhető Game94

  • 405
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #11 Dátum: 2012. január 13. - 16:06:21 »
0 Show voters
Van regisztráció rendszered ?
Ha van akkor azért, mert nem ezzel a függvénnyel adod oda a pénzt.

Nem elérhető buci11

  • 502
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #12 Dátum: 2012. február 13. - 10:57:17 »
0 Show voters
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

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #13 Dátum: 2012. február 13. - 18:59:21 »
0 Show voters
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  :)

Nem elérhető Benceee

  • 4785
    • Profil megtekintése
Pénzcheat elleni védelem
« Válasz #14 Dátum: 2012. február 13. - 21:07:19 »
0 Show voters
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.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal