Positon Speicherung klappt nicht so ganz

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
  • stock SavePlayerPos(playerid){if(GetPVarInt(playerid,"Pos"))return 1;new Float: x, Float: y, Float: z;GetPlayerPos(playerid,x,y,z);return 1;}


    stock SpielerSpeicher(playerid)dini_IntSet(Spielerdatei,"Pos",GetPVarInt(playerid,"Pos"));
    OnPlayerDisconnectSavePlayerPos



    Problem Wert bleibt immer auf 0!
    Und ich habe kein Spawn festegelegt für 0 wie mach ich das am besten?

  • Du brauchst drei Variabeln des Types Float.


    new Float:x,Float:y,Float:z;
    Darin speicherst du die Position
    GetPlayerPos(playerid,x,y,z);
    Diese Variablen überträgst du in die Speicherverwaltung des PVarFloat
    SetPVarFloat(playerid,"x",x);
    SetPVarFloat(playerid,"y",y);
    SetPVarFloat(playerid,"z",z);


    Mit Integern kannst du hier nicht arbeiten, es seie denn du rundest deine Floats auf ganze Zahlen.


    edit:
    Zum Speichern musst du in deiner dini dann natürlich drei Felder für die drei Achsen erzeugen und nicht nur ein Feld.


    Wenn du das ganze auf ein Feld reduzieren willst müsstest du die drei Koordinaten per Trenner (z.B. "|") in einen String schreiben und diesen speichern. Dann beim laden natürlich per split o.Ä. wieder in drei Werte brechen. Das ist aber nicht zu empfehlen, da es sich dann nicht mehr um atomare Werte handelt und das sowieso sehr Laufzeitintensiv ist.

  • Habs so gemacht:
    stock SavePlayerPos(playerid){ new Spielerdatei[64]; new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name)); format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name); new Float:x,Float:y,Float:z; GetPlayerPos(playerid,x,y,z); SetPVarFloat(playerid,"x",x); SetPVarFloat(playerid,"y",y); SetPVarFloat(playerid,"z",z); return 1;}



    public OnPlayerDisconnect(playerid, reason){ SpielerSpeichern(playerid); SetPVarInt(playerid, "loggedin", 0); SavePlayerPos(playerid);




    Aber irgendwie bleiben die Werte auf 1?

  • Wo in deinem savePlayerPos übergibst du die Werte denn an deine Datei? Sollte dort das Problem liegen brauchst du SetPVarFloat garnicht. Dann nimmst du einfach die x,y,z und speicherst diese in deiner dini