Tankvolumen und Treibstoff an Fahrzeugen zuordnen

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
  • Hey,
    Habe einige Tutorials und Threads gesehen die zeigen wie das ganze mit den Tankvolumen und Treibstoff funktioniert,




    Also ich möchte das jedes Fahrzeug eine bestimmte Tankmenge hat, und eine bestimmte Treibstoffart

    • Kerosin
    • Ethanol
    • Benzin
    • Diesel

    Wie ich das in paar Tutorials gesehen habe wurde so etwas nicht gezeigt, hoffe einer hat einen guten Plan wie ich anfangen könnte :)

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Unter den Includes:
    enum vehDefaultDataEnum {
    e_fuelType,
    e_maxFuel
    };
    #define FUEL_TYPE_DIESEL 0
    #define FUEL_TYPE_BENZIN 1
    #define FUEL_TYPE_ELEKTRO 2
    //(...)


    new fuelName[][16] = {
    "Diesel",
    "Benzin",
    "Elektro" //Der letzte Eintrag hat kein Komma am Ende.
    };


    Darunter dann zusätzlich die Standartwerte, pro Model-ID:
    new vehDefaultData[][vehDefaultDataEnum] = {
    {FUEL_TYPE_DIESEL, 57}, //Model-ID 400
    {FUEL_TYPE_ELEKTRO, 100}, //Model-ID 401
    {FUEL_TYPE_DIESEL, 40}, //Model-ID 402
    {FUEL_TYPE_BENZIN, 54}, //Model-ID 403
    //(...)
    {FUEL_TYPE_DIESEL, 39} //Model-ID 611
    };
    Dabei steht die erste Zeile für Model ID 400, dann 401, etc... bis 611.


    Zugriff auf die Daten dann beispielsweise so:
    if(IsPlayerInAnyVehicle(playerid))
    {
    new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(playerid)), idx = modelid-400;
    format(string, sizeof(string), "Model-ID: %d / Tankart: %s / Tankgröße: %d", modelid, fuelName[vehDefaultData[idx][e_fuelType]], vehDefaultData[idx][e_maxFuel]);
    SendClientMessage(playerid, 0xFF0000FF, string);
    }

  • Muss ich alles untereinander schreiben?



    Code
    #define FT_DIESEL  39
    #define FT_BENZIN  40
    #define FT_KEROSIN 41
    #define FT_ETHANOL 42
    Code
    (121) : error 020: invalid symbol name ""
    (125) : error 055: start of function body without function header
    (126) : error 010: invalid function or declaration


    Der hat irgendein Problem




    Kann ich die Modelid auch ganz einfach hier angeben


    + Was bedeuten die Zahlen nach FT_DIESEL

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

    Einmal editiert, zuletzt von Jameso ()

  • Muss ich alles untereinander schreiben?

    Du kannst die Abschnitte auch nebeneinander schreiben, dann aber ohne die Kommentare.



    Der hat irgendein Problem

    Stehen die defines vor der ersten Nutzung, sprich vor dem enum? Wenn nicht, trage die davor ein.



    Kann ich die Modelid auch ganz einfach hier angeben

    Nein. Nutze außerdem bitte PlayerTextDraws.



    Was bedeuten die Zahlen nach FT_DIESEL

    Die stehen für den Index im Array der Tankartenbezeichnung. Die müssen 0, 1, 2 etc sein.

  • Also kann ich ganz normal mit der Zahl anstatt 57 mit 1 anfangen


    Das sind doch Playertextdraws da wird doch playerid und maxplayers benutzt?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Also kann ich ganz normal mit der Zahl anstatt 57 mit 1 anfangen

    Achso, du meinst diese Zahlen. Das ist die Größe des Tanks.
    Die Zahlen bei den defines meinte ich.



    Das sind doch Playertextdraws da wird doch playerid und maxplayers benutzt?

    Das ist nur das Array, sprich die Variable, die die ID des Textdraws speichert. PlayerTextDraws sind separate Textdraws, erstellt mit CreatePlayerTextDraw.

  • Hab auch einen Timer erstellt aber er zeigt mir nur 95Liter an z.b und wie berechne ich den verbrauch also wie ziehe ich dem 1 Liter ab pro Timer Aufruf und es muss doch auch geprüft werden ob der Motor an ist oder?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Ich verstehe das ja nicht weil es ja so schon nicht geht, also ich habe keine Variable die mir anzeigt wieviel Tank er überhaupt hat nur was der maximale Tankwert ist



    Habe hier was versucht aber bei der Tankart zeigt er mir garnichts an, CarNames funktioniert ja.

    Code
    {FT_DIESEL, 60},{FT_BENZIN, 55},{FT_BENZIN, 80},....


    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

    Einmal editiert, zuletzt von Jameso ()

  • Code
    enum vehDefaultDataEnum {

    Soll ich die Variable einfach e_Fuel nennen und hier speichern? Das ist doch sinnlos oder reicht ein new? Und ich brauch bitte ein Beispiel weil ich habe 0 Ahnung wie ich so etwas einem Fahrzeug zuordne usw.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Soll ich die Variable einfach e_Fuel nennen und hier speichern?

    Nein, das ist das enum für die Default Daten, diese sind abhängig von der Model-ID, nicht von der vehicleid.


    Erstelle dafür ein neues Array:
    enum vehDataEnum {
    e_fuel
    };
    new vehData[MAX_VEHICLES][vehDataEnum];


    Beim Erstellen des Fahrzeugs machst du dann:
    vehData[vehicleid][e_fuel] = vehDefaultData[modelid-400][e_maxFuel];


    Habe hier was versucht aber bei der Tankart zeigt er mir garnichts an

    Wie hast du die FT_... definiert (#define)?

  • Code
    #define FT_DIESEL  39
    #define FT_BENZIN  40
    #define FT_KEROSIN 41
    #define FT_ETHANOL 42

    So wie du es mir gesagt hast, ist ja auch richtig so

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Habe diese dementsprechend jetzt so genant, Problem besteht weiterhin, Der Log steht im Sammelthread noch habe deine Nachricht vorher erst gelesen.
    Aber im Log steht auch nur das, dass Plugin geladen wurde.



    Code
    if((newstate == PLAYER_STATE_DRIVER) || (newstate == PLAYER_STATE_PASSENGER))
    	{
            new string[32], idx = GetVehicleModel(GetPlayerVehicleID(playerid)) - 400;
    		format(string, sizeof(string), "%s", fuelName[vehDefaultData[idx][e_fuelType]]);
    		PlayerTextDrawSetString(playerid, textdraw[4][playerid], string);
    	}



    Das ist das Problem habe das raus genommen und es geht scheinbar wieder, mache ich was falsch beim Anzeigen vom Tank?


    Code
    #define FT_DIESEL  0
    #define FT_BENZIN  1
    #define FT_KEROSIN 2
    #define FT_ETHANOL 3
    enum vehDefaultDataEnum {
    	e_fuelType,
    	e_maxFuel
    };
    Code
    new vehDefaultData[][vehDefaultDataEnum] = {
    	{FT_DIESEL, 60},{FT_BENZIN, 55},{FT_BENZIN, 80}...
    };
    Code
    new fuelName[][16] = {
    	"Diesel",
    	"Benzin",
    	"Kerosin",
    	"Ethanol"
    };

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

    Einmal editiert, zuletzt von Jameso ()

  • Lass dir mal folgendes ausgeben:
    format(string, sizeof(string), "%s", fuelName[vehDefaultData[idx][e_fuelType]]);
    zu:
    printf("idx: %d", idx);
    printf("fuelType: %d", vehDefaultData[idx][e_fuelType]);
    format(string, sizeof(string), "%s", fuelName[vehDefaultData[idx][e_fuelType]]);
    printf("string: %s", string);

  • Wie mache ich das am besten mit dem Tank abziehen,



    Code
    forward sekunde1();
    public sekunde1()
    {
    	for(new i=0; i<MAX_PLAYERS; i++)
    	{
    		if(!IsPlayerConnected(i) && !IsPlayerInAnyVehicle(i)) continue;
    }
    	return true;
    }

    Das scheint zu funktionieren so erst mal steht 0/X wenn ich in einem Auto steige


    Code
    if((newstate == PLAYER_STATE_DRIVER) || (newstate == PLAYER_STATE_PASSENGER))
    	{
    	    new vid = GetPlayerVehicleID(playerid);
    		new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(playerid)), idx = modelid-400;
    		format(string, sizeof(string), "%d/%dLiter", vehData[vid][e_fuel],vehDefaultData[idx][e_maxFuel]);
      		PlayerTextDrawSetString(playerid, textdraw[5][playerid], string);
    	}

    Habe das jetzt nicht so ganz verstanden mit dem Tank zuordnen woher weißt ich das genau das Auto gemeint ist


    Code
    Autohausauto1[ 1 ] = CreateVehicle(502,749.342,-1333.167,13.483,206.157,0,0,-1);

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

    Einmal editiert, zuletzt von Jameso ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen