Actor mit verbunderner Playerid abfragen

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
  • Grüße!


    Ich habe meinen Actor an eine Playerid gebunden. Dieser entsteht an der Position an der ein Spieler ihn setzt und dies soll wieder abgefragt werden. Sprich wenn man die Taste "n" drückt soll abgefragt werden ob ein Actor in der Nähe ist und welche ID dieser Actor hat (also die gebundene Playerid des Speilers der den Actor erstellt hat).


    Bisher habe ich es mit einer Schleife gemacht (GetActorPos und eine MAX_PLAYERS Schleife), doch wenn ich dann "n" drücke und in der Nähe bin oder nicht (else) taucht meine Testnachricht unzählige Male auf. Hat jemand eine Idee wie ich das Problem lösen kann?


    Hier die Schleife:

  • edit:
    Zur Info:
    Bei deinem Code wird bei jedem Actor nachgefragt ob er da ist, da dies bis zu 500 sein könnten ist dies sehr viel.
    Daher sollte die Schleife zum einen beim finden unterbrochen werden als auch eine variable auf true gesetzt werden. so kann nach der schleife kontrolliert werden ob ein entsprechender actor gefunden wurde wenn nicht so wird die nachricht ausgegeben.


    Ich empfehle dir in der schleife noch eine abfrage einzuabuen ob der speiler der überprüft wird überhaupt einen actor hat.
    nicht dass in der nähe des 0 Piunkts immer ein Actor gefunden wird.

  • Der Code war syntaktisch falsch, den kannst du gar nicht kompiliert haben können.


    Versuche es so:

    C
    for(new p:p<MAX_PLAYERS;p++)
    {
    	new Float:pX,Float:pY,Float:pZ;
    	GetActorPos(MyActor[p], pX, pY, pZ);
    	if(IsPlayerInRangeOfPoint(playerid, 3.0, pX, pY, pZ)) 
    	{
    		return SendClientMessage(playerid, ROT, "Geld bekommen"); //Bekomme ich unzählige Male
    	}
    }
    SendClientMessage(playerid, ROT, "Niemand da"); //Ebenfalls
  • Wieder um eine Funktion schlauer, großes DANKE!^^



    //Edit @Jeffry:


    Wenn du jetzt die Einreihung meinst ist es hier falsch weil das Forum beim Kopieren nicht mit eingrückt hat. Ansonsten konnte ich mit meinen Zeilen compilen, sonst hätte ich ja nicht herausfinden können das der Text unzählige Male kommt :p


    Wegen des Returns? Muss ich dann bei jeden neuen Befehl ein neues Return davor setzen oder wäre es einfacher dann so ein Break zu nutzen? @[DT]SniperSniper:

    Einmal editiert, zuletzt von Rexo () aus folgendem Grund: Zeigt ja gar keine neuen Beiträge mehr an während man postet...

  • Nein, ich meinte die beiden fehlenden Floats hier:

    C
    new Float:pX,pY,pZ;



    Sowie das Komma anstatt der Klammer nach IsPlayerInRangeOfPoint und die fehlende Klammer am Ende der Zeile hier:

    C
    if(IsPlayerInRangeOfPoint,playerid, 3.0, pX, pY, pZ)

    Beide Fehler hat auch [DT]Sniper in seinem Post.




    Zwecks deiner Frage:
    Du kannst es dir auch so vorstellen:

    Das return beendet die Ausführung der Funktion bzw. des Callbacks.
    Das macht meinstens mehr Sinn, da der gewünschte Code ja ausgeführt wurde. Alternativ kann man es mit goto lösen, dann spart man sich die Variable im Gegensatz zu break:

    Kommt im Endeffekt auf's Gleiche raus.

  • Ach die Tippfehler hatte ich nach dem Abtippen durch die Kopie hier übertragen. Muss ich mal mehr drauf achten.


    Ansonsten danke ich euch beiden. Hab das jetzt soweit verstanden und werde später mal testen ob der bei der Schleife jetzt immer den richtigen Actor raussucht oder nur den letzten Actor. Ansonsten klappt alles bisher.