Realistischer Benzinverbrauch

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
  • Natürlich, ich bin sogar schon 2x durch ganz SA gedüst. :D


    //Edit
    Suche immernoch das Problem. Habe schon tausende Sachen versucht, leider hat es nichts gebracht.
    @AzkarGames ._.


    //Edit
    Habe mal den ganzen HauptTimer debuggen lassen, da ist leider auch nichts. ._.

  • Was auch noch eine option wäre wenn du die distanz auf ein integer rundest und den mit einem anderen integer immer wieder addierst
    und wenn der andere integer 100 hat also 100 kilometer lässt was vom tank abziehen oder bei 10km
    solltest halt abfragen ob der integer mehr als 10 hat und ihn danach wieder auf 0 setzen

  • Guck auf die vorherige Seite, ganz unten.
    Prototype
    Sollte auch einfacher gehen ... ._.


    xD einfacher also einfach geht das nicht mehr hier ein oberflächliches Beispiel zu dem Kilometersystem


    new integer, test;
    Meters[i]+=GetDistanceToLastPoint(i);
    integer =floatround(Meters[i], floatround_ceil);
    test+=integer;
    if(test > 10){
    Danach den betrag vom tank abziehen


    das ist so gesehen immer noch kürzer als mit einem stock zu arbeiten und x berechnungen

  • Ich habe es jetzt so:

    public BenzinVerbrauch(){
    new engine, lights, alarm, doors, bonnet, boot, objective;
    new model;
    for(new i=0;i<MAX_VEHICLES;i++){
    GetVehicleParamsEx(i, engine, lights, alarm, doors, bonnet, boot, objective);
    model = GetVehicleModel(i);
    if(engine == VEHICLE_PARAMS_ON){
    if(!IsAFahrrad(model)){
    if(vehFuel[i] > 0.0){
    new valueOne, valueTwo;
    Meters[i] += GetDistanceToLastPoint(i);
    valueOne = floatround(Meters[i], floatround_ceil);
    valueTwo += valueOne;
    if(valueTwo > 1){
    vehFuel[i] -= 0.1;
    }
    SaveCoords(i);
    }
    else{
    vehFuel[i] = 0.0;
    }
    }
    }
    }
    return 1;
    }


    Wenn ich aber dann den Motor anschalte, geht es auf 29,8 runter, und dann wird jede Sekunde 0.1 Liter abgezogen, auch wenn ich stehen bleibe, oder am BSN mit 200 Sachen vorbei brettere.
    (e):
    Hab den neuen Public auch mal gedebuggt, da geht auch alles. ._.
    (e2):
    Ich glaube, es kann doch garnicht richtig sein, mit diesem "if(test > 10)" o.ä... ._.
    (e3):
    @|Prototype|
    Hast du noch ne Idee
    oder
    @AzkarGames


    ...
    Ich bin gerade total überfordert, und weiß nicht wie ich es berechnen lassen kann. :pinch:
    (e4):
    Habe mal den Public nochmal abgeändert, jetzt wird nichtsmehr abgezogen. (bei einer NRG bleibt es bei 30.0/30.0)

    //Global habe ich valueOne und valueTwo deklariert
    new valueOne;
    new valueTwo;
    public BenzinVerbrauch(){
    new engine, lights, alarm, doors, bonnet, boot, objective;
    new model;
    for(new i=0;i<MAX_VEHICLES;i++){
    GetVehicleParamsEx(i, engine, lights, alarm, doors, bonnet, boot, objective);
    model = GetVehicleModel(i);
    if(engine == VEHICLE_PARAMS_ON){
    if(!IsAFahrrad(model)){
    if(vehFuel[i] > 0.0){
    Meters[i] += GetDistanceToLastPoint(i);
    valueOne = floatround(Meters[i], floatround_ceil);
    valueTwo += valueOne;
    if(valueTwo > 1000){
    vehFuel[i] -= (((Meters[i] - valueTwo) / 1000) * GetVehicleVerbrauch(i) / 100);
    valueTwo = 0;
    }
    SaveCoords(i);
    }
    else{
    vehFuel[i] = 0.0;
    }
    }
    }
    }
    return 1;
    }


    Hoffe es kann jemand helfen. :/

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Was sagt den
    valueTwo aus kannst du das mal printen lassen


    //edit


    Meine überlegung war so wenn du beispiel pro sekunde eine Distanz von 100 zurück legst wird diese 100.01212
    erstmal zu einem integer umgewandelt auch wenn da snicht umbedingt nötig ist. Also haben wir mal so gesehen 100.
    Diese werden addiert zu valueTwo


    Sekunde 1: valueTwo = 100
    Sekunde 2: valueTwo = 200
    Sekunde 3: valueTwo = 300
    Sekunde 4: valueTwo = 400
    Sekunde 5: valueTwo = 500
    ....
    Sekunde 10: valueTwo = 1000


    jetzt hättest es auch so machen können >= mit Dem ist gleich oder größer Operator, aber egal
    zurück zum wesentlichen und wie du es schon hattest sollte in der Sekunde der tank um 0.1 subtrahiert werden
    if(valueTwo > 1){
    vehFuel[i] -= 0.1;


    nur fehlt dir noch das valueTwo= 0;


    weil unsere variabel soll ja noch mal hochzählen ich hoffe du weisst jetzt was ich mein.
    Das einzigste was du brauchst ist eine gute rechnung um die kilometer zu berechen mehr nicht


  • public BenzinVerbrauch(){
    new engine, lights, alarm, doors, bonnet, boot, objective;
    new model;
    for(new i=0;i<MAX_VEHICLES;i++){
    GetVehicleParamsEx(i, engine, lights, alarm, doors, bonnet, boot, objective);
    model = GetVehicleModel(i);
    if(engine == VEHICLE_PARAMS_ON){
    if(!IsAFahrrad(model)){
    if(vehFuel[i] > 0.0){
    Meters[i] += GetDistanceToLastPoint(i);
    valueOne = floatround(Meters[i], floatround_ceil);
    valueTwo += valueOne;
    printf("valueOne: %d - valueTwo: %d", valueOne, valueTwo);
    if(valueTwo > 1000){
    vehFuel[i] -= (((Meters[i] - valueTwo) / 1000) * GetVehicleVerbrauch(i) / 100);
    valueTwo = 0;
    }
    SaveCoords(i);
    }
    else{
    vehFuel[i] = 0.0;
    }
    }
    }
    }
    return 1;
    }


    Print: [20:29:41] valueOne: 0 - valueTwo: 0


    //Edit
    Habe es jetzt, es läuft auch, nur wenn ich jetzt fahre, geht z.B. der Tank manchmal von 30.0 direkt auf 29.7, dann auf 29.5, 29.0, etc. also nicht in 1er Schritten. :/
    Ich will es ja mit einem variierenden Verbrauch haben. Sprich Fahrzeug A verbraucht 9 L auf 100km, Fahrzeug B 7 L auf 100k.


    So sieht es aus:

    public BenzinVerbrauch(){
    new engine, lights, alarm, doors, bonnet, boot, objective;
    new model;
    for(new i=0;i<MAX_VEHICLES;i++){
    GetVehicleParamsEx(i, engine, lights, alarm, doors, bonnet, boot, objective);
    model = GetVehicleModel(i);
    if(engine == VEHICLE_PARAMS_ON){
    if(!IsAFahrrad(model)){
    if(vehFuel[i] > 0.0){
    Meters[i] += GetDistanceToLastPoint(i);
    valueOne = 0;
    valueOne = GetDistanceToLastPoint(i);
    valueTwo += valueOne;
    //printf("valueOne: %d - valueTwo: %d", valueOne, valueTwo);
    if(valueTwo > 1000){
    printf("Debug 1");
    vehFuel[i] -= (((Meters[i] - valueTwo) / 1000) * GetVehicleVerbrauch(i) / 100);
    valueTwo = 0;
    }
    SaveCoords(i);
    }
    else{
    vehFuel[i] = 0.0;
    }
    }
    }
    }
    return 1;
    }

  • Dann lass es so abziehen dafür brauchst du keine unnötige rechnung


    (((Meters[i] - valueTwo) / 1000) * GetVehicleVerbrauch(i) / 100);


    lass doch einfach hier den betrag abziehen für das auto in deinem array was du wahrscheinlich alles schon
    hast in der Function GetVehicleVerbrauch weil für was gedenkst du ((Meters[i] - valueTwo) / 1000)


    verwenden das würde so gesehen 0 geben und 0* 0.1 genau gibt 0


  • Ja die berechnung von ihm ist ja nicht wirklich falsch
    nur nicht an meine idee angepasst bei mir
    brauchst die berechnung nicht


    weisst du überhaupt was da berechnet wird ?
    ich erklär dir das mal






    Benzintank -= (((Meters - LastMeters) /1000) * Verbrauch[XY] / 100);



    Beispiel:


    der tank ist 100 und die meter sind die deines neuen standes beispiel 2000 ( 2km) letzte Meter wären 1000(1km) also grob

    100 - (2000 -1000)/1000 * (10.0/100)
    100- 1 * 0.1
    100- 0.1 =
    99.9


    bei mir ist das anders


    hier wird eine id hochgezählt
    id + 100 stell dir das mal in 10 mal vor


    also id = 1000
    und dann wird die id auf 0 gesetzt und der tank wird abgezogen
    also brauchst du die berechnung gar nicht sondern musst nur noch den wert des tanken abziehen wie du es gemacht hattest
    GetVehicleVerbrauch(i) / 100);

  • An deiner Stelle würd ich das ganze System ganz anderst aufbauen. Ich zb. habe den Tank Verbrauch je nach Geschwindigkeit die man fährt geregelt. So dass man umso schneller fährt mehr Tank verbraucht, da "schlechtere" Wagen nicht so schnell fahren können kann man somit auch einen höheren Gebrauch mit zb. einem Infernus erzielen.

  • Prototype
    Heißt also, die value-Abfrage entfernen, und einfach folgendes machen:
    vehFuel = GetVehicleVerbrauch(i)/100;
    ??

    public BenzinVerbrauch(){
    new engine, lights, alarm, doors, bonnet, boot, objective;
    new model;
    for(new i=0;i<max_vehicles;i++){
    GetVehicleParamsEx(i, engine, lights, alarm, doors, bonnet, boot, objective);
    model = GetVehicleModel(i);
    if(engine == VEHICLE_PARAMS_ON){
    if(!IsAFahrrad(model)){
    if(vehFuel[i] > 0.0){
    valueOne += GetDistanceToLastPoint(i);
    printf("valueOne: %d", valueOne,);
    if(valueOne > 1000){
    printf("Debug 1");
    vehFuel[i]-= GetVehicleVerbrauch(i)/ 100;
    valueOne = 0;
    printf("neuer tank %d", vehFuel[i]);
    }
    SaveCoords(i);
    }
    else{
    vehFuel[i] = 0.0;
    }
    }
    }
    }
    return 1;
    }


    das sollte so gehen ich poste nur ungern gesamte codes da solche leute auch mal selbst überlegen sollen
    und das war wohl mehr als verdeutlicht.