Frage bzw Codeanstoß Tankanzeige

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 Tag Liebes Forum Ich bräuchte mal Hilfe hierbei undzwar einen Codeanstoß
    Ist Tank 100 = TextDrawSetString ( textdraw ) " ______________" dann bei 98 ein strich weniger und immer weniger wie sollte ich das scripten?


    brauche nen kleinen Codeschnipsel um dass weiter führen zu können

  • Weiß nicht 100%ig, ob es so funktioniert.
    Also wenn er zB 100 Tank hat, sind es 100x "_".. Und bei 77 Tank dann 77x "_" oder wie?
    Wenn ja, dann versuch es mal so :P


    stock setTankTD(playerid)
    {
    new tank = VehicleInfo[GetPlayerVehicleID(playerid)][Tank], tankstr[strval(tank)];
    for(new i=0; i<strval(tank); i++)
    {
    tankstr[i] = '_';
    }
    TextDrawSetString(textdraw,tankstr);
    }

  • Das wären ja dann 100 "_"


    ____________________________________________________________________________________________________


    Also so lang. Ich bezweifle das du das willst^^


    Ich würde dir eher raten für jeden 10er ein "_". ;)

    Die Macht etwas zu bewirken, ist in Dir. Du musst sie nur rauslassen


    cristiano-ronaldo-525-portugal-euro-2012-banner-wallpaper.jpg

  • Ich würde den Tank erstmal teilen.


    Also wir haben insg. 100 Liter. (Beispiel)
    Pro 20 Liter denken wir uns ein " _ " weniger.
    Also müssen wir dann ja 5 " _ " haben.


    Doch anstatt den _ würde ich kleine TextDrwas machen.
    So kleine Boxen mit Farben
    Wenn 4 (also 80 Liter im Tank sind) Boxen angezeigt werden, die Farbe grün.
    Bei 3 Orange
    Und bei 1 Rot...


    So habe ich das ín meinem Script auch gemacht.
    Drunter habe ich noch eine Anzeige die trotzdem noch die %Zahl anzeigt.


    Code ist am Pc.
    Kann ich nachher mal schauen. ;)

  • Joa so hätt ich das auch gemacht wäre nett wenn du den Code posten könntest später


    Ich hatte vor 1 Monat eine Tankanzeige die mir zuviel Ressourcen gezogen hat also hier bsp



    oben



    public SetSekundenTimer()
    {
    SetProTimer("SekundenTimer", 1020, true);
    }





    for(new s=0; s<SLOTS; s++)
    {
    if(IsPlayerInAnyVehicle(i))
    {
    //new vehicleid = GetPlayerVehicleID(i);
    new str[256];
    PlayerTextDrawShow(i,TankanzeigeneL[i]);
    format(str,sizeof(str),"____",Gas[vehicleid]);
    PlayerTextDrawSetString(i,TankanzeigeneL[i],str);
    PlayerTextDrawTextSize(i,TankanzeigeneL[i], 100.0000000,Gas[vehicleid]*1.33);
    }
    else
    {
    PlayerTextDrawHide(i,TankanzeigeneL[i]);
    }


    Der zog am Server 100kb pro sekunde und das laggte tierisch..

  • Das geht viel einfacher:


    • Unter Annahme, dass wir fünf Balken wollen (20l = 1 Balken), erstellen wir fünf TextDraws.
    • Wir erstellen einen Timer für jedes Auto beim Erstellen des Autos, der dann aufgerufen wird, wenn der Tank 1l weniger enthält.
    • Wenn der Timer aufgerufen wird testen wir, ob sich ein Fahrer im Auto befindet und ob der Motor läuft.
    • Wenn ja, dann updaten wir die Balken, die angezeigt werden für den Fahrer.
    • Auch müssen wir die Balken bei ein- und aussteigen updaten.


    Also, machen wir uns ran (Beachte: Ich arbeite mit Iteratoren, damit ich Fahrzeuge und Spieler performanter handhaben kann - siehe Tutorial in meiner Signatur):



    // Preprocessor Directives:
    #include <foreach>


    #define FUEL_TIMER_INTERVAL (50000)


    // Aufbauen der Datenstruktur:
    enum vehicleEnumerator {
    vFuelTimerHandle,
    vTank
    }


    new Text:fuelBars[5],
    Iterator:vehicleIterator<MAX_VEHICLES>,
    vehicleData[MAX_VEHICLES][vehicleEnumerator];


    public OnGameModeInit() {
    // TextDraws erstellen!
    // ...


    // Autos erstellen:
    new vehicleID = CreateVehicle(/* ... */);
    Iter_Add(vehicleIterator, vehicleID);
    vehicleData[vehicleID][vFuelTimerHandle] = SetTimerEx("fuelTimer", FUEL_TIMER_INTERVAL, false, "i", vehicleID);
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate) {
    if(newstate == PLAYER_STATE_DRIVER) {
    updateFuelTextDraws(playerid, floatround(vehicleData[GetPlayerVehicleID(playerid)][vTank] / 20, floatround_ceil));
    } else if(oldstate == PLAYER_STATE_DRIVER) {
    updateFuelTextDraws(playerid, 0);
    }


    return 1;
    }


    forward fuelTimer(vehicleID);
    public fuelTimer(vehicleID) {
    new vParams[7];
    GetVehicleParamsEx(vehicleID, vParams[0], vParams[1], vParams[2], vParams[3], vParams[4], vParams[5], vParams[6]);
    if(vParams[0] == 1) {
    new driver = -1;
    foreach(new i : Player) {
    if(GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerVehicleID(i) == vehicleID) {
    driver = i;
    break;
    }
    }


    if(driver != -1) {
    updateFuelTextDraws(driver, floatround(vehicleData[vehicleID][vTank] / 20, floatround_ceil));
    }
    }
    }


    updateFuelTextDraws(playerid, bars) {
    new j;
    for(j = 4; j != bars - 1; j--) {
    TextDrawHideForPlayer(playerid, fuelBars[j]);
    }


    for(j = 0; j != (bars > 0) ? (bars - 1) : (bars); j++) {
    TextDrawShowForPlayer(playerid, fuelBars[j]);
    }
    }