Position speichert erst nach 2. Login... was mach ich falsch?

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Hallo, Ich hab versucht meine Position beim Disconnect zu speichern.


    Allerdings funktioniert es nicht so richtig.


    Und zwar passiert folgendes:


    Ich registriere mich und log mich dann ein. wenn ich dann disconnecte, speichert er nichts...
    dann logge ich mich wieder ein und spawne dann also bei 0,0,0,... Falle also durch die map und lande dann irgendwo im nimmerland.
    Wenn ich nun disconnecte, speichert er alles richtig ab und ich spawne nach erneutem Login dort im nimmerland wo ich mich ausgeloggt habe.


    Hier mal mein Code:


    public OnPlayerDisconnect(playerid, reason)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SetPVarFloat(playerid, "xpos", x);
    SetPVarFloat(playerid, "ypos", y);
    SetPVarFloat(playerid, "zpos", z);
    mysql_SetFloat("accounts", "PosX", GetPVarFloat(playerid,"xpos"), "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "PosY", GetPVarFloat(playerid,"ypos"), "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "PosZ", GetPVarFloat(playerid,"zpos"), "Name", SpielerInfo[playerid][pName]);
    SavePlayer(playerid);
    DeletePVar(playerid,"Eingeloggt");
    DeletePVar(playerid,"FirstSpawn");
    }
    }
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    if(GetPVarInt(playerid,"FirstSpawn") == 1)
    {
    SetPlayerPos(playerid, 1730.5989,-1950.5476,14.1172);
    SetPVarInt(playerid,"FirstSpawn",0);
    }
    else
    {
    SetPlayerSkin(playerid,SpielerInfo[playerid][pSkin]);
    SetPlayerPos(playerid,SpielerInfo[playerid][PosX],SpielerInfo[playerid][PosY],SpielerInfo[playerid][PosZ]);
    SetPlayerFacingAngle(playerid,SpielerInfo[playerid][PosR]);
    SetPlayerInterior(playerid,SpielerInfo[playerid][pInterior]);
    SetPlayerHealth(playerid,SpielerInfo[playerid][pHealth]);
    }
    }
    else
    {
    Kick(playerid);
    }
    return 1;
    }


    stock LoadPlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    SpielerInfo[playerid][PosX] = mysql_GetFloat("accounts", "PosX", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][PosY] = mysql_GetFloat("accounts", "PosY", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][PosZ] = mysql_GetFloat("accounts", "PosZ", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][PosR] = mysql_GetFloat("accounts", "PosR", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pInterior] = mysql_GetInt("accounts", "Interior", "Name", SpielerInfo[playerid][pName]);
    SetPlayerSkin(playerid,SpielerInfo[playerid][pSkin]);
    }
    return 1;
    }
    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    new Float:exithealth;
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SetPVarFloat(playerid, "xpos", x);
    SetPVarFloat(playerid, "ypos", y);
    SetPVarFloat(playerid, "zpos", z);
    GetPlayerHealth(playerid,exithealth);
    SpielerInfo[playerid][pInterior] = GetPlayerInterior(playerid);
    mysql_SetFloat("accounts", "PosX", GetPVarFloat(playerid,"xpos"), "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "PosY", GetPVarFloat(playerid,"ypos"), "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "PosZ", GetPVarFloat(playerid,"zpos"), "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Interior", SpielerInfo[playerid][pInterior], "Name", SpielerInfo[playerid][pName]);
    printf("gespeichert");
    }
    }
    return 1;
    }



    Ich hoffe mir kann da jemand helfen ;( :rolleyes: :rolleyes: :rolleyes:

  • Wahrscheinlich liegt der Fehler hier :

    if(GetPVarInt(playerid,"Eingeloggt") == 1)


    Settest du ihm die Variable auf 1 wenn er sich neu registriert ?


    - Handy

  • Unter "Accounterstellen / Createaccount" eine Variable für "Accounterstellt" (SetPVarInt(playerid, "Newaccount", 1)) erstellen die nur einmalig ist beim ersten login bzw. register



    public OnPlayerSpawn(playerid)
    {
    if(GetPVarInt(playerid, "Eingeloggt") == 1 && GetPVarInt(playerid, "Newaccount") == 1) // Falls Eingeloggt 1 ist und Newaccount auf 1 ist
    {
    SetPlayerPos(playerid, x, y, z); // Spieler normal spawnen
    SetPlayerFacingAngle(playerid, angle);
    }
    else if(GetPVarInt(playerid, "Eingeloggt") == 1 && GetPVarInt(playerid, "Newaccount") == 0)
    {
    SetPlayerPos(playerid, x,y,z); // Spieler spawnen mit den Positionen aus deiner Accountdatei/MySQL Datenbank
    SetPlayerFacingAngle(playerid, angle);
    }
    else //Falls nichts davon zutrifft, und irgendwelche andere Werte sind (zmb. newaccount 1, eingeloggt 0) oder sonstiges
    {
    SendClientMessage(playerid, -1, " Du bist nicht eingeloggt und wurdest gekickt.");
    Kick(playerid);
    }
    return true;
    }

    Ich hoffe das hilft dir weiter

  • es geht mir eher um das speichern selbst. Denn er speichert eigentlich wenn man den Server verlässt. Allerdings nicht wenn man das erste mal den Server verlässt.


    Edit// Hat sich erledigt Sh4kr0n hat mir geholfen danke an alle die sich Mühe gegeben haben. und Danke Sh4kr0n :D

    Einmal editiert, zuletzt von virushunt ()