Anti Money Hack - Dringeeeend Hilfe gesucht

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 liebe Community,


    ich habe ein Anti Money Hack System erstellt.
    Solange man alleine auf dem Server ist und spielt geht alles klar, doch wenn man nun schon auf dem Server ist und dann noch ein zweiter joint, gibt es ein Problem.
    Diese Problem erkläre ich euch jetzt:


    Peter ist der Spieler 1. Er ist nun auf dem Server gekommen und kein anderer ist online. Sein Geld, was er auf der Hand hat, beträgt: $50000
    So, nun kommt der Hans auf dem Server. Er ist der Spieler 2. Er ist nun auf dem Server gekommen und Loggt sich zur Zeit ein. Noch ist alles ok!! (Hans hat einen Geldbetrag in höhe von $25000 auf der Hand) Soo nun ist die Zeit gekommen. Hans hat das Passwort eingegeben und klickt genau jetzt auf den Login Button. Und genau jetzt, wenn das Script die Daten von Hans landen soll, was es auch tut passiert was merkwürdiges:


    Wie schon erwähnt, hatte Hans einen Betrag in Höhe von $25000 auf der Hand und der Peter in Höhe von $50000.
    Nun hat sich Hans eingeloggt, bekommt sein Geld, doch was ist bei bei Peter los? Peter hat auf einmal auch nur noch $25000 auf der Hand, obwohl er eigentlich $50000 auf der Hand hat.


    Wie kann das sein??


    und genau das ist mein Problem. Hier mein Code:


    Oben im Script:

    new handmoney[MAX_PLAYERS];



    hier nun der Stock, wo er den Spieler lädt (also, wenn man dann auf Login klickt):

    stock LoadAccount(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei, sizeof(Spielerdatei), "/Accounts/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei, "Score"));
    handmoney[playerid] = dini_Int(Spielerdatei, "Geld");//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Wanteds",dini_Int(Spielerdatei,"Wanteds"));
    SetPVarInt(playerid,"Bank",dini_Int(Spielerdatei,"Bank"));
    SetPVarInt(playerid,"Banned",dini_Int(Spielerdatei,"Banned"));
    SetPVarInt(playerid,"Autofahrschein",dini_Int(Spielerdatei,"Autofahrschein"));
    SetPVarInt(playerid,"Kampfstyle",dini_Int(Spielerdatei,"Kampfstyle"));
    SetPVarInt(playerid,"Jobid",dini_Int(Spielerdatei,"Jobid"));
    SetPVarInt(playerid,"Arbeitslosengeld",dini_Int(Spielerdatei,"Arbeitslosengeld"));
    SetPVarInt(playerid,"Rank",dini_Int(Spielerdatei,"Rank"));
    SetPVarInt(playerid,"Neu",dini_Int(Spielerdatei,"Neu"));
    SetPVarInt(playerid,"Skin",dini_Int(Spielerdatei,"Skin"));
    SetPVarInt(playerid,"Payday", dini_Int(Spielerdatei,"Payday"));
    SetPVarInt(playerid,"Biz", dini_Int(Spielerdatei,"Biz"));
    SetPVarInt(playerid,"Prison", dini_Int(Spielerdatei,"Prison"));
    SetPVarInt(playerid,"Prisontime", dini_Int(Spielerdatei,"Prisontime"));
    if(GetPVarInt(playerid,"Banned")==1)
    {
    SendClientMessage(playerid,ROT,"Du bist vom Server gebannt!");
    SetTimerEx("kicktimer2", 100, false, "i", playerid);
    }
    SetPVarInt(playerid,"loggedin",1);
    return 1;
    }


    genau hier, ändert sich dann das Geld von allen Spielern auf dem Server.
    Die Spieler bekommen immer das Geld, von dem, der sich als letztes eingeloggt hat.
    Wie kann das sein? Ich sitze hier voll verzweifelt vor.. :pinch:


    So jetzt seit ihr gefragt.
    Bitte um eure Hilfe.
    Danke.


    Mit freundlichen Grüßen
    Scripter4.0

    Scripter im Ruhestand.

  • Das Geld wird unter dem Login Stock gegeben:
    Hier die Zeile 7



    stock LoadAccount(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei, sizeof(Spielerdatei), "/Accounts/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei, "Score"));
    handmoney[playerid] = dini_Int(Spielerdatei, "Geld");//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Wanteds",dini_Int(Spielerdatei,"Wanteds"));
    SetPVarInt(playerid,"Bank",dini_Int(Spielerdatei,"Bank"));
    SetPVarInt(playerid,"Banned",dini_Int(Spielerdatei,"Banned"));
    SetPVarInt(playerid,"Autofahrschein",dini_Int(Spielerdatei,"Autofahrschein"));
    SetPVarInt(playerid,"Kampfstyle",dini_Int(Spielerdatei,"Kampfstyle"));
    SetPVarInt(playerid,"Jobid",dini_Int(Spielerdatei,"Jobid"));
    SetPVarInt(playerid,"Arbeitslosengeld",dini_Int(Spielerdatei,"Arbeitslosengeld"));
    SetPVarInt(playerid,"Rank",dini_Int(Spielerdatei,"Rank"));
    SetPVarInt(playerid,"Neu",dini_Int(Spielerdatei,"Neu"));
    SetPVarInt(playerid,"Skin",dini_Int(Spielerdatei,"Skin"));
    SetPVarInt(playerid,"Payday", dini_Int(Spielerdatei,"Payday"));
    SetPVarInt(playerid,"Biz", dini_Int(Spielerdatei,"Biz"));
    SetPVarInt(playerid,"Prison", dini_Int(Spielerdatei,"Prison"));
    SetPVarInt(playerid,"Prisontime", dini_Int(Spielerdatei,"Prisontime"));
    if(GetPVarInt(playerid,"Banned")==1)
    {
    SendClientMessage(playerid,ROT,"Du bist vom Server gebannt!");
    SetTimerEx("kicktimer2", 100, false, "i", playerid);
    }
    SetPVarInt(playerid,"loggedin",1);
    return 1;
    }

    Scripter im Ruhestand.

  • Wenn ich das mit GivePlayerMoney ausgeben, kann man wieder Geld cheaten. So nicht.
    Deswegen machen ich ja das mit dem TextDraw.. der wird im Gamemodeinit erstellt und beim Spawn gezeigt.
    dann halt mit TextDrawSetString.. etc..
    aber meine summer wird ja angezeigt, das problem ist nur, dass die sich iwie überschreiben, wenn ein anderer joint, obwohl ich: new handmoney[MAX_PLAYERS]; "Maxplayers" gemacht habe..




    Das Geld wird ausgegeben, wenn der Spieler spawnt, unter OnPlayerSpawn findet man dann das:

    TextDrawShowForPlayer(playerid, geldanzeigeback);//Dies ist nur der schwarze Hintergrund der Geldanzeige
    Geldanzeigeupdate(playerid);


    hier der Stock von: Geldanzeigeupdate:

    stock Geldanzeigeupdate(playerid)
    {
    TextDrawHideForPlayer(playerid, geldanzeige);
    new geldanzeigestring[41];
    format(geldanzeigestring, sizeof(geldanzeigestring), "$%i", handmoney[playerid]);
    TextDrawSetString(geldanzeige, geldanzeigestring);
    TextDrawShowForPlayer(playerid, geldanzeige);
    return 1;
    }

    Scripter im Ruhestand.

  • Es handelt sich hierbei um ein Problem des Textdraws.
    Versuch mal so mit dem Textdraw zu arbeiten:
    new Text:Geldanzeige[MAX_PLAYERS];


    TextDrawHideForPlayer(playerid,Geldanzeige[playerid]);
    TextDrawShowForPlayer(playerid,Geldanzeige[playerid]); //halt mit Geldanzeige[playerid]


    //Auch beim erstellen des Textdraws muss [playerid] mit angegeben werden.
    //Also wäre die beste Lösung unter OnPlayerSpawn oder OnPlayerConnect.


    Daran müsste es höhstwarscheinlich liegen :)