suche funktion

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 suche gerade eine funktion die chekt ob der spieler in einer gewissen zone ist.
    ähnlich wie isplayerinrangeofpoint
    nur mit eckigen zonen (also zwischen 2 koords)


    beispiel:
    xy gibt befehl /z ein


    ist er in der zone passiert etwas
    sonst nicht.


    ich hoffe ihr wisst was ich meine.
    mfg


    //edit
    wie kann ich machen das etwas passiert wenn ich taste drücke?

  • Hallo fenestro!


    Könntest Du nochmal bitte detailiert erklären, was Du genau meinst und
    was Dein Befehl genau beinhalten soll?
    Denn ich meine zu glauben, dass es für Dein Problem folgende Lösung aus der Wiki gibt:



    GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
    {
    new Float:a;
    GetPlayerPos(playerid, x, y, a);
    GetPlayerFacingAngle(playerid, a);
    if (GetPlayerVehicleID(playerid))
    {
    GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
    }
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));
    }
    Ich kann mich in Bezug auf Deiner, für mich undeutliche Aussage auch irren, daher bitte
    ich Dich einfach nochmal um eine korrekte Antwort... - Danke!


    Freundliche Grüße - 4#Future | Fake

  • Hier Schnuckelchen


    stock IsPlayerInArea(playerid,Float:minX,Float:minY,Float:maxX,Float:maxY)
    {
    new Float:pX,Float:pY,Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ);
    if(pX >= minX && pX <= maxX && pY >= minY && pY <= maxY) return 1;
    else return 0;
    }


    Die Suchfunktion beißt übrigens nicht.

  • spieler tenestro geht in den bereich zwischen x=15 y=14 und x= -15 y= -14 (nur ein bsp.) und gibt einen befehl ein,nun wird er zb. gehealt.
    wenn er nicht in diesem berreich ist passiert garnichts


    ich hoffe ihr versteht mich


    /edit:


    bist du dir da sicher?
    ne im ernst
    wusste nicht wonach ich suchen sollte

    Einmal editiert, zuletzt von fenestro ()

  • Guten Abend fenestro!


    Achso, nun ist mir alles klar und ich kann dir mit folgender Funktion helfen...


    forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
    public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    return 1;
    }
    }
    return 0;
    }
    Anzuwenden ist diese folgender Maßen:


    > if(PlayerToPoint(10, playerid, x, y, z)) <


    - die 10 steht für den Radius, in dem der Spieler sich zur Koordinate befinden muss
    - playerid ermittelt natürlich den Spieler, genauer dessen ID
    - x, y und z sind die Koordinaten, bei denen sich der Spieler befinden soll


    Du machst dann einfach eine normale "if-Abfrage" und return true, steht dafür das alles geklappt
    hat und ansonsten passiert einfach nichts.


    if(PlayerToPoint(10, playerid, x, y, z))
    {
    //Aktion die passieren soll... z.B.
    SetPlayerHealth(playerid, 100);
    return 1;
    }

    Freundliche Grüße - 4#Future | Fake

    Einmal editiert, zuletzt von 4#Future ()

  • :pinch:
    Also pass auf, du packst das hier ganz unten in dein Script:



    stock IsPlayerInArea(playerid,Float:minX,Float:minY,Float:maxX,Float:maxY)
    {
    new Float:pX,Float:pY,Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ);
    if(pX >= minX && pX <= maxX && pY >= minY && pY <= maxY) return 1;
    else return 0;
    }

    Und dann kannste Abfragen benutzen wie z.B:
    if(IsPlayerInArea(playerid,4Koords des gebietes))
    {
    //wenn ja passiert das und das
    return 1;
    }