Sterbescript funktioniert nicht ganz

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,
    hier mal ein weiteres Problem von mir: Ich bin dabei ein Sterbesystem zu schreiben. Folgendes sollte passieren:
    Medic ist online: Der Spieler stirbt, wird zum Sterbepunkt zurückteleportiert, die Anim Crack wird auf ihn aktiviert, er ist unbeweglich und eine Nachricht an alle Medics wird gesendet. Dabei wird ein Timer gestartet, der nach 3 Minuten abläuft. Wenn er abläuft wird der Spieler zum Krankenhaus teleportiert und ihm werden 1,5k abgezogen. Wenn ihn allerdings ein Medic rechtzeitig mit /defi wiederbeleben kann, verliert er nur 500$.
    Kein Medic ist online/afk: Der Spieler verliert 1000$ und wird zum Krankenhaus teleportiert (teleport ist noch nicht implementiert).
    Hier das Problem: Man stirbt, Medic ist online und es passiert NICHTS.



    public OnPlayerDeath(playerid, killerid, reason)
    {
    GetPlayerPos(playerid,Spieler[playerid][totx],Spieler[playerid][toty],Spieler[playerid][totz]);
    gestorben[playerid] = true;
    return 1;
    }


    // Unter OnPlayerSpawn
    if(gestorben[playerid] == true)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(medic[i] == true)
    {
    SetPlayerPos(playerid, Spieler[playerid][totx], Spieler[playerid][toty], Spieler[playerid][totz]);
    ApplyAnimation(playerid,"CRACK","crckdeth1",4.1,1,1,1,1,1);
    TogglePlayerControllable(playerid, 0);
    timer[playerid] = SetTimerEx("death", 180000, false, "is", playerid, name);
    if(i != playerid)
    {
    format(path,sizeof(path),"%s ist schwer verletzt. Sofort zum Versorgen ausrücken.", name);
    SendClientMessage(i, COLOR_RED, path);
    SendClientMessage(playerid, COLOR_GREEN, "Du hattest einen schweren Unfall! Ein Krankenwagen wurde schon gerufen.");
    }


    else if (i == playerid || afk[i] == true)
    {
    SendClientMessage(playerid, COLOR_RED, "Es war kein Notarzt erreichbar, dir wurden 1000$ für die Behandlung abgezogen.");
    ClearAnimations(playerid);
    TogglePlayerControllable(playerid, 1);
    gestorben[playerid] = false;
    GivePlayerMoney(playerid,-1000);
    KillTimer(timer[playerid]);
    }
    }
    }
    }
    }


    Ich hoffe ihr könnt mir helfen.


    Mit freundl. Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

    2 Mal editiert, zuletzt von Padarom () aus folgendem Grund: Änderung des Scripts

  • Danke für die Antwort, aber wie meinst du soll ich das machen? Mit dem Scriptbeispiel das ich gepostet habe?
    Ich hab das schon ein bisschen editiert, allerdings ohne weiteren Erfolg. Außer dass der Spieler nun gefreezt wird (TogglePlayerControllable).


    Mit freundl. Grüßen
    Padarom


    **edit**
    Das funktioniert jetzt soweit, der Spieler wird zum Sterbepunkt geportet und ist unbewegbar. Allerdings wird ihm keine Animation zugewiesen und er sieht die Nachricht (path) nun auch. Ich hoffe jemand kann die beiden Probleme noch fixen, danach bin ich hiermit fertig :)
    Außerdem steht nach Timerablauf anstatt dem Namen (der ja eigentlich durch SetTimerEx mitübertragen wird) nur ein D dort. Ich denke dafür muss ich den Timer nicht posten. Vll ist ja das SetTimerEx falsch? Ansonsten pls schreiben.
    if(gestorben[playerid] == true)
    {
    SetPlayerPos(playerid, Spieler[playerid][totx], Spieler[playerid][toty], Spieler[playerid][totz]);
    SetPlayerSkin(playerid, Spieler[playerid][tots]);
    ApplyAnimation(playerid,"CRACK","crckdeth2",4.0,1,1,1,1,1);
    TogglePlayerControllable(playerid, 0);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && i != playerid)
    {
    if(Spieler[i][firma1] == 2 || Spieler[i][firma2] == 2 || Spieler[i][firma3] == 2 || Spieler[i][firma4] == 2)
    {
    timer[playerid] = SetTimerEx("death", 180000, false, "is", playerid, name);
    format(path,sizeof(path),"%s ist schwer verletzt. Sofort zum Versorgen ausrücken.", name);
    SendClientMessage(i, COLOR_RED, path);
    SendClientMessage(playerid, COLOR_GREEN, "Du hattest einen schweren Unfall! Ein Krankenwagen wurde schon gerufen.");
    }

    else if (i == playerid || afk[i] == true)
    {
    SendClientMessage(playerid, COLOR_RED, "Es war kein Notarzt erreichbar, dir wurden 1000$ für die Behandlung abgezogen.");
    gestorben[playerid] = false;
    GivePlayerMoney(playerid,-1000);
    TogglePlayerControllable(playerid, 1);
    ClearAnimations(playerid);
    KillTimer(timer[playerid]);
    }
    }
    }
    }

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

    Einmal editiert, zuletzt von Padarom () aus folgendem Grund: Script eingefügt + Neues Problem