Überprüfen ob Spieler der in der Nähe ist

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 bin neu hier im Forum.
    Habe jetzt das scripten angefangen und möchte mir einen eigenen RolePlay Server aufbauen.


    Nun zu meiner Frage. Ich möchte ein /showperso [ID] Befehl machen und will dabei überprüfen ob die Person mit der angegebenen ID in der nähe ist.
    Das hab ich bis jetzt. Aber es scheint nicht zu funktionieren. Und meine zweite Frage ist ob man irgendwie das wort ID durch den Namen ersetzen kann.



    dcmd_showperso(playerid, params[])
    {
    if(!strlen(params)) return SendClientMessage(playerid, BLAU, "Nutzung: /showperso [id]");
    new pID = strlen(params);

    if(IsPlayerInRangeOfPoint(playerid, GetPlayerPos(pID)));
    {
    if(IsPlayerConnected(pID))
    {
    SendClientMessage(playerid, BLAU, "Du zeigst dem Spieler mit der ID deinen Perso.");
    }
    else
    {
    SendClientMessage(playerid, BLAU, "Kein Spieler mit der angegebenen ID online.");
    }
    }
    else
    {
    SendClientMessage(playerid, BLAU, "Kein Spieler mit der angegebenen ID in der nähe.");
    }
    return 1;
    }

  • new Float: X, Float: Y, Float: Z;
    GetPlayerPos(playerid, X, Y, Z);
    if(IsPlayerInRangeOfPoint(pID, 3.0, X, Y, Z))


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Und für den Namen anstatt der ID musst du erst eine neue Variable erstellen oben am Command und einen String:


    new name;new string[256];



    dann die Variable definieren: (direkt darunter schreiben)
    name = GetPlayerName(playerid);



    Dann musst du das ganze mit den String senden anstatt einer SendClientMessage, also:




    SendClientMessage(pID,FARBE,string);format(string, sizeof(string), "%d zeigt dir seine Personalien.",name);



    Du musst natürlich FARBE selbst machen. %d ist das, was du nach dem Komma schreibst, in dem Fall "name" - was die PlayerID vom Spieler zeigt, die den Personalausweiß jmd anderem zeigt.
    Die Nachrricht wird dann an die gewünschte ID gesendet.
    Dürfte so richtig sein!

  • Jo hat alles gekplappt bis auf eins, dass musste ich dann selber nachschauen.
    Des musste so lauten sonst gibts einen Fehler:

    new name[16], name2[16], string[128];
    GetPlayerName(playerid, name, sizeof(name));
    GetPlayerName(pID, name2, sizeof(name));

    Trotzdem vielen Dank hat mir auf jedenfall geholfen.


    Noch ne Frage?
    Kann das sein das ID 0 verbuggt ist weil ich ID 0 nicht meinen Perso zeigen kann. Nur einer anderen ID.

  • dcmd_showperso(playerid, params[])
    {
    new id;
    if(!sscanf(params,"d",id)) return SendClientMessage(playerid, BLAU, "Nutzung: /showperso [id]");
    new Float: X, Float: Y, Float: Z;
    GetPlayerPos(id, X, Y, Z);
    if(IsPlayerInRangeOfPoint(playerid,3,X,Y,Z))
    {
    if(IsPlayerConnected(id))
    {
    SendClientMessage(playerid, BLAU, "Du zeigst dem Spieler mit der ID deinen Perso.");
    }
    else
    {
    SendClientMessage(playerid, BLAU, "Kein Spieler mit der angegebenen ID online.");
    }
    }
    else
    {
    SendClientMessage(playerid, BLAU, "Kein Spieler mit der angegebenen ID in der nähe.");
    }
    return 1;
    }


    sollte so gehen wenn du sscanf hast.

  • Du kannst das ganze auch so machen.


    if(!PlayerToPlayer(playerid,pID,10))return SendClientMessage(playerid,COLOR_GRAU,"Der Spieler ist nicht bei dir in der Nähe");
    playerid - ID des Spielers 1
    pID - ID des Spielers welcher in der Nähe von Spieler 1 sein soll
    10 - Die maximale Entfernung


    PlayerToPlayer:
    stock PlayerToPlayer(playerid,pID,range)
    {
    new Float:xpID,Float:ypID,Float:zpID;
    GetPlayerPos(pID,xpID,ypID,zpID);
    if(IsPlayerInRangeOfPoint(playerid,range,xpID,ypID,zpID)) return 1;
    else return 0;
    }

    Nova-eSports Supporter 2012 - 2016