Verschiedene Tankarten Scripten

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
  • Jetzt kann ich sie Fahren, Tanken ging davor schon also jetzt geht es mehr oder weniger!
    Das zuweisen der Tankmengen ist ganz oben in OnGameModeInit:



    SetTimer("BenzinVerlust", VERLUST, true);
    for (new v=0; v< MAX_VEHICLES; v++)
    {
    GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[v] = false;
    Tank[v] = GetVehicleMaxTank(v);
    }


    Der Motor ist nun wieder startbar, stand des Codes:

    Spoiler anzeigen
    if(newkeys & KEY_ANALOG_DOWN) {
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new car = GetPlayerVehicleID(playerid);
    new v = GetVehicleModel(car);
    Tank[car] = GetVehicleMaxTank(v);
    if(GetVehicleModel(car) == 509 || GetVehicleModel(car) == 481 || GetVehicleModel(car) == 510)
    {
    SendClientMessage(playerid, error, "Du sitzt auf einem Fahrrad. Das hat keinen Motor!");
    }

    Spoiler anzeigen
    else if (Tank[car] < 1)
    {
    SendClientMessage(playerid, error, "Der Tank ist leer. Du musst erst /tanken.");
    }

    Spoiler anzeigen
    else if (Motor[car] == false )
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = true; // Setzt den Bool Motor auf true
    }

    Spoiler anzeigen
    else
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = false; // Setzt den Bool wieder auf falsch zurück.
    }
    }
    return 1;
    }


    Bloß, meine Tankanzeige ist zwar Gelb (ab 50%) dennoch glaube ich damit der Tank noch höher ist da er nicht sinkt..


    //Edit:


    Falls du den Code brauchst er steht unter OnPlayerUpdate

    Spoiler anzeigen
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new v = GetPlayerVehicleID(playerid);
    new m = GetVehicleModel(v);
    if(GetVehicleModel(v) != 509 && GetVehicleModel(v) != 481 && GetVehicleModel(v) != 510)
    {
    new name[32];
    new string[125];
    switch(GetVehicleTankArt(m)) {
    case 0: name = "Diesel";
    case 1: name = "Benzin";
    }
    if(Tank[v] < 10)format(string,sizeof string,"Tankart: %s~n~~w~Tank: ~r~%i ~w~liter~n~Km: 0000012~g~%d ~w~",name,GetVehicleMaxTank(m));
    else if(Tank[v] < 20)format(string,sizeof string,"Tankart: %s~n~~w~Tank: ~y~%i ~w~liter~n~Km: 0000012~g~%d ~w~",name,GetVehicleMaxTank(m));
    else if(Tank[v] <= 70)format(string,sizeof string,"Tankart: %s~n~~w~Tank: ~g~%i ~w~liter~n~Km: 0000012~g~%d ~w~",name,GetVehicleMaxTank(m));
    PlayerTextDrawSetString(playerid,CarTankart[playerid],string);
    }
    }
    else
    {
    //TextDrawSetString(Anzeige[playerid], " ");
    }


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Ok, dann ändere mal das:
    SetTimer("BenzinVerlust", VERLUST, true);
    for (new v=0; v< MAX_VEHICLES; v++)
    {
    GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[v] = false;
    Tank[v] = GetVehicleMaxTank(v);
    }
    ab zu:
    SetTimer("BenzinVerlust", VERLUST, true);
    SetTimer("SetMaxTank", 3000, false);
    und das ganz unten in Gamemode:
    forward SetMaxTank();
    public SetMaxTank()
    {
    for (new v=0; v< MAX_VEHICLES; v++)
    {
    GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[v] = false;
    Tank[v] = GetVehicleMaxTank(GetVehicleModel(v));
    }
    return 1;
    }
    Dann sollte das am Anfang auch klappen. (Ich hoffe, du hast die zwei stocks im Code für GetVehicleMaxTank und das andere).


    Und was ist mit der Tankanzeige? Kannst du den Code dazu mal posten?

  • Im Beitrag hab ich ihn hinzugefügt :)
    Aber hier noch mal:

    Spoiler anzeigen
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new v = GetPlayerVehicleID(playerid);
    new m = GetVehicleModel(v);
    if(GetVehicleModel(v) != 509 && GetVehicleModel(v) != 481 && GetVehicleModel(v) != 510)
    {
    new name[32];
    new string[125];
    switch(GetVehicleTankArt(m)) {
    case 0: name = "Diesel";
    case 1: name = "Benzin";
    }
    if(Tank[v] < 10)format(string,sizeof string,"Tankart: %s~n~~w~Tank: ~r~%i ~w~liter~n~Km: 0000012~g~%d ~w~",name,GetVehicleMaxTank(m));
    else if(Tank[v] < 20)format(string,sizeof string,"Tankart: %s~n~~w~Tank: ~y~%i ~w~liter~n~Km: 0000012~g~%d ~w~",name,GetVehicleMaxTank(m));
    else if(Tank[v] <= 70)format(string,sizeof string,"Tankart: %s~n~~w~Tank: ~g~%i ~w~liter~n~Km: 0000012~g~%d ~w~",name,GetVehicleMaxTank(m));
    PlayerTextDrawSetString(playerid,CarTankart[playerid],string);
    }
    }
    else
    {
    //TextDrawSetString(Anzeige[playerid], " ");
    }


    Wie meinst du das?
    "Dann sollte das am Anfang auch klappen. (Ich hoffe, du hast die zwei stocks im Code für GetVehicleMaxTank und das andere)."
    Jeffry:


    Irgendwie bleibt er immer noch auf 50 stehen der Tank :/
    Habe das Public von dir einfach ganz runter gemacht aber irgendwie immer noch keine Wirkung 8|


    MfG :thumbup:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ah, das habe ich nicht mehr gesehen, das hast du hinzugefügt während ich gepostet habe.
    Schreibe es so:
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new v = GetPlayerVehicleID(playerid);
    new m = GetVehicleModel(v);
    if(GetVehicleModel(v) != 509 && GetVehicleModel(v) != 481 && GetVehicleModel(v) != 510)
    {
    new name[32];
    new string[125];
    switch(GetVehicleTankArt(m))
    {
    case 0: name = "Diesel";
    case 1: name = "Benzin";
    }
    if(Tank[v] < 10)format(string,sizeof string,"Tankart: %s~n~~w~Tank: ~r~%i ~w~liter~n~Km: 0000012~g~%d ~w~",name,Tank[v]);
    else if(Tank[v] < 20)format(string,sizeof string,"Tankart: %s~n~~w~Tank: ~y~%i ~w~liter~n~Km: 0000012~g~%d ~w~",name,Tank[v]);
    else format(string,sizeof string,"Tankart: %s~n~~w~Tank: ~g~%i ~w~liter~n~Km: 0000012~g~%d ~w~",name,Tank[v]);
    PlayerTextDrawSetString(playerid,CarTankart[playerid],string);
    }
    }
    else
    {
    //TextDrawSetString(Anzeige[playerid], " ");
    }


    Zitat

    Wie meinst du das?


    Dass zum Server-Start die Fahrzeuge einen vollen Tank haben.

  • Okey Super, jetzt geht alles :)


    Wie mache ich jetzt die Verschiedenen Preise und die Verschiedenen funktionien mit Diesel 20m -1 Tank und Benzin 15m -1 ?


    Mit freundlichen Grüßen


    TV :thumbup:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ok, super!


    Also, die einfachste und für dich sicher am verständlichste Methode ist, dass du zwei Timer erstellst, einen BenzinTimer und einen DieselTimer. Die Aufrufzeit des Timers stellst du dann entsprechend ein. In dem Timer-callback machst du dann eine Schleife durch alle Spieler und dann fragst du ab, ob die TankArt des Fahrzeugs des Spielers Benzin (im BenzinTimer) oder Diesel (im DieselTimer) ist. Wenn ja, dann ziehst du 1 ab.


    Zwecks den Preisen:
    Da fragst du auch mit der TankArt ab, was getankt wurde, und rechnest das entsprechend auf.



    Probiere es für beides erst mal selbst, und wenn du nicht nicht mehr weiter kommst, dann poste bitte den jeweiligen Code und erkläre wo du nicht mehr weiter kommst, kennst du ja schon. ;)

  • Edit:


    Habe es jetzt so und ohne Errors, macht auch mehr Sinn :D


    Spoiler anzeigen
    //____________Tanken ____________//
    if(newkeys & KEY_LOOK_BEHIND) {
    for(new g;g<MAX_GAS;g++) {
    new car = GetPlayerVehicleID(playerid);
    if(GetPlayerVehicleSeat(playerid) != 0) return SendClientMessage(playerid,error,"Du bist in keinem Fahrzeug (oder kein Fahrer)!");
    if(TanktGerade[car]) return SendClientMessage(playerid,error,"Du bist bereits dabei dein Auto aufzutanken!");
    else if(Motor[car] == true) return SendClientMessage(playerid,error,"Du musst vor dem Tanken den Motor ausschalten!");
    else if(!IsPlayerInRangeOfPoint(playerid,Gasstation[g][Gasradius], Gasstation[g][Gasx],Gasstation[g][Gasy],Gasstation[g][Gasz])) return SendClientMessage(playerid,error,"Du bist an keiner Tankstelle!"); {
    if(GetVehicleTankArt(car) == 1) {
    new ZuTanken = 100-GetVehicleMaxTank(car);
    new preis = ZuTanken * BENZINPREIS;
    if(GetPlayerMoney(playerid)-preis < 0) return SendClientMessage(playerid,error,"Du hast nicht genug Geld!");
    GivePlayerMoney(playerid, -preis);
    SendClientMessage(playerid, info, "Tankvorgang wird gestartet...");
    SetCameraBehindPlayer(playerid);
    TogglePlayerControllable(playerid,0);
    TanktGerade[car] = true;
    tanktimer[playerid] = SetTimerEx("Auftanken",500,true,"i",playerid); }
    {
    if(GetVehicleTankArt(car) == 0) {
    new ZuTanken = 100-GetVehicleMaxTank(car);
    new preis = ZuTanken * DIESELPREIS;
    if(GetPlayerMoney(playerid)-preis < 0) return SendClientMessage(playerid,error,"Du hast nicht genug Geld!");
    GivePlayerMoney(playerid, -preis);
    SendClientMessage(playerid, info, "Tankvorgang wird gestartet...");
    SetCameraBehindPlayer(playerid);
    TogglePlayerControllable(playerid,0);
    TanktGerade[car] = true;
    tanktimer[playerid] = SetTimerEx("Auftanken",500,true,"i",playerid);
    }
    }
    }
    }
    }


    OnGameModeInit:


    for (new i=0; i< MAX_PLAYERS; i++)
    {
    if(GetVehicleTankArt(i) == 1) {
    SetTimer("BenzinVerlust", BENZIN, true);
    }
    else if(GetVehicleTankArt(i) == 0) {
    SetTimer("DieselVerlust", DIESEL, true);
    }
    }


    Public:

    Spoiler anzeigen
    public BenzinVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if (Motor[i] == true)
    {
    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 DieselVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if (Motor[i] == true)
    {
    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;
    }


    Werde gleich berichten obs geht :thumbup:


    //Edit: Ging leider nicht :D


    und so geht es auch nicht ...


    Spoiler anzeigen
    //_______MOTOR&TANK____//
    public BenzinVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    for(new p=0; p<MAX_PLAYERS; p++)
    {
    if(GetVehicleTankArt(p) == 1) {
    if (Motor[i] == true)
    {
    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 DieselVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    for(new p=0; p<MAX_PLAYERS; p++)
    {
    if(GetVehicleTankArt(p) == 0) {
    if (Motor[i] == true)
    {
    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;
    }


    Und die Timer:
    SetTimer("BenzinVerlust", BENZIN, true);
    SetTimer("DieselVerlust", DIESEL, true);


    Jeffry: hab ich falsch abgefragt? oder einfach alles falsch :D?



    //edit:


    Habe noch einen Fehler entdeckt, wenn man den Motor ausmacht wird er wieder auf "GetVehicleMaxTank" gesettet, bsp hatte ich 29l Tank und mache meinen Motor aus, dann ist er wieder auf 53
    Weiß nicht was du jetzt für ein Code benötigst, hier mal das Motorsystem vielleicht hängt es ja damit zusammen:

    Spoiler anzeigen
    //____________Motor ____________//
    if(newkeys & KEY_ANALOG_DOWN) {
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new car = GetPlayerVehicleID(playerid);
    new v = GetVehicleModel(car);
    Tank[car] = GetVehicleMaxTank(v);
    if(GetVehicleModel(car) == 509 || GetVehicleModel(car) == 481 || GetVehicleModel(car) == 510)
    {
    SendClientMessage(playerid, error, "Du sitzt auf einem Fahrrad. Das hat keinen Motor!");
    }

    Spoiler anzeigen
    else if (Tank[car] < 1)
    {
    SendClientMessage(playerid, error, "Der Tank ist leer. Du musst erst /tanken.");
    }

    Spoiler anzeigen
    else if (Motor[car] == false )
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = true; // Setzt den Bool Motor auf true
    }

    Spoiler anzeigen
    else
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = false; // Setzt den Bool wieder auf falsch zurück.
    }
    }
    return 1;
    }


    Oder vielleicht liegt es an deinem Public?

    Spoiler anzeigen
    forward SetMaxTank();
    public SetMaxTank()
    {
    for (new v=0; v< MAX_VEHICLES; v++)
    {
    GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[v] = false;
    Tank[v] = GetVehicleMaxTank(GetVehicleModel(v));
    }
    return 1;
    }


    Falls du Code brauchst, sag bescheid :D



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    3 Mal editiert, zuletzt von ENEF () aus folgendem Grund: Fehler hinzugefügt

  • Beitrag von EinfachMax ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Du brauchst in dieser Abfrage keine Schleife durch alle Spieler.
    public BenzinVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if(GetVehicleTankArt(p) == 1)
    {
    if (Motor[i] == true)
    {
    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 DieselVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if(GetVehicleTankArt(p) == 0)
    {
    if (Motor[i] == true)
    {
    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;
    }


    Wo rufst du den SetMaxTank noch auf? Im Motor Befehl ist der Fehler anscheinend nicht..


    Homez 8)

  • 1.)
    Entferne bei Motor an/aus das:
    Tank[car] = GetVehicleMaxTank(v);


    2.)
    for (new i=0; i< MAX_PLAYERS; i++)
    {
    if(GetVehicleTankArt(i) == 1) {
    SetTimer("BenzinVerlust", BENZIN, true);
    }
    else if(GetVehicleTankArt(i) == 0) {
    SetTimer("DieselVerlust", DIESEL, true);
    }
    }
    zu:
    SetTimer("BenzinVerlust", BENZIN, true);
    SetTimer("DieselVerlust", DIESEL, true);


    Und die Timer so verwenden, wie du es zuerst hattest:

    Spoiler anzeigen
    public BenzinVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if (Motor[i] == true && GetVehicleTankArt(GetVehicleModel(i)) == 0)
    {
    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 DieselVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if (Motor[i] == true && GetVehicleTankArt(GetVehicleModel(i)) == 0)
    {
    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;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry () aus folgendem Grund: Tankart

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Jetzt sagt er mir wieder ich hätte keinen Tank ..?


    Und wie frage ich ab ob es jetzt ein Benzin/Diesel Auto ist? so etwa?
    if(VehData[i][1])//benzin
    {


    .......
    }



    MfG



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Nein, das fragst du so ab:
    if(GetVehicleTankArt(modelID) == 0)
    {
    //Diesel
    }
    else if(GetVehicleTankArt(modelID) == 1)
    {
    //Benzin
    }
    Oder eben mit einem switch.


    Wann sagt er dir, dass du keinen Tank mehr hast (=leerer Tank, oder?)? Direkt nach dem Server-Start oder nachdem du das Fahrzeug betankt hast?
    Geht das tanken?

  • Gut dann hab ich es ja so richtig:


    Spoiler anzeigen
    //_______MOTOR&TANK____//
    public BenzinVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if (Motor[i] == true)
    {
    if(GetVehicleTankArt(i) == 1)
    {
    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 DieselVerlust()
    {
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    if (Motor[i] == true)
    {
    if(GetVehicleTankArt(i) == 0)
    {
    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;
    }


    Ne er sagt mir direkt nach dem Server start dass das Auto erst betankt werden muss.


    Schau den Code:


    Spoiler anzeigen
    if(newkeys & KEY_ANALOG_DOWN) {
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new car = GetPlayerVehicleID(playerid);
    new v = GetVehicleModel(car);
    Tank[car] = GetVehicleMaxTank(v);
    if(GetVehicleModel(car) == 509 || GetVehicleModel(car) == 481 || GetVehicleModel(car) == 510)
    {
    SendClientMessage(playerid, error, "Du sitzt auf einem Fahrrad. Das hat keinen Motor!");
    }

    Spoiler anzeigen
    else if (Tank[car] < 1)
    {
    SendClientMessage(playerid, error, "Der Tank ist leer. Du musst erst tanken.");
    }

    Spoiler anzeigen
    else if (Motor[car] == false )
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = true; // Setzt den Bool Motor auf true
    }

    Spoiler anzeigen
    else
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = false; // Setzt den Bool wieder auf falsch zurück.
    }
    }
    return 1;
    }


    Und das auch nur wenn ich
    Tank[car] = GetVehicleMaxTank(v);
    weg lasse :o



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ja klar hab ich gemacht:


    Spoiler anzeigen
    SetTimer("BenzinVerlust", BENZIN, true);
    SetTimer("DieselVerlust", DIESEL, true);
    SetTimer("SetMaxTank", 3000, false);


    Spoiler anzeigen
    forward SetMaxTank();
    public SetMaxTank()
    {
    for (new v=0; v< MAX_VEHICLES; v++)
    {
    GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[v] = false;
    Tank[v] = GetVehicleMaxTank(GetVehicleModel(v));
    }
    return 0;
    }


    Der Tank wird nun unterschiedlich abgezogen :thumbup:


    Jedoch war ja dann das Problem, dass wenn ich den Motor Aus/An mache der Tank wieder auf Max ist, dann meintest du ja ich solle:
    Tank[car] = GetVehicleMaxTank(v);
    rausnehmen, tu ich dies wird mir aber wieder
    else if (Tank[car] < 1)
    {
    SendClientMessage(playerid, error, "Der Tank ist leer. Du musst erst tanken.");
    }
    angezeigt.



    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ok, dann mache es so, umgehen wir das.
    Dort wo du Tank deklariert hast:
    new Tank[MAX_VEHICLES];
    zu:
    new Tank[MAX_VEHICLES] = {-999,...};
    (Das ... genau so lassen.)



    Und dann dort wo du
    Tank[car] = GetVehicleMaxTank(v);
    weg gemacht hast, füge das ein:
    if(Tank[car] == -999) Tank[car] = GetVehicleMaxTank(v);


    Somit heißt -999, dass das Fahrzeug noch nie betreten worden ist.

  • Funktioniert nicht, kommt wieder:
    SendClientMessage(playerid, error, "Der Tank ist leer. Du musst erst tanken.");


    //Edit:
    Nach dem Tanken kann ich damit fahren und wenn ich den Motor Aus/angemacht habe speichert er endlich den Tank.
    Jetzt nur noch das Problem fixxen damit der Wagen am Anfang seinem GetVehicleMaxTank hat :/


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Dann wird der Timer doch ausgeführt, naja, schmeiß den Timer raus, den brauchen wir nicht mehr.
    SetTimer("SetMaxTank", 3000, false);
    und
    forward SetMaxTank();
    public SetMaxTank()
    {
    for (new v=0; v< MAX_VEHICLES; v++)
    {
    GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[v] = false;
    Tank[v] = GetVehicleMaxTank(GetVehicleModel(v));
    }
    return 0;
    }


    Kannst du löschen. Dann sollte es aber wirklich klappen.

  • Jetzt scheint es endlich zu gehen ^^
    War der Timer und Public jetzt nicht nötig oder wie :o?



    Ich will noch schnell abfragen ob der Spieler die Taste 2 gedrückt hält und für wie lange und so viel wie er gedrückt hat soll dann getankt werden damit man selbst entscheiden kann ob volltank oder nicht.
    Hab mich jetzt mal in der Sufu schlau gemacht und da so ein bsp gefunden:


    Spoiler anzeigen
    new pHoldingTime[MAX_PLAYERS];

    Spoiler anzeigen
    Bei OnPlayerKeyStateChange:
    if(HOLDING(KEY_YES))
    {
    pHoldingTime[playerid] = gettime();
    }
    if(RELEASED(KEY_YES))
    {
    new string[32];
    format(string, sizeof string, "%d Sekunden", gettime()-pHoldingTime[playerid]);
    }


    Jedoch zeigt er mir nicht an wie lange ich die Taste "Z" gedrückt halte..
    und wie ich das in den Befehl einbaue ist mir auch noch etwas unklar :D

    Spoiler anzeigen
    //____________Tanken ____________//
    if(newkeys & KEY_LOOK_BEHIND) {
    for(new g;g<MAX_GAS;g++) {
    new car = GetPlayerVehicleID(playerid);
    if(GetPlayerVehicleSeat(playerid) != 0) return SendClientMessage(playerid,error,"Du bist in keinem Fahrzeug (oder kein Fahrer)!");
    if(TanktGerade[car]) return SendClientMessage(playerid,error,"Du bist bereits dabei dein Auto aufzutanken!");
    else if(Motor[car] == true) return SendClientMessage(playerid,error,"Du musst vor dem Tanken den Motor ausschalten!");
    else if(!IsPlayerInRangeOfPoint(playerid,Gasstation[g][Gasradius], Gasstation[g][Gasx],Gasstation[g][Gasy],Gasstation[g][Gasz])) return SendClientMessage(playerid,error,"Du bist an keiner Tankstelle!"); {
    if(GetVehicleTankArt(GetVehicleModel(car)) == 0)
    {
    new ZuTanken = 100-GetVehicleMaxTank(car);
    new preis = ZuTanken * BENZINPREIS;
    if(GetPlayerMoney(playerid)-preis < 0) return SendClientMessage(playerid,error,"Du hast nicht genug Geld!");
    GivePlayerMoney(playerid, -preis);
    SendClientMessage(playerid, info, "Tankvorgang wird gestartet...");
    SetCameraBehindPlayer(playerid);
    TogglePlayerControllable(playerid,0);
    TanktGerade[car] = true;
    dsl = 1;
    tanktimer[playerid] = SetTimerEx("Auftanken",500,true,"i",playerid); }
    {
    if(GetVehicleTankArt(GetVehicleModel(car)) == 1)
    {
    new ZuTanken = 100-GetVehicleMaxTank(car);
    new preis = ZuTanken * DIESELPREIS;
    if(GetPlayerMoney(playerid)-preis < 0) return SendClientMessage(playerid,error,"Du hast nicht genug Geld!");
    GivePlayerMoney(playerid, -preis);
    SendClientMessage(playerid, info, "Tankvorgang wird gestartet...");
    SetCameraBehindPlayer(playerid);
    TogglePlayerControllable(playerid,0);
    TanktGerade[car] = true;
    bnz = 1;
    tanktimer[playerid] = SetTimerEx("Auftanken",500,true,"i",playerid); }
    }
    }
    }
    }



    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Zeigt er es dir an, wenn du es so schreibst? Sollte es eigentlich:
    if(newkeys & KEY_YES)
    {
    pHoldingTime[playerid] = gettime();
    }
    if(RELEASED(KEY_YES))
    {
    new string[32];
    format(string, sizeof string, "%d Sekunden", gettime()-pHoldingTime[playerid]);
    SendClientMessage(playerid, -1, string);
    }


    Einfügen kannst du das dann, indem du das ganze Zeug von deinem Tanken Code Teil den du gepostet hast bei obiger ersten if-Abfrage einfügst (KEY_YES) und bei RELEASED einfach den Timer killst.

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