Probleme mit OnPlayerUpdate!

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,


    habe ein Problem.. und zwar habe ich so ein "Ohnmacht" System mal in mein Script eingebaut..


    new Float:hp;
    GetPlayerHealth (playerid, hp);
    if (hp <= 9)
    {
    //FreezePlayer(playerid);
    TogglePlayerControllable(playerid, false);
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 1.0, 1, 0, 0, 0, 0);
    GameTextForPlayer(playerid,"~b~ Ohnmaechtig!",10000,3);
    }
    else if(hp >= 9)
    {
    //UnFreezePlayer(playerid);
    //ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0);
    //GameTextForPlayer(playerid,"~b~ Du wurdest wiederbelebt!",10000,3);
    TogglePlayerControllable(playerid, true);
    }


    Funktioniert auch.. allerdings wird diese Funktion ja ständig ausgeführt.. sprich Gefreezte User werden Unfreezt etc.. is ja auch klar da ich normal immer mehr als 9 HP habe und somit ständig TogglePlayerControllable ausgeführt wird.


    Kann man das nicht so machen, dass diese letzte Funktion nur dann ausgeführt wird, wenn die 1 Ausgeführt worden ist? Sprich irgendeine If abfrage einbauen?


    MFG

  • joa is eigtl ganz einfach.
    ein array oder enum verwenden: ohnmacht[MAX_PLAYERS];
    dann wenn der spieler ohnmächtig wird die var auf 1 stellen: ohnmacht[playerid]=1;
    und bei else if die erste abfrage: if(ohnmacht[playerid]==1)


    new ohnmacht[MAX_PLAYERS];


    if (hp <= 9)
    {
    //FreezePlayer(playerid);
    TogglePlayerControllable(playerid, false);
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 1.0, 1, 0, 0, 0, 0);
    GameTextForPlayer(playerid,"~b~ Ohnmaechtig!",10000,3);
    ohnmacht[playerid]=1;
    }
    else if(hp >= 9)
    {
    if(ohnmacht[playerid]==1)
    {
    //UnFreezePlayer(playerid);
    //ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0);
    //GameTextForPlayer(playerid,"~b~ Du wurdest wiederbelebt!",10000,3);
    TogglePlayerControllable(playerid, true);
    ohnmacht[playerid]=0;
    }
    }


    edit:
    zudem würde ich die hp afragen verbessern weil wenn du genau 9 hp hast wirds vermutlich verwirrend..
    if (hp <9 )
    else if(hp >8 )


    edit2: danke intelli hab ich verbessert :D

  • Hi


    Ein paar kleine Tipps noch:


    • Nimm das ganze aus OnPlayerUpdate und verfrachte es besser in einen Timer, zB mit Sekundeninterval
    • Schau dir mal den Datentyp bool an
    • Wenn Du nur 2 Möglichkeiten (Unter oder über 9 Leben hast, kannste auch schreiben:



    new ohnmacht[MAX_PLAYERS];


    if (hp <= 9)
    {
    //FreezePlayer(playerid);
    TogglePlayerControllable(playerid, false);
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 1.0, 1, 0, 0, 0, 0);
    GameTextForPlayer(playerid,"~b~ Ohnmaechtig!",10000,3);
    ohnmacht[playerid]=1;
    }
    else // <--Siehe hier
    {
    if(ohnmacht[playerid]==1)
    {
    //UnFreezePlayer(playerid);
    //ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0);
    //GameTextForPlayer(playerid,"~b~ Du wurdest wiederbelebt!",10000,3);
    TogglePlayerControllable(playerid, true);
    ohnmacht[playerid]=0;
    }
    }


    Nur so nebenbei ;)

  • Das wird 60x in der Sekunde aufgerufen also alle 16,66666 ms....


    Falsch OnPlayerUpdate wird nur dann aufgerufen, wenn der Spieler geupdatet werden muss und das ist z.B. wenn er steht nicht 60x in der Sekunde der fall sondern vielleicht 5 x

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski