Spawn/Death System

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 wende mich mal wieder an euch da ich nicht weiter komme,
    ich habe mich an einem Spawn/Death System versucht und auch etwas Erfolg gehabt, wie gesagt ETWAS.
    Also zu meinem Problem:
    Wenn ich den befehl /kill eingebe wird mein Leben auf 0 gesetzt.
    if(strcmp(cmdtext,"/kill",true)==0)
    {
    SetPlayerHealth(playerid,0);
    return 1;
    }
    Laut Console sterbe ich dann 4 mal.
    [20:36:37] [death] HansFranz died 255
    [20:42:57] [death] HansFranz died 255
    [20:42:57] [death] HansFranz died 255
    [20:42:57] [death] HansFranz died 255
    Ich Spawne nun unter dem Krankenhaus, und falle durch die Welt, werde anschliessend auf die Straße neben dem Krankenhaus teleportiert.
    Normalerweise sollte der Spieler unter dem Krankenhaus Spawnen, und die Kamera dann das Krankenhaus von vorn zeigen.
    public OnPlayerDeath(playerid, killerid, reason)
    {
    SpielerInfo[playerid][pTode]++;
    if (IsPlayerConnected(killerid)){SpielerInfo[killerid][pKills]++;}
    if(SpielerInfo[playerid][pFraktion]== 0){SetSpawnInfo(playerid, 0, SpielerInfo[playerid][pSkin],1609.6234,1768.4473,10.8203, 0, 0, 0, 0, 0, 0, 0);}
    else if(SpielerInfo[playerid][pFraktion]!= 0){SetSpawnInfo(playerid, 0,SetFSkin(playerid),1609.6234,1768.4473,10.8203, 0, 0, 0, 0, 0, 0, 0);}
    SetPlayerCameraPos(playerid, 1630.0885,1856.6375, 33.809105);
    SetPlayerCameraLookAt(playerid, 1606.6144,1818.4008,10.8203);
    SendClientMessage(playerid,0xFFFFFFFF,"===> Krankenhaus <===");
    SendClientMessage(playerid,0xFFFFFFFF,"Du bist nun im Krankenhaus, und liegst im Koma.");
    SendClientMessage(playerid,0xFFFFFFFF,"====================");
    SetTimerEx("Krankenhaus",60000,0,"i",playerid);
    return 1;
    }
    Nachdem ich auf die Straße teleportiert wurde, läuft der Timer immernoch.
    Nach einer Minute sehe ich den Dialog der mir mitteilt wie viel Geld ich zahlen musste, und mir wurde auch das Geld entnommen.
    Ebenso ist mein Leben bei 100%
    public Krankenhaus(playerid)
    {
    GivePlayerMoney(playerid, -250);
    SetPlayerPos(playerid,1603.6343,1823.4365,10.8203);
    SetCameraBehindPlayer(playerid);
    ShowPlayerDialog(playerid, DIALOG_ENTLASSEN, DIALOG_STYLE_MSGBOX, "Hinweis", "Du wurdest aus dem Krankenhaus entlassen.\nKosten der Behandlung:\n250$", "Schließen", "");
    }

  • Kleiner Denkanstoß:
    "OnPlayerDeath" wird direkt dann ausgeführt, wenn die Person stirbt (also umfällt).
    Nach "OnPlayerDeath" wird der Spieler gespawnt und "OnPlayerSpawn" wird ausgeführt!


    Also bei dir ist es im Moment so:
    1. Spieler stirbt und fällt um.
    2. Du setzt die SpawnInfo (Denke mal UNTER dem Krankenhaus, das ist auch richtig)
    3. Du settest dann die Kamera
    4. Dann SPAWNT der Spieler (OnPlayerSpawn wird aufgerufen) an der Position unter dem Krankenhaus (Punkt2) und die Kamera-Einstellungen von Punkt 3 sind "für die Katz"!
    5. Nach einer Minute passiert das was dann auch passieren soll.


    Mach es so:
    Bis Punkt 2 war das in Ordnung!
    Du setzt bei "OnPlayerDeath" eine Variable (SpielerKrankenhaus oder was weiß ich) auf 1 und fragst dann bei "OnPlayerSpawn" ab ob die gesetzt ist.
    Dann machst du DORT (bei OnPlayerSpawn) das mit der Kamera UND (ganz wichtig) du Freezt die Kamera von dem Spieler (TogglePlayerControllable).
    Nach der Minute setzt du die Position und die Kamera wie du es bereits gemacht hast und UNFREEZT den Spieler wieder (Toggle...).


    Bei weiteren Fragen einfach hier im Thread melden!


    Mit freundlichen Grüßen
    Kevin

  • Danke, funktioniert nun super!

    public Krankenhaus(playerid)
    {
    TogglePlayerControllable(playerid,1);
    GivePlayerMoney(playerid, -250);
    SetPlayerPos(playerid,1603.6343,1823.4365,10.8203);
    SetCameraBehindPlayer(playerid);
    DeletePVar(playerid,"Dead");
    ShowPlayerDialog(playerid, DIALOG_ENTLASSEN, DIALOG_STYLE_MSGBOX, "Hinweis", "Du wurdest aus dem Krankenhaus entlassen.\nKosten der Behandlung:\n250$", "Schließen", "");
    SavePlayer(playerid);
    }
    public OnPlayerDeath(playerid, killerid, reason)
    {
    SpielerInfo[playerid][pTode]++;
    if (IsPlayerConnected(killerid)){SpielerInfo[killerid][pKills]++;}
    if(SpielerInfo[playerid][pFraktion]== 0){SetSpawnInfo(playerid, 0, SpielerInfo[playerid][pSkin],1609.6234,1768.4473,10.8203, 0, 0, 0, 0, 0, 0, 0);}
    else if(SpielerInfo[playerid][pFraktion]!= 0){SetSpawnInfo(playerid, 0,SetFSkin(playerid),1609.6234,1768.4473,10.8203, 0, 0, 0, 0, 0, 0, 0);}
    SendClientMessage(playerid,0xFFFFFFFF,"===> Krankenhaus <===");
    SendClientMessage(playerid,0xFFFFFFFF,"Du bist nun im Krankenhaus, und liegst im Koma.");
    SendClientMessage(playerid,0xFFFFFFFF,"====================");
    SetTimerEx("Krankenhaus",60000,0,"i",playerid);
    SetPVarInt(playerid,"Dead",1);
    return 1;
    }
    public OnPlayerSpawn(playerid)
    {
    if(GetPVarInt(playerid,"Dead") == 1)
    {
    SetPlayerCameraPos(playerid, 1630.0885,1856.6375, 33.809105);
    SetPlayerCameraLookAt(playerid, 1606.6144,1818.4008,10.8203);
    TogglePlayerControllable(playerid,0);
    }
    return 1;
    }