Fahrzeug Zusand Textdraw?

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
  • Guten Abend Zusammen,


    Ich wollte mal wissen wie ich den Zustand von meinem Fahrzeug in dem ich sitze
    un ein Textdraw setzten kann.


    Ich weis ich brauche die Funtkion GetVehicleHealth aber mehr weis ich da auch nicht :( .


    Könnte mir das jemand machen und es mit // hinter den Zeilen erklären? oder gibt es villeicht gute Tuts?

  • Aufjedenfall brauchst du einen Timer der in einen bestimmten interval immer überprüft ob er in einen Vehicle sitzt ...


    Abgespeckte version :

    public OnGameModeInit() {
    SetTimer("Tacho", 1000, 1); // "Tacho" -> Public , 1000 -> 1 Sekunde (millisekunden), 1 Repeating == Wiederholen
    }



    forward Tacho();
    public Tacho() {
    new str[10]; // Ein String der bis zu 10 Zeichen hält..
    for(new i=0;i<MAX_PLAYERS i++) // Looping für alle Spieler auf den Server + mehr ^^
    {
    if(!IsPlayerConnected(i)) return 1; // Wenn dieser Spieler nicht auf den Server passiert nichts
    if(IsPlayerInAnyVehicle(i)) // Wenn er in einen Fahrzeug sitzt egal als fahrer oder beifahrer
    {
    new Float:vehHealth; // Eine Variable die eine Float halten kann
    GetVehicleHealth(GetPlayerVehicleID(playerid), vehHealth); // Den Zustand vom Fahrzeug in die vehHealth var "pasten".
    format(str, sizeof(str), "%f", vehHealth); // Paste sogesagt das angegebene in den String %f -> steht für float
    TextDrawSetString(TextDrawName, str); // Den davor zusammengebastelten String als text für das Textdraw machen
    }
    }
    }


    NIchts formatiert, weil in Browser geschrieben ^^

  • jetzt habe ich:


    forward Tacho();
    zustand = TextDrawCreate(90.000000, 316.000000, "Zustand: 0000 HP");
    TextDrawAlignment(zustand, 2);
    TextDrawBackgroundColor(zustand, 255);
    TextDrawFont(zustand, 1);
    TextDrawLetterSize(zustand, 0.500000, 1.000000);
    TextDrawColor(zustand, -65281);
    TextDrawSetOutline(zustand, 0);
    TextDrawSetProportional(zustand, 1);
    TextDrawSetShadow(zustand, 1);
    TextDrawUseBox(zustand, 1);
    TextDrawBoxColor(zustand, 255);
    TextDrawTextSize(zustand, 206.000000, 95.000000);
    public Tacho()
    {
    new str[10];
    for(new i=0;i<MAX_PLAYERS i++) // HIER KOMMT DER TOKEN FEHLER <<<<<<<<<<<<<<<<<<<<<<<<<
    {
    if(!IsPlayerConnected(i)) return 1;
    if(IsPlayerInAnyVehicle(i))
    {
    new Float:vehHealth;
    GetVehicleHealth(GetPlayerVehicleID(playerid), vehHealth); // HIER KOMMT DER "PLAYERID" FEHLER <<<<<<<<<<<<<<<
    format(str, sizeof(str), "%f", vehHealth);
    TextDrawSetString(zustand, str);
    }
    }
    return 1;
    }


    aber es kommen diese errors:
    error 001: expected token: ";", but found "-identifier-"
    (4265) : error 017: undefined symbol "playerid"

  • Einfach:


    for(new i=0;i<MAX_PLAYERS; i++)
    zu
    for(new playerid; playerid<MAX_PLAYERS; playerid++)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • Ist zwar richtig, aber nicht die Ursache des Problems.
    Einmal richtig hinschauen, dann sieht man den Fehler sofort.


    So ist's richtig:


    public Tacho()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInAnyVehicle(i))
    {
    new str[10], Float:vHealth;
    GetVehicleHealth(GetPlayerVehicleID(i), vHealth);
    format(str, sizeof(str), "%f", vHealth);
    TextDrawSetString(zustand, str);
    }
    }
    }
    return 1;
    }
    Nichts für Ungut, aber vom Titel "Script-Lehrer" erwartet man mehr.

  • bekomme immernoch nichts angezeigt :(


    woran liegt es?
    public Tacho()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInAnyVehicle(i))
    {
    new str[10], Float:vHealth;
    GetVehicleHealth(GetPlayerVehicleID(i), vHealth);
    format(str, sizeof(str), "%f", vHealth);
    TextDrawSetString(zustand, str);
    }
    }
    }
    return 1;
    }


    Unter public OnGameModeInit() habe ich:
    zustand = TextDrawCreate(90.000000, 316.000000, "Zustand: 0000 HP");
    TextDrawAlignment(zustand, 2);
    TextDrawBackgroundColor(zustand, 255);
    TextDrawFont(zustand, 1);
    TextDrawLetterSize(zustand, 0.500000, 1.000000);
    TextDrawColor(zustand, -65281);
    TextDrawSetOutline(zustand, 0);
    TextDrawSetProportional(zustand, 1);
    TextDrawSetShadow(zustand, 1);
    TextDrawUseBox(zustand, 1);
    TextDrawBoxColor(zustand, 255);
    TextDrawTextSize(zustand, 206.000000, 95.000000);


    und ganz oben im Script:
    forward Tacho();

  • OnPlayerStateChange


    if(newstate == PLAYER_STATE_DRIVER)
    {
    TextDrawShowForPlayer(playerid,zustand);
    }
    if(newstate == PLAYER_STATE_FOOT)
    {
    TextDrawHideForPlayer(playerid,zustand);
    }
    und es wäre nicht schlecht, den Zustand für jeden Spieler zu erstellen, und keine globale Variable

  • KEKS


    Hard_Base, hat bereits das richtige gemeint,
    sich aber verdammt falsch ausgedrückt.


    Das der TextDraw auch funktioniert, musst Du
    diesen für jeden Spieler seperat deklarieren.


    Um's einfacher auszudrücken:


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    zustand[i] = TextDrawCreate(90.000000, 316.000000, "Zustand: 0000 HP");

    ...
    }
    Achja, Du solltest natürlich auch nicht vergessen, das der
    TextDraw sekündlich für den Spieler erneuert werden muss.


    Denn global festgelegt, würde er für alle das selbe anzeigen,
    oder unter Umständen, wenn zwei zugleich fahren, nichts anzeigen.

  • könnte mir das einer machen? ^^
    also mit dem updaten?
    @ Hard


    if(newstate == PLAYER_STATE_FOOT)
    undefined Symbol PLAYER_STATE_FOOT


    und wo muss das hier hin?
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    zustand[i] = TextDrawCreate(90.000000, 316.000000, "Zustand: 0000 HP");

    ...
    }


    und wie mache ich es nicht global? ^^

  • Ohje, ohje...


    Erstelle innerhalb der Funktion OnGameModeInit()
    bitte einen Timer, der sekündlich Deine Funktion
    wiederholt, die den Zustand des Fahrzeugs erneuert.


    Innerhalb der Funktion, die den Zustand erneuert,
    musst Du dann Deinen TextDrawSetString() verwenden.


    Dann wird der TextDraw sekündlich erneuert.

  • Erstmal musst Du den gesamten TextDraw,
    für jeder Spieler seperat deklarieren, wie ich
    es Dir vorhinst bereits geschrieben hatte.


    In der Funktion OnGameModeInit() fügst Du vor
    Deinem TextDraw folgendes hinzu:


    public OnGameModeInit()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    zustand[i] = TextDrawCreate(90.000000, 316.000000, "Zustand: 0000 HP");

    ...
    }
    return 1;
    }
    Dann noch Deinen Timer, der Deine Funktion,
    die den Status des Fahrzeugs aktualisiert, erstellen.


    Eigentlich ganz simpel.


    Im Forum gibts auch Tutorials, für das Erstellen eines Tachos.

  • wenn ich das so habe:
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    zustand[i] = TextDrawCreate(90.000000, 316.000000, "Zustand: 0000 HP");
    TextDrawAlignment(zustand[i], 2);
    TextDrawBackgroundColor(zustand[i], 255);
    TextDrawFont(zustand[i], 1);
    TextDrawLetterSize(zustand[i], 0.500000, 1.000000);
    TextDrawColor(zustand[i], -65281);
    TextDrawSetOutline(zustand[i], 0);
    TextDrawSetProportional(zustand[i], 1);
    TextDrawSetShadow(zustand[i], 1);
    TextDrawUseBox(zustand[i], 1);
    TextDrawBoxColor(zustand[i], 255);
    TextDrawTextSize(zustand[i], 206.000000, 95.000000);
    SetTimer("Tacho",1000,1);
    }
    kommen:
    028: invalid subscript (not an array or too many subscripts): "zustand"
    215: expression has no effect
    001: expected token: ";", but found "]"
    029: invalid expression, assumed zero
    107: too many error messages on one line