Trigonometrisches Problem

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,


    ich sitze momentan an einem kleinen, dennoch nicht unbedingt unkomplizierten System, und bin nun auf eure Hilfe angewiesen. Hier eine Skizze, die ich im folgenden erklären werde.

    Legende
    Blaue Fläche = Grund-Polygon
    3D-Körper = Polygon-Area auf eine bestimmte Z-Höhe justiert (erstellt mithilfe von Y_Less' include "y_areas")
    Strichmännchen = Spieler mit Blickrichtung nach links (roter Pfeil)
    Grüner Punkt = imaginärer Punkt (soll später ermittelt werden)


    Nun möchte ich folgendes anstellen.
    Der Spieler soll eine Aktion (nehmen wir mal z.B. einen CMD namens "/aktion") nur dann ausführen können, wenn sein FacingAngle zum Gebiet und der Abstand zur Zone sich zwischen 0.0m und 3.0m bewegt. Dazu ist dieser grüne Punkt da, der sowohl FacingAngle als auch den Abstand feststellen soll. Ist der grüne Punkt also außerhalb des Polygonkörpers, so soll die Aktion verweigert werden.


    Wie stelle ich das am besten an?


    Danke!

  • also soll er nicht in der area stehen?
    was du machen kannst ist die Entfernung vom Mittelpunkt zunehmen und mit IsPlayerInRangeOfPoint ein Doppelkreis machen


    also


    vom mittel Punkt zum 1 Aussenpunkt und vom mittel Punkt zum 2 Aussenpunkt und dies denn mit einer if-bedingung abfragen


    Wegen der FacingAngle musst du mal bei google schauen. dafür gibt es auch eine Berechnung

    Mit Freundlichen Grüßen
    Whitetiiger aka. Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.

  • Für was gibt es das streamer plugin damit kannst du eine zone erstellen und mit der passenden funktion IsPointInDynamicArea abfragen ob die position in der Zone ist.
    Bei Facing angle würde ich bleiben , solch eine funktion wurde schon öfters hier releast




    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));


  • GetPlayerFrontCameraVector setzt ja voraus, dass die Kamera auch in die Blickrichtung schaut, also, dass FacingAngle mit dem Kameravektor übereinstimmt. Ich möchte das allerdings unabhängig von dem Blickwinkel der Kamera machen.


    Wie genau baue ich jetzt Prototypes Funktion ein?
    CMD:fish(playerid, params[])
    {
    new Float:pPos[4];
    GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
    GetPlayerFacingAngle(playerid, pPos[3]);
    //...
    return 1;
    }

  • Wenn ich es richtig verstanden habe, müsstest du einfach nur ein Dreieck aus 2 Eckpunkten des Polygons und dem Standpunkt des Spielers errechnen, die Höhe des Dreiecks ergibt dann den Abstand zwischen Wand des Polygons und dem Spieler.
    Mit FacingAngle kannst du dann noch errechnen, ob der Spieler auch auf das Polygon schaut.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Also, beim besagten System handelt es sich um ein Angelsystem. Im Zusammenhang mit Polygons war das erste, worauf ich gestoßen bin, y_areas. Ich wusste nicht, dass "CreateDynamicPolygon" auch existiert, danke für den Hinweis! ;)


    Momentan sieht mein CMD so aus:
    CMD:fish(playerid, params[])
    {
    new Float:pPos[4];
    GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
    GetPlayerFacingAngle(playerid, pPos[3]);


    pPos[0] += (3.0 * floatin(-pPos[3], degress));
    pPos[1] += (3.0 * floatin(-pPos[3], degress));


    if(!IsPointInDynamicArea(River[0], pPos[0], pPos[1], pPos[2])) return SendClientMessage(playerid, -1, "Kein Anglergebiet in der Nähe.");
    else
    {
    //Code...
    }
    return 1;
    }

  • "floatin" gibt es nicht.


    Für alle deine Polygone:
    CMD:fish(playerid, params[])
    {
    new Float:pPos[4];
    GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
    GetPlayerFacingAngle(playerid, pPos[3]);


    pPos[0] += (3.0 * floatsin(-pPos[3], degrees));
    pPos[1] += (3.0 * floatcos(-pPos[3], degrees));


    for(new i=0; i<sizeof(River); i++)
    {
    if(IsPointInDynamicArea(River[i], pPos[0], pPos[1], pPos[2]))
    {
    //Code...
    return 1;
    }
    }
    return SendClientMessage(playerid, -1, "Kein Anglergebiet in der Nähe.");
    }



    Manyula: Ja, da hast du Recht. Kommt davon wenn man einfach nur kopiert (ich). :D

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry () aus folgendem Grund: degress -> degrees

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