Tankvolumen und Treibstoff an Fahrzeugen zuordnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • BrightLeaN schrieb:

    Habe das jetzt nicht so ganz verstanden mit dem Tank zuordnen woher weißt ich das genau das Auto gemeint ist
    Folgendes bei OnPlayerStateChange einfügen:

    PAWN-Quellcode

    1. if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    2. {
    3. new vehicleid = GetPlayerVehicleID(playerid);
    4. if(vehData[vid][e_fuel] == -1)
    5. {
    6. new idx = GetVehicleModel(vehicleid) - 400;
    7. vehData[vehicleid][e_fuel] = vehDefaultData[idx][e_maxFuel];
    8. }
    9. }


    Und bei OnGameModeInit:

    PAWN-Quellcode

    1. for(new i = 0; i < sizeof(vehData); i++) vehData[i][e_fuel] = -1;


    In deinem Timer dann:

    PAWN-Quellcode

    1. vehData[vehicleid][e_fuel]--;

    Und das Textdraw aktualisieren.
  • Der Tank geht noch im negativen Bereich, wie funktioniert das jetzt das ich ab checke ob der Motor an ist und wenn auch keiner im Fahrzeug ist dann soll ja der Tank auch leer gehen wenn der Motor an ist. Kann ich auch abfragen wenn es bei 0 Angelangt ist Motor aus

    PAWN-Quellcode

    1. forward sekunde1();
    2. public sekunde1()
    3. {
    4. for(new i=0; i<MAX_PLAYERS; i++)
    5. {
    6. new vehicleid = GetPlayerVehicleID(i);
    7. vehData[vehicleid][e_fuel]--;
    8. new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(i)), idx = modelid-400;
    9. format(string, sizeof(string), "%d/%dLiter", vehData[vehicleid][e_fuel],vehDefaultData[idx][e_maxFuel]);
    10. PlayerTextDrawSetString(i, textdraw[5][i], string);
    11. }
    12. return true;
    13. }
    Alles anzeigen
    Und wie teile ich jetzt z.b diesem Auto Autohausauto1[ 1 ] Beispiel 10 Liter zu am Anfang. Und wie speichere ich das ganze ab damit wenn ein Server Neustart kommt die alten Literzahlen geladen werden
  • BrightLeaN schrieb:

    Der Tank geht noch im negativen Bereich,
    if-Abfrage ist hier das Stichwort.


    BrightLeaN schrieb:

    wie funktioniert das jetzt das ich ab checke ob der Motor an ist
    wiki.sa-mp.com/wiki/GetVehicleParamsEx


    BrightLeaN schrieb:

    und wenn auch keiner im Fahrzeug ist dann soll ja der Tank auch leer gehen wenn der Motor an ist
    Dann muss deine Schleife über alle Fahrzeuge gehen, anstatt über alle Spieler.


    BrightLeaN schrieb:

    Kann ich auch abfragen wenn es bei 0 Angelangt ist Motor aus
    Natürlich.


    BrightLeaN schrieb:

    Und wie teile ich jetzt z.b diesem Auto Autohausauto1[ 1 ] Beispiel 10 Liter zu am Anfang.
    Der obige Code, den ich dir für OnPlayerStateChange gegeben habe, nimmt den Default-Wert aus vehDefaultData.
    Wenn du diesen für das Autohausauto nicht nutzen willst, dann direkt nach der Erstellung:

    PAWN-Quellcode

    1. vehData[Autohausauto[1]][e_fuel] = 10;



    BrightLeaN schrieb:

    Und wie speichere ich das ganze ab damit wenn ein Server Neustart kommt die alten Literzahlen geladen werden
    Dazu benötigst du eine Tabelle in deiner Datenbank, die alle Fahrzeuge beinhaltet. Außerdem müssen die Fahrzeuge dann auch wieder aus dieser Tabelle geladen werden, und nicht direkt mit CreateVehicle erstellt werden, sonst passt die Position ja auch nicht mehr.
  • PAWN-Quellcode

    1. forward sekunde1();
    2. public sekunde1()
    3. {
    4. for(new i=0; i<MAX_PLAYERS; i++)
    5. {
    6. new vehicleid = GetPlayerVehicleID(i);
    7. if(vehData[vehicleid][e_fuel] < 1)
    8. {
    9. new vID=GetPlayerVehicleID(i),tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    10. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    11. tmp_engine = 0;
    12. SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    13. SendClientMessage(i,-1,"{c45461}Das Fahrzeug hat keinen Tank mehr. An einer Tankstelle kannst du dir ein Kanister kaufen.");
    14. }
    15. else
    16. {
    17. vehData[vehicleid][e_fuel]--;
    18. new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(i)), idx = modelid-400;
    19. format(string, sizeof(string), "%d/%dLiter", vehData[vehicleid][e_fuel],vehDefaultData[idx][e_maxFuel]);
    20. PlayerTextDrawSetString(i, textdraw[5][i], string);
    21. }
    22. }
    23. return true;
    24. }
    Alles anzeigen
    Wenn ich auf dem Server connecte steht die ganze Zeit im Chat das ich keinen Tank habe

    PAWN-Quellcode

    1. if(IsPlayerInVehicle(playerid, specialcar))
    2. {
    3. SendClientMessage(playerid, -1, "You're in the special car!");
    4. }
    5. if(IsPlayerInVehicle(playerid, specialcar2))
    6. {
    7. SendClientMessage(playerid, -1, "You're in the special car!");
    8. }
    9. if(IsPlayerInVehicle(playerid, specialcar3))
    10. {
    11. SendClientMessage(playerid, -1, "You're in the special car!");
    12. }
    Alles anzeigen
    Wenn ich z.b 15 Autos im Autohaus habe wäre das nicht viel unnötiger Code?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von BrightLeaN ()

  • BrightLeaN schrieb:

    Wenn ich auf dem Server connecte steht die ganze Zeit im Chat das ich keinen Tank habe
    Du fragst nirgends ab, ob der Spieler auch tatsächlich in einem Fahrzeug ist.

    BrightLeaN schrieb:

    Wenn ich z.b 15 Autos im Autohaus habe wäre das nicht viel unnötiger Code?
    Das stimmt, dafür gibt es Arrays und Loops.


    Ich gebe dir jetzt bewusst keinen fertigen Code, da ich dir schon so viel Code gegeben habe, jetzt solltest du selbst am Code arbeiten, sonst gibt es keinen Lerneffekt.
    Versuche, ob du weiter kommst. Natürlich helfe ich auch am Code weiter, wenn es Sinn macht.
  • Alles klar,
    Also mit den Abfragen waren überflüssige Fragen. Aber großes Problem damit ich weiter machen kann ist das ganze auf MAX_VEHICLES umzubauen. Und natürlich auch das ich die Fahrzeuginfo in einer Tabelle speichere.
    Wenn ich das habe hätte ich großartig kein Problem aber habe ja nie was mit MAX_VEHICLES gemacht.

    Also das umsteigen jetzt auf MAX_VEHICLES. Die Sache mit dem speichern usw. kann ich mir später einmal vornehmen. Du hast mir ja gesagt @Jeffry das ich eine Schleife durch alle Spieler gehen lassen soll, dann durch alle Fahrzeuge. Wie mache ich das am besten

  • BrightLeaN schrieb:

    Du hast mir ja gesagt @Jeffry das ich eine Schleife durch alle Spieler gehen lassen soll, dann durch alle Fahrzeuge. Wie mache ich das am besten
    Nach der ersten Schleife für MAX_PLAYERS eine zweite Schleife für MAX_VEHICLES.
    Darin ist "i" dann die vehicleid so gesehen.
    Dann für "i" prüfen, ob ein Spieler in diesem Auto sitzt, wenn ja, nichts machen.
    Sitzt keiner drin, dann prüfen ob der Motor für "i" an ist.
    Wenn ja, dann eine Tankeinheit von "i" abziehen.

    Schau mal ob du das in Code umgesetzt bekommst.


    Nutze für die Abfrage, ob ein Spieler im Fahrzeug "i" ist, folgende Funktion:

    PAWN-Quellcode

    1. stock IsAnyPlayerInVehicle(vehicleid)
    2. {
    3. for(new i = 0; i < MAX_PLAYERS; i++)
    4. {
    5. if(IsPlayerInVehicle(i, vehicleid)) return 1;
    6. }
    7. return 0;
    8. }

    Den Code einfach ganz unten in deinem Gamemode einfügen, und die Funktion wie gewohnt nutzen:

    PAWN-Quellcode

    1. if(IsAnyPlayerInVehicle(i)) //...
  • Tut mir leid das ich bis jetzt hier nichts geschrieben habe, hatte sehr wenig Zeit mich am PC zu setzten.

    PAWN-Quellcode

    1. forward sekunde1();
    2. public sekunde1()
    3. {
    4. for(new i=0; i<MAX_PLAYERS; i++)
    5. {
    6. for(new i=0; i<MAX_VEHICLES; i++)
    7. {
    8. if(!IsPlayerConnected(i) && !IsAnyPlayerInVehicle(i)) continue;
    9. if(IsAnyPlayerInVehicle(i)) return 1;
    10. new vehicleid = GetPlayerVehicleID(i);
    11. new vID=GetPlayerVehicleID(i),tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    12. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    13. if(tmp_engine == 1)
    14. if(vehData[vehicleid][e_fuel] < 1)
    15. {
    16. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    17. tmp_engine = 0;
    18. SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    19. SendClientMessage(i,-1,"{c45461}Der Tank von diesem Fahrzeug ist leer.");
    20. }
    21. else
    22. {
    23. vehData[vehicleid][e_fuel]--;
    24. new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(i)), idx = modelid-400;
    25. format(string, sizeof(string), "%d/%dLiter", vehData[vehicleid][e_fuel],vehDefaultData[idx][e_maxFuel]);
    26. PlayerTextDrawSetString(i, textdraw[5][i], string);
    27. }
    28. }
    29. }
    30. return true;
    31. }
    Alles anzeigen
    Habe es bis jetzt so hinbekommen, aber ich habe jetzt für MAX_PLAYERS einmal "i" und für MAX_VEHICLES "i" das geht ja nicht. Sagt der Compiler mir zumindest.
  • Du hast die Schleifen jetzt ineinander gesetzt, nicht nacheinander.
    Nacheinander heißt, dass nach der letzten geschweiften Klammer Zu der Schleife, auf gleicher Ebene wieder eine Schleife beginnt.

    Beispiel in Pseudo Code:

    PAWN-Quellcode

    1. for(alle Spieler)
    2. {
    3. //Code für alle Spieler
    4. }
    5. for(alle Fahrzeuge)
    6. {
    7. //Code für alle Fahrzeuge
    8. }


    Dann hat der Compiler auch kein Problem damit, dass du beides mal i verwendest.
  • PAWN-Quellcode

    1. forward sekunde1();
    2. public sekunde1()
    3. {
    4. for(new i=0; i<MAX_PLAYERS; i++)
    5. {
    6. }
    7. for(new i=0; i<MAX_VEHICLES; i++)
    8. {
    9. if(!IsPlayerConnected(i) && !IsAnyPlayerInVehicle(i)) continue;
    10. if(IsAnyPlayerInVehicle(i)) return 1;
    11. new vehicleid = GetPlayerVehicleID(i);
    12. new vID=GetPlayerVehicleID(i),tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    13. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    14. if(tmp_engine == 1)
    15. if(vehData[vehicleid][e_fuel] < 1)
    16. {
    17. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    18. tmp_engine = 0;
    19. SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    20. SendClientMessage(i,-1,"{c45461}Der Tank von diesem Fahrzeug ist leer.");
    21. }
    22. else
    23. {
    24. vehData[vehicleid][e_fuel]--;
    25. new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(i)), idx = modelid-400;
    26. format(string, sizeof(string), "%d/%dLiter", vehData[vehicleid][e_fuel],vehDefaultData[idx][e_maxFuel]);
    27. PlayerTextDrawSetString(i, textdraw[5][i], string);
    28. }
    29. }
    Alles anzeigen
    Das läuft ja so schon nur über den Spieler, also wenn ich nicht im Fahrzeug bin und der Motor an ist passiert gar nichts.
    Kriege das nicht so ganz hin, ich weiß das es so falsch ist zumindest aber welcher Code gehört jetzt nach MAX_PLAYERS
  • BrightLeaN schrieb:

    Das läuft ja so schon nur über den Spieler, also wenn ich nicht im Fahrzeug bin und der Motor an ist passiert gar nichts.
    Kriege das nicht so ganz hin, ich weiß das es so falsch ist zumindest aber welcher Code gehört jetzt nach MAX_PLAYERS
    Die erste Schleife für alle Spieler muss genau so sein, wie in Post #27, das war da ja schon richtig.
    Plus die Abfragen, die du mit Post #30 rein gebaut hast.

    In die zweite Schleife für MAX_VEHICLES muss das rein, vom Ablauf her, daran kannst du dich entlang hangeln:

    Jeffry schrieb:

    Nach der ersten Schleife für MAX_PLAYERS eine zweite Schleife für MAX_VEHICLES.
    Darin ist "i" dann die vehicleid so gesehen.
    Dann für "i" prüfen, ob ein Spieler in diesem Auto sitzt, wenn ja, nichts machen.
    Sitzt keiner drin, dann prüfen ob der Motor für "i" an ist.
    Wenn ja, dann eine Tankeinheit von "i" abziehen.
  • Bin ziemlich demotiviert, verstehe gar nichts. Ich würde was verstehen wenn der auch was vom Fahrzeug abzieht auch wenn ich nicht drin bin das ist ja das mit MAX_VEHICLES, wenn ich so ein Teil davon unter Max_PLAYERS einfüge ist es ja auch nicht richtig. Versuche was zu machen aber verstehen tu ich so wirklich nicht so ganz alles, deswegen schließe ich meist PAWNO wieder und mach irgend was anderes aber das bringt es ja auch nicht.

    Glaube das ich noch nicht so bereit bin etwas komplett umzusetzen (in Code) wie du es mir in den letzten Beiträgen sagst.


    PAWN-Quellcode

    1. forward sekunde1();
    2. public sekunde1()
    3. {
    4. for(new i=0; i<MAX_PLAYERS; i++)
    5. {
    6. new vehicleid = GetPlayerVehicleID(i);
    7. new vID=GetPlayerVehicleID(i),tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    8. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    9. if(tmp_engine == 1)
    10. if(vehData[vehicleid][e_fuel] < 1)
    11. {
    12. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    13. tmp_engine = 0;
    14. SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    15. }
    16. else
    17. {
    18. vehData[vehicleid][e_fuel]--;
    19. new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(i)), idx = modelid-400;
    20. format(string, sizeof(string), "%d/%dLiter", vehData[vehicleid][e_fuel],vehDefaultData[idx][e_maxFuel]);
    21. PlayerTextDrawSetString(i, textdraw[5][i], string);
    22. }
    23. }
    24. for(new i=0; i<MAX_VEHICLES; i++)
    25. {
    26. if(!IsPlayerConnected(i) && !IsAnyPlayerInVehicle(i)) continue;
    27. if(IsAnyPlayerInVehicle(i)) return 1;
    28. new vehicleid = GetPlayerVehicleID(i);
    29. new vID=GetPlayerVehicleID(i),tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    30. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    31. if(tmp_engine == 1)
    32. if(vehData[vehicleid][e_fuel] < 1)
    33. {
    34. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    35. tmp_engine = 0;
    36. SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    37. }
    38. else
    39. {
    40. vehData[vehicleid][e_fuel]--;
    41. new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(i)), idx = modelid-400;
    42. format(string, sizeof(string), "%d/%dLiter", vehData[vehicleid][e_fuel],vehDefaultData[idx][e_maxFuel]);
    43. PlayerTextDrawSetString(i, textdraw[5][i], string);
    44. }
    45. }
    46. return true;
    47. }
    Alles anzeigen
  • Schau mal, in der Schleife für MAX_VEHICLES, warum nutzt du da:

    BrightLeaN schrieb:

    new vehicleid = GetPlayerVehicleID(i);
    "i" steht bereits für die vehicleid.

    Du kannst für "i" keine Spieler-Funktionen nutzen, das klappt dann nicht.
    "i" steht für eine beliebige (von 0 bis MAX_VEHICLES-1) vehicleid. Stell dir das immer so vor.
    Du machst ja auch nicht folgendes:
    new vehicleid = GetPlayerVehicleID(vehicleid);
    Somit machst du auch nicht
    new vehicleid = GetPlayerVehicleID(i);
    wenn du über alle Fahrzeuge iterierst.


    Ein weiteres Beispiel das Textdraw:
    Du möchtest ja den Tank anpassen, wenn kein Spieler im Fahrzeug sitzt. Warum dann ein Textdraw für einen Spieler anpassen? Es gibt gar keinen Spieler, der das sehen würde.


    Du kannst die Schleife auch so schreiben, wenn dir das einfacher verständlich ist:

    PAWN-Quellcode

    1. for(new vehicleid=0; vehicleid<MAX_VEHICLES; vehicleid++)


    Generell empfiehlt sich aber "i". Stelle dir einfach vor, alle "i" in der Schleife entsprechen "vehicleid".


    Ich weiß, dass der Lösungsweg sehr lange dauert, aber ich möchte, dass du dabei was lernst. Und du lernst das nur, wenn du es selbst machst, nicht wenn ich es dir vorschreibe.
    Das sind Basics, die musst du verstehen, sonst kommst du nicht voran.
  • Also für mich ist das nicht so Basic, verstehe eigentlich alles gut aber so etwas wie Schleifen hasse ich, habe ich nie wirklich verstanden wurde mir auch oft erklärt aber das ist ja egal.


    PAWN-Quellcode

    1. forward sekunde1();
    2. public sekunde1()
    3. {
    4. for(new i=0; i<MAX_VEHICLES; i++)
    5. {
    6. new vehicleid = GetPlayerVehicleID(i);
    7. new vID=GetPlayerVehicleID(i),tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    8. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    9. if(tmp_engine == 1)
    10. if(vehData[vehicleid][e_fuel] < 1)
    11. {
    12. GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    13. tmp_engine = 0;
    14. SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    15. }
    16. else
    17. {
    18. vehData[vehicleid][e_fuel]--;
    19. }
    20. }
    21. for(new i=0; i<MAX_PLAYERS; i++)
    22. {
    23. if(!IsPlayerConnected(i) && !IsAnyPlayerInVehicle(i)) continue;
    24. if(IsAnyPlayerInVehicle(i)) return 1;
    25. new string[128], modelid = GetVehicleModel(GetPlayerVehicleID(i)), idx = modelid-400;
    26. format(string, sizeof(string), "%d/%dLiter", vehData[vehicleid][e_fuel],vehDefaultData[idx][e_maxFuel]);
    27. PlayerTextDrawSetString(i, textdraw[5][i], string);
    28. }
    29. return true;
    30. }
    Alles anzeigen
    So ist das auch nicht ganz richtig, ich muss ja unter MAX_VEHICLES abfragen ob der Motor an ist.
  • Schleifen sind Basics, die musst du verstehen. Da führt kein Weg vorbei.

    Da ich ab morgen geschäftlich unterwegs bin und bis Freitag nicht dazu kommen werde, weiter zu helfen, hier die Lösung:

    PAWN-Quellcode

    1. forward sekunde1();
    2. public sekunde1()
    3. {
    4. //Deklaration der Variablen. Das macht man außerhalb von Schleifen.
    5. new vehicleid,tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective,string[128],idx;
    6. //Schleife für alle Spieler
    7. for(new i=0; i<MAX_PLAYERS; i++)
    8. {
    9. //Prüfe ob Spieler online und in Fahrzeug. Falls nicht, gehe zum nächsten Spieler
    10. if(!IsPlayerConnected(i) || !IsPlayerInAnyVehicle(i)) continue;
    11. vehicleid = GetPlayerVehicleID(i);
    12. GetVehicleParamsEx(vehicleid, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    13. //Ist der Motor an?
    14. if(tmp_engine == 1)
    15. {
    16. //Ist noch Benzin im Tank?
    17. if(vehData[vehicleid][e_fuel] < 1)
    18. {
    19. //Nein. Motor abschalten.
    20. tmp_engine = 0;
    21. SetVehicleParamsEx(vehicleid, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    22. }
    23. else
    24. {
    25. //Ja. Eine Tankeinheit abziehen, wenn der Spieler Fahrer ist.
    26. //Ansonsten ist der Spieler Beifahrer, dann wird nur sein Textdraw aktualisiert.
    27. if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
    28. {
    29. vehData[vehicleid][e_fuel]--;
    30. }
    31. idx = GetVehicleModel(vehicleid)-400;
    32. if(idx < 0) continue;
    33. //Textdraw für Spieler "i" aktualisieren.
    34. format(string, sizeof(string), "%d/%dLiter", vehData[vehicleid][e_fuel],vehDefaultData[idx][e_maxFuel]);
    35. PlayerTextDrawSetString(i, textdraw[5][i], string);
    36. }
    37. }
    38. }
    39. //Schleife für alle Fahrzeuge
    40. for(new i=0; i<MAX_VEHICLES; i++)
    41. {
    42. //Prüfe ob ein Spieler im Fahrzeug als Fahrer ist. Falls ja, dann wurde der Tank bereits verringert, mache nichts.
    43. if(IsAnyDriverInVehicle(i)) continue;
    44. GetVehicleParamsEx(i, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    45. //Ist der Motor an?
    46. if(tmp_engine == 1)
    47. {
    48. //Ist noch Benzin im Tank?
    49. if(vehData[i][e_fuel] < 1)
    50. {
    51. //Nein. Motor abschalten.
    52. tmp_engine = 0;
    53. SetVehicleParamsEx(i, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    54. }
    55. else
    56. {
    57. //Ja. Eine Tankeinheit abziehen.
    58. vehData[i][e_fuel]--;
    59. }
    60. }
    61. }
    62. return 1;
    63. }
    Alles anzeigen


    Die Funktion IsAnyPlayerInVehicle habe ich zu IsAnyDriverInVehicle angepasst, da das geschickter war, um doppelte Abzüge zu verhindern.

    PAWN-Quellcode

    1. stock IsAnyDriverInVehicle(vehicleid)
    2. {
    3. for(new i = 0; i < MAX_PLAYERS; i++)
    4. {
    5. if(IsPlayerInVehicle(i, vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER) return 1;
    6. }
    7. return 0;
    8. }



    Ich habe dir den Code kommentiert, daran solltest du den Ablauf verstehen.
    Bitte arbeite den Code durch und versuche ihn zu verstehen. Kopiere ihn nicht nur in deinen Code.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Jeffry () aus folgendem Grund: Fehler korrigiert

  • Das Problem ist das ich auch nur am Wochenende meistens Zeit habe,
    Danke dir! Ich kann jetzt jeden Schritt nachvollziehen und weiß jetzt auch wie ich das ganze aufbauen soll, wie gesagt habe so etwas ja noch nie erstellt. Sollte ich noch mal irgendwie so etwas machen dann weiß ich jetzt auch wie das ganze funktionieren muss.

    Danke!♥