[FAHRZEUGE] /carinfo

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





    Dies gibt mir der Log aus:



    Code
    [debug] Run time error 4: "Array index out of bounds"
    [debug]  Attempted to read/write array element at index 19 in array of size 4
    [debug] AMX backtrace:
    [debug] #0 00023f30 in public ocmd_carinfo (0, 6760732) from LRS.amx
    [debug] #1 native CallLocalFunction () from samp-server.exe
    [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?

    2 Mal editiert, zuletzt von Dr. Frauenarzt () aus folgendem Grund: Befehl Aktualisiert.

  • #Edit


    versuche es mal so:


    ocmd:carinfo(playerid, params[])
    {
    new Float:Pos[3], Float:CarHealth, string[128];
    new vehicleid = GetPlayerNearestCarID(playerid, 5);
    GetVehicleHealth(vehicleid, CarHealth);
    if(!PlayerIsAtAnyCar(playerid, 5))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Fahrzeuges.");
    if(IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "Du darfst dich nicht in einem Fahrzeug befinden.");
    for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    {
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(IsValidVehicle(PrivateVehicle[i][slot][vehID]))
    {
    if(vehicleid == PrivateVehicle[i][slot][vehID])
    {
    GetVehiclePos(PrivateVehicle[i][vehicleid][vehID], Pos[0], Pos[1], Pos[2]);
    if(IsPlayerInRangeOfPoint(i, 5.0, Pos[0], Pos[1], Pos[2]))
    {
    if(sscanf(params, "i", vehicleid))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/carinfo [vehicleid]");
    {
    format(string, sizeof(string), "Allgemeines:\tBesitzer:\t%s", PrivateVehicle[i][slot][vehBesitzer]);
    ShowPlayerDialog(i, DIALOG_CARINFO, DIALOG_STYLE_MSGBOX, "Fahrzeug Infomationen", string, "Schließen", "");
    }
    }
    }
    }
    }
    }
    return 1;
    }

    Einmal editiert, zuletzt von iTzTrappY ()


  • 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:



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

  • 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 ().
  • Danke, ist noch früh am morgen.


    @Dr.Frauenarzt
    hab den Befehl nochmal bearbeitet


  • Danke, ist noch früh am morgen.


    @Dr.Frauenarzt
    hab den Befehl nochmal bearbeitet


    dann musst du auch den stock anpassen:
    stock getVehicleOwner(vehicleid) {
    for(new i=0;i<GetMaxPlayers();i++) {
    if(vehicleid == PrivateVehicle[i][slot][vehID]) {
    return i;
    }
    }
    return -1;
    }

  • dann musst du auch den stock anpassen: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

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



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



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

    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).

  • Der Stock sieht so aus:



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


    //E:


    Meinst du so?



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

  • 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 :)



    Code
    stock IsAFraktionsVeh(vehicleid)
    {
    	for(new fV;fV<MAX_FVEHS;fV++)
    	{
    		if(vehicleid == fVehicle[fV][vehID])return fV;
    	}
    	return INVALID_VEHICLE_ID;
    }
  • 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:



    Code
    if((vehicleOwner = getVehicleOwner(vehicleid, slot)) != -1) {
    // Spielerfahrzeugkram
    }
    else if((vehicleOwner = IsAFraktionsVeh(vehicleid)) != INVALID_PLAYER_ID) {
    // Fraktionskram
    }
    else {
    // Fehlermeldung, weder Spielerfahrzeug noch Fraktionsfahrzeug
    }

    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

  • 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:



    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.

  • Also es sieht nun so aus also /carinfo:




    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

  • 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

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S



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