Vehicleid ermitteln ohne im Fahrzeug zu sitzen?

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
  • Ja der Titel erklärt schon alles.


    Kann man irgendwie z.B. die Vehicleid von dem Fahrzeug welches neben einem steht ermitteln ohne drin zu sitzen?

  • Das müsste gehen.
    Ich glaub mit der funktion die, die playerid eines andere spieler ausgibt und du mit der halt überprüft ob einer in der nähe deiner Position ist.
    Von im lässt du dan die VehicleID ausgeben.

  • und wenn das Fahrzeug leer ist? also niemand drin sitzt?

  • wie wilslte ein leeres farzeug id haben ^^ :D denk doch mal nach ich wüsste net wie es geht

  • Doch eig. müsste es gehen.
    Per Variable aber nur glaube ich.


    new cars[10]; // bsp
    cars[0] = AddStaticVehicle....
    cars[1] = AddStaticVehicle....


    if(strcmp....
    {
    new Float:x,Float:y,Float:z;
    GetVehiclePos(cars,x, y, z);
    if(IsPlayerInRangeOfPoint(playerid,range,x, y, z))
    {
    if(GetVehicleModel(cars) == 411)
    {
    SendClientMessage(playerid,FARBE,"Neben dir steht ein Infernus");
    }
    }
    return 1;
    }

    Ungetestet!

    Kann fehler enthalten ^^

    Einmal editiert, zuletzt von AdnaN ()

  • wie wilslte ein leeres farzeug id haben ^^ :D denk doch mal nach ich wüsste net wie es geht


    ja ich denke nach... jedes fahrzeug hat eine vehicleid -.- wenn du die net besonders definierst ist das halt dann 1,2,3,4 usw.


    hmm adnan das net ganz das was ich suche aber trotzdem danke.


    Ich hab ein carownership gebaut das problem ist das mit dem Fahrzeug abschließen. will halt das man sein eignes Fahrzeug nur dann abschließen kann, wenn man daneben steht.

    Einmal editiert, zuletzt von Virus ()

  • Lol^^
    Nichts einfacher als das :)


    Das geht mit ner einfachen rechnung


    if((floatabs(SpielerX-CarX)<radius)&&(floatabs(SpielerY-CarY)<radius)&&(floatabs(SpielerZ-CarZ)<radius))


    Mit ner for schleife vergleichst du alle posis vom spieler die mit nem car. Eine achse des spielerposis wird mit einer achse eines cars subtrahiert(?^^). floatabs macht, dass wenn das ergebnis im minusbereich liegt, das minus weg. Wenn dann die zahl die rauskommt kleiner is als der radius, un das mit allen achsen, dann weiß man welches car in der nähe des spielers is :)


    MFG, Robdeflop®

  • Wenn du folgendes Clever kombinierst hast du das gewünschte Ergebniss.


    new
    Float:X,
    Float:Y,
    Float:Z,
    vehicleid = 0;
    GetPlayerPos(playerid, X,Y, Z );
    GetClosestVehicle(X, Y, Z, 15.0, vehicleid);
    if(vehicleid){
    // Mach was
    }


    stock GetClosestVehicle(Float:x1, Float:y1, Float:z1, Float:dist, &veh){
    new
    i,
    Float:vDist,
    Float:x2,
    Float:y2,
    Float:z2;
    for(new v = 1 ; v < MAX_VEHICLES ; v++) {
    GetVehiclePos(v, x2, y2, z2);
    x1 -= x2;
    y1 -= y2;
    z1 -= z2;
    vDist = ((x1*x1)+(y1*y1)+(z1*z1));
    if( vDist < dist){
    veh = v;
    dist = vDist;
    }
    }
    return 1;
    }

    Der Lösungsweg wurde hier schon Teilweise genannt.Man besorgt sich zuerst die Position des Spielers in dessen Umkreis ein Fahrzeug gesucht werden soll.Danach wird durch alle Fahrzeuge geloopt und geschaut ob es in einem bestimmten Umkreis zum Spieler steht.Dabei wird automatisch das Fahrzeug ausgewählt,welches am nächsten zum Spieler steht.

  • alles klar danke an euch leute. nun werd ich mal versuchen dies auch in die tat umzusetzen :)

  • Da gibts aber noch bessere funktionen^^ also einfacher aufgebaut und kürzer.


    public Naechstecar(playerid, Float:radius)
    {
    new Float:SpielerX, Float:SpielerY, Float:SpielerZ, Float:CarX, Float:CarZ, Float:CarY;
    GetPlayerPos(playerid, SpielerX, SpielerY, SpielerZ);
    for(new i = 1; i < MAX_VEHICLES; i++)
    {
    GetVehiclePos(i, CarX, CarY, CarZ);
    if((floatabs(SpielerX-CarX)<radius)&&(floatabs(SpielerY-CarY)<radius)&&(floatabs(SpielerZ-CarZ)<radius))
    {
    return i;
    }
    }
    return false;
    }


    Benutzung:


    new car = Naechstescar(playerid, 5);


    Dann beinhaltet die variable car die carid des cars in der nähe von 5 metern. Wenn kein car in der nähe is, wird 0 zurückgegeben ;)

  • warum macht ihr euch das immer so umständlich wens auch einfach geht kennt ihr denn befehl /dl ????? gibt es seit 0.3 :) xD

  • nein kenn ich net? aber wir reden hier über scipten und net über befehle... möchte per script die id ermitteln