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
  • Moin.


    Ich habe mal eine Frage an die Mathe-Genies hier.


    Und zwar möchte ich einen realistischen Benzinverbrauch erstellen, sprich Wagen A (Infernus) verbraucht auf 30 km 3 liter (unreal unso? :p) und Wagen B verbraucht auf 30 km 4 Liter. Und wenn Wagen A jetzt zB 1km fährt geht der tank dann um 0.1 weniger. Nur ich habe da jetzt Probleme, allgemein alles zu erstellen.
    Kann da evtl jemand helfen? :/
    Will keinen kompletten Code o.ä nur ein paar "Gedankenblitze" ;)


    Danke. ^^

  • Einen realistischen Verbrauch im Spiel, solltest Du
    natürlich schon etwas höher schrauben als üblich.


    So sollte ein Fahrzeug ruhig 10l auf 100KM/h brauchen.


    Mit einem Timer kannst Du überprüfen, ob die Fahrzeuge
    über eine gewisse Geschwinidgkeit fahren und immer dann,
    bsp. 0,2 oder 0,4 Liter abziehen.


    So sinkt der Tank bei Rasern sehr viel schneller.


    Langsamfahrer solltest Du wiederrum 0,2 oder 0,4 dazu addieren.
    Den normalen Wert aber natürlich trotzdem abziehen.


    So hält es sich im Gleichgewicht.

  • Erstelle ein Array, so fern du nicht schon einen für die Tank-Größen hast, und trage dort den Benzinverbrauch auf 100 KM von den verschiedenen Vehikeln ein.
    Im Fall, dass du sowieso bereits einen Array für die Tankgrößen hast, kannst du auch dort einfach den Benzinverbrauch mit einbringen.
    Die Werte kannst du dann einfach mit in die Rechnung einbeziehen.

  • @AzkarGames
    Ich habe jetzt mal ein Array erstellt, worin alle Model-IDs enthalten sind, und deren Benzinverbrauch auf 100km.
    Das sieht so aus:

    new Float:Verbrauch[]{
    10.0,
    10.0,
    //usw.


    Und wie soll ich nun fortsetzen?
    Habe kaum Ahnung von Berechnungen. Besonders von solch komplizierten Berechnungen. ._.

  • Okay. Ich poste dir hier einmal ein KM-Stand System.
    Wir ergänzen den KilometerTimer nun folgender Maßen:

    public KilometerTimer()
    {
    new string[256];
    for(new i=0; i<MAX_VEHICLES; i++) {
    new LastMeters = Meters[i]; //Wir erstellen eine neue Variable, welche die alte Meter-Angabe beinhaltet
    Meters[i]+=GetDistanceToLastPoint(i); //Die öffentliche Meters-Variable updaten wir so gesehen
    Benzintank[i] -= (((Meters[i] - LastMeters) /1000) / Verbrauch[XY]) // Nun errechnen wir die Differenz von der neuen Meter-Anzeige und der alten. Anschließend rechnen wir diese geteilt durch 1000, da wir ja nach Kilometern gehen. Nun dividieren wir den neuen Wert durch den Verbrauch auf 100 Kilometern.
    format(string, 256, "~n~~n~~n~~n~~n~~n~~n~~y~Kilometer: ~r~%03d~n~~y~Meilen: ~r~%03d", Meters[i]/1000, Meters[i]/1609);
    GameTextForVehiclePlayers(i, string, 3000, 3);
    SaveCoords(i);
    }
    return 1;
    }
    Dies wäre ein Beispiel. Ist zwar ungetestet, dürfte aber vom Prinzip her passen.



    Okay. Letzter Versuch. Jetzt dürfte es aber richtig sein...
    Benzintank[i] -= (((Meters[i] - LastMeters) /1000) * Verbrauch[XY] / 100);

    2 Mal editiert, zuletzt von Zone ()

  • Danke schonmal, nur erhalte ich jetzt ein paar Fehler, welche durch mein Array & meine Funktion entstehen.
    Der Array
    PS: Extra in den Expander gepackt, da der etwas länger ist:

    Spoiler anzeigen


    new Float:Verbrauch[] = {
    10.0, //"Landstalker",
    10.0,//"Bravura",
    10.0,//"Buffalo",
    10.0,//"Linerunner",
    10.0,//"Pereniel",
    10.0,//"Sentinel",
    10.0,//"Dumper",
    10.0,//"Firetruck",
    10.0,//"Trashmaster",
    10.0,//"Stretch",
    10.0,//"Manana",
    10.0,//"Infernus",
    10.0,//"Voodoo",
    10.0,//"Pony",
    10.0,//"Mule",
    10.0,//"Cheetah",
    10.0,//"Ambulance",
    10.0,//"Leviathan",
    10.0,//"Moonbeam",
    10.0,//"Esperanto",
    10.0,//"Taxi",
    10.0,//"Washington",
    10.0,//"Bobcat",
    10.0,//"Mr Whoopee",
    10.0,//"BF Injection",
    10.0,//"Hunter",
    10.0,//"Premier",
    10.0,//"Enforcer",
    10.0,//"Securicar",
    10.0,//"Banshee",
    10.0,//"Predator",
    10.0,//"Bus",
    10.0,//"Rhino",
    10.0,//"Barracks",
    10.0,//"Hotknife",
    10.0,//"Trailer",
    10.0,//"Previon",
    10.0,//"Coach",
    10.0,//"Cabbie",
    10.0,//"Stallion",
    10.0,//"Rumpo",
    10.0,//"RC Bandit",
    10.0,//"Romero",
    10.0,//"Packer",
    10.0,//"Monster Truck",
    10.0,//"Admiral",
    10.0,//"Squalo",
    10.0,//"Seasparrow",
    10.0,//"Pizzaboy",
    10.0,//"Tram",
    10.0,//"Trailer",
    10.0,//"Turismo",
    10.0,//"Speeder",
    10.0,//"Reefer",
    10.0,//"Tropic",
    10.0,//"Flatbed",
    10.0,//"Yankee",
    10.0,//"Caddy",
    10.0,//"Solair",
    10.0,//"Berkley's RC Van",
    10.0,//"Skimmer",
    10.0,//"PCJ-600",
    10.0,//"Faggio",
    10.0,//"Freeway",
    10.0,//"RC Baron",
    10.0,//"RC Raider",
    10.0,//"Glendale",
    10.0,//"Oceanic",
    10.0,//"Sanchez",
    10.0,//"Sparrow",
    10.0,//"Patriot",
    10.0,//"Quad",
    10.0,//"Coastguard",
    10.0,//"Dinghy",
    10.0,//"Hermes",
    10.0,//"Sabre",
    10.0,//"Rustler",
    10.0,//"ZR-350",
    10.0,//"Walton",
    10.0,//"Regina",
    10.0,//"Comet",
    0.0,//"BMX",
    10.0,//"Burrito",
    10.0,//"Camper",
    10.0,//"Marquis",
    10.0,//"Baggage",
    10.0,//"Dozer",
    10.0,//"Maverick",
    10.0,//"News Chopper",
    10.0,//"Rancher",
    10.0,//"FBI Rancher",
    10.0,//"Virgo",
    10.0,//"Greenwood",
    10.0,//"Jetmax",
    10.0,//"Hotring",
    10.0,//"Sandking",
    10.0,//"Blista Compact",
    10.0,//"Police Maverick",
    10.0,//"Boxville",
    10.0,//"Benson",
    10.0,//"Mesa",
    10.0,//"RC Goblin",
    10.0,//"Hotring Racer",
    10.0,//"Hotring Racer",
    10.0,//"Bloodring Banger",
    10.0,//"Rancher",
    10.0,//"Super GT",
    10.0,//"Elegant",
    10.0,//"Journey",
    0.0,//"Bike",
    0.0,//"Mountain Bike",
    10.0,//"Beagle",
    10.0,//"Cropdust",
    10.0,//"Stunt",
    10.0,//"Tanker",
    10.0,//"RoadTrain",
    10.0,//"Nebula",
    10.0,//"Majestic",
    10.0,//"Buccaneer",
    10.0,//"Shamal",
    10.0,//"Hydra",
    10.0,//"FCR-900",
    10.0,//"NRG-500",
    10.0,//"HPV1000",
    10.0,//"Cement Truck",
    10.0,//"Tow Truck",
    10.0,//"Fortune",
    10.0,//"Cadrona",
    10.0,//"FBI Truck",
    10.0,//"Willard",
    10.0,//"Forklift",
    10.0,//"Traktor",
    10.0,//"Combine",
    10.0,//"Feltzer",
    10.0,//"Remington",
    10.0,//"Slamvan",
    10.0,//"Blade",
    10.0,//"Freight",
    10.0,//"Streak",
    10.0,//"Vortex",
    10.0,//"Vincent",
    10.0,//"Bullet",
    10.0,//"Clover",
    10.0,//"Sadler",
    10.0,//"Firetruck",
    10.0,//"Hustler",
    10.0,//"Intruder",
    10.0,//"Primo",
    10.0,//"Cargobob",
    10.0,//"Tampa",
    10.0,//"Sunrise",
    10.0,//"Merit",
    10.0,//"Utility",
    10.0,//"Nevada",
    10.0,//"Yosemite",
    10.0,//"Windsor",
    10.0,//"Monster Truck",
    10.0,//"Monster Truck",
    10.0,//"Uranus",
    10.0,//"Jester",
    10.0,//"Sultan",
    10.0,//"Stratum",
    10.0,//"Elegy",
    10.0,//"Raindance",
    10.0,//"RC Tiger",
    10.0,//"Flash",
    10.0,//"Tahoma",
    10.0,//"Savanna",
    10.0,//"Bandito",
    10.0,//"Freight",
    10.0,//"Trailer",
    10.0,//"Kart",
    10.0,//"Mower",
    10.0,//"Duneride",
    10.0,//"Sweeper",
    10.0,//"Broadway",
    10.0,//"Tornado",
    10.0,//"AT-400",
    10.0,//"DFT-30",
    10.0,//"Huntley",
    10.0,//"Stafford",
    10.0,//"BF-400",
    10.0,//"Newsvan",
    10.0,//"Tug",
    10.0,//"Trailer",
    10.0,//"Emperor",
    10.0,//"Wayfarer",
    10.0,//"Euros",
    10.0,//"Hotdog",
    10.0,//"Club",
    10.0,//"Trailer",
    10.0,//"Trailer",
    10.0,//"Andromada",
    10.0,//"Dodo",
    10.0,//"RC Cam",
    10.0,//"Launch",
    10.0,//"Streifenwagen",
    10.0,//"Streifenwagen",
    10.0,//"Streifenwagen",
    10.0,//"Polizei Ranger",
    10.0,//"Picador",
    10.0,//"S.W.A.T. Van",
    10.0,//"Alpha",
    10.0,//"Phoenix",
    10.0,//"Glendale",
    10.0,//"Sadler",
    10.0,//"Luggage Trailer",
    10.0,//"Luggage Trailer",
    10.0,//"Stair Trailer",
    10.0,//"Boxville",
    10.0,//"Farm Plow",
    10.0//"Utility Trailer"
    };


    Die Funktion zum returnen des Vehicle-Verbrauchs:

    stock GetVehicleVerbrauch(vehicleid){
    new model = GetVehicleModel(vehicleid);{
    if(model >= 400 && model <= 611){
    return Float:Verbrauch[(model-400)];
    }
    return Float:10.0;
    }


    Die Fehler:


    //Edit
    Etwas geändert.. (bei den Errors)
    //Edit-2
    Wie kann man denn einen Wert aus einem Array per stock wiedergeben?
    Weil durch die Funktion oben geht es ja nicht. Wenn es kein Float ist, klappt es ... ._.

  • stock Float:GetVehicleVerbrauch(vehicleid){
    new model = GetVehicleModel(vehicleid);
    if(model >= 400 && model <= 611){
    return /*Float:*/Verbrauch[(model-400)];
    }
    return /*Float:*/10.0;
    }
    Du musst das Tag ( Float:) im Kopf bereits erwähnen.Falls du die Funktion im Script benutzt bevor sie deklariert wird,solltest du sie dem Kompiler vorher mit forward bekannt machen. Sonst kriegst eine Warnung.
    Edit:
    Hmpf,BlackLegend :(.

    Einmal editiert, zuletzt von Goldkiller ()

  • BlackLegend
    Dann kackt der Compiler ab. ;)
    Das wäre wenn dann stock Float:...
    Aber das geht auch nicht, da kommen dann ja die Fehler.
    Habs so versucht:

    stock Float:GetVehicleVerbrauch(vehicleid){
    new model = GetVehicleModel(vehicleid);{
    if(model >= 400 && model <= 611){
    return Verbrauch[(model-400)];
    }
    return 10.0;
    }
    Die gleichen Fehler... ;)


    //Edit
    Goldkiller
    Genau dann treten folgende Fehler auf:


    //Edit
    Close, klappt jetzt.
    Hatte irgendwo ne Klammer gesetzt in den Funktionen... :D

  • Jo ist mir auch noch aufgefallen, habs ja noch editiert.
    Aber bitte achte genauer auf meinen Code, da war noch ein Fehler drin, der ausgebessert wurde:


    stock Float:GetVehicleVerbrauch(vehicleid){
    new model = GetVehicleModel(vehicleid); // <- Unnötige Klammer entfernt
    if(model >= 400 && model <= 611){
    return Verbrauch[(model-400)];
    }
    return 10.0;
    }



    BlackLegend

  • Ah, doch nicht closen.
    Hab noch ein Problem.
    Und zwar geht der Benzin Stand beim fahren von ein paar Metern (wenn ich ne NRG spawne, ist es bei 30.000000)
    Dann geht der Stand kurz runter auf 29.799999 und dann bleibt er da.
    Woran liegt es? ._.


    (e):
    Habe es mal debuggen lassen:

    forward BenzinVerbrauch();
    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){
    printf("Debug 7");
    if(!IsAFahrrad(model)){
    printf("Debug 8");
    if(vehFuel[i] > 0.0){
    printf("Debug 9");
    new LastMeters = Meters[i];
    printf("Debug 10");
    Meters[i] += GetDistanceToLastPoint(i);
    printf("Debug 11");
    vehFuel[i] -= (((Meters[i] - LastMeters) / 1000) * GetVehicleVerbrauch(i) / 100);
    printf("Debug 12");
    SaveCoords(i);
    printf("Debug 13");
    }
    else{
    vehFuel[i] = 0.0;
    }
    }
    }
    }
    return 1;
    }


    Es debuggt bis bei "Debug 13" alles.
    Habe es nur begrenzt gemacht, vorher habe ich auch die anderen Sachen getestet, da es meine Console voll gespammt hat. :D

  • Ich bin gerade ein wenig überfragt, wieso das Problem auftritt.
    Also du sagtest, dass der Benzintank nur einmal bis 29.799999 kommt, und von dort an nicht weiter, habe ich das richtig verstanden?

  • Ja, er geht sobald ich den Motor anschalte auf 29.799999 (bzw. da ich %.01f benutzt habe zeigt er nur 29.7 an) und dann passiert nichtsmehr.
    Gedebuggt habe ich auch schon, er geht bis zum Ende durch.
    Hier mal mein Public wie er jetzt aussieht.

    forward BenzinVerbrauch();
    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 LastMeters = Meters[i];
    Meters[i] += GetDistanceToLastPoint(i);
    vehFuel[i] -= (((Meters[i] - LastMeters) / 1000) * GetVehicleVerbrauch(i) / 100);
    SaveCoords(i);
    }
    else{
    vehFuel[i] = 0.0;
    }
    }
    }
    }
    return 1;
    }


    ... <.<