MySQL Speichert Komisch

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 Morgen,
    ich wollt mich grad an mein Selfmade ran setzten,
    was ich in den letzten 3 Tagen aus guter Laune geschrieben habe.
    Das Problem ist, das ich meine Sachen noch nicht getestet habe, und erst jetzt
    Bemerkt habe, das Werte Falsch Abgespeichert werden sowie, auch Falsch Komprimiert.


    Meine Zeilen:
    Registrierung:

    {
    CreateAccount(playerid, inputtext);
    SetPVarInt(playerid,"Eingeloggt",1);
    GivePlayerMoney(playerid, 1000);
    SpielerInfo[playerid][pGeld] = 1000;
    SpawnPlayer(playerid);
    SavePlayer(playerid);
    return 1;
    }


    LoadAccount und SaveAccount:
    stock LoadPlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]);
    SetPlayerScore(playerid, mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]));
    GivePlayerMoney(playerid, mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]));
    SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]);
    }
    return 1;
    }
    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
    }
    }
    return 1;
    }


    Mein Problem:
    Wenn mein Account erstellt wird, bekomme ich die 1000$,
    aber wenn ich mich Auslogge und neu auf den Server connecte,
    bekomme ich kein Geld. Sowie das Geld auch nicht gespeichert wird.


    Hoffe um schnelle Hilfe!
    Jeffry:

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • GivePlayerMoney(playerid, mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]));


    Das solltest du vielleicht so schreiben:


    SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]);
    GivePlayerMoney(playerid, SpielerInfo[playerid][pGeld]);


    und printe dir das mal, dann weißt du ja, was er macht.


    Wenn pGeld = 0 ist, dann steht in deiner Datenbank auch 0.
    Dann solltest du überprüfen ob PVarInt(playerid,"Eingeloggt") auch wirklich 1 ist und das gespeichert wird.


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von Jeffry ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

  • Hat leider nicht Funktioniert.
    Also Geprintet wird es aber es wird nicht in die Datenbank gesetzt.
    Der Wert in der Datenbank bleibt also 0.


    Jeffry:
    Deins hat leider auch nicht Funktioniert.
    Wert bleibt 0... :cursing:


    //Edit:
    Ich sehe gerade das der Spieler beim Logout nicht gespeichert wird.
    Gibts dafür auch grad noch ne Lösung? D:

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • Dann schalte mal den MySQL Debug Modus an und poste was im Log steht wenn du dich anmeldest und wenn du dich registriert hast.


    Hast du den Code mit der Registrierung gerade hinzugefügt oben, oder war der da schon immer? Wenn der da schon immer war dann hat mein Handy Browser den nicht angezeigt. :S

  • Nein der Code bei der Registrierung war schon immer da^^


    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • SpielerInfo[playerid][pName]


    Laut dem Log ist pName leer...


    Hast du auch bevor du den Spieler lädst bzw speicherst (am besten unter OnPlayerConnect):


    GetPlayerName(playerid,SpielerInfo[playerid][pName],MAX_PLAYER_NAME);


    mfg. :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • GetPlayerName(playerid,SpielerInfo[playerid][pName],MAX_PLAYER_NAME);


    Jetzt sind wir schonmal einen Schritt weiter ;)
    Das Geld wird Gespeichert! Nur wenn man sich InGame Registriert, erhält er nun 2000$ als nur angegebene 1000$
    Was ist das Problem?

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • Ahh, dann war es die elende Verbindung. Hoffentlich wird das eplus Netz und das von O2 bald zusammengelegt. X(


    Gibst du es ihm noch irgendwo?


    Ändere mal den Wert von 1000 zu 500. Bekommst du dann 1500 oder 1000?
    Wenn ersteres, dann gibst du dem Spieler noch irgendwo 1000, wenn letzteres, dann hast du vielleicht einen Hook in der GivePlayerMoney Funktion.

  • Also wenn ich den Wert auf 500 setze, bekomme ich 1000$.
    Ich habe nur eine Abfrage mit GivePlayerMoney im Script :O


    //EDIT:
    In der Datenbank steht dennoch nur 500$.
    Wenn ich relogge kommen wieder 1000$ also kann da ja was nicht Stimmen

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • Mit diesen Angaben, kann man dir schlecht helfen...


    Poste nochmal genau den Teil, wo du dem Spieler Geld gibst...


    Und printe dir Stellenweise doch dein Geld, wahrscheinlich gibst du ihm irgendwo halt nochmal geld oder irgendwas wird doppelt aufgerufen ;)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Mit diesen Angaben, kann man dir schlecht helfen...


    Poste nochmal genau den Teil, wo du dem Spieler Geld gibst...


    Und printe dir Stellenweise doch dein Geld, wahrscheinlich gibst du ihm irgendwo halt nochmal geld oder irgendwas wird doppelt aufgerufen ;)


    Also:
    case DIALOG_REGISTER:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Das angegebene Passwort war zu Kurz...\nBitte Registrier dich jetzt mit einem Passwort:","Register","Abbrechen");
    return 1;
    }
    else
    {
    CreateAccount(playerid, inputtext);
    SetPVarInt(playerid,"Eingeloggt",1);
    SpielerInfo[playerid][pGeld] += 1000;
    GivePlayerMoney(playerid, 1000);
    SpielerInfo[playerid][pLevel] += 1;
    print("Ein neuer Spieler hat sich Registriert!");
    SpawnPlayer(playerid);
    SavePlayer(playerid);
    return 1;
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    stock CreateAccount(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name,Name);
    mysql_real_escape_string(pass,pass);
    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Name, pass);
    mysql_query(query);
    return true;
    }
    stock LoadPlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]);
    SetPlayerScore(playerid, mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]));
    SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]);
    GivePlayerMoney(playerid, SpielerInfo[playerid][pGeld]);
    SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]);
    }
    return 1;
    }
    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Geld", GetPlayerMoney(playerid), "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
    print("Spieler wurde Gespeichert!");
    }
    }
    return 1;
    }

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • nach nem Relogg dann auf einmal wieder 2000$


    Dann gibst du ihm anscheinend schonmal Geld, dann schreib, bevor du ihm Geld gibst das hier hin:


    ResetPlayerMoney(playerid);


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Logischerweise, kann das ja nicht sein.


    Printe dir doch mal deine Geld Variable...was du dem Spieler gibst...und was der Spieler hat...


    Dann kannst du doch selbst rausfinden, wo da was nicht stimmt :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S