Spawn an letzter InGame Position

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
  • Mahlzeit..


    Da ich nun schon seit ein paar Tagen immer wieder Thread sehe und lese wo es einige nicht ganz schaffen ein System zu basteln bei welchem man nach dem Disconnect wieder an der selben Stelle spawnt wo man sich ausgeloggt hat, habe ich mal schnell nen Code geschrieben um die Threads zu klären.


    Es ist kein komplettes Filterscript, lediglich nur ein paar Code Ausschnitte.


    Ich habe es absichtlich nicht in den Codeschnipsel Bereich gepostet da es dort vermutlich untergehen würde!


    Ihr müsst nur die Variablen an eurem Script anpassen und ggf. auch die Lade-Funktion ändern.
    In meinem Testscript welches ich dafür angefertigt habe, hat es einwandfrei funktioniert.


    Viel Spaß damit.



    In die Array vom Spieler:

    Float:logPos[4],
    SP_Change,
    SP_Int


    Spieler speichern:

    //Am Anfang vom Speicherscript
    new Float:p[4];
    GetPlayerPos(playerid,p[0],p[1],p[2]);
    GetPlayerFacingAngle(playerid,p[3]);


    //Daten in die Tabelle schreiben (MySQL):
    mysql_SetFloat("Accounts", "X", p[0], "Name", Spieler[playerid][Name]);
    mysql_SetFloat("Accounts", "Y", p[1], "Name", Spieler[playerid][Name]);
    mysql_SetFloat("Accounts", "Z", p[2], "Name", Spieler[playerid][Name]);
    mysql_SetFloat("Accounts", "A", p[3], "Name", Spieler[playerid][Name]);
    mysql_SetInt("Accounts", "SpawnChange", Spieler[playerid][SP_Change], "Name", Spieler[playerid][Name]);
    mysql_SetInt("Accounts", "Interior", GetPlayerInterior(playerid), "Name", Spieler[playerid][Name]);


    //Für die Dini-Nutzer
    new Datei[128],name[24];
    GetPlayerName(playerid,name,24);
    format(Datei,sizeof(Datei),"PFAD_ZUM_ACCOUNT",name);
    dini_FloatSet(Datei,"X", p[0]);
    dini_FloatSet(Datei,"Y", p[1]);
    dini_FloatSet(Datei,"Z", p[2]);
    dini_FloatSet(Datei,"A", p[3]);
    dini_IntSet(Datei,"SpawnChange", Spieler[playerid][SP_Change]);
    dini_IntSet(Datei,"Interior", GetPlayerInterior(playerid));


    Spieler laden:
    (Ich denke mal das die meisten nach dem Tutorial von maddin o.ä gehen, daher habe ich es auch direkt diesem angepasst.)

    //MySQL:
    Spieler[playerid][logPos][0] = mysql_GetFloat("Accounts", "X", "Name", Spieler[playerid][Name]);
    Spieler[playerid][logPos][1] = mysql_GetFloat("Accounts", "Y", "Name", Spieler[playerid][Name]);
    Spieler[playerid][logPos][2] = mysql_GetFloat("Accounts", "Z", "Name", Spieler[playerid][Name]);
    Spieler[playerid][logPos][3] = mysql_GetFloat("Accounts", "A", "Name", Spieler[playerid][Name]);
    Spieler[playerid][SP_Change] = mysql_GetInt("Accounts", "SpawnChange", "Name", Spieler[playerid][Name]);
    Spieler[playerid][SP_Int] = mysql_GetInt("Accounts", "Interior", "Name", Spieler[playerid][Name]);


    Dini:
    new Datei[128],name[24];
    GetPlayerName(playerid,name,24);
    format(Datei,sizeof(Datei),"PFAD_ZUM_ACCOUNT",name);
    Spieler[playerid][logPos][0] = dini_Float(Datei, "X");
    Spieler[playerid][logPos][1] = dini_Float(Datei, "Y");
    Spieler[playerid][logPos][2] = dini_Float(Datei, "Z");
    Spieler[playerid][logPos][3] = dini_Float(Datei, "A");
    Spieler[playerid][SP_Change] = dini_Int(Datei, "SpawnChange");
    Spieler[playerid][SP_Int] = dini_Int(Datei,"Interior");


    Befehl um "SpawnChange" zu ändern:

    ocmd:spawnchange(playerid,params[])
    {
    if(!IsPlayerConnected(playerid))return true;
    if(Spieler[playerid][SP_Change] == 0){
    Spieler[playerid][SP_Change] = 1;
    SendClientMessage(playerid,0xFFFFFF,"Du wirst nun nach dem Login an Deinem letzten Standpunkt gespwant!");
    }
    else if(Spieler[playerid][SP_Change] == 1){
    Spieler[playerid][SP_Change] = 0;
    SendClientMessage(playerid,0xFFFFFF,"Du wirst nun nach dem Login an der gewohnten Position spawnen!");
    }
    return 1;
    }


    OnPlayerSpawn:

    if(Spieler[playerid][SP_Change] == 0){
    SetPlayerPos(playerid,Faction[0][fSpawnX],Faction[0][fSpawnY],Faction[0][fSpawnZ]);
    SetPlayerPos(playerid,1742.7982,-1863.2788,13.5753);
    SetPlayerInterior(playerid,0);
    }
    else if(Spieler[playerid][SP_Change] == 1){
    SetPlayerPos(playerid,Spieler[playerid][logPos][0],Spieler[playerid][logPos][1],Spieler[playerid][logPos][2]);
    SetPlayerFacingAngle(playerid,Spieler[playerid][logPos][3]);
    SendClientMessage(playerid,0xFFFFFF,"SERVER: Du wurdest an Deinen letzten Standpunkt gespawnt!");
    }


    So, das sollte alles gewesen sein.
    Ich hoffe ich konnte nun dem ein oder anderen mit den Codes helfen.


    Viele Grüße
    #else

    Spoiler anzeigen

    #e 1: Kleinen Fehler (Zeichen) behoben.
    #e 2: Dini Codes hinzugefügt.

    Spoiler anzeigen
    (Falls Fehler bei den Dini Nutzern auftreten oder die Funktionen falsch geschrieben sind: Sorry, aberich arbeite seit langem nicht mehr mit dini :D

  • Richtig, nur habe ich bisher blos User gesehen, die sowas suchen und deren Script auf mySQL basiert...


    Ich werde das ganze gleich nochmal als komplettes Filterscript schreiben...
    Dini+MySQL-Version.


    Greetz
    #else


    P.s
    Danke für den Tipp.