[Frage]Player Spawn

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
  • naja alles was mit den spawns zu tun hat wird unter OnPlayerSpawn und SetPlayerSpawn sein ;)

    Zitat

    naja aufm homeserver mit kumpel getestet und nix laggt von daher sollte nen richtiger server mit sowas keine probs haben

    *an Kopf schlag
    sowas kommt Raus wenn man erst absendet ohne nachzudenken. Bitte Leute Hirn einschalten beim Posten...

  • Du speicherst einfach in der Account.ini 3 weitere Daten bzw. Floats.


    Float:PlayerX,
    Float:PlayerY,
    Float:PlayerZ


    Bei OnPlayerDisconnecte machste einfach
    new Float:ppX,Float:ppY,Float:ppZ;
    GetPlayerPos(playerid,ppX,ppY,ppZ);
    new inter = GetPlayerInterior(playerid);


    PlayerInfo[playerid][PlayerX] = ppX;
    PlayerInfo[playerid][PlayerY] = ppY;
    PlayerInfo[playerid][PlayerZ] = ppZ;


    PlayerInfo[playerid][pInt] = inter;


    Bei OnPlayerSpawn jenachdem wie es in dem Script ist machste
    SetPlayerPos(playerid,PlayerInfo[playerid][PlayerX]...);
    SetPlayerInterior(playerid,PlayerInfo[playerid][pInt]);



    Was solln daran so schwer sein?
    Wenn Du schlau bist,machst Du eine weitere spalte und speicherst darin den Grund von OnPlayerDisconnect..wenn er ne Exe hatte setzt Du die Variable auf 1.


    Bei OnPlayerSpawn musst Du dann nur Abfragen ob die Variable auf 1 steht,wenn ja,Spawn beim lezten Standort,wenn nein,dann halt wie gewohnt..

  • das geht ;) du musst nur bei OnPlayerRegister/Update/Login diese Daten abfragen bzw speichern ;)

    Zitat

    naja aufm homeserver mit kumpel getestet und nix laggt von daher sollte nen richtiger server mit sowas keine probs haben

    *an Kopf schlag
    sowas kommt Raus wenn man erst absendet ohne nachzudenken. Bitte Leute Hirn einschalten beim Posten...

  • ich lerne scripten jetzt seit gestern, aber du musst schon die sachen wie FloatZ etc durch kooridnaten ersetzen.. sonst wird das nie was
    du sollst ja lernen wie was geht, und nicht paste and bin lernen.. das kann jeder!


    mfg


    //EDIT: ansonsten einfach mal SuFu benutzen! da findeste genug

    Einmal editiert, zuletzt von gwelter ()

  • @S.Pawno


    Bist Du Dir eigentlich bewusst das Du gerade allen Scriptern hier vorgeworfen hast arrogant zu sein?!
    So machst Du Dir keine Freunde und somit bekommst Du auch keine Scripthilfe von hier..


    Wenn Du mal lesen würdest was PaddyBoy geschrieben hat,würdest Du wissen das es funktioniert.
    Wenn man nicht scripten kann,sollte man erstmal die Basics lernen oder sich einige Tutorials durchlesen oder eventuell mal die SuFu(Suchfunktion) benutzen!


    Wie gesagt,Du musst nur in der PlayerArray
    Float:PlayerX,
    Float:PlayerY,
    Float:PlayerZ unten eintragen,das ganze automatisch in die Account.ini eintragen,speichern und laden lassen.


    Bei OnPlayerDisconnect:
    new Float:ppX,Float:ppY,Float:ppz;
    GetPlayerPos(playerid,ppX,ppY,ppZ);
    PlayerInfo[playerid][PlayerX] = ppX;
    PlayerInfo[playerid][PlayerY] = ppY;
    PlayerInfo[playerid][PlayerZ] = ppZ;
    PlayerInfo[playerid][pInt] = GetPlayerInterior(playerid);


    Dann bei OnPlayerSpawn
    SetPlayerPos(playerid,PlayerInfo[playerid][PlayerX],PlayerInfo[playerid][PlayerY],PlayerInfo[playerid][PlayerZ]);
    SetPlayerInterior(playerid,PlayerInfo[playerid][pInt]);


    Das ist genau das was ich vorhin schon beschrieben habe!


    @gwelter
    Nein ist auch falsch!
    Wenn man dort nur Koordinaten eingibt,spawnt der Player ja immer an der gleichen Stelle und nicht da wo er beim Disconnect war.


    //Edit:
    So,damit hier nun endlich alles geklärt ist:


    Oben bei den Includes:
    #include <Dini>


    OnPlayerConnect:
    public OnPlayerConnect(playerid)
    {
    new str[128],name[32];
    GetPlayerName(playerid,name,32);
    format(str,128,"/Spawndata/%s.ini",name);
    if(!dini_Exists(str))
    {
    dini_Create(str);
    dini_FloatSet(str,"PlayerX",0.0000);
    dini_FloatSet(str,"PlayerY",0.0000);
    dini_FloatSet(str,"PlayerZ",0.0000);
    dini_IntSet(str,"PlayerInt",0);
    }
    return 1;
    }


    OnPlayerDisconnect:
    public OnPlayerDisconnect(playerid, reason)
    {
    SaveSpawnData(playerid);
    return 1;
    }


    OnPlayerSpawn:
    public OnPlayerSpawn(playerid)
    {
    new str[128],name[32];
    GetPlayerName(playerid,name,32);
    format(str,128,"/Spawndata/%s.ini",name);
    if(dini_Exists(str))
    {
    new Float:ppX = dini_Float(str,"PlayerX");
    new Float:ppY = dini_Float(str,"PlayerY");
    new Float:ppZ = dini_Float(str,"PlayerZ");
    new inter = dini_Int(str,"PlayerInt");
    SetPlayerPos(playerid,ppX,ppY,ppZ);
    SetPlayerInterior(playerid,inter);
    }
    else
    {
    //SetPlayerPos(playerid,Dein_Spawn_X,Dein_Spawn_Y,Dein_Spawn_Z);
    //SetPlayerInterior(playerid,Interiorid);
    }
    return 1;
    }


    stock SaveSpawnData(playerid) :
    stock SaveSpawnData(playerid)
    {
    new name[32],str[128];
    new Float:ppX,Float:ppY,Float:ppZ;
    GetPlayerPos(playerid,ppX,ppY,ppZ);
    GetPlayerName(playerid,name,32);
    format(str,128,"/Spawndata/%s.ini",name);
    if(dini_Exists(str))
    {
    dini_FloatSet(str,"PlayerX",ppX);
    dini_FloatSet(str,"PlayerY",ppY);
    dini_FloatSet(str,"PlayerZ",ppZ);
    dini_IntSet(str,"PlayerInt",GetPlayerInterior(playerid));
    }
    }


    Wurde auf Funktionalität geprüft,weist keine Fehler auf.