IsPlayerInRangeOfObject ?

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


    Hab ne frage kann man abfragen ob jemand in der nähe eines Objektes ist ?
    Möchte Gerne Wenn ein Polizist eine Sperre errichtet das wenn jemand da dran steht eine Message bekommt



    public OnPlayerSpawn(playerid)
    {


    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    Mpx[playerid] = 1710.8298;
    Mpy[playerid] = -1604.6646;
    Mpz[playerid] = 13.5469;
    SetTimerEx("Timer",3000,true,"i",playerid);


    return 1;
    }



    public Timer(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,Mpx[playerid],Mpy[playerid],Mpz[playerid]))
    if(SpielerHatNeWaffe(playerid))
    SendClientMessage(playerid, 0xFFFFFFFF, "Du Darfst hier nicht seien ");
    return 1;
    }

    Jetzt wird ja Abgefragt ob jemand bei diesen X,Y,Z Punkten ist aber wie mach ich das statt diese Koordinaten ne Message bekommt wenn er z.B bei id 980 ist ?

  • Speicher es doch in eine Array...
    enum sperre
    {
    Float:sx,
    Float:sy,
    Float:sz,
    //....
    }
    new SperreInfo[MAX_DEFINIEREN][sperre];
    und lässt es dann mit einer for-Schleife abrufen (so kannst du es auch leicht speichern nach bedarf)


    L.G.
    heyho
    //edit: Gerade doch gefunden GetObjectPos geht einfacher denn dann fragst du einfach nur ab, ob er in der range ist ;)

  • So kannst es am einfachsten machen:

    stock IsPlayerNearObject(playerid, objectid, Float:range)
    {
    new Float:pos[3];
    GetObjectPos(objectid,pos[0],pos[1],pos[2]);
    if(IsPlayerInRangeOfPoint(playerid,range,pos[0],pos[1],pos[2])) return true;
    return false;
    }

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Kannst es einfach so verwenden:



    IsPlayerNearObject(playerid, OBJEKTID, 5.0); //Der radius ist nun 5.0 um das object das du als "OBJECTID" eingetragen hast

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Hab das jetzt so und kriege ganze Zeit die Message :



    public OnPlayerSpawn(playerid)
    {


    IsPlayerNearObject(playerid, 980, 5.0);
    SetTimerEx("Timer",3000,true,"i",playerid);


    return 1;
    }



    public Timer(playerid)
    {


    if(SpielerHatNeWaffe(playerid))
    SendClientMessage(playerid, 0xFFFFFFFF, "Der hat ne Waffe!");
    return 1;
    }
    stock IsPlayerNearObject(playerid, objectid, Float:range)
    {
    new Float:pos[3];
    GetObjectPos(objectid,pos[0],pos[1],pos[2]);
    if(IsPlayerInRangeOfPoint(playerid,range,pos[0],pos[1],pos[2])) return true;
    return false;
    }

  • Ja Text und an wenn die Message geht wird geändert :D soll so seien das wenn der President irgend wo ist und dann kommt ne Object da hin so ne kleiner mast und dann kriegen die Bullen ne Message und so wird noch verfeinert ist nur grob jetzt ;)


  • Was meinst du mit

    Zitat

    Hab das jetzt so und kriege ganze Zeit die Message :


    ?

    Keine Signatur :3 <3

  • Also wenn Ich spawne krieg ich keine Message ist auch richtig so aber wenn ich mir ne Waffe gebe krieg ich ganze zeit ne Nachricht will die aber nur bekommen wenn ich in der Nähe von dem Object 980 bin .

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hast ja auch nen großen Fehler gemacht...
    mach es so :

    public OnPlayerSpawn(playerid)
    {


    IsPlayerNearObject(playerid, 980, 5.0);
    {
    SetTimerEx("Timer",3000,true,"i",playerid);
    }


    return 1;
    }


    IsPlayerNearObject ist ja schließlich eine Bedingung. :)

    Keine Signatur :3 <3

  • Du darfst das nicht übder die MODEL-ID (980) aufrufen, sondern über die OBJEKT-ID.
    new Objekt; //unter die includes
    Objekt = CreateObject(980, ...);


    IsPlayerNearObject(playerid, Objekt, 5.0);


    Wenn jeder Spieler sein Objekt woanders hat, dann musst du eben noch ein [MAX_PLAYERS] bei "new" hinzufügen, und bei Objekt ein [playerid] jeweils.

  • Hab ich jetzt nicht richtig verstanden :/


    Könntest du mir das vil einfügen oder erklären ?



    public OnPlayerSpawn(playerid)
    {


    IsPlayerNearObject(playerid, 980, 5.0);
    SetTimerEx("Timer",3000,true,"i",playerid);


    return 1;
    }



    public Timer(playerid)
    {


    if(SpielerHatNeWaffe(playerid))
    SendClientMessage(playerid, 0xFFFFFFFF, "Der hat ne Waffe!");
    return 1;
    }
    stock IsPlayerNearObject(playerid, objectid, Float:range)
    {
    new Float:pos[3];
    GetObjectPos(objectid,pos[0],pos[1],pos[2]);
    if(IsPlayerInRangeOfPoint(playerid,range,pos[0],pos[1],pos[2])) return true;
    return false;
    }


    So war es wie muss ich weiter gehen

  • 1.)
    public OnPlayerSpawn(playerid)
    {
    IsPlayerNearObject(playerid, Objekt, 5.0);
    SetTimerEx("Timer",3000,true,"i",playerid);
    return 1;
    }
    Tödlich! Du startest jedes mal einen neuen Timer wenn er spawnt. Entferne den Timer hier, und mach stattdessen bei OnGameModeInit:
    SetTimer("Timer", 3000, 1);


    2.)
    //playerid auch bei "forward" weg machen
    public Timer()
    {
    for(new i=0; i<MAX_PLAYERS; i++) if(SpielerHatNeWaffe(i)) SendClientMessage(i, 0xFFFFFFFF, "Der hat ne Waffe!");
    return 1;
    }
    stock IsPlayerNearObject(playerid, objectid, Float:range)
    {
    new Float:pos[3];
    GetObjectPos(objectid,pos[0],pos[1],pos[2]);
    if(IsPlayerInRangeOfPoint(playerid,range,pos[0],pos[1],pos[2])) return true;
    return false;
    }


    Der Rest so wie ich es gesagt habe.


    Dort wo du das Objekt erstellst:
    Objekt = CreateObject(980, ...);


    Falls du weitere Fragen hast, dann zeig noch wie und wo du das Objekt erstellst.

  • Ich will ja nichts falsches Behaupten aber das er keine if Abfrage hat bemerkt ihr?



    IsPlayerNearObject(playerid, 980, 5.0);
    SetTimerEx("Timer",3000,true,"i",playerid);


    Zu



    if(IsPlayerNearObject(playerid, 980, 5.0)) {
    SetTimerEx("Timer",3000,true,"i",playerid);
    }

  • @[ApL]Arendium: Recht haste! Der Code ist zwar nicht richtig, aber das fehlt in dem ganzen Code natürlich.


    public Timer()
    {
    for(new i=0; i<MAX_PLAYERS; i++) if(SpielerHatNeWaffe(i) && IsPlayerNearObject(i, Objekt, 5.0)) SendClientMessageToAll(0xFFFFFFFF, "Der hat ne Waffe!"); //Wenn Waffe & bei Objekt => Message
    return 1;
    }
    So.