Positionen beim Aus logen speichern und beim ein logen wieder dort 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
  • Hey Leute ich möchte nun machen, dass wenn man sich Ausloggt die Position des Spielers gespeichert und beim einloggen dort auch wieder spawnt. Ich hab es auch schon gegooglet und fand diesen Thread:
    beim ausloggen position speichern und dort Spawnen


    Ich hab jetzt aber das Problem das ich 1. nicht weis ob das auch für ein selfmade Script so machbar ist oder nicht, da es ja für GF ist und wenn nicht ob es irgendwo ein Tutorial hierfür gibt das auf Dini basiert.


    Falls es nicht so schwer ist könntet ihr mir es vielleicht erklären.
    Schon mal vielen Dank



    Mfg Tool

    Zurzeit bin ich an einem Script schreiben, dass sich so gut es machbar ist an GTA Online orientiert ;)


    Falls jemand Frage hat, bzw mir helfen will soll mir einfach hier oder bei PSN schreiben ^^

  • Natürlich kann man das auf einen Selfmade Script machen.


    Beim Ausloggen die Spieler Position auslesen + abspeichern (GetPlayerPos).


    Beim Einloggen die gespeicherte Position auslesen + setzten (SetPlayerPos).


    Bei Fragen sind wir ja hier ^^


  • new Float:Pos[4];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    GetPlayerFacingAngle(playerid,Pos[3]);


    //dann beim speichern sie posis eintragen

    und beim laden auslesen und setzen, mit setplayerpos, und setplayerfacingangle


    @BaRkS:
    Man kann es auch in jedem Godfather machen^^

  • Schon mal danke aber muss ich das SetPlayerPos schon beim Connecten oder "erst" beim Spawn einbringen.


    Und nur der Sicherheitshalber das speichern der Positionen muss beim Disconnecten passieren oder?

    Zurzeit bin ich an einem Script schreiben, dass sich so gut es machbar ist an GTA Online orientiert ;)


    Falls jemand Frage hat, bzw mir helfen will soll mir einfach hier oder bei PSN schreiben ^^

  • Ok vielen Dank müsste es jetzt hinbekommen ^^


    Aber mal was off Topic xD


    Ich muss hier die Community echt mal loben.
    Ich habe es selten gesehen das man so schnelle, gute und vor allem Freundliche Hilfe bekommt xD

    Zurzeit bin ich an einem Script schreiben, dass sich so gut es machbar ist an GTA Online orientiert ;)


    Falls jemand Frage hat, bzw mir helfen will soll mir einfach hier oder bei PSN schreiben ^^

  • Ok vielen Dank müsste es jetzt hinbekommen ^^


    Aber mal was off Topic xD


    Ich muss hier die Community echt mal loben.
    Ich habe es selten gesehen das man so schnelle, gute und vor allem Freundliche Hilfe bekommt xD


    Ok vielen Dank müsste es jetzt hinbekommen ^^


    Aber mal was off Topic xD


    Ich muss hier die Community echt mal loben.
    Ich habe es selten gesehen das man so schnelle, gute und vor allem Freundliche Hilfe bekommt xD


    Ich glaub an dich^^


    //offtopic.
    Man hilft wo man kann ^^

  • So hab es jetzt tatsächlich geschaft ^^
    hier mal der Code.
    public OnPlayerDisconnect(playerid, reason)
    {
    new file[128], pname[MAX_PLAYER_NAME];
    new Float:x, Float:y, Float:z;
    GetPlayerName(playerid, pname, sizeof(pname));
    format(file, sizeof(file), "\\SavePos\\%s.txt", pname);
    if(!dini_Exists(file))
    dini_Create(file);
    GetPlayerPos(playerid, x, y, z);
    dini_FloatSet(file, "posX", x);
    dini_FloatSet(file, "posY", y);
    dini_FloatSet(file, "posZ", z);
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    new file[128], pname[MAX_PLAYER_NAME];
    new Float:x, Float:y, Float:z;
    GetPlayerName(playerid, pname, sizeof(pname));
    format(file, sizeof(file), "\\SavePos\\%s.txt", pname);
    if(!dini_Exists(file))
    {
    x = dini_Float(file, "posX");
    y = dini_Float(file, "posY");
    z = dini_Float(file, "posZ");
    SetPlayerPos(playerid, x, y, z);
    return 1;
    }
    else
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }
    }
    könnt ihn euch ja mal angucken und mir sagen ob es so sauber gelöst ist.
    Beziehungsweise ob ich die if-abfrage gut gemacht habe, da mir ehrlich gesagt keine leichtere idee einfiel
    xD

    Zurzeit bin ich an einem Script schreiben, dass sich so gut es machbar ist an GTA Online orientiert ;)


    Falls jemand Frage hat, bzw mir helfen will soll mir einfach hier oder bei PSN schreiben ^^

  • public OnPlayerDisconnect(playerid, reason)
    {
    new file[40], pname[MAX_PLAYER_NAME];
    new Float:x, Float:y, Float:z;
    GetPlayerName(playerid, pname, sizeof(pname));
    format(file, sizeof(file), "/SavePos/%s.txt", pname); // Das '\\' muss du noch zu '/' Ändern nicht 2x '//' sondern nur 1x '/
    if(!dini_Exists(file))
    dini_Create(file);
    GetPlayerPos(playerid, x, y, z);
    dini_FloatSet(file, "posX", x);
    dini_FloatSet(file, "posY", y);
    dini_FloatSet(file, "posZ", z);
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    new file[40], pname[MAX_PLAYER_NAME];
    new Float:x, Float:y, Float:z;
    GetPlayerName(playerid, pname, sizeof(pname));
    format(file, sizeof(file), "/SavePos/%s.txt", pname); // Das '\\' muss du noch zu '/' Ändern nicht 2x '//' sondern nur 1x '/'
    if(!dini_Exists(file))
    {
    x = dini_Float(file, "posX");
    y = dini_Float(file, "posY");
    z = dini_Float(file, "posZ");
    SetPlayerPos(playerid, x, y, z);
    return 1;
    }
    else
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }
    }


    # Edit


    Ich Empfehle dir nehme am besten immer nur die benötigten Ressourcen die auch wirklich gebraucht werden!
    Einige denken sich halt, ach mache ich doch einfach mal einen 256 string schadet ja nicht..
    das frisst nur unnötige Ressourcen ich mach dir mal ein Beispiel:


    FALSCH:


    new string[256];
    format(string,sizeof(string),"Dein name %s",SpielerName(playerid);
    SendClientMessage(playerid,WEIS,string);


    RICHTIG:


    new string[40];
    format(string,sizeof(string),"Dein name %s",SpielerName(playerid); // Denn die Maximale namens länge in SA:MP liegt bei meine ich 25-26 Zeichen oder weniger .. daher würde ich hier bei einfach einen 40 nehmen statt einen 256 String.
    SendClientMessage(playerid,WEIS,string);


    Der Text selbst hat ja nur 9 Zeichen zählt man aber den Namen dazu sind es um die 30-35 Zeichen also würde hierbei ein 256 extrem überflüssig sein also macht man ganz einfach einen 40 Raus.



    Falls du aber mal kein bock hast Zeichen zu zählen so geht es mir auch geht extrem auf die Augen ^^
    - Klick HIER


    Ich hoffe du hast verstanden was ich damit sagen möchte, man sollte einfach nur die Ressourcen verwenden die auch wirklich notwendig sind.



    Grüße

    3 Mal editiert, zuletzt von Equ ()