Enum Problem

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
  • Nabend zusammen


    Da ich ein Problem seit längeren habe, und da ich auch Sniper um Rat gebeten habe es mal nachzuschauen,
    Fanden wir keinerlei lösungen zu den Problem was ich habe.


    Bei mir ist das Problem, das sich die Werte von Spielern bei mehreren Spielern verschieben.
    Das kann unterschiedlich sein ich mach mal ein paar beispiele
    Spieler a komm 100 Minuten in den Knast Funktioniert
    Spieler B Connectet und bekommt den Knastwert von Spieler A als Geld (nur als Beispiel)
    Dann kommt es vor, das sich beim Speichern einfach mal die Werte um eine Spalte nach vorne Rücken
    Sprich aus knastzeit wird dan Premium und so weiter.
    Dies Problem tritt aber nur auf, wenn mehrere Spieler online sind und auch meist nach einen Savegame.
    Ich geb euch mal die 3 Funktionen
    Laden:
    stock LoadPlayer(playerid,Key[])
    {
    new Data[1024],query[256];
    format(query, 256, "SELECT * FROM `player` WHERE `Name` = '%s' AND `Passwort` = '%s'", PlayerInfo[playerid][Name],MD5_Hash(Key));
    mysql_query(query, (-1), (0), SQL);
    mysql_store_result(SQL);
    if(mysql_num_rows(SQL)!=0)
    {
    mysql_free_result(SQL);
    format(query, sizeof(query),"SELECT * FROM `player` WHERE `Name` = '%s'",PlayerInfo[playerid][Name]);
    mysql_query(query, (-1), (0), SQL);
    mysql_store_result(SQL);
    while(mysql_fetch_row(Data, "|", SQL))
    {
    sscanf(Data, "p<|>ds[64]s[128]dddddddddddds[128]s[128]s[16]ddddddd",
    PlayerInfo[playerid][Userid],PlayerInfo[playerid][Name],PlayerInfo[playerid][Passwort],PlayerInfo[playerid][Admin],PlayerInfo[playerid][Job],PlayerInfo[playerid][Team],PlayerInfo[playerid][Geld],PlayerInfo[playerid][Skin],
    PlayerInfo[playerid][Level],PlayerInfo[playerid][Respekt],PlayerInfo[playerid][PayDay],PlayerInfo[playerid][PayDayTog],PlayerInfo[playerid][Rank],PlayerInfo[playerid][Leader],PlayerInfo[playerid][Banned],PlayerInfo[playerid][BanGrund],
    PlayerInfo[playerid][BanAdmin],PlayerInfo[playerid][IP],PlayerInfo[playerid][Nummer],PlayerInfo[playerid][Safeban],PlayerInfo[playerid][Helm],PlayerInfo[playerid][Jobvertrag],PlayerInfo[playerid][Star],PlayerInfo[playerid][Igvip],
    PlayerInfo[playerid][Jailtime]);
    }
    GivePlayerMoney(playerid,PlayerInfo[playerid][Geld]);
    SetPlayerScore(playerid,PlayerInfo[playerid][Nummer]);
    if(PlayerInfo[playerid][Safeban]!=0 && IsPlayerSafe(playerid)==0)
    {
    PlayerSafeJoin(playerid);
    SendClientMessage(playerid,cRed,"Du wurdest von "AC_BOT_NAME" gekickt, da du Safe Gebannt bist und den Louncher nicht eingeschaltet hast.");
    SendClientMessage(playerid,cRed,"Solltest du den Louncher bereits eingeschaltet haben, so starte den bitte neu und versuch dann wieder zu connecten.");
    Kick(playerid);
    }
    if(IsPlayerSafe(playerid)==0)
    {
    format(query, sizeof(query), "{006100}[Join] %s hat den Server betreten.", PlayerInfo[playerid][Name]);
    SendClientMessageToAll(cGreen, query);
    }
    else
    {
    format(query, sizeof(query), "{006100}[{FF8000}Safe{006100}-Join] %s hat den Server betreten.", PlayerInfo[playerid][Name]);
    SendClientMessageToAll(cGreen, query);
    PlayerSafeJoin(playerid);
    }
    SetPVarInt(playerid,"loggedin",1);
    SetPVarInt(playerid,"played",1);
    SpawnPlayer(playerid);
    mysql_free_result(SQL);
    return 1;
    }
    else
    {
    mysql_free_result(SQL);
    format(query, 128, "{FFFFFF}Fehler{FF6E00} %s {FFFFFF}Das Passwort war Falsch", PlayerInfo[playerid][Name]);
    ShowPlayerDialog(playerid,diaLogin,DIALOG_STYLE_PASSWORD,"GTA "Servername"",query,"Login","");
    return 1;
    }
    }
    Speichern:
    stock SavePlayer(playerid)
    {
    new query[1024];
    format(query, 1024, "UPDATE `player` SET `Admin` = '%d', `Job` = '%d', `Team` = '%d', `Cash` = '%d', `Skin` = '%d', `Level` = '%d', `Respekt` = '%d', `PayDay` = '%d', `PayDayTog` = '%d', `Rank` = '%d', `Leader` = '%d', `Nummer` = '%d', \
    `Ban` = '%d', `BanGrund` = '%s', `BanAdmin` = '%s', `IP` = '%s', `SaveBan` = '%d', `Helm` = '%d', `Jobvertrag` = '%d', `Star` = '%d', `VIP` = '%d', `Jailtime` = '%d' WHERE `Name` = '%s' AND `id` = '%d'",
    PlayerInfo[playerid][Admin],PlayerInfo[playerid][Job],PlayerInfo[playerid][Team],GetPlayerMoney(playerid)/*PlayerInfo[playerid][Geld]*/,PlayerInfo[playerid][Skin],PlayerInfo[playerid][Level],PlayerInfo[playerid][Respekt],PlayerInfo[playerid][PayDay],PlayerInfo[playerid][PayDayTog],PlayerInfo[playerid][Rank],
    PlayerInfo[playerid][Leader],PlayerInfo[playerid][Nummer],PlayerInfo[playerid][Banned],PlayerInfo[playerid][BanGrund],PlayerInfo[playerid][BanAdmin],PlayerInfo[playerid][IP],PlayerInfo[playerid][Safeban],PlayerInfo[playerid][Helm],
    PlayerInfo[playerid][Jobvertrag],PlayerInfo[playerid][Star],PlayerInfo[playerid][Igvip],PlayerInfo[playerid][Jailtime],PlayerInfo[playerid][Name],PlayerInfo[playerid][Userid]);
    mysql_query(query, (-1), (0), SQL);
    return 1;
    }
    Savegame:
    DT_Public SaveGame()
    {
    new t1,t2,stunde,minute,sekunde,query[512];
    gettime(stunde,minute,sekunde);
    t1 = sekunde;
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(GetPVarInt(i,"loggedin")==1)
    {
    SavePlayer(i);
    }
    }
    format(query, sizeof(query), "UPDATE `Server` SET `Kasse` = '%d',`Benzin` = '%d',`Kies` = '%d',`Container` = '%d', `Waren` = '%d' WHERE `Name` = 'Server'",Server[ServerKasse],Server[ServerBenzin],Server[ServerKies],Server[Servercontainer],Server[ServerLemis]);
    mysql_query(query, (-1), (0), SQL);
    format(query, sizeof(query), "UPDATE `JobWaren` SET `Supermarkt1` = '%d' WHERE `Name` = 'Server'",Supermarktware);
    mysql_query(query, (-1), (0), SQL);
    for(new i;i<MBI;i++)
    {
    if(strlen(biz2[i][bOwner]))
    {
    format(query,sizeof query,"UPDATE `Bizz` SET `Besitzer`= '%s', `Bizname`= '%s', `Offen`= '%d', `Enter`= '%d', `Prods`= '%d', `PP`= '%d', `Kasse`= '%d', `Payentry`= '%d' WHERE `BizID`='%d'",
    biz2[i][bOwner],biz2[i][bName],biz2[i][bOpen],biz2[i][bEnter],biz2[i][bProds],biz2[i][bPP],biz2[i][bKasse],biz2[i][bPayentry],i);
    mysql_query(query, (-1), (0), SQL);
    }
    }
    for(new i;i!=MAX_HAUESER;i++)
    {
    if(strlen(Haus[i][Besitzer]))
    {
    format(query,sizeof query,"UPDATE `Haus` SET `Besitzer`= '%s',`Gekauft`= '%d',`Abgeschlossen`= '%d',`aX`= '%f',`aY`= '%f',`aZ`= '%f',`iX`= '%f',`iY`= '%f',`iZ`= '%f',`Interior`= '%d',`VW`= '%d',`Preis`= '%d' WHERE `id`='%d'",
    Haus[i][Besitzer],Haus[i][Gekauft],Haus[i][Abgeschlossen],Haus[i][Pos][0],Haus[i][Pos][1],Haus[i][Pos][2],Haus[i][Pos][3],Haus[i][Pos][4],Haus[i][Pos][5],Haus[i][Int],Haus[i][VirtualWorld],Haus[i][Preis],i);
    mysql_query(query, (-1), (0), SQL);
    }
    }
    gettime(stunde,minute,sekunde);
    t2 = sekunde;
    format(query,128,"Spiel in %d Sekunden gespeichert.",t2 - t1);
    AdminMessage(AC_BOT_NAME,query);
    print(query);
    }
    Ich bin wirklich ratlos und [DT]Sniper. ist es auch daher hoffe ich mal, das einer von euch eine idee dazu hat

    All in all it's just another brick in the wall

    Einmal editiert, zuletzt von [DT]Beavis () aus folgendem Grund: Überschrift

  • So,
    SET `Supermarkt1` = '%d'


    hier bitte erstmal die

    Code
    '

    wegmachen, dass ist kein String...


    Versuche mal das Speichern nicht nach Name und ID sondern nur nach Namen.





    //edit: Nachtrag
    Hast Du schonmal Datensätze oder so gelöscht?

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)

  • hatte ich auch und es war das selbe Problem
    und naja die
    '
    sollten ja nicht dazu führen, das er fehlerhaft speichert

    Mach das in PHP und Du wirst einen Syntax Fehler bekommen. Deswegen würde ich mich daran halten.


    Sicher dass auch alle Variablen erstmal resetet werden nach einem Logout von einem Spieler? Tritt dass nach einem Serverstart auf oder erst wenn sich mehrere ein und ausgeloggt haben?

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)

  • Resetten lass ich die bei den Connect
    bei einen savegame passiert es mal das die werte sich vertauschen und auch wenn einer neu ist,
    hatte ich mal das Problem gehabt das er komplette Adminrechte hatte
    Ich habe einfach keine ahnung mehr woran das liegen kann
    Die werte verrutschen schlagartig das is schwer zu sagen wann er verrutscht

    All in all it's just another brick in the wall

  • Wir müssen ja das Problem eingrenzen, irgendwelche Symptone erkenne sonst wird das nichts.


    Schonmal dass Callback vereinfach nur Geld zu speichern? Gleiche Fehler?

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)

  • Bei den Häusern etc alles Ohne Probleme nur bei Spielern ist es so


    //e
    Nach mehreren Versuchen es auch mit dern Funktionen von Maddin zu machen, tritt das Problem auch auf


    Es muss nicht an MySQL immer liegen ^^ es kann auch davon kommen das sich ihrgend wo in deinem Skript werte verschieben.
    Die grundsätzliche werte Verschiebung ist mir nur bekannt durch hohe ressourcenauslastung.
    Jedoch ist sowas auch anderweitig möglich ich hatte selbst mal solch ein Fehler in einem Gangfightsystem nur das sich dabei die Zonen ID verschoben hatte
    nun gut ich hab es darauf hin gelöscht und damals neu geschrieben. Aber du kannst auch dein skript im debugmodes laufen lassen da man meist auch interessante Fehler mit dem crashdetectplugin findet.
    Sonst kann ich dir nur mal raten immer mal wieder die werte auszugeben mit printf zum beispiel . Weil genaue Aussagen kann man dazu nicht machen.


    @ Jony Nun gut ich bin mir nicht genau sicher ob dies einen Error geben würde bei php stelle ich auch beiseite jedoch
    kann man das Einfache Anführungszeichen bei Zahlen auch verwenden ist jedoch nicht nötig man verwendet es nur bei Strings das MySQL
    das ganze nicht als Spalte interpretiert

  • Das chrashdetekt Plugin sagt mir nix wenn es vorkommt
    An Recorcen habe ich auch so sparsam wie Moeglich gehalten
    Die Amy ist nur ziemlich Gros da ich max_vehicles verwendet habe
    Und ich hab's auch mal Grunderneuert aber geholfen hat es auch nicht wirklich

    All in all it's just another brick in the wall