Vehicle ID, bei dem Fahrzeug vor einem ausgeben

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
  • Hallo Leute,


    bin derzeit mal wieder bei einem Problem, bei dem ich keine Lösung weiß.
    Ich möchte gerne die Vehicle ID von dem Fahrzeug ausgeben, wo sich der Spieler am Kofferraum befindet. (Leider ist diese vehicleid immer 0, somit funktioniert es nicht so, wie ich will.)



    for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "1");
    if(IsValidVehicle(PrivateVehicle[playerid][slot][vehID]))
    {
    SendClientMessage(playerid, COLOR_YELLOW, "2");
    GetVehiclePos(PrivateVehicle[playerid][slot][vehID], Pos[0], Pos[1], Pos[2]);
    if(vehicleid == PrivateVehicle[playerid][slot][vehID]) //Fehlerzeile
    {
    SendClientMessage(playerid, COLOR_YELLOW, "3");
    if(IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2]))
    {
    SendClientMessage(playerid, COLOR_YELLOW, "4");
    vehicleid = PrivateVehicle[playerid][slot][vehID];
    count++;
    break;
    }
    }
    }
    }


    Hoffe jemand hat da ein kleinen Vorschlag für mich.

  • Benutz mal das hier:



    stock GetClosestVehicle(playerid, Float:range)
    {
    new Float:p_X;
    new Float:p_Y;
    new Float:p_Z;


    new Float:Distance;
    new Float:PretendentDistance = range +1;
    new Pretendent;


    GetPlayerPos(playerid, p_X, p_Y, p_Z);


    for(new vehicleid=1; vehicleid < MAX_VEHICLES; vehicleid++)
    {
    Distance = GetVehicleDistanceFromPoint(vehicleid, p_X, p_Y, p_Z);


    if(Distance <= range && Distance <= PretendentDistance)
    {
    Pretendent = vehicleid;
    PretendentDistance = Distance;
    }
    }


    return Pretendent;
    }

    Mit freundlichen Grüßen,


    Keslo

  • Brauche denke ich einen kleinen Denkanstoß. Habe es jetzt so, jedoch printet er mir immer noch, nur bis zur Nummer 2.

    for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "1");
    if(IsValidVehicle(PrivateVehicle[playerid][slot][vehID]))
    {
    SendClientMessage(playerid, COLOR_YELLOW, "2");
    new PrivatCar = GetClosestVehicle(playerid, 5);
    GetVehiclePos(PrivateVehicle[playerid][slot][vehID], Pos[0], Pos[1], Pos[2]);
    if(PrivatCar == PrivateVehicle[playerid][slot][vehID])
    {
    SendClientMessage(playerid, COLOR_YELLOW, "3");
    if(IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2]))
    {
    SendClientMessage(playerid, COLOR_YELLOW, "4");
    PrivatCar = PrivateVehicle[playerid][slot][vehID];
    count++;
    break;
    }
    }
    }
    }

  • break;

    Ja..da beendest du ja auch die schleife?!


    Was soll der Quatsch da eigentlich mit dem Count? ^^



    C
    for(new fV; fV<max_fvehs; fv++)
    {
        if(GetVehiclePos(fVehicle[fV][vehID], Pos[0], Pos[1], Pos[2]) && fVehicle[fV][vehFraktion] == Spieler[playerid][pFraktion] && IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2]))
        {
            vehicleid = fVehicle[fV][vehID];
            ShowPlayerDialog(playerid, DIALOG_TRUNKPUT, DIALOG_STYLE_LIST, "Kofferraum", "Materialien einlagern\nDrogen einlagern","Auswählen","Schließen");
            break;
        }
    }

    Das würde vollkommen reichen ^^

    ast2ufdyxkb1.png


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

  • Beitrag von Speezy ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Hinbekommen, danke! ().
  • Sorry nochmal, hatte mein Beitrag zu eifrig gelöscht.
    Ich habe das private Fahrzeugsystem nun so, leider komme ich aber nicht bis zur eigentlichen Funktion. Sprich, alles was nach der Abfrage kommt, ob es sein Fahrzeug ist, wird nicht ausgeführt.

    new vehicleid = GetPlayerNearestCarID(playerid,5);
    for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    {
    if(IsValidVehicle(PrivateVehicle[playerid][slot][vehID]))
    {
    if(GetVehiclePos(PrivateVehicle[playerid][slot][vehID], Pos[0], Pos[1], Pos[2]) && vehicleid == PrivateVehicle[playerid][slot][vehID] && IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2]))
    {
    if(!IsPlayerBehindVehicle(playerid,PrivateVehicle[playerid][slot][vehID]))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht am Kofferraum des Fahrzeuges.");
    ShowPlayerDialog(playerid, DIALOG_TRUNK, DIALOG_STYLE_LIST, "Kofferraum", "Gegenstände einlagern\nGegenstände auslagern\nKofferraum Inhalt überprüfen", "Auswählen", "Schließen");
    SetVehicleParamsEx(PrivateVehicle[playerid][slot][vehID],engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_ON,objective);
    SendClientMessage(playerid, -1, "Privatcar");
    break;
    }
    }
    }


    @Kaliber

  • zum einen hier mal eine funktion zum abprüfen ob er spieler hinter dem fahrzeug steht welche akkurat und genau ist


    Nützliche Codeschnipsel



    for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    {
    if(IsValidVehicle(PrivateVehicle[playerid][slot][vehID]))
    {
    if(IsPlayerBehindVehicle(playerid,PrivateVehicle[playerid][slot][vehID])){
    ShowPlayerDialog(playerid, DIALOG_TRUNK, DIALOG_STYLE_LIST, "Kofferraum", "Gegenstände einlagern\nGegenstände auslagern\nKofferraum Inhalt überprüfen", "Auswählen", "Schließen");
    SetVehicleParamsEx(PrivateVehicle[playerid][slot][vehID],engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_ON,objective);
    return SendClientMessage(playerid, -1, "Privatcar");


    }


    }
    return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht am Kofferraum des Fahrzeuges.");



    So müsste es klappen

  • So müsste es klappen

    Da fehlt aber die Abfrage ob dem Spieler das Fahrzeug gehört.


    Ich würde es so vorschlagen:
    new vehicleid = GetPlayerNearestCarID(playerid,5);
    for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    {
    if(IsValidVehicle(PrivateVehicle[playerid][slot][vehID]))
    {
    if(vehicleid == PrivateVehicle[playerid][slot][vehID])
    {
    if(!IsPlayerBehindVehicle(playerid,PrivateVehicle[playerid][slot][vehID]))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht am Kofferraum des Fahrzeuges.");
    ShowPlayerDialog(playerid, DIALOG_TRUNK, DIALOG_STYLE_LIST, "Kofferraum", "Gegenstände einlagern\nGegenstände auslagern\nKofferraum Inhalt überprüfen", "Auswählen", "Schließen");
    SetVehicleParamsEx(PrivateVehicle[playerid][slot][vehID],engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_ON,objective);
    SendClientMessage(playerid, -1, "Privatcar");
    return 1;
    }
    }
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Komischerweise gibt er mir im Print als vehicleid die 2000 aus und als PrivateVehicle[playerid][slot][vehID] die eigentliche Vehicle ID.



    new vehicleid = GetPlayerNearestCarID(playerid,5);
    for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++)
    {
    SendClientMessage(playerid,-1,"2");
    if(IsValidVehicle(PrivateVehicle[playerid][slot][vehID]))
    {
    SendClientMessage(playerid,-1,"3");
    format(DialogString,sizeof(DialogString),"%d | %d |",vehicleid,PrivateVehicle[playerid][slot][vehID]);
    SendClientMessage(playerid, COLOR_YELLOW, DialogString);
    if(vehicleid == PrivateVehicle[playerid][slot][vehID])
    {
    SendClientMessage(playerid,-1,"4");
    if(GetVehiclePos(PrivateVehicle[playerid][slot][vehID], Pos[0], Pos[1], Pos[2]) && IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2]))
    {
    SendClientMessage(playerid,-1,"5");
    if(!IsPlayerBehindVehicle(playerid,PrivateVehicle[playerid][slot][vehID]))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht am Kofferraum des Fahrzeuges.");
    ShowPlayerDialog(playerid, DIALOG_TRUNK, DIALOG_STYLE_LIST, "Kofferraum", "Gegenstände einlagern\nGegenstände auslagern\nKofferraum Inhalt überprüfen", "Auswählen", "Schließen");
    SetVehicleParamsEx(PrivateVehicle[playerid][slot][vehID],engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_ON,objective);
    return 1;
    }
    }
    }
    }


  • stock GetPlayerNearestCarID(playerid,Float:radius)
    {
    new Float:vx,Float:vy,Float:vz, carid;
    for(new v = 1; v <= MAX_VEHICLES; v++)
    {
    GetVehiclePos(v,vx,vy,vz);
    if(IsPlayerInRangeOfPoint(playerid,radius,vx,vy,vz))
    {
    carid = v;
    }
    }
    return carid;
    }

  • Versuche es so:
    stock GetPlayerNearestCarID(playerid,Float:radius)
    {
    new Float:vx,Float:vy,Float:vz,Float:tmp,Float:min = radius,carid = INVALID_VEHICLE_ID;
    for(new v = 1; v <= MAX_VEHICLES; v++)
    {
    GetVehiclePos(v,vx,vy,vz);
    tmp = GetPlayerDistanceFromPoint(playerid,vx,vy,vz);
    if(tmp < min)
    {
    carid = v;
    min = tmp;
    }
    }
    return carid;
    }


    Falls das nicht klappt, erhöhe den Radius etwas, von 5 auf 10 oder so.

  • @Jeffry


    Nee tatsächlich nicht da die privaten fahrzeuge durchgegangen werden vom spieler :). Zu dem wurde Getnearestvehicle von mir entfernt da die Funktion, auf die ich verlinkt hab die position auch prüft ^^.


    Hier nochmal im Quellcode-tag , war davor nur am Handy online


    Einmal editiert, zuletzt von IPrototypeI () aus folgendem Grund: //edit code

  • Nee tatsächlich nicht da die privaten fahrzeuge durchgegangen werden vom spieler :)

    Ah, stimmt. Im formatierten Code sieht's gleich besser aus, da wird deutlich wie es gemeint war. Dachte du hattest den Code aus dem verlinkten Codeschnipsel-Thread nur kopiert.


    Wobei ich das trotzdem wahrscheinlich nicht so machen würde, wegen folgendem Beispiel:
    Stell dir vor, zwei Fahrzeuge vom gleichen Spieler stehen Kofferraum an Kofferaum sich gegenüber. Dazwischen der Spieler. Abstand zwischen den beiden Fahrzeugen ist genau der, des Ranges.
    Bei deinem Code wird immer das Fahrzeug mit der kleineren ID genommen, deshalb würde ich die Abfrage zum nächsten Fahrzeug zusätzlich drin lassen.


    Ist zwar recht unwahrscheinlich, dass genau die Konstellation vorkommt, aber aus Erfahrung weiß ich von meinem damaligen Server, es gibt nichts was nicht passieren kann ^^



    ===


    EDIT: @IPrototypeI
    Haha jo xDD :D

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()