Kann mir mal jemand mit dem Tacho helfen, buggt immer noch :s

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
  • //Benzin-System2//
    public BenzinVerlust()
    {
    for(new i = 0;i<MAX_VEHICLES;i++)
    {
    if(Motor[i] == true)
    {
    Tank[i] = Tank[i] -1;
    if(Tank[i] <1)
    {
    Tank[i] = 0;
    GetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(i,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[i] = false;
    }
    }
    }
    return 1;
    }
    public Auftanken(playerid)
    {
    new veh = GetPlayerVehicleID(playerid);
    Tank[veh] = Tank[veh] + 1;
    if(Tank[veh]>= 100)
    {
    TanktGerade[veh] = false;
    Tank[veh] = 100;
    SendClientMessage(playerid, GRÜN, "Auto aufgetankt!");
    TogglePlayerControllable(playerid,1);
    KillTimer(tanktimer[playerid]);
    }
    return 1;
    }


    //-Tachosystem-//
    public UpdateTacho()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER && !IsPlayerNPC(i))
    {
    new Float:Strecke,Float:Geschwindigkeit;
    GetVehiclePos(GetPlayerVehicleID(i),X1[i],Y1[i],Z1[i]);
    Strecke = floatsqroot(floatpower(floatabs(floatsub(X1[i],X2[i])),2)+floatpower(floatabs(floatsub(Y1[i],Y2[i])),2)+floatpower(floatabs(floatsub(Z1[i],Z2[i])),2));
    Geschwindigkeit = (Strecke / (TACHOTIMER/1000)) * 2.8;
    new String[256];
    format(String,256,"Geschwindigkeit: ~g~%d km/h ~n~~w~Fahrzeugtyp: ~g~%s ~n~~w~Benzin:~g~ %i%",floatround(Geschwindigkeit), Fahrzeugname[GetVehicleModel(GetPlayerVehicleID(i))-400],Tank[i]); <--- Hier soll der Tank runterzählen, aus dem Public BENZINVERLUST!! ///////
    TextDrawSetString(Tacho[i], String);
    GetVehiclePos(GetPlayerVehicleID(i),X2[i],Y2[i],Z2[i]);
    TextDrawShowForPlayer(i,Tacho[i]);
    } else {
    TextDrawHideForPlayer(i,Tacho[i]);
    }
    }
    return 1;
    }


    Die Zeile ist markiert, wo der Tank runter zählen soll, aus dem Public BenzinVerlust, Ich hänge dort jetzt schon ca. 2 Tage wäre nett wenn mir mal jemand dabei helfen könnte :s... Steht durchgehend auf 100%


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Guten Abend!


    Sicher bin ich mir mit folgender Hilfestellung natürlich
    nicht, da ich nicht Dein gesamtes Tacho-Script sehe.


    Sollte Deine Variable Tank aber vorher nicht definiert
    sein, funktioniert folgende Zeille in Deinem Script nicht:


    Tank[i] = Tank[i] -1;
    Versuch einmal stattdessen mal folgendes:


    Tank[i] --;
    Noch etwas anderes.
    Wird deine Funktion BenzinVerlust auch sekündlich ausgeführt?


    Oder wie regelst Du das genau?


    Freundliche Grüße


    4#Future | Fake - Philip

  • Also Tank[i] ist ja definiert, aber es geht halt nur im Textdraw. ich teste jetzt mal deine Methode, ich editiere hier gleich - Danke!


    //Edit - Nein, es zählt immer noch nicht runter. ;(


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Ich poste mal alles, moment:



    forward UpdateTacho();
    #define TACHOTIMER 1000
    SetTimer("UpdateTacho",TACHOTIMER,1);
    new Tank[MAX_VEHICLES],bool:TanktGerade[MAX_VEHICLES] = false,tanktimer[MAX_PLAYERS];
    #define VERLUST 20000
    #define BENZINPREIS 3


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Dein Fehler ist denkbar simpel.


    Du musst auch eine Startmenge für Int-Wert Tank festlegen.
    Mach's einfach wie folgt:


    forward UpdateTacho();


    #define TACHOTIMER 1000


    SetTimer("UpdateTacho",TACHOTIMER,1);


    new Tank[MAX_VEHICLES] = 100; // oder mehr, wie du willst


    new bool:TanktGerade[MAX_VEHICLES] = false,tanktimer[MAX_PLAYERS];


    #define VERLUST 20000
    #define BENZINPREIS 3
    Zumindest denke ich, dass es jetzt daran liegt.


    Einen anderen Fehler sehe ich gerade nicht. Ich schau nochmal.




    // EDIT


    Hatte ein Semikolon vergessen. :D

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich poste mal alles, was zum Tacho gehört momment.


    TV geht grad nicht da ich am Skypen bin. :D



    #define VERLUST 20000
    #define BENZINPREIS 3


    new Tank[MAX_VEHICLES] = 100;
    new bool:TanktGerade[MAX_VEHICLES] = false,tanktimer[MAX_PLAYERS];
    forward BenzinVerlust();
    forward Auftanken(playerid);
    forward UpdateTacho();
    #define TACHOTIMER 1000


    //BenzinSystem
    SetTimer("BenzinVerlust",VERLUST,true);
    //Tachosystem
    for( new i = 0;i<MAX_PLAYERS;i++)
    {
    Tacho[i] = TextDrawCreate(539.0000,417.0000,"Rata");
    TextDrawUseBox(Tacho[i],1);
    TextDrawBoxColor(Tacho[i],0x000000FF);
    TextDrawLetterSize(Tacho[i],0.2,1.1);
    TextDrawFont(Tacho[i],1);
    TextDrawSetShadow(Tacho[i],2);
    TextDrawSetOutline(Tacho[i],1);
    }
    SetTimer("UpdateTacho",TACHOTIMER,1);


    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    new car = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(car) != 509 && GetVehicleModel(car) != 481 && GetVehicleModel(car) != 510)
    {
    new str[128];
    if(Tank[car] <= 10) format(str,sizeof str,"~w~Tank: ~r~%i%",Tank[car]);
    if(Tank[car] <= 50) format(str,sizeof str,"~w~Tank: ~o~%i%",Tank[car]);
    if(Tank[car] <= 75) format(str,sizeof str,"~w~Tank: ~y~%i%",Tank[car]);
    if(Tank[car] <= 100) format(str,sizeof str,"~w~Tank: ~g~%i%",Tank[car]);
    TextDrawSetString(Anzeige[playerid],str);
    } else
    {
    TextDrawSetString(Anzeige[playerid],"");


    }



    }
    return 1;
    }


    //Benzin-System2//
    public BenzinVerlust()
    {
    for(new i = 0;i<MAX_VEHICLES;i++)
    {
    if(Motor[i] == true)
    {
    //Tank[i] = Tank[i] -1;
    Tank[i] --;
    if(Tank[i] <1)
    {
    Tank[i] = 0;
    GetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(i,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[i] = false;
    }
    }
    }
    return 1;
    }
    public Auftanken(playerid)
    {
    new veh = GetPlayerVehicleID(playerid);
    Tank[veh] = Tank[veh] + 1;
    if(Tank[veh]>= 100)
    {
    TanktGerade[veh] = false;
    Tank[veh] = 100;
    SendClientMessage(playerid, GRÜN, "Auto aufgetankt!");
    TogglePlayerControllable(playerid,1);
    KillTimer(tanktimer[playerid]);
    }
    return 1;
    }
    //-Tachosystem-//
    public UpdateTacho()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER && !IsPlayerNPC(i))
    {
    new Float:Strecke,Float:Geschwindigkeit;
    GetVehiclePos(GetPlayerVehicleID(i),X1[i],Y1[i],Z1[i]);
    Strecke = floatsqroot(floatpower(floatabs(floatsub(X1[i],X2[i])),2)+floatpower(floatabs(floatsub(Y1[i],Y2[i])),2)+floatpower(floatabs(floatsub(Z1[i],Z2[i])),2));
    Geschwindigkeit = (Strecke / (TACHOTIMER/1000)) * 2.8;
    new String[256];
    format(String,256,"Geschwindigkeit: ~g~%d km/h ~n~~w~Fahrzeugtyp: ~g~%s ~n~~w~Benzin:~g~ %i%",floatround(Geschwindigkeit), Fahrzeugname[GetVehicleModel(GetPlayerVehicleID(i))-400],Tank[i]);
    TextDrawSetString(Tacho[i], String);
    GetVehiclePos(GetPlayerVehicleID(i),X2[i],Y2[i],Z2[i]);
    TextDrawShowForPlayer(i,Tacho[i]);
    } else {
    TextDrawHideForPlayer(i,Tacho[i]);
    }
    }
    return 1;
    }


    So das wäre soweit alles, denke ich hoffe du kannst damit was anfangen.


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • In Ordnung, pass auf.


    Da ich nur einen Ausschnitt des Tacho-Systems habe,
    kann ich mich noch nicht genau festlegen, was ich
    eigentlich ungerne tue.


    Aber hier zunächst einiges, dass Du überprüfen musst:



    Fehlerursache (1)


    Die Abfrage, ob der Motor an ist, in der Funktion
    BenzinVerlust, könnte meiner Meinung nach inkorrekt sein.


    D.h. wäre es möglich, dass der Motor "dauerhaft" auf aus ist?



    Fehlerursache (2)


    Wird der auch der TextDraw, mit Hilfe der TextDrawSetString
    Funktion ständig erneuert, also der, der den Tankstatus ausgibt?



    Fehlerursache (3)


    Die Variable Tank wird außerhalb des Ausschnittes, den ich von Dir
    habe permanent wieder auf 100 gesetzt.



    Abropo, was GANZ wichtig ist und ich Dich noch nicht gefragt
    habe ist, was zeigt der Wert den Tankinhalts eigentlich an?


    BEVOR ich den Tipp mit der Deklaration von 100 gegeben habe und DANACH?

  • Ja der Textdraw ist aber ein anderer, da ich nicht genau weiss wie es Funktioniert, ich zeige dir mal die Textdraws:

    Anzeige[playerid] = TextDrawCreate(597.0,432.0," ");
    TextDrawSetOutline(Anzeige[playerid], 1);
    TextDrawAlignment(Anzeige[playerid], 3);
    TextDrawSetShadow(Anzeige[playerid], 0);
    TextDrawSetString(Anzeige[playerid],str);


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • // TextDrawShowForPlayer(playerid,Anzeige[playerid]); // Zeigt das TextDraw dem Spieler <- Auskommentiert, da ich es ja in der Box haben will.

    if(GetVehicleModel(car) != 509 && GetVehicleModel(car) != 481 && GetVehicleModel(car) != 510)
    {
    new str[128];
    if(Tank[car] <= 10) format(str,sizeof str,"~w~Tank: ~r~%i%",Tank[car]);
    if(Tank[car] <= 50) format(str,sizeof str,"~w~Tank: ~o~%i%",Tank[car]);
    if(Tank[car] <= 75) format(str,sizeof str,"~w~Tank: ~y~%i%",Tank[car]);
    if(Tank[car] <= 100) format(str,sizeof str,"~w~Tank: ~g~%i%",Tank[car]);
    TextDrawSetString(Anzeige[playerid],str);
    } else
    {
    TextDrawSetString(Anzeige[playerid],"");


    }


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Es wird also permanent 100% angezeigt?


    Wenn Du den Wert Tank jetzt statt 100 auf bsp. 1000
    definierst, zeigt er dann dauerhauft 1000 an oder
    weiterhin 100?


    Sollte es weiterhin 100 sein, wird Tank irgendwo im
    Script nochmals falsch definiert.