Wie CheatSystem ausschalten?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Tag,
    Ich habe ein "/giveMoney" Befehl, dennoch wird das Geld immer wieder automatisch abgezogen,
    da es vom Cheatsystem als "Cheat" erkannt wird.


    Geld-Cheat-System:

    public MoneyTimer()
    {
    new username[MAX_PLAYER_NAME];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPlayerCash(i) != GetPlayerMoney(i))
    {
    ResetMoneyBar(i);//Resets the money in the original moneybar, Do not remove!
    UpdateMoneyBar(i,GetPlayerCash(i));//Sets the money in the moneybar to the serverside cash, Do not remove!
    new hack = GetPlayerMoney(i) - GetPlayerCash(i);
    GetPlayerName(i,username,sizeof(username));
    printf("%s hat sich anscheinend wahrscheinlich €%d ercheatet.", username,hack);
    }
    }
    }
    }


    Wie müsste ich den Befehl:

    if(strcmp(cmd, "/givemoney", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] >= 5)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /givemoney [playerid/PartOfName] [money]");
    return 1;
    }
    new playa;
    new money;
    playa = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    money = strval(tmp);
    if (PlayerInfo[playerid][pAdmin] >= 5)
    {
    if(IsPlayerConnected(playa))
    {
    if(playa != INVALID_PLAYER_ID)
    {
    ConsumingMoney[playa] = 1;
    GivePlayerMoney(playa, money);
    GetPlayerName(playa, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "AdmCmd: %s hat %s €%d gegeben.",sendername,giveplayer,money);
    ABroadCast(COLOR_RED,string,5);
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Das darfst du nicht tun!");
    }
    }
    return 1;
    }

    ändern, sodass kein Geld abgezogen wird?


    LG


    Diese Signatur wird erneuert.
    Bitte haben Sie ein wenig geduld...



  • Du kannst in der Hack Abfrage abfragen, ob der eingebene Wert der Wert eines "Admins" war. Und returnst es dann als 0.
    Sollte so funzen.


    lg :thumbup:

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Du machst am besten so:
    1. Du speicherst das Vermögen des Spielers in einer ganz normalen Spielerinfo. Entweder mit SetPVarInt oder einem enum.
    Ich mache es mal mit SetPVarInt.
    ganz oben als forward:
    forward public moneycheat();
    Bei OnGameModeInit:

    SetTimer("moneycheat", 10000, 1);

    Der Befehl bei OnPlayerCommandText:

    if(strcmp(cmd, "/givemoney", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] >= 5)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /givemoney [playerid/PartOfName] [money]");
    return 1;
    }
    new playa;
    new money;
    playa = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    money = strval(tmp);
    if (PlayerInfo[playerid][pAdmin] >= 5)
    {
    if(IsPlayerConnected(playa))
    {
    if(playa != INVALID_PLAYER_ID)
    {
    ConsumingMoney[playa] = 1;
    SetPVarInt(playa, "Geld", GetPVarInt(playa, "Geld") + money);
    GetPlayerName(playa, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "AdmCmd: %s hat %s €%d gegeben.",sendername,giveplayer,money);
    ABroadCast(COLOR_RED,string,5);
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Das darfst du nicht tun!");
    }
    }
    return 1;
    }

    Und schließlich die public function:

    public moneycheat()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(isPlayerConnected(i))
    {
    ResetPlayerMoney(i);
    GivePlayerMoney(i, GetPVarInt(i, "Geld"));
    }
    }
    }


    So wird beim Geld geben immer nur die Variable verändert.
    Da Cheatprogramme Servervariablen nicht verändern können, kann man sich auch kein Geld cheaten.
    Nur bei jedem Geldtransfer(Banksystem etc.) musst du mit SetPVarInt(playerid, "Geld", wert); und GetPVarInt(playerid, "Geld"); arbeiten statt mit GivePlayerMoney.

  • Hey,


    Danke für deine Antwort.
    Nun ist aber das Problem, dass das Geld die ganze Zeit nachlädt,
    aber es letz endlich kein Geld kommt?


    Lg


    P.S: Wieso lädt er jede paar Sekunden das Geld wieder von 0 auf den normal Wert?


    Diese Signatur wird erneuert.
    Bitte haben Sie ein wenig geduld...



    Einmal editiert, zuletzt von Mr.X ()