Werte werden umgesetzt

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
  • Hey Community,


    ich habe ein MySql System und habe komischerweise bei einem Skript ein Problem.
    Das Skript setzt einfach wie es will die Variablen um(?).
    Hier sind mal die Stellen in denen ich die Variable "pInfo[*][pLevel]" setze bzw. benutze:

    Code


    public OnPlayerConnect(playerid) {
    // ...
    for(new i; pInfo_e:i < pInfo_e; ++i) { pInfo[playerid][pInfo_e:i] = 0; }
    // ...
    }

    Code
    public Account_Load(playerid) {
    // ....
    mysql_get_field("money", data); pInfo[playerid][pMoney] = strval(data);
    mysql_get_field("level", data); pInfo[playerid][pLevel] = strval(data);
    printf("[debug] %d > %d (1)", strval(data), pInfo[playerid][pLevel]); // Ausgabe: [debug] 0 > 0 (1)
    mysql_get_field("ep", data); pInfo[playerid][pEp] = strval(data);
    // ...
    }

    Code
    public Account_Save(playerid) {
    // ...
    printf("%d", pInfo[playerid][pLevel]); // Ausgabe: 0
    format(qry,sizeof qry, "UPDATE `game_accs` SET `money` = '%d', `level` = '%d', `ep` = '%d' WHERE `ID` = '%d';", pInfo[playerid][pMoney], pInfo[playerid][pLevel], pInfo[playerid][pEp], pInfo[playerid][pID]); // gekürzt, da die anderen Werte unwichtig & komischerweise richtig sind.
    printf("[debug] Query: %s (2)", qry); // Ausgabe: UPDATE `game_accounts` SET `money` = '5000', `level` = '0', `ep` = '0' WHERE `ID` = '1'; (2) (stimmt soweit alles soweit alles gut)
    // ...
    }

    Code
    // ...
    format(string,sizeof string,"%s~n~Level %d (%d Ep)", Player_GetRang(playerid), pInfo[playerid][pLevel], pInfo[playerid][pEp]); // Ausgabe: Rang~n~Level 0 (0 Ep) (stimmt auch noch)
    PlayerTextDrawSetString(playerid, StatsBoxLeft[playerid], string);
    SetPlayerScore(playerid, pInfo[playerid][pLevel]); // stimmt
    // ...


    Hier nochmal die Logs von MySql, damit man auch sieht dass es richtig gespeichert sowie geladen wird:

    Log

    Code
    // ------------------------ Vorher// Laden[22:31:49] >> mysql_fetch_field_row( Connection handle: 1 )[22:31:49] CMySQLHandler::FetchField("money") - 5000// Speichern:[22:31:53] CMySQLHandler::Query(UPDATE `game_accs` SET `money` = '5000', `level` = '0', `ep` = '0' WHERE `ID` = '1';) - Successfully executed.// ------------------------ Nachher// Laden:[22:32:06] >> mysql_fetch_field_row( Connection handle: 1 )[22:32:06] CMySQLHandler::FetchField("money") - 5000 // man sieht es stimmt// Speichern: [22:36:45] CMySQLHandler::Query(UPDATE `game_accs` SET `money` = '100', `level` = '101', `ep` = '67' WHERE `ID` = '1';) - Successfully executed.// Nach einer weile im Spiel (weiss nicht genau welche Aktionen...) setzen sich diese Werte schon um. o.O// Geld, Level sowie Ep wurden einfach umgesetzt (gleiche gilt für eine weitere Variable (die z.B. nie benutzt wurde(?)))

    Log


    Es sind immer die Werte 100, 101, 67 und beim letzten Wert ist es 32.
    Da es echt ziemlich zufällig ist (vielleicht gibt es doch eine Aktion die man machen muss), weiss ich nicht genau wo der Fehler entstehen soll,
    außer da wo ich die Variable(n) benutzt habe.
    Es muss ja etwas mit dem Speichern zu tun haben, allerdings finde ich da überhaupt keinen Fehler.
    Ich habe nochmal in der Tabelle geschaut, es sind alle Werte auf "int(11)" eingestellt.
    Crashdetect spuckt auch nichts raus, also ein Fehler vom Skript ist es ja anscheinend nicht.


    PS: Wer sich davon selbst überzeugen will kann mir eine PN schreiben, dann gebe ich euch die IP vom Testserver.


    // Edit: eine Zeile vergessen
    // Edit 2: Fehler gefunden

    Spoiler anzeigen


    if ( ortModus == 20 ) { ortModus = 0; format(pInfo[playerid][pArea], 64, GetAreaName(x,y,z)); }
    ortModus ++;

    pArea war kein String, sondern ein Integer aber trotzdem wurde das richtige Gebiet angezeigt und es kam kein Fehler beim Compilieren, merkwürdig.