Anti Money Cheat

  • Geht relativ einfach:
    Eine Variable mit dem Geld für jeden Spieler anlegen. Beim Verbinden liest du das Geld aus der Datenbank aus und beim Verlassen speicherst du es wieder in die Datenbank (egal ob Datenbank oder Filesystem). Und dann noch eine eigene GivePlayerMoney-Funktion, die das Geld der Variablen des Spielers hinzufügt und danach das normale GivePlayerMoney aufruft.
    Dasselbe am besten noch für die GetPlayerMoney-Funktion, sodass du immer das Geld aus deiner Variablen ausliest und nicht das vom Client.

    MfG,
    Piranha
  • Also ich kopiere mal etwas von meinem Script und du kannst dir davon etwas abschauen. Jedoch bin ich selber nicht der beste :) Sollte so aber eig. gehen..

    OnPlayerDisconnect
    [pwn]dini_IntSet(accFormat,"Geld",Spieler[playerid][Geld]);[/pwn]

    Wenn der Spieler sich einloggt. (Also wenn alles geladen ist)
    [pwn]GivePlayerMoney(playerid, dini_Int(accFormat, "Geld"));[/pwn]

    Dann erstellst du einen globalen Timer
    [pwn]SetTimer("Moneycheck",5000,1);[/pwn]
    Ganz oben
    [pwn]forward Moneycheck();[/pwn]
    &
    [pwn]moneycheat[MAX_PLAYERS];[/pwn]

    Dann ersellst du eine Schleife im Callback Moneycheck
    [pwn] for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(Spieler[Geld] < GetPlayerMoney(playerid)) //Wenn die Variable, welches das aktuelle Geld des Spielers sein sollte kleiner ist als das Geld welches vom Clienten angegeben ist...
    {
    moneycheat[i] = 1; //...setzt er die Variable auf 1 damit wir ihn "kennzeichen" und ihn bannen können

    }
    if(moneycheat[i] > 0) //Sollte moneycheat größer als 0 sein (In diesem Fall "1")
    {
    Spieler[i][gebannt] = 1; //Wird die Variable 'gebannt' auf 1 gesetzt
    Kick(i); //und er wird gekickt.
    }
    }[/pwn]

    Natürlich solltest du bei OnPlayerConnect abfragen ob der Spieler gebannt ist, falls ja kickst du ihn einfach...

    Also sollte der Callback so aussehen:
    [pwn]public Moneycheck()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(Spieler[i][Geld] < GetPlayerMoney(playerid))
    {
    moneycheat[i] = 1;

    }
    if(moneycheat[i] > 0)
    {
    Spieler[i][gebannt] = 1;
    Kick(i);
    }
    }
    return 1;
    }[/pwn]

    Auch musst du beachten, dass du z.B. bei öhh Einaufen im Ammonation die Variable um das Geld, welches abgezogen werden soll abziehst. Ansonsten können Fehler entstehen & Fehlbanns kommen raus.

    Das System ist nicht getestet & ich kann auch nichts garantieren, vllt. kann auch ein sehr erfahrener Scripter hier das ganze korrigieren.

    MfG

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Blood ()