Positions Prolem

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
  • Moin,


    Ich sitze wie vorhin auch immer noch an meinem Trucker Job, nun man steigt ein in den Truck, muss nen Anhänger ankoppeln,
    und damit zur Ladestelle fahren. Wenn man dort angekommen ist, wird man aus dem Fahrzeug geschmissen und man muss in die Lagerhalle.
    Dort muss man in einen Checkpoint und das Paket nehmen, nun soll man es dann zu dem Checkpoint bringen wo der LKW steht,
    wie kann ich jetzt das machen, das ich gucke ob der LKW in der Nähe ist?


    So wie ich es habe geht es nicht.




    if(trucker_checkpoint[playerid]==2 && truckerroute[playerid] == 1)
    {
    new Float:vehx, Float:vehy, Float:vehz;
    new truck = GetPlayerVehicleID(playerid);
    GetVehiclePos(truck,vehx,vehy,vehz);
    if(IsTrailerAttachedToVehicle(truck))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,159.4653,-22.3724,2.1729,4.0);
    trucker_checkpoint[playerid]=3;
    SendClientMessage(playerid,GELB,"Laufe in die Halle und lade die Pakete in deinen LKW");
    }
    }
    if(trucker_checkpoint[playerid]==3 && truckerroute[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,166.5779,-8.6603,2.1748,9.0);
    trucker_checkpoint[playerid]=4;
    SendClientMessage(playerid,GELB,"Lade das Paket in deinen LKW.");
    }
    if(trucker_checkpoint[playerid]==4 && truckerroute[playerid] == 1)
    {
    if(IsPlayerInRangeOfPoint(playerid,2.0,vehx,vehy,vehz);
    {
    DisablePlayerCheckpoint(playerid);
    trucker_checkpoint[playerid]=5;
    SendClientMessage(playerid,WEISS,"Du hast das Paket in deinen LKW geladen.");
    }
    }

    ehm. Administration StateV ~ Domi

  • IsVehicleInRangeOfPoint(vehicleid, Float:radi, Float:x, Float:y, Float:z)
    Du hast ja new truck = GetPlayerVehicleID(playerid); gemacht, also machst du es dann so:


    IsVehicleInRangeOfPoint(truck , 5.0,vehx,vehy,vehz)

  • Schau dir meinen Code mal genau an,


    das


    new truck = GetPlayerVehicleID;


    ist ganz oben in der 2. Checkpoint abfrage, und das new ist ja dann unten nicht mehr gültig,
    und unten kann ich es ja nicht machen, da er unten nicht mehr in dem Truck sitzt.

    ehm. Administration StateV ~ Domi

  • Ich versteh das Problem jetzt nicht so richtig. Wenn der User hier:
    if(IsTrailerAttachedToVehicle(truck))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,159.4653,-22.3724,2.1729,4.0);
    trucker_checkpoint[playerid]=3;
    SendClientMessage(playerid,GELB,"Laufe in die Halle und lade die Pakete in deinen LKW");
    }
    Aus dem LKW geschmissen werden soll, warum dann die Abfrage noch woanders nutzen?
    Meinst du mit der nähe nicht, ob der LKW in der nähe der Halle ist und der Spieler dann rausgeschmissen wird?

  • Nein Nein, Schau, er wird aufgefordert in die Halle zu gehen, dafür muss er aus dem LKW aussteigen,
    dort läuft er dann später in einen Checkpoint und kriegt ein Paket in die Hand,
    das soll er dann zum LKW bringen, aber dafür muss ich ja wissen in welchem LKW er war,
    und wenn er am LKW ist, soll es eingeladen werden

    ehm. Administration StateV ~ Domi

  • Moin,


    so hab ich es bei mir:


    Irgendwo ins Script :


    forward Float:GetXYInFrontOf(&Float:a, &Float:x, &Float:y, Float:distanc);
    Float:GetXYInFrontOf(&Float:a, &Float:x, &Float:y, Float:distanc)
    {
    x += (distanc * floatsin(-a, degrees));
    y += (distanc * floatcos(-a, degrees));
    return a;
    }


    forward Float:GiveRotation(&Float:a, Float:ap);
    Float:GiveRotation(&Float:a,Float:ap)
    {
    a+=ap;
    if(a <0){a=360-(a*-1);}
    if(a >360){a=0+(a-360);}
    return a;
    }


    Bei OnPlayerExitVehicle :


    if(GetVehicleModel(vehicleid) == 456) // <---- Hier kannst du deine Truck abfrage machen
    {
    GetVehiclePos(vehicleid,vX[playerid],vY[playerid],vZ[playerid]);
    GetVehicleZAngle(vehicleid,vR[playerid]);
    GiveRotation(vR[playerid],180.0);
    GetXYInFrontOf(vR[playerid], vX[playerid], vY[playerid], 5.0);
    }


    Wenn er die Kiste aufnimmt :

    SetPlayerCheckpoint(playerid, vX[playerid],vY[playerid],vZ[playerid],2.0);


    Und Oben Ins Script :


    new Float:vX[MAX_PLAYERS],Float:vY[MAX_PLAYERS],Float:vZ[MAX_PLAYERS],Float:vR[MAX_PLAYERS];



    Mfg


    PullDOwn

  • Damit hast du mich jetzt völlig verwirrt x'D.


    Ich habe ja nur das Problem, das ich herausfinden will, ob er in der Nähe seines Trucks ist ^^

    ehm. Administration StateV ~ Domi

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du hast ja mittels GetVehiclePos(truck,vehx,vehy,vehz); die Koordinaten herausgefunden.
    Das heißt ja, das die X, Y und Z Koordinaten noch auf den Variablen vehx, vehy und vehz liegen.
    Da müsstest du dann nur eine IsPlayerInRangeOfPoint abfrage machen.
    Also
    if(IsPlayerInRangeOfPoint(playerid,Radius,vehx,vehy,vehz))
    Denn Koordinate ist ja Koordinate.

  • Zitat

    Spielt es dabei keine Rolle das ich die vehx vehy und vehz in einer anderen Abfrage abgefragt habe?


    Das ist egal.

    Zitat

    Dann müsste er diese Variablen aber auch global definieren, damit er sie später wieder aufrufen kann


    Nicht unbedingt, es muss nur da definiert sein, wo man es benötigt.

  • new Float:vehx, Float:vehy, Float:vehz;


    Also, wenn ich die Variable Global definiere, funktioniert das?





    if(trucker_checkpoint[playerid]==2 && truckerroute[playerid] == 1)
    {
    new Float:vehx, Float:vehy, Float:vehz;
    new truck = GetPlayerVehicleID(playerid);
    GetVehiclePos(truck,vehx,vehy,vehz);
    if(IsTrailerAttachedToVehicle(truck))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,159.4653,-22.3724,2.1729,4.0);
    trucker_checkpoint[playerid]=3;
    SendClientMessage(playerid,GELB,"Laufe in die Halle und lade die Pakete in deinen LKW");
    }
    }
    if(trucker_checkpoint[playerid]==3 && truckerroute[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,166.5779,-8.6603,2.1748,9.0);
    trucker_checkpoint[playerid]=4;
    SendClientMessage(playerid,GELB,"Lade das Paket in deinen LKW.");
    }
    if(trucker_checkpoint[playerid]==4 && truckerroute[playerid] == 1)
    {
    if(IsPlayerInRangeOfPoint(playerid,2.0,vehx,vehy,vehz))
    {
    DisablePlayerCheckpoint(playerid);
    trucker_checkpoint[playerid]=5;
    SendClientMessage(playerid,WEISS,"Du hast das Paket in deinen LKW geladen.");
    }
    }


    Dabei bekomme ich jetzt 4 Warnings :-/ Kann das so überhaupt funktionieren?


    C:\Users\Dominik\Desktop\LRP\gamemodes\bare.pwn(2234) : warning 219: local variable "vehx" shadows a variable at a preceding level
    C:\Users\Dominik\Desktop\LRP\gamemodes\bare.pwn(2234) : warning 219: local variable "vehy" shadows a variable at a preceding level
    C:\Users\Dominik\Desktop\LRP\gamemodes\bare.pwn(2234) : warning 219: local variable "vehz" shadows a variable at a preceding level
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Warnings.

    ehm. Administration StateV ~ Domi

    Einmal editiert, zuletzt von Dominik ()

  • new Float:vehx, Float:vehy, Float:vehz;


    das musst du auch im Checkpoint wieder rauslöschen, da du es ja jetzt Global definiert hast ;)


    und vorallem musst du die Variable dann so definieren :






    new Float:vehx[MAX_PLAYERS], Float:vehy[MAX_PLAYERS], Float:vehz[MAX_PLAYERS];


    und die Abrage ist dann vehx[playerid] usw

    2 Mal editiert, zuletzt von PullDown ()

  • Und dann funktioniert mein Vorhaben ^^ ?






    GetVehiclePos(truck,vehx,vehy,vehz);



    if(IsPlayerInRangeOfPoint(playerid,2.0,vehx,vehy,vehz))



    jetzt kommt da nen Error

    C:\Users\Dominik\Desktop\LRP\gamemodes\bare.pwn(2235) : error 035: argument type mismatch (argument 2)
    C:\Users\Dominik\Desktop\LRP\gamemodes\bare.pwn(2253) : error 035: argument type mismatch (argument 3)

    ehm. Administration StateV ~ Domi

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