Jump to content
  • 0

pomoc Anticheat maže peníze


Deejva

Dotaz

Zdravím, jak, na serveru jsem si chtěl udělat, aby jste měli v tabu takové score, kolik máte peněz:

stock GivePlayerMoneyEx(p,k)
{
      SetPlayerScore(p,GetPlayerScore(p)+k);
      GivePlayerMoney(p,k);
}

Takže vždy přičítám peníze takto.

Ovšem pokud si koupíte například zbraň, jídlo nebo něco podobného, tak se vám odečtou pouze peníze, score zůstane, proto jsem si vytvořil timer po sekundě, který kontroluje peníze, pokud máte méně peněz než máte score, nastaví vám to tolik score, kolik máte peněz, pokud máte víc peněz, nastaví vám to tolik peněz, kolik máte score (Anti money cheat), zde kod:

public CheckMoney(playerid)
{
if(GetPVarInt(playerid,"Ready") == 1)
{
new money = GetPlayerMoney(playerid);
new score = GetPlayerScore(playerid);
if(score == money) return 1;
if(score > money)
{
SetPlayerScore(playerid,money);
}else{
   new vysledek = money - score;
GivePlayerMoney(playerid,-vysledek);
if(score != 0)
{
   for(new i=0; i<MAX_PLAYERS; i++)
   {
       if(GetPVarInt(i,"Admin") > 2)
       {
  new string[250];
    format(string,sizeof(string),"(ANTI-CHEAT) %s(%d) je podezdřelý z money cheatu: Score: %d Money %d Odečteno: %d",GetName(playerid),playerid,score,money,vysledek);
     SendClientMessage(i,0xFF0000FF,string);
       }
   }
   }
}
}
return 1;
}

Problém je ale v tom, že pokud se připojíte a hned dáte ESC, tak se mi přičtou peníze, ale nepřište se mi score, takže se mi peníze smažou tímhle anticheatem..

Pokud nedám ESC, jde vše normálně.. A já bych potřeboval poradit, jak udělat, aby vám to ty peníze nesmazalo .. Zkoušel jsem tam dát podmínku, že vám to nesmaže peníze, pokud máte 0 score, ale potom by jste mohli mít 0 score a používat money cheat ..

Díky za rady

 

 

Link to comment
Share on other sites

7 odpovědí na tuto otázku

Recommended Posts

  • 0

Pořád .. dam ESC a smaže mi to peníze.. To score se mi prostě nenačte


V načítání mam normálně 

GivePlayerMoneyEx(playerid,DOF2_GetInt(AC,"Money"));

A několik řádků pod tím

       SetPVarInt(playerid,"Ready",1);
       SetTimerEx("CheckMoney",1000,true,"i",playerid);
Link to comment
Share on other sites

  • 0

Stock jsem předělal na 

 

stock GivePlayerMoneyEx(p,k)
{
GivePlayerMoney(p,k);
printf("|Givemoney|: Nastaveno %d money",k);
SetPlayerScore(p,GetPlayerMoney(p));
printf("|Givemoney|: Nastaveno %d score",GetPlayerMoney(p));
}

Když jsem neměl ESC:

 

[13:25:33] |Givemoney|: Nastaveno 72217 money
[13:25:33] |Givemoney|: Nastaveno 72217 score

Když jsem si dal ESC:

 

[13:29:17] |Givemoney|: Nastaveno 856545 money
[13:29:17] |Givemoney|: Nastaveno 856545 score
[13:29:24] |Givemoney|: Nastaveno 0 money
[13:29:24] |Givemoney|: Nastaveno 0 score
 

 

 

Link to comment
Share on other sites

  • 0

Mam pro každýho hráče jiný timer (při spawnu po registraci ho vytvářim)


[13:38:05] [join] [RT]Deejva_ has joined the server (0:25.167.72.212)
[13:38:08] Score: 123456789
[13:38:09] Score: 0
[13:38:10] Score: 0
[13:38:11] Score: 0
[13:38:12] Score: 0
[13:38:13] Score: 0
[13:38:14] Score: 0
[13:38:15] Score: 0
[13:38:16] Score: 0
[13:38:18] Score: 0
[13:38:19] Score: 0
[13:38:20] Score: 0
[13:38:21] Score: 0
[13:38:22] Score: 0
Link to comment
Share on other sites

  • 0

Reseni je jednoduche. problem je v tom ze kdyz je hrac ESC tak k nemu ta informace ze ma dostat penize dorazi az se z ESC vypne. akorat ze mezitim si to anticheat otestuje a zjisti ze ma vice penez nez ma myt a sebere mu je. Reseni je jednoduche V OnPlayerUpdate si do promene ukladej casove razitko a v stocku si take udelej casove razitko v jine promene, a anticheat na daneho hrace pouzij az pokud je casove razitko OnPlayerUpdate vetsi nez casove razitko toho kdy jsi mu to dal. Tim zajistis ze anticheat ho otestuje az kdyz k hracovi dorazila packeta s tim ze ma dostat penize

Link to comment
Share on other sites

  • 0
stock GivePlayerMoneyEx(p,k)
{
      MoneyTime[p] = GetTickCount();
      SetPlayerScore(p,GetPlayerScore(p)+k);
      GivePlayerMoney(p,k);
}
public OnPlayerUpdate(playerid)
{
    Aktualizace[playerid] = GetTickCount();
    return 1;
}
public CheckMoney(playerid)
{
    if(Aktualizace[playerid] > MoneyTime[playerid])
    {
        //a tady ten tvuj AC kod
    }
    return 1;
}

Jednoduche elegantni a funkcni :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...