MYSQL Hilfe! Speichert nach erstem Login keine Daten.

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
  • Hi ich habe ein kleines Problem und zwar hab ich nun mit SQL angefangen.
    Hab jetzt Register und Login Script über Mysql. Das Problem ist das ich jetzt will das er die Position vom Spieler speichern soll.
    Das klappt auch... allerdings nicht nach der Registrierung.


    Und zwar wenn ich mich registriere dann erstellt er den Account auch in der Datenbank.
    Bei Disconnect sollte er eigentlich Spielerdaten speichern. Das macht er aber nicht.
    Wenn ich mich dann also nochmal einlogge, dann spawnt er bei Koordinaten 0.0.0 weil er dies ja aus der Datenbank ließt.
    Wenn ich mich nun aber wieder auslogge, speichert er wiederum die daten und bei nexten login funzt alles wie gewünscht.


    Hier mal mein script.


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {
    case DIALOG_REGISTER:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Das angegebene Passwort war zu Kurtz...\nBitte Registrier dich jetzt mit einem Passwort:","Register","Abbrechen");
    return 1;
    }
    else
    {
    CreateAccount(playerid, inputtext);
    SetPVarInt(playerid,"Eingeloggt",1);
    SetPVarInt(playerid,"FirstLogin",1);
    return 1;
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das Angegebene Passwort war Falsch.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    return 1;
    }
    else
    {
    new SpielerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, SpielerName, MAX_PLAYER_NAME);
    if(!strcmp(inputtext, mysql_ReturnPasswort(SpielerName), true))
    {
    SetPVarInt(playerid,"Eingeloggt",1);
    LoadPlayer(playerid);
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das war das Falsche Passwort.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    return 1;
    }
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    }
    return 1;
    }


    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]);
    SpielerInfo[playerid][pGeld] = 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]);
    SpielerInfo[playerid][pHealth] = mysql_GetFloat("accounts", "Health", "Name", SpielerInfo[playerid][pName]);
    SetPVarFloat(playerid,"x", mysql_GetFloat("accounts", "XPos", "Name", SpielerInfo[playerid][pName]));
    SetPVarFloat(playerid,"y", mysql_GetFloat("accounts", "YPos", "Name", SpielerInfo[playerid][pName]));
    SetPVarFloat(playerid,"z", mysql_GetFloat("accounts", "ZPos", "Name", SpielerInfo[playerid][pName]));


    }
    return 1;
    }


    stock SavePlayer(playerid)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    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]);
    mysql_SetFloat("accounts", "XPos", x, "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "YPos", y, "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "ZPos", z, "Name", SpielerInfo[playerid][pName]);
    }
    }
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    if(GetPVarInt(playerid,"Firstlogin") == 1)
    {
    SavePlayer(playerid);
    DeletePVar(playerid,"Eingeloggt");
    DeletePVar(playerid,"FirstLogin");
    }
    else
    {
    SavePlayer(playerid);
    DeletePVar(playerid,"Eingeloggt");
    }
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    if(GetPVarInt(playerid,"FirstLogin") == 1)
    {
    SetPlayerPos(playerid, 1214.3566, -930.1499, 42.6638);
    }
    else
    {
    SetPlayerPos(playerid, GetPVarFloat(playerid, "x"), GetPVarFloat(playerid, "y"), GetPVarFloat(playerid,"z"));
    }
    return 1;
    }


    Kann mir denn niemand weiterhelfen?

    Einmal editiert, zuletzt von Virus ()

  • Das IsPlayerConnected ist unnötig. Das kannst du weglassen.


    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) {


    Mach mal eine Testausgabe.


    if(GetPVarInt(playerid,"Eingeloggt") == 1) { printf("Test");
    }


    Wenn es Test ausgibt auf deinem Server also in der RCON, dann wird die Bedingung ausgeführt. Wenn es nicht ausgegeben wird, dann ist der Fehler woanders.

    Die Macht etwas zu bewirken, ist in Dir. Du musst sie nur rauslassen


    cristiano-ronaldo-525-portugal-euro-2012-banner-wallpaper.jpg