Steht der Spieler hinter dem Fahrzeug?

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
  • Hi leute,
    ich stehe vor einem kleinen Problem.


    Ich bastel gerade an meinem Kofferraum-System rum um das ganze noch ein wenig zu optimieren.
    Jetzt frage ich mich aber, wie ich abfragen kann, ob der Spieler hinter dem Fahrzeug steht.


    Habe das ganze schon mehrmals im Kopf durchgekaut aber bin auf keine Lösung gekommen.
    Habt ihr da eine Idee oder vielleicht sogar ein Codesnipel? Im Thread hab ich jetzt gerade auf die schnelle nichts gefunden.




    MfG Firer

  • Die Logik dahinter ist mir bekannt, nur hapert's an der Umsetzung.
    Wenn mir jemand ein Codesnipsel geben und es mir erklären könnte wäre ich dankbar.


    Oder mir das ganze zumindest Umsetzungsweise erklären.
    Sprich welche Funktionen und Rechnungen ich wie benutzen möchte.
    Das wäre mir am liebsten, weil ich ja immer noch etwas lernen will.


    Ich danke dir trotzdem für die Zeichnung.
    Das verdeutlicht mein "Anliegen" und gibt eine bildliche darstellung.

  • Hmm.. dann müsste man mit hilfe der Rotation eine Vertikale Linie erzeugen, wie in der Zeichnung von Dreamcatcher.
    Und genau da hapert es bei mir...


    //EDIT:
    Ich habe mir Gedanken dazu gemacht.
    Eigentlich müsste zu der Rotation 180 adiert werden.
    Dann hätten wir schonmal die Richtung, in die das Fahrzeug-Heck zeigt.


    Jetzt aber meine Frage:
    Wie kann ich jetzt auf basis dieser Rotation einen Punkt hinter dem Fahrzeug festlegen, und diesen abfragen?

    Einmal editiert, zuletzt von Firerfan () aus folgendem Grund: Informationen über meinen Fortschritt hinzugefügt

  • Mein Ansatz wäre folgender: Wenn Angle (Rotation) des Spielers weniger als 10 von dem des Autos abweicht und die des Autos annähernd 180 (größer als 170 / kleiner als 190) ist, dann ist es wahr (1) ansonsten falsch (0).


    http://deadinat0r.tk/uploads/skizze6109499.png



    stock isPlayerAtTrunk(playerid, vehicleid) {
    new Float:rotation[2];
    GetVehicleZAngle(vehicleid, rotation[0]);
    GetPlayerFacingAngle(playerid, rotation[1]);


    if(rotation[0] >= 170 && rotation[0] <= 190 && floatadd(roatation[1], 10) >= rotation[0] || floatsub(roatation[1], 10) <= rotation[0]) return 1;
    return 0;
    }


    Ein anderer Interessanter Ansatz wäre dieser.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

  • Hmm... Dead, danke für deine Hilfe aber dein Beispiel hilft mir nicht wirklich weiter.
    Es vergleicht nur, ob die Rotation des Fahrzeuges der des Spielers ähnelt.


    Somit kann der Spieler auch vor dem Fahrzeug stehen.
    Solange er ich die selbe Richtung guckt wie das Fahrzeug, kann er den Befehl nutzen.



    Das andere Beispiel aus dem sa-mp.com Forum hat mir auch nicht wirklich weiter geholfen.
    Dabei wird nur überprüft, ob der Spieler (Laut Karte) Südlich vom Fahrzeug steht.
    Hatte ich vorher schon mal ausprobiert.




    MfG Firer

  • dead hat doch einen Thread mit einer Funktion gepostet:

    stock IsPlayerInFrontVehicle(playerid,vehicleid,Float:radius,Float:vehiclelength)
    {
    new Float:x,Float:y,Float:z,Float:a;
    GetVehiclePos(vehicleid, x, y, z);
    GetPlayerFacingAngle(vehicleid, a);
    x += (vehiclelength* floatsin(-a, degrees));
    y += (vehiclelength* floatcos(-a, degrees));
    return IsPlayerInRangeOfPoint(playerid,radius,x,y,z);
    }

    Die Fahrzeuglänge müsstest du nur Negativ angeben...

  • Das andere Beispiel aus dem sa-mp.com Forum hat mir auch nicht wirklich weiter geholfen.
    Dabei wird nur überprüft, ob der Spieler (Laut Karte) Südlich vom Fahrzeug steht.
    Hatte ich vorher schon mal ausprobiert.

    Habe ich genau so gemacht.
    if(!IsPlayerInFrontVehicle(playerid,veh,2.0,-4.0))



    MfG Firer
    //EDIT


    Ich habe mich gerade noch mal mit meinem Vater zusammengesetzt.
    Eigenlicht müsste es ja folgende formel sein:


    Code
    aX = Abstand * sinus(fahrzeugrichtung+180)
    aY = Abstand * cosinus(fahrzeugrichtung+180)


    Allerdings kommt dabei der Selbe raus, wie bei der unteren Formel.
    Die Formel stimmt, die Umsetzung MÜSSTE stimmen.. Wieso funktioniert es nicht?



    //EDIT2:
    Denkfehler von mir :P
    stock IsPlayerBehindVehicle(playerid,veh)
    {
    new Float:vcoord[3]; GetVehiclePos(veh,vcoord[0],vcoord[1],vcoord[2]);
    new Float:pcoord[3]; GetPlayerPos(veh,pcoord[0],pcoord[1],pcoord[2]);
    new Float:vangle; GetVehicleZAngle(veh,vangle);
    vcoord[0] += (-3.0 * floatsin(vangle,degrees));
    vcoord[1] += (-3.0 * floatcos(vangle,degrees));
    if(IsPlayerInRangeOfPoint(playerid,2.0,vcoord[0],vcoord[1],vcoord[2])){return 1;}
    else{return 0;}
    }


    //EDIT3:
    Habe die Funktion nun zum laufen bekommen.
    Der Ansatz war richtig nur SA-MP zickt da rum:
    - Gelöscht weils immer noch buggt X( -


    //EDIT4:
    Kann es sein, dass Sinus und Cosinus in SA-MP nicht richtig ausgelesen wird?
    Wenn ja, hat jemand die Formel zum berechnen?
    Wäre da sehr dankbar da ich aus google nicht schlau werde und es einfach nicht hinhauen will...


    //EDIT5:
    So, funktioniert nun. Ich habe einfach den (Co)Sinus aus dem Negativwert der Rotation ermittelt und es hat funktioniert.

    6 Mal editiert, zuletzt von Firerfan ()