[FAHRZEUGE] /carinfo

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

  • [FAHRZEUGE] /carinfo

    Guten Tag,

    Ich habe eine frage ich möchte gerne nach den vehicleids abrufen könn wem das Fahrzeug gehört usw aber wen ich /carinfo die vehicleid eingebe kommt unknow command.


    Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], Float:CarHealth, string[128];
    4. new vehicleid = GetPlayerNearestCarID(playerid, 5);
    5. GetVehicleHealth(vehicleid, CarHealth);
    6. if(!PlayerIsAtAnyCar(playerid, 5))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    7. if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "Du darfst dich nicht in einem Fahrzeug befinden.");
    8. for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    9. {
    10. for(new i=0;i<GetMaxPlayers();i++)
    11. {
    12. if(IsValidVehicle(PrivateVehicle[i][slot][vehID]))
    13. {
    14. if(vehicleid == PrivateVehicle[i][slot][vehID])
    15. {
    16. if(GetVehiclePos(PrivateVehicle[i][vehicleid][vehID], Pos[0], Pos[1], Pos[2]) && IsPlayerInRangeOfPoint(i, 5.0, Pos[0], Pos[1], Pos[2]))
    17. {
    18. if(sscanf(params, "i", vehicleid))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/carinfo [vehicleid]");
    19. {
    20. format(string, sizeof(string), "Allgemeines:\tBesitzer:\t%s", PrivateVehicle[i][vehicleid][vehBesitzer]);
    21. ShowPlayerDialog(i, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    22. }
    23. }
    24. }
    25. }
    26. }
    27. }
    28. return 1;
    29. }
    Alles anzeigen



    Dies gibt mir der Log aus:


    Quellcode

    1. [debug] Run time error 4: "Array index out of bounds"
    2. [debug] Attempted to read/write array element at index 19 in array of size 4
    3. [debug] AMX backtrace:
    4. [debug] #0 00023f30 in public ocmd_carinfo (0, 6760732) from LRS.amx
    5. [debug] #1 native CallLocalFunction () from samp-server.exe
    6. [debug] #2 000005c8 in public OnPlayerCommandText (0, 6760684) from LRS.amx

    //E:

    Befehl Aktualisiert.

    Das Problem ist es funktioniert immer noch nicht.
    Ich arbeite die ganze dran und finde den fehler einfach nicht :(

    @Jeffry

    Hast du eventuell eine Lösung?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Dr. Frauenarzt () aus folgendem Grund: Befehl Aktualisiert.

  • Neu

    #Edit

    versuche es mal so:

    PAWN-Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], Float:CarHealth, string[128];
    4. new vehicleid = GetPlayerNearestCarID(playerid, 5);
    5. GetVehicleHealth(vehicleid, CarHealth);
    6. if(!PlayerIsAtAnyCar(playerid, 5))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    7. if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "Du darfst dich nicht in einem Fahrzeug befinden.");
    8. for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    9. {
    10. for(new i=0;i<GetMaxPlayers();i++)
    11. {
    12. if(IsValidVehicle(PrivateVehicle[i][slot][vehID]))
    13. {
    14. if(vehicleid == PrivateVehicle[i][slot][vehID])
    15. {
    16. GetVehiclePos(PrivateVehicle[i][vehicleid][vehID], Pos[0], Pos[1], Pos[2]);
    17. if(IsPlayerInRangeOfPoint(i, 5.0, Pos[0], Pos[1], Pos[2]))
    18. {
    19. if(sscanf(params, "i", vehicleid))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/carinfo [vehicleid]");
    20. {
    21. format(string, sizeof(string), "Allgemeines:\tBesitzer:\t%s", PrivateVehicle[i][slot][vehBesitzer]);
    22. ShowPlayerDialog(i, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    23. }
    24. }
    25. }
    26. }
    27. }
    28. }
    29. return 1;
    30. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von iTzTrappY ()

  • Neu

    Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], Float:CarHealth, string[128];
    4. new vehicleid = GetPlayerNearestCarID(playerid, 5);
    5. GetVehicleHealth(vehicleid, CarHealth);
    6. if(!PlayerIsAtAnyCar(playerid, 5))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    7. if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "Du darfst dich nicht in einem Fahrzeug befinden.");
    8. for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    9. {
    10. for(new i=0;i<GetMaxPlayers();i++)
    11. {
    12. if(IsValidVehicle(PrivateVehicle[i][slot][vehID]))
    13. {
    14. if(vehicleid == PrivateVehicle[i][slot][vehID])
    15. {
    16. GetVehiclePos(PrivateVehicle[i][vehicleid][vehID], Pos[0], Pos[1], Pos[2]);
    17. if(IsPlayerInRangeOfPoint(i, 5.0, Pos[0], Pos[1], Pos[2]))
    18. {
    19. if(sscanf(params, "i", vehicleid))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/carinfo [vehicleid]");
    20. {
    21. format(string, sizeof(string), "Allgemeines:\tBesitzer:\t%s", PrivateVehicle[i][slot][vehBesitzer]);
    22. ShowPlayerDialog(i, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    23. }
    24. }
    25. }
    26. }
    27. }
    28. }
    29. return 1;
    30. }
    Alles anzeigen

    Wen ich jetzt /carinfo 20 mache passiert nichts.
    Wen ich hier /carinfo 20 eingebe passiert garnichts.

    Weder Unknow command weder irgendwas im log

    Wen ich nur /carinfo eingebe kommt unknow command -> Wen ich das nur so eingebe spuckt er mir das aus:

    PAWN-Quellcode

    1. [debug] AMX backtrace:
    2. [debug] #0 00026c50 in public ocmd_carinfo (0, 72407384) from LRS.amx
    3. [debug] #1 native CallLocalFunction () from samp-server.exe
    4. [debug] #2 00000650 in public OnPlayerCommandText (0, 72407348) from LRS.amx
  • Neu

    Quellcode

    1. stock getVehicleOwner(vehicleid) {
    2. for(new i=0;i<GetMaxPlayers();i++) {
    3. if(vehicleid == PrivateVehicle[i][slot][vehID]) {
    4. return i;
    5. }
    6. }
    7. return 1;
    8. }
    9. ocmd:carinfo(playerid, params[])
    10. {
    11. new Float:Pos[3], Float:CarHealth, string[128];
    12. new vehicleid = GetPlayerNearestCarID(playerid, 5);
    13. GetVehicleHealth(vehicleid, CarHealth);
    14. if(!PlayerIsAtAnyCar(playerid, 5))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    15. if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "Du darfst dich nicht in einem Fahrzeug befinden.");
    16. for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++) {
    17. GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
    18. new VehicleOwner = getVehicleOwner(vehicleid);
    19. if(IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2])) {
    20. format(string, sizeof(string), "Allgemeines:\tBesitzer:\t%s", PrivateVehicle[i][slot][vehBesitzer]);
    21. ShowPlayerDialog(i, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    22. return 1;
    23. }
    24. }
    25. return 1;
    26. }
    Alles anzeigen
  • Neu

    iTzTrappY schrieb:

    Quellcode

    1. stock getVehicleOwner(vehicleid) {
    2. for(new i=0;i<GetMaxPlayers();i++) {
    3. if(vehicleid == PrivateVehicle[i][slot][vehID]) {
    4. return i;
    5. }
    6. }
    7. return 1;
    8. }
    9. ocmd:carinfo(playerid, params[])
    10. {
    11. new Float:Pos[3], Float:CarHealth, string[128];
    12. new vehicleid = GetPlayerNearestCarID(playerid, 5);
    13. GetVehicleHealth(vehicleid, CarHealth);
    14. if(!PlayerIsAtAnyCar(playerid, 5))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    15. if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "Du darfst dich nicht in einem Fahrzeug befinden.");
    16. for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++) {
    17. GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
    18. new VehicleOwner = getVehicleOwner(vehicleid);
    19. if(IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2])) {
    20. format(string, sizeof(string), "Allgemeines:\tBesitzer:\t%s", PrivateVehicle[i][slot][vehBesitzer]);
    21. ShowPlayerDialog(i, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    22. return 1;
    23. }
    24. }
    25. return 1;
    26. }
    Alles anzeigen
    und wenn jetzt bei getVehicleOwner(vehicleid); in der Schleife kein passender Eintrag gefunden wird, dann wird der Index 1 genommen.

    Beitrag von iTzTrappY ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Neu

    Danke, ist noch früh am morgen.

    @Dr.Frauenarzt
    hab den Befehl nochmal bearbeitet

    Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], string[128], vehicleid;
    4. if(sscanf(parama, "i", vehicleid))return SendClientMessage(playerid, -1, "/carinfo [vehicleid]");
    5. if(!PlayerIsAtAnyCar(playerid, 5))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    6. if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "Du darfst dich nicht in einem Fahrzeug befinden.");
    7. for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++) {
    8. GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
    9. new VehicleOwner = getVehicleOwner(vehicleid);
    10. if(VehicleOwner == -1)return SendClientMessage(playerid, COLOR_GREY, "Das Fahrzeug hat keinen besitzer.");
    11. if(IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2])) {
    12. format(string, sizeof(string), "Allgemeines:\tBesitzer:\t%s", PrivateVehicle[i][slot][vehBesitzer]);
    13. ShowPlayerDialog(i, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    14. return 1;
    15. }
    16. }
    17. return 1;
    18. }
    Alles anzeigen
  • Neu

    iTzTrappY schrieb:

    Danke, ist noch früh am morgen.

    @Dr.Frauenarzt
    hab den Befehl nochmal bearbeitet

    Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], string[128], vehicleid;
    4. if(sscanf(parama, "i", vehicleid))return SendClientMessage(playerid, -1, "/carinfo [vehicleid]");
    5. if(!PlayerIsAtAnyCar(playerid, 5))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    6. if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "Du darfst dich nicht in einem Fahrzeug befinden.");
    7. for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++) {
    8. GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
    9. new VehicleOwner = getVehicleOwner(vehicleid);
    10. if(VehicleOwner == -1)return SendClientMessage(playerid, COLOR_GREY, "Das Fahrzeug hat keinen besitzer.");
    11. if(IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2])) {
    12. format(string, sizeof(string), "Allgemeines:\tBesitzer:\t%s", PrivateVehicle[i][slot][vehBesitzer]);
    13. ShowPlayerDialog(i, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    14. return 1;
    15. }
    16. }
    17. return 1;
    18. }
    Alles anzeigen
    dann musst du auch den stock anpassen:

    PAWN-Quellcode

    1. stock getVehicleOwner(vehicleid) {
    2. for(new i=0;i<GetMaxPlayers();i++) {
    3. if(vehicleid == PrivateVehicle[i][slot][vehID]) {
    4. return i;
    5. }
    6. }
    7. return -1;
    8. }
  • Neu

    KnoLe_x3 schrieb:

    iTzTrappY schrieb:

    Danke, ist noch früh am morgen.

    @Dr.Frauenarzt
    hab den Befehl nochmal bearbeitet

    Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], string[128], vehicleid;
    4. if(sscanf(parama, "i", vehicleid))return SendClientMessage(playerid, -1, "/carinfo [vehicleid]");
    5. if(!PlayerIsAtAnyCar(playerid, 5))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    6. if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "Du darfst dich nicht in einem Fahrzeug befinden.");
    7. for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++) {
    8. GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
    9. new VehicleOwner = getVehicleOwner(vehicleid);
    10. if(VehicleOwner == -1)return SendClientMessage(playerid, COLOR_GREY, "Das Fahrzeug hat keinen besitzer.");
    11. if(IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2])) {
    12. format(string, sizeof(string), "Allgemeines:\tBesitzer:\t%s", PrivateVehicle[i][slot][vehBesitzer]);
    13. ShowPlayerDialog(i, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    14. return 1;
    15. }
    16. }
    17. return 1;
    18. }
    Alles anzeigen
    dann musst du auch den stock anpassen:

    PAWN-Quellcode

    1. stock getVehicleOwner(vehicleid) { for(new i=0;i<GetMaxPlayers();i++) { if(vehicleid == PrivateVehicle[i][slot][vehID]) { return i; } } return -1;}

    Ja danke habs vergessen, ich bin mit Frauenarzt im Teamspeak
  • Neu

    Danke für eure tatkräftige Unterstützung.

    @iTzTrappY
    @KnoLe_x3



    //E:

    Kurze Frage.

    Mann kann nur die Infomation von sein eigenen auto sehn?
    Möchte das so machen das die Beamten sehen könn wem das Fahrzeug gehört ect.


    Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], string[256], Float:CarHealth, CarHealthIni, vehicleid;
    4. if(!(Spieler[playerid][pFraktion] == 1 || Spieler[playerid][pFraktion] == 2 || Spieler[playerid][pFraktion] == 3 || Spieler[playerid][pFraktion] == 13))return SendClientMessage(playerid, COLOR_WHITE, ERROR_FRAKTION);
    5. if(sscanf(params, "i", vehicleid))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/carinfo [vehicleid]");
    6. if(!PlayerIsAtAnyCar(playerid, 30.0))return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    7. GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
    8. for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++) {
    9. GetVehicleHealth(vehicleid, CarHealth);
    10. CarHealthIni = floatround((CarHealth - 250.0) / 7.5, floatround_floor);
    11. new VehicleOwner = getVehicleOwner(vehicleid, slot);
    12. if(VehicleOwner == -1)return SendClientMessage(playerid, COLOR_GREY, "Das Fahrzeug hat keinen besitzer.");
    13. if(IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2])) {
    14. format(string, sizeof(string), "Allgemeines:\tBesitzer: %s (ID: %d)\n\t\tFahrgestellnummer: %d\n\t\tKennzeichen: %s\n\t\tModel: %s\n\t\tFarbe: %d / %d\n\nSonstiges:\tZustand: %d Prozent\n\t\tTank: %.1f L\n\t\tKilometerstand: %.1f km",
    15. PrivateVehicle[playerid][slot][vehBesitzer], playerid, PrivateVehicle[playerid][slot][vehFahrgestell], PrivateVehicle[playerid][slot][vehNumberPlate], VehicleName[GetVehicleModel(vehicleid)-400], PrivateVehicle[playerid][slot][vehColor1], PrivateVehicle[playerid][slot][vehColor2], CarHealthIni, Vehicle[vehicleid][vehFuel], Vehicle[vehicleid][vehKMStand]);
    16. ShowPlayerDialog(playerid, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    17. return 1;
    18. }
    19. }
    20. return 1;
    21. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dr. Frauenarzt ()


  • Neu

    Also ich glaube der Code, der uns zurzeit zur Verfügung steht ist nicht aktuell? Angenommen die Funktion getVehicleOwner() sieht folgend aus:


    Quellcode

    1. stock getVehicleOwner(vehicleid, &slot) {
    2. for(new i=0;i<GetMaxPlayers();i++) {
    3. for(slot = 0; slot < MAX_PLAYER_VEHICLES; slot++) {
    4. if(vehicleid == PrivateVehicle[i][slot][vehID]) {
    5. return i;
    6. }
    7. }
    8. }
    9. return -1;
    10. }
    Kann die Schleife in Zeile 8 weg und die Variable slot deklariert werden. Dann nur noch die erste Dimension des Arrays PrivateVehicle von playerid in vehicleOwner umändern und dann sollte das kein Problem mehr darstellen.

    Natürlich muss noch ein Check rein, dass der Spieler das Fahrzeug sehen kann, sofern es sein eigenes ist (sprich die Abfrage 4 nicht betrachten, wenn der vehicleOwner der playerID entspricht).
  • Neu

    Der Stock sieht so aus:


    Quellcode

    1. stock getVehicleOwner(vehicleid, slot) {
    2. for(new i=0;i<GetMaxPlayers();i++) {
    3. if(vehicleid == PrivateVehicle[i][slot][vehID]) {
    4. return i;
    5. }
    6. }
    7. return -1;
    8. }


    //E:

    Meinst du so?


    Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], slot, string[256], Float:CarHealth, CarHealthIni, vehicleid;
    4. if(!(Spieler[playerid][pFraktion] == 1 || Spieler[playerid][pFraktion] == 2 || Spieler[playerid][pFraktion] == 3 || Spieler[playerid][pFraktion] == 13))return SendClientMessage(playerid, COLOR_WHITE, ERROR_FRAKTION);
    5. if(sscanf(params, "i", vehicleid))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/carinfo [vehicleid]");
    6. if(!PlayerIsAtAnyCar(playerid, 30.0))return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    7. GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
    8. GetVehicleHealth(vehicleid, CarHealth);
    9. CarHealthIni = floatround((CarHealth - 250.0) / 7.5, floatround_floor);
    10. new VehicleOwner = getVehicleOwner(vehicleid, slot);
    11. if(VehicleOwner == -1)return SendClientMessage(playerid, COLOR_GREY, "Das Fahrzeug hat keinen besitzer.");
    12. if(IsPlayerInRangeOfPoint(playerid, 30.0, Pos[0], Pos[1], Pos[2])) {
    13. format(string, sizeof(string), "Allgemeines:\tBesitzer: %s (ID: %d)\n\t\tFahrgestellnummer: %d\n\t\tKennzeichen: %s\n\t\tModel: %s\n\t\tFarbe: %d / %d\n\nSonstiges:\tZustand: %d Prozent\n\t\tTank: %.1f L\n\t\tKilometerstand: %.1f km",
    14. PrivateVehicle[VehicleOwner][slot][vehBesitzer], playerid, PrivateVehicle[VehicleOwner][slot][vehFahrgestell], PrivateVehicle[VehicleOwner][slot][vehNumberPlate], VehicleName[GetVehicleModel(vehicleid)-400], PrivateVehicle[VehicleOwner][slot][vehColor1], PrivateVehicle[VehicleOwner][slot][vehColor2], CarHealthIni, Vehicle[vehicleid][vehFuel], Vehicle[vehicleid][vehKMStand]);
    15. ShowPlayerDialog(playerid, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    16. return 1;
    17. }
    18. return 1;
    19. }
    Alles anzeigen
  • Neu

    Dann verwende mal die Funktion getVehicleOwner() die ich oben genannt habe - funktioniert's dann?

    Die Abfrage in Zeile 4 musst du noch verschieben - sofern dieser Befehl auch für Spieler bei ihrem eigenen Fahrzeug gehen soll. Auch ist die Funktion PlayerIsAtAnyCar nicht sinnvoll, da man bei carinfo scheinbar eine vehicleID angeben muss. Da ergibt es mehr Sinn zu überprüfen, ob der Spieler im Radius des Fahrzeuges ist (was du bereits in Zeile 12 machst, deswegen kann die Abfrage raus).
  • Neu

    Funktioniert danke,

    Nein Dies sollte dienen für die Polizei, genauso wie die Ordnungsamlter um nach zu vollziehen wen das Fahrzeug gehört.


    @Douq


    Ich habe mal eine frage.


    Ich wollte das noch hinzufügen das man die Fraktionen auslesen kann das heißt wen man ein Fraktions Fahrzeug "Sieht" oder "Mal eine ID" eingibt das da auch der Dialog kommt.


    Er sagt mir immer das das Fahrzeug kein Besitzer hat. "Also die Fraktions Fahrzeuge" die Privaten Fahrzeugen klappen :)

    Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], slot, string[256], Float:CarHealth, CarHealthIni, vehicleid;
    4. if(!(Spieler[playerid][pFraktion] == 1 || Spieler[playerid][pFraktion] == 2 || Spieler[playerid][pFraktion] == 3 || Spieler[playerid][pFraktion] == 13))return SendClientMessage(playerid, COLOR_WHITE, ERROR_FRAKTION);
    5. if(sscanf(params, "i", vehicleid))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/carinfo [vehicleid]");
    6. GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
    7. GetVehicleHealth(vehicleid, CarHealth);
    8. CarHealthIni = floatround((CarHealth - 250.0) / 7.5, floatround_floor);
    9. new VehicleOwner = getVehicleOwner(vehicleid, slot);
    10. if(VehicleOwner == -1)return SendClientMessage(playerid, COLOR_GREY, "Das Fahrzeug hat keinen besitzer.");
    11. if(IsPlayerInRangeOfPoint(playerid, 30.0, Pos[0], Pos[1], Pos[2])) {
    12. format(string, sizeof(string), "Allgemeines:\tBesitzer: %s (ID: %d)\n\t\tFahrgestellnummer: %d\n\t\tKennzeichen: %s\n\t\tModel: %s\n\t\tFarbe: %d / %d\n\nSonstiges:\tZustand: %d Prozent\n\t\tTank: %.1f L\n\t\tKilometerstand: %.1f km",
    13. PrivateVehicle[VehicleOwner][slot][vehBesitzer], VehicleOwner, PrivateVehicle[VehicleOwner][slot][vehFahrgestell], PrivateVehicle[VehicleOwner][slot][vehNumberPlate], VehicleName[GetVehicleModel(vehicleid)-400], PrivateVehicle[VehicleOwner][slot][vehColor1], PrivateVehicle[VehicleOwner][slot][vehColor2], CarHealthIni, Vehicle[vehicleid][vehFuel], Vehicle[vehicleid][vehKMStand]);
    14. ShowPlayerDialog(playerid, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    15. return 1;
    16. }
    17. new FVehicleOwner = IsAFraktionsVeh(vehicleid);
    18. if(IsPlayerInRangeOfPoint(playerid, 30.0, Pos[0], Pos[1], Pos[2])) {
    19. format(string, sizeof(string), "Allgemeines:\tBesitzer: %s",
    20. GetFraktionName(Spieler[FVehicleOwner][pFraktion]));
    21. ShowPlayerDialog(playerid, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    22. return 1;
    23. }
    24. return 1;
    25. }
    Alles anzeigen



    Quellcode

    1. stock IsAFraktionsVeh(vehicleid)
    2. {
    3. for(new fV;fV<MAX_FVEHS;fV++)
    4. {
    5. if(vehicleid == fVehicle[fV][vehID])return fV;
    6. }
    7. return INVALID_VEHICLE_ID;
    8. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dr. Frauenarzt ()

  • Neu

    Da bieten sich verschiedene Konstruktionen an. Bei der Variation ist es ja derzeit so, dass du den Code ab Zeile 10 nicht mehr weitergehst, da ein Fraktionsfahrzeug nach der Funktion getVehicleOwner == -1 ist. Es bietet sich an, genau an dieser Stelle auf das return zu verzichten, sondern lieber solch eine Konstruktion zu versuchen:


    Quellcode

    1. if((vehicleOwner = getVehicleOwner(vehicleid, slot)) != -1) {
    2. // Spielerfahrzeugkram
    3. }
    4. else if((vehicleOwner = IsAFraktionsVeh(vehicleid)) != INVALID_PLAYER_ID) {
    5. // Fraktionskram
    6. }
    7. else {
    8. // Fehlermeldung, weder Spielerfahrzeug noch Fraktionsfahrzeug
    9. }
    Eventuell ergibt es in Hinblick der Ressourcennutzung eher Sinn, zuerst das auf Fraktionsfahrzeug und danach aufs Spielerfahrzeug zu überprüfen - aber Optimierungen können sich da sowieso vornehmen .. :D
  • Neu

    So wie das jetz beschrieben ist macht das ganze auch meiner Meinung auch Sinn.

    Nun ja wir schauen mal was sich da machen lässt


    //E:


    Quellcode

    1. stock GetVehicleFraktionName(vehicleid)
    2. {
    3. new string[50];
    4. switch(fVehicle[vehicleid][vehFraktion])
    5. {
    6. case 0: string = "Zivilist";
    7. case 1: string = "LSPD";
    8. case 2: string = "LVPD";
    9. case 3: string = "LVPD";
    10. case 4: string = "LSMD";
    11. case 5: string = "Russen M.";
    12. case 6: string = "Yakuza";
    13. case 7: string = "Regierung";
    14. case 8: string = "Hitman";
    15. case 9: string = "San News";
    16. }
    17. return string;
    18. }
    Alles anzeigen
    Kurze frage wie kann ich das am besten machen wen er /carinfo macht das der Name ausgelesen wird?

    Komisch ist wen ich das so habe wird mir nur Zivilist angezeigt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dr. Frauenarzt ()

  • Neu

    Also es sieht nun so aus also /carinfo:


    Quellcode

    1. ocmd:carinfo(playerid, params[])
    2. {
    3. new Float:Pos[3], slot, string[256], Float:CarHealth, CarHealthIni, vehicleid;
    4. if(!(Spieler[playerid][pFraktion] == 1 || Spieler[playerid][pFraktion] == 2 || Spieler[playerid][pFraktion] == 3 || Spieler[playerid][pFraktion] == 13))return SendClientMessage(playerid, COLOR_WHITE, ERROR_FRAKTION);
    5. if(sscanf(params, "i", vehicleid))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/carinfo [vehicleid]");
    6. GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
    7. GetVehicleHealth(vehicleid, CarHealth);
    8. CarHealthIni = floatround((CarHealth - 250.0) / 7.5, floatround_floor);
    9. new VehicleOwner = getVehicleOwner(vehicleid, slot);
    10. if(IsPlayerInRangeOfPoint(playerid, 30.0, Pos[0], Pos[1], Pos[2]))
    11. {
    12. if((VehicleOwner = getVehicleOwner(vehicleid, slot)) != -1)
    13. {
    14. format(string, sizeof(string), "Allgemeines:\tBesitzer: %s (ID: %d)\n\t\tFahrgestellnummer: %d\n\t\tKennzeichen: %s\n\t\tModel: %s\n\t\tFarbe: %d / %d\n\nSonstiges:\tZustand: %d Prozent\n\t\tTank: %.1f L\n\t\tKilometerstand: %.1f km",
    15. PrivateVehicle[VehicleOwner][slot][vehBesitzer], VehicleOwner, PrivateVehicle[VehicleOwner][slot][vehFahrgestell], PrivateVehicle[VehicleOwner][slot][vehNumberPlate], VehicleName[GetVehicleModel(vehicleid)-400], PrivateVehicle[VehicleOwner][slot][vehColor1], PrivateVehicle[VehicleOwner][slot][vehColor2], CarHealthIni,
    16. Vehicle[vehicleid][vehFuel], Vehicle[vehicleid][vehKMStand]);
    17. ShowPlayerDialog(playerid, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    18. }
    19. else if((VehicleOwner = IsAFraktionsVeh(vehicleid)) != INVALID_PLAYER_ID)
    20. {
    21. format(string, sizeof(string), "Allgemeines:\tBesitzer: %s\n\t\tFahrgestellnummer: %d\n\t\tKennzeichen: %s\n\t\tModel: %s\n\t\tFarbe: %d / %d\n\nSonstiges:\tZustand: %d Prozent\n\t\tTank: %.1f L\n\t\tKilometerstand: %.1f km",
    22. GetVehicleFraktionName(vehicleid), fVehicle[VehicleOwner][vehFahrgestell], fVehicle[VehicleOwner][vehNumberPlate], VehicleName[GetVehicleModel(vehicleid)-400], fVehicle[VehicleOwner][vehColor1], fVehicle[VehicleOwner][vehColor2], CarHealthIni, Vehicle[vehicleid][vehFuel], Vehicle[vehicleid][vehKMStand]);
    23. ShowPlayerDialog(playerid, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    24. }
    25. else
    26. {
    27. SendClientMessage(playerid, COLOR_WHITE, "Dieses Fahrzeug hat keinen Besitzer.");
    28. }
    29. }
    30. return 1;
    31. }
    Alles anzeigen

    vehFraktion werden nach nummern eingefragen.


    Das heißt wen ich jetzt ein Fraktions Fahrzeug erstelle für die Fraktions 1

    gebe ich natürlich 1 an.
    Und natürlich 1 ist z.b LSPD
  • Neu

    Dr. Frauenarzt schrieb:

    vehFraktion werden nach nummern eingefragen.
    Das würde ich gerne mal sehen, da ich vermute, dass dort der Fehler liegt :)

    Zur Überprüfung, kannst du ja auch einfach mal mit printf dir aus Spaß eine Fahrzeug Fraktion ausgeben lassen um zu testen, ob es denn funktioniert, aber ich denke nicht :D


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Neu

    Spoiler anzeigen

    Quellcode

    1. ocmd:addfcar(playerid, params[])
    2. {
    3. new frakID, vehmodel, Float:x, Float:y, Float:z, Float:a, preis, neon, color1, color2, string[128];
    4. new siren;
    5. if(Spieler[playerid][pAdmin] < 6)return SendClientMessage(playerid, COLOR_WHITE, ERROR_ADMIN);
    6. if(sscanf(params, "iiiiiii", frakID, vehmodel, preis, neon, siren, color1, color2))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/addfcar [Fraktions-ID] [Vehicle-Model] [Preis] [Neon] [Siren 0/1] [Color1] [Color2]");
    7. if(vehmodel < 400 || vehmodel > 611)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Vehicle-Model muss über 400 und unter 611 sein!");
    8. if(GetMaxFraktionsVehs(frakID) > MAX_OWNED_FRAKVEHICLES)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Maximale Anzahl an Fraktions Fahrzeugen erreicht!");
    9. if(siren < 0 || siren > 1)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Sirene 0 oder 1!");
    10. if(frakID < 1 || frakID > MAX_FRACS)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Falsche Fraktions-ID!");
    11. if(Frak[frakID][frakOpened] == 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Diese Fraktion ist nicht geöffnet.");
    12. GetPlayerPos(playerid, x, y, z);
    13. GetPlayerFacingAngle(playerid, a);
    14. if(color1 < 0 || color1 > 255)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Farbe 1 zwischen 0 und 255 auswählen!");
    15. if(color2 < 0 || color2 > 255)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Farbe 2 zwischen 0 und 255 auswählen!");
    16. CreateFraktionsVehicle(frakID, vehmodel, x, y, z, a, preis, neon, color1, color2, siren);
    17. format(string, sizeof(string), "{FFFF00}[CREATE] Fraktions Fahrzeug %d wurde für Fraktion %s erstellt.", vehmodel, GetFraktionName(frakID));
    18. SendAdminMessage(COLOR_WHITE, string);
    19. return 1;
    20. }
    Alles anzeigen



    Spoiler anzeigen

    Quellcode

    1. stock CreateFraktionsVehicle(frakID, vehmodel, Float:posx, Float:posy, Float:posz, Float:posa, preis, neon, color1, color2, siren)
    2. {
    3. new Query[512];
    4. for(new fV;fV<MAX_FVEHS;fV++)
    5. {
    6. if(fVehicle[fV][modelid] == 0)
    7. {
    8. fVehicle[fV][vehFraktion] = frakID;
    9. fVehicle[fV][modelid] = vehmodel;
    10. fVehicle[fV][vehPosX] = posx;
    11. fVehicle[fV][vehPosY] = posy;
    12. fVehicle[fV][vehPosZ] = posz;
    13. fVehicle[fV][vehPosA] = posa;
    14. fVehicle[fV][vehInterior] = 0;
    15. fVehicle[fV][vehWorld] = 0;
    16. fVehicle[fV][vehColor1] = color1;
    17. fVehicle[fV][vehColor2] = color2;
    18. fVehicle[fV][vehPaintjob] = -1;
    19. fVehicle[fV][vehSpoiler] = 0;
    20. fVehicle[fV][vehHood] = 0;
    21. fVehicle[fV][vehRoof] = 0;
    22. fVehicle[fV][vehSideskirt] = 0;
    23. fVehicle[fV][vehLamps] = 0;
    24. fVehicle[fV][vehNitro] = 0;
    25. fVehicle[fV][vehExhaust] = 0;
    26. fVehicle[fV][vehWheels] = 0;
    27. fVehicle[fV][vehStereo] = 0;
    28. fVehicle[fV][vehHydraulics] = 0;
    29. fVehicle[fV][vehFrontBumper] = 0;
    30. fVehicle[fV][vehRearBumper] = 0;
    31. fVehicle[fV][vehVentRight] = 0;
    32. fVehicle[fV][vehVentLeft] = 0;
    33. fVehicle[fV][vehPreis] = preis;
    34. fVehicle[fV][vehHealth] = 1000.0;
    35. fVehicle[fV][vehNeonID] = neon;
    36. fVehicle[fV][vehTankKM] = 0;
    37. fVehicle[fV][vehKMStandCount] = 0;
    38. fVehicle[fV][vehKMStand] = 0;
    39. fVehicle[fV][vehSiren] = siren;
    40. fVehicle[fV][vehFahrgestell] = randomex(10000, 99999);
    41. fVehicle[fV][vehID] = CreateVehicleEx(fVehicle[fV][modelid], fVehicle[fV][vehPosX], fVehicle[fV][vehPosY], fVehicle[fV][vehPosZ], fVehicle[fV][vehPosA], fVehicle[fV][vehColor1], fVehicle[fV][vehColor2], -1, false, fVehicle[fV][vehSiren]);
    42. format(fVehicle[fV][vehNumberPlate], 32, "%s 1%d", GetFraktionNumberPlate(fVehicle[fV][vehFraktion]), randomex(10000, 99999));
    43. SetVehicleNumberPlate(fVehicle[fV][vehID], fVehicle[fV][vehNumberPlate]);
    44. SetVehicleHealth(fVehicle[fV][vehID], fVehicle[fV][vehHealth]);
    45. mysql_format(MySqlConnection, Query, sizeof(Query), "INSERT INTO `server_fvehicles` (`vehFraktion`, `modelid`, `vehPosX`, `vehPosY`, `vehPosZ`, `vehPosA`, `vehInterior`, `vehWorld`, `vehHealth`, `vehNumberPlate`, `vehPaintjob`, `vehPreis`, `vehColor1`, `vehColor2`, `vehNeonID`, `vehFuel`, `vehSiren`, `vehFahrgestell`) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%f', '%s', '%d', '%d', '%d', '%d', '%d', '%f', '%d', '%d')",
    46. fVehicle[fV][vehFraktion], fVehicle[fV][modelid], fVehicle[fV][vehPosX], fVehicle[fV][vehPosY], fVehicle[fV][vehPosZ], fVehicle[fV][vehPosA], fVehicle[fV][vehInterior], fVehicle[fV][vehWorld], fVehicle[fV][vehHealth], fVehicle[fV][vehNumberPlate], fVehicle[fV][vehPaintjob], fVehicle[fV][vehPreis], fVehicle[fV][vehColor1],
    47. fVehicle[fV][vehColor2], fVehicle[fV][vehNeonID], VehicleData[vehmodel-400][vehMaxTank], fVehicle[fV][vehSiren], fVehicle[fV][vehFahrgestell]);
    48. mysql_tquery(MySqlConnection, Query, "insertDB", "d", fV);
    49. SetVehicleToRespawn(fVehicle[fV][vehID]);
    50. Vehicle[fVehicle[fV][vehID]][vehFuel] = VehicleData[vehmodel-400][vehMaxTank];
    51. singleSaveFVehicle(fV);
    52. return 1;
    53. }
    54. }
    55. return 1;
    56. }
    Alles anzeigen