Beim Login am Logout punkt spawnen

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 möchte mich an dem Punkt einloggen wo ich mich zuvor ausloggte.


    Ich habe es schon versucht, aber es klappt noch nicht wirklich, findet ihr den Fehler?


    OnPlayerDisconnect

    new SpielerDatei[64], sName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sName, sizeof(sName));
    format(SpielerDatei, sizeof(SpielerDatei), "/Accounts/%s.txt",sName);
    GetPlayerPos(playerid, SpielerInfo[playerid][Spawn_X], SpielerInfo[playerid][Spawn_Y], SpielerInfo[playerid][Spawn_Z]);
    SpielerInfo[playerid][Spawn_Int] = GetPlayerInterior(playerid);
    SpielerInfo[playerid][Spawn_World] = GetPlayerVirtualWorld(playerid);
    dini_FloatSet(SpielerDatei, "SpawnX", SpielerInfo[playerid][Spawn_X]);
    dini_FloatSet(SpielerDatei, "SpawnY", SpielerInfo[playerid][Spawn_Y]);
    dini_FloatSet(SpielerDatei, "SpawnZ", SpielerInfo[playerid][Spawn_Z]);
    dini_IntSet(SpielerDatei, "SpawnInt", SpielerInfo[playerid][Spawn_Int]);
    dini_IntSet(SpielerDatei, "SpawnWorld", SpielerInfo[playerid][Spawn_World]);
    dini_IntSet(SpielerDatei, "SpielerSkin", SpielerInfo[playerid][Skin]);


    OnPlayerSpawn

    SetPlayerPos(playerid, SpielerInfo[playerid][Spawn_X],SpielerInfo[playerid][Spawn_Y], SpielerInfo[playerid][Spawn_Z]);
    SetPlayerInterior(playerid, SpielerInfo[playerid][Spawn_Int]);
    SetPlayerVirtualWorld(playerid, SpielerInfo[playerid][Spawn_World]);
    SetPlayerSkin(playerid, SpielerInfo[playerid][Skin]);


    Beim Registrieren bekommt er einen festen Spawnpunkt:



    SpielerInfo[playerid][Spawn_X] = 1764.7111;
    SpielerInfo[playerid][Spawn_Y] = -1897.4806;
    SpielerInfo[playerid][Spawn_Z] = 13.5633;
    SpielerInfo[playerid][Spawn_Int] = 0;
    SpielerInfo[playerid][Spawn_World] = 0;

    Mit freundlichen Grüßen,
    Dachdecker

  • So würde ich es machen: Ich würde, wenn der Spieler disconnected, die Position abfragen.


    //Vorab: Natürlich solltest du das Enum und so weiter deinem anpassen, falls dir das irgendwie hilft.
    //Vorab: Natürlich solltest du das Enum und so weiter deinem anpassen, falls dir das irgendwie hilft.
    enum DeinSpielerEnum
    {
    Float:pDisSpawnX,
    Float:pDisSpawnY,
    Float:pDisSpawnZ
    }
    new DSE[MAX_PLAYERS][DeinSpielerEnum];


    //Dann bei OnPlayerDisconnect
    OnPlayerDisconnect(die Params...)
    {
    //Zuerst die Koordinaten abfragen, wo er war, als er disconnected ist und dann
    GetPlayerPos(playerid, DES[playerid][pDisSpawnX]DES[playerid][pDisSpawnY],DES[playerid][pDisSpawnZ]);
    //Dann die ganzen Werte des Spieler speichern.
    SaveUser(playerid);
    return 1;
    }


    //Dann, wenn Spieler spawnt
    OnPlayerSpawn(playerid)
    {
    //So, auf diese Weise würde ich das tun.
    SetPlayerPos(playerid, DES[playerid][pDisSpawnX]DES[playerid][pDisSpawnY],DES[playerid][pDisSpawnZ]);
    return 1;
    }


    Ich habe mich jetzt explizit auf die Disconnect + Spawn-Werte bezogen und nicht auf World und so...
    das kannst du dir dann ja selber anhand meines Beispieles vorstellen, wie ich es meine. Versuch es
    so bzw. vielleicht gab dir das einen kleinen Denkanstoß, wie du das machen kannst.


    Ansonsten könntest du vielleicht mal nach weiteren SetPlayerPos suchen. Zum Beispiel bei OnPlayerRequestClass.


    @Dachdecker