Einfache Lebensanzeige vom Server aus

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
  • Abend Brotfische,


    in diesem Tutorial möchte ich euch erklären, wie man eine genau Lebensanzeige in dem Lebensbalken scriptet.




    Schritt 1. - TextDraw definierung.


    Erst einmal müssen wir das Textdraw für jeden Spieler definieren. Einfach Im Script oben unter den restlichen News einfügen.



    new Text:lebensanzeige[MAX_PLAYERS];



    Damit haben wir nun den Text für jeden Spieler definiert, da wir das Max_Players in Klammern dahinter gesetzt haben.


    Schritt 2. - TextDraw erstellen.


    Nun kommen wir zum erstellen des TextDraws.


    Wichtig ist es, dass ihr es unter "OnPlayerConnect" erstellt und nicht unter "OnGameModeInit", da wir ja für jeden Spieler ein eigenes brauchen.



    public OnPlayerConnect(playerid)
    {
    lebensanzeige[playerid] = TextDrawCreate(563.000000,67.000000,"100"); // Das ist die genaue Position in dem Lebensbalken.
    TextDrawSetShadow(lebensanzeige[playerid],0); // Damit die Schrift keinen Schatten hat.
    TextDrawFont(lebensanzeige[playerid],1); // Die Schriftart, finde ich meiner Meinung nach am besten.
    TextDrawLetterSize(lebensanzeige[playerid],0.410000,0.799999); // Die Schriftgröße, passt somit genau in den Lebensbalken.
    SetTimerEx("hpanzeige",1000*10,true,"i",playerid); // Einen Timer, damit die Lebensanzeige nachher geupdatet werden kann.
    return 1;
    }


    Nun haben wir das TextDraw für jeden Spieler, der Connected, erstellt.


    Schritt 3. - TextDraw zeigen / verstecken


    Damit diese Lebensanzeige im Lebensbalken auch sichtbar wird, müssen wir nun unter "OnPlayerSpawn" den TextDraw sichtbar machen.



    public OnPlayerSpawn(playerid)
    {
    TextDrawShowForPlayer(playerid,lebensanzeige[playerid]);
    return 1;
    }



    beim Tod soll dieser für den Spieler unsichtbar gemacht werden, deshalb unter "OnPlayerDeath":



    public OnPlayerDeath(playerid, killerid, reason)
    {
    TextDrawHideForPlayer(playerid,lebensanzeige[playerid]);
    return 1;
    }



    Dann hätten wir schon mal das TextDraw für jeden Spieler erstellt, dass es beim Spawnen erscheint und beim Tod verschwindet. Jetzt bearbeiten wir die Funktion des Timers, damit die Lebensanzeige auch mit dem aktuellen Leben des Spielers übereinstimmt.


    Schritt 4. - Timer


    Den Timer haben wir als



    SetTimerEx("hpanzeige",1000*10,true,"i",playerid); // 10 Sekunden, damit das alles möglichst schnell geupdatet wird.



    unter "OnPlayerConnect" definiert.


    Dann gehen wir ganz runter ins Script und fügen folgendes ein:



    forward hpanzeige(playerid);
    public hpanzeige(playerid)
    {
    new hptext[64]; // Der String für die Zahlen die geupdatet werden.
    new Float:HP; // Eine neue Float, damit wir das Leben des Spielers auslesen können.
    GetPlayerHealth(playerid,HP); // Das Leben des Spielers herausfinden.
    format(hptext, sizeof(hptext),"%d",floatround(HP)); // Hier wird das herausgelesene Leben in einen String gepackt.
    TextDrawSetString(lebensanzeige[playerid],hptext); // Und hiermit wird der String im TextDraw geupdatet.
    }



    Damit hätten wir in vier einfachen Schritten, eine genaue Serverseitige Lebensanzeige.


    Dies kann man natürlich auch mit der Rüstung des Spielers machen.


    Ich hoffe ich konnte es euch so leicht wie möglich erklären, falls noch Fragen offen sein sollten, könnt ihr diese ruhig stellen


    Mit freundlichem Gruß,


    coVer

    Ihr habt das normale Pawno satt? Notepad ++ mit allen Pawnofunktionen, hier zum Downloaden, Klick

    3 Mal editiert, zuletzt von coVer ()

  • Und was soll jetzt der Präfix [0.3e] ?!
    Das kann man mit 0.3d genauso machen. Falls nicht, korregiert micht, aber ich habe keine Funktion gefunden, die es nur in 0.3e gibt...


    Bitte ändere mal den Präfix, das könnte andere eventuell täuschen.


    MFG
    Ben


    Edit: Abgesehen davon kannst du deinen Server direkt umbringen. Wenn mal 30 Spieler auf dem Server sind, und jenachdem immer mal wieder neue dazuconnecten und wieder weggehen, dann explodiert der Server schon bald, da du am Ende 100 Timer am laufen hast, nämlich für jeden Spieler der einmal connected ist. Wenn ich jetzt 3 mal connecte, habe ich 3 Timer nur für mich. Abgesehen davon ist es sinnlos den alle 1 Millisekunden upzudaten. 200 Millisekunden würden locker reichen, abgesehen davon, dass man es auch ganz ohne Timer machen könne, auch wenn es dann komplizierter wäre.

  • Es soll lediglich ein Tutorial sein wie man es erstellt. Ich hab nirgendwo geschrieben, dass es Resourcenschonend ist oder viele Resourcen verbraucht. Natürlich kann man es auf andere Weißen lösen, ich habe jedoch die genommen...

    Ihr habt das normale Pawno satt? Notepad ++ mit allen Pawnofunktionen, hier zum Downloaden, Klick

  • So bringt man den Anfängern aber "falsches" scripten bei. Bei mir war es genauso und jetzt muss mir BlackAce stück für stück in den Kopf eintrichtern, wie man sowas ressourcenschonend macht.
    Und es ist ja nicht so, dass deins nicht nur nicht ressourcenschonend ist, sondern dass es die Ressourcen geradezu auffrisst.


    Ich sehe jetzt schon Scripte von Anfängern vor mir, die ein eigenes Rechenzentrum brauchen und sowas fördert das einfach nur.


    Man sollte es den Usern schon richtig beibringen. Ich verurteile diese Methode nicht, aber es ist halt nicht die beste. Und bitte tu uns allen den Gefallen, und schreibe noch rein, dass der Timer bei OnPlayerDisconnect bitte zu löschen sei, bzw. zeige den Leuten das. Und stell die Timerzeit auf minimal 100, das reicht vollkommen, denn so viel Leben kann man garnicht verlieren, eigentlich würden sogar 500ms reichen.


    Edit: Kleine Erläuterung wie man das mit dem löschen am besten löst:
    Oben "new timer[MAX_PLAYERS];", vor den Timer "timer[playerid] = SetTimer...", und bei OnPlayerDisconnect beendest du den "timer[playerid]" halt wieder.

    Einmal editiert, zuletzt von Ternary ()

  • Wenn du das jede Millisekunde wiederholst, kannst du auch gleich ohne Timer arbeiten...


    Desweitern gibt es das Callback OnPlayerTakeDamage, aktuallisiere doch den Textdraw einfach da ;)

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

    Margarete Stokowski