Tod 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
  • Hi @All,


    mein Spawn failt irg. wie :/


    Wenn man stirbt soll man da respawnen wo man getötet worden ist.. ich habs so:



    public OnPlayerDeath(playerid, killerid, reason){
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    Tod[playerid] = 1;
    return 1;
    }


    if(Tod[playerid] == 1)
    {
    new Float:x, Float:y, Float:z;
    SetPlayerPos(playerid,x,y,z);
    return 1;
    }


    Aber es geht nicht..

  • public OnPlayerDeath(playerid, killerid, reason)
    {
    new Float:x, Float:y, Float:z;
    SetPlayerPos(playerid, x, y, z);
    Tod[playerid] = 1;
    return 1;
    }


    Mit freundlichen Grüßen
    WhItEoUt.


  • Schwachsinn...


    oben
    New Floa:pos[3];


    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    Tod[playerid] = 1;


    if(Tod[playerid] == 1)
    {
    SetPlayerPos(playerid pos[0], pos[1], pos[2]);
    }


    So wäre es sinnvoler, jedoch weiß ich nicht ob es auch funktioniert.

  • Wozu eig die Abfrage? Einfach direkt die Koordinaten Auslesen lassen und den Spieler wieder da hin setzen (SetPlayerPos). Bei Bedarf kann man ja noch einen Timer von bspw. 25 Sekunden einbauen und den Spielrr solange den 0.0,0.0,0.0 Punkt zeigen. Könnte eine Wiederbelebung simulieren :)

    Liebe Grüße


    Marcel

  • nein, wird nicht gehen.


    Spieler stirbt = OnPlayerDeath
    Spieler respawnt nach der Todesanimation = OnPlayerSpawn


    Es gibt zwei Möglichkeiten:
    1. Bei OnPlayerDeath setzt du ne Variable, das der Spieler gestorben ist und rufst sie dann bei OnPlayerSpawn ab. Beispiel:


    public OnPlayerDeath(playerid,reason)
    {
    playerdeath[playerid]=1;
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    if (playerdeath[playerid] // <-- Spawn nach tot
    {
    playerdeath[playerid]=0;SetPlayerPos(playerid,x,y,z);
    }
    else // <-- normaler Spawn
    {
    }
    return 1;
    }


    ----------------------


    oder du benutzt die saubere Variante, die ich die empfehlen würde und vorallem Resourcenschonender ist:
    public OnPlayerDeath(playerid,reason)
    {
    SetSpawnInfo(playerid,team,x,y,z,a,w1,a1,w2,a2,w3,a3);
    playerdeath[playerid]=1;
    return 1;
    }


    /* Anmerkung: die Felder in SetSpawnInfo siehe natürlich Wiki und sollen hier so nicht verwendet werden */


    public OnPlayerSpawn(playerid)
    {
    if (playerdeath[playerid]) // <-- Spawn nach tot
    {
    playerdeath[playerid]=0;
    }
    else // <-- normaler Spawn
    {
    }
    return 1;
    }


    Nachtrag:
    Der Unterschied liegt einfach daran, daß du auf die Funktion SetSpawnInfo zugreifst, die für das Setzen der Koords zuständig ist VOR dem Spawnen. Weiterer Vorteil ist, wenn ein Spieler F4 drückt und dann krepiert, dort auch spawnt wo du das willst. Noch ein Vorteil ist, es sieht sauberer IG aus. Probier beide Varianten aus, du wirst es sehen ;)