GetPlayerHealth(playerid) als aktualisierende Variable?

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
  • Hey Leute,


    ich habe gerade mich mit Textdraws beschäftigt und da ein Textdraw über die HP Anzeige gemacht.
    Dort soll der Wert stehen, wie viel Leben der Spieler hat (bei vollen Leben "100").


    Ich bin bisher soweit gekommen und habe auch keine Fehler, jedoch verschwindet das Textdraw nach 1 Sekunde :o


    Der Timer (bei OnGameModeInit):


    SetTimer("leben",1000,true);



    Der Public (vom Timer):


    public leben(playerid)
    {
    new lstring[128];
    new Float:energie;
    GetPlayerHealth(playerid, energie);
    format(lstring,sizeof(lstring),"%02d",energie);
    TextDrawSetString(TDLeben, lstring);
    return 1;
    }


    Ich habe zwar keine Errors, aber auch kein Textdraw was gezeigt wird :D


    Was mache ich falsch? :huh:


  • Den Textdraw noch anzeigen bzw. eben ausblenden dann anzeigen

    Das habe ich natürlich schon am Anfang gemacht haha :


    TDLeben = TextDrawCreate(564.000000, 67.000000, "0%");
    TextDrawBackgroundColor(TDLeben, 255);
    TextDrawFont(TDLeben, 3);
    TextDrawLetterSize(TDLeben, 0.320000, 0.699999);
    TextDrawColor(TDLeben, -1);
    TextDrawSetOutline(TDLeben, 1);
    TextDrawSetProportional(TDLeben, 1);

  • Beitrag von SqueezyZ ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Erstmals: Spam.


    So, wenn ich mich nicht irre, ist die Heilanzeige eine Float, somit wirst du auch %f nutzen müssen.
    Zudem:



    new TDTimer[MAX_PLAYERS]; //Für PTDraws
    //Nun OnPlayerConnect
    SetTimerEx("deintimername",1000,true,"i",playerid);//Falschrum? 0.o

    Außerdem:
    du musst mit PlayerTextDraws arbeiten,da die Variable global ist.
    Wenn du Hilfe brauchst: melde dich einfach wieder hier.



    E: Fehler korrigiert

    Einmal editiert, zuletzt von Andosius ()

  • Beitrag von AirM4X ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Ich glaube ich stehe jetzt auf der Leitung :O


    Ich zeige euch mal alle Datein ich im Script habe, die etwas damit zu tun haben:


    Oben definiert:


    new Text:TDLeben; // Das Textdraw
    forward leben(playerid);// Timer


    Sobald der Spieler eingeloggt ist:
    SetTimerEx("leben",1000,true,"i",playerid);


    OnGameModeInit (das Textdraw selbst):
    TDLeben = TextDrawCreate(564.000000, 67.000000, "0%");
    TextDrawBackgroundColor(TDLeben, 255);
    TextDrawFont(TDLeben, 3);
    TextDrawLetterSize(TDLeben, 0.320000, 0.699999);
    TextDrawColor(TDLeben, -1);
    TextDrawSetOutline(TDLeben, 1);
    TextDrawSetProportional(TDLeben, 1);


    Der public (timer):
    public leben(playerid)
    {
    new lstring[128];
    new Float:energie;
    GetPlayerHealth(playerid, energie);
    format(lstring,sizeof(lstring),"%f",energie);
    TextDrawHideForPlayer(playerid,TDLeben);
    TextDrawSetString(TDLeben, lstring);
    TextDrawShowForPlayer(playerid,TDLeben);
    return 1;
    }


    Das Problem was ich jetzt noch habe ist, dass bei den Leben nicht (100) sondern (100.000000) steht :(

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich steig da total nicht durch :/


    Habe jetzt diese Fehler:


    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(666) : error 035: argument type mismatch (argument 2)
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(668) : error 035: argument type mismatch (argument 1)
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(669) : error 035: argument type mismatch (argument 1)
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(671) : error 035: argument type mismatch (argument 1)
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(672) : error 035: argument type mismatch (argument 1)
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(3394) : error 035: argument type mismatch (argument 2)
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(3395) : error 035: argument type mismatch (argument 1)
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(3396) : error 035: argument type mismatch (argument 2)
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(3834) : warning 213: tag mismatch
    D:\Domi\Spiele\GTA San Andreas\Domi Server\gamemodes\own.pwn(3834) : error 035: argument type mismatch (argument 3)
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    9 Errors.


    Zeilen 666 - 672:


    PlayerTextDrawBackgroundColor(playerid,TDLeben, 255);
    PlayerTextDrawColor(playerid,TDLeben[playerid], -1);
    PlayerTextDrawFont(PlayerText:TDLeben, 3);
    PlayerTextDrawLetterSize(PlayerText:TDLeben, 0.320000, 0.699999);
    PlayerTextDrawSetOutline(PlayerText:TDLeben, 1);
    PlayerTextDrawSetProportional(PlayerText:TDLeben, 1);


    Der public:


    public leben(playerid)
    {
    new lstring[128];
    new Float:energie;
    GetPlayerHealth(playerid, energie);
    format(lstring,sizeof(lstring),"%f",energie);
    TextDrawHideForPlayer(playerid,PlayerText:TDLeben);
    TextDrawSetString(TDLeben, lstring);
    PlayerTextDrawShow(playerid,PlayerText:TDLeben);
    return 1;
    }


    Ich bin gerade total planlos...
    Und langsam habe ich auch das Gefühl dass ich allergisch auf TextDraws reagiere 8| :wacko:


  • Du musst die PTD Funktionen nutzen, nicht die normalen TD Kack-Dinger ;)
    Btw, probier mal %.0f
    Oder lass über PAWN das Ergebnis runden. :)

  • Oben unter die Includes kommt die Deklarierung:
    new PlayerText:TDLeben[MAX_PLAYERS];


    In OnPlayerConnect erstellen wir das Textdraw:
    TDLeben[playerid] = CreatePlayerTextDraw(playerid, 564.000000, 67.000000, "0%");
    PlayerTextDrawBackgroundColor(playerid, TDLeben[playerid], 255);
    PlayerTextDrawFont(playerid, TDLeben[playerid], 3);
    PlayerTextDrawLetterSize(playerid, TDLeben[playerid], 0.320000, 0.699999);
    PlayerTextDrawColor(playerid, TDLeben[playerid], -1);
    PlayerTextDrawSetOutline(playerid, TDLeben[playerid], 1);
    PlayerTextDrawSetProportional(playerid, TDLeben[playerid], 1);
    PlayerTextDrawShow(playerid,TDLeben[playerid]);


    In OnPlayerDisconnect löschen wir es:
    PlayerTextDrawDestroy(playerid, TDLeben[playerid]);


    Und das Textdraw für alle Spieler aktualisierien:
    public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
    {
    new lstring[5];
    new Float:energie;
    GetPlayerHealth(playerid, energie);
    format(lstring,sizeof(lstring),"%d",floatround(energie));
    PlayerTextDrawSetString(playerid, TDLeben[playerid], lstring);
    return 1;
    }


    Ich hoffe du kommst damit klar.
    Falls nicht, darfst du gerne nachfragen!




    EDIT:
    @iEnerqie: Würdest du beim nächsten Mal bitte nicht den kompletten Post mit allen Codes und Zitaten zitieren? Das ist nicht der Sinn der Zitierfunktion. Danke! :)


    @DieChickenfighter: Hier lesen!

    3HZXdYd.png

    2 Mal editiert, zuletzt von Jeffry ()

  • Falls ich etwas einwenden darf... Ich frage mich die ganze Zeit, warum du einen Timer anstatt OnPlayerTakeDamage verwendest?


    Unter OnPlayerTakeDamage einfach die HP abfragen, den Wert in den Textdrawstring formatieren und anzeigen lassen.


    Sorry, falls ich etwas falsch verstanden haben sollte!

  • Falls ich etwas einwenden darf... Ich frage mich die ganze Zeit, warum du einen Timer anstatt OnPlayerTakeDamage verwendest?


    Danke für den Hirnanstoß, stimmt natürlich. An das Callback hatte ich gar nicht gedacht. :good:
    Habe meinen Code geändert.


    Er hat mir übrigens schon in PN geschrieben, dass der Code keine Errors gibt, das war auf den Post über meinem bezogen.