Hast du auch schon immer gedacht, dass die Welt doch nicht so rund ist, wie sie zu sein scheint? Hattest du jeher das Gefühl, dass die Kreiszahl eher quadratisch sein müsste?
Dann bist du genau hier richtig! Blockforum ist die neue Minecraft-Community. Werde Mitglied und teile mit uns Deine Leidenschaft. Wir freuen uns auf dich!

Der Zugriff auf das Forum ist für Gäste eingeschränkt, als registrierter Benutzer würden Dir alle Funktionen (wie z.B. Bildvergrößerung und Downloads) im Forum zur Verfügung stehen.

/testfor und Willkommensnachricht an Spieler

      /testfor und Willkommensnachricht an Spieler

      Ich hab jetzt jede Menge Tutorialtexte von @NeunEinser duchgeackert, aber irgenwie kann ich nicht das umsetzen was ich möchte. :(

      Ziel ist, dass wenn sich ein Spieler in einer bestimmten Gegend befindet, eine Willkommensnachricht im Chat ausgegeben wird.

      Der Befehlsblock steht im immer aktiven Spawn.

      /testfor @p[r=100] erzeugt im Chat "MonaLise gefunden"
      /testfor @p[100,64,100,r=200] erzeugt im Chat "MonaLise gefunden"

      /testfor @p[100,64,100,r=200] {Command:"/say @p hat die Blumen zertreten!"} geht nicht :( , wobei /say @p hat die Blumen zertreten! im Chat und auch im Befehlsblock funktioniert.

      Wo ist der Fehler?

      Grundsätzlich kannst du einfach die Zielauswahl in ein /say Befehl integrieren. /say @a Printet alle Spieler in den Chat /say Die Spieler @a[x=0,y=50,z=40,r=10] sind im Blumengarten würde dann zusätzlich noch den normalen Text hinzufügen.

      In einer Clock würde dir das allerdings den Chat zuspammen. Um generell sowas wie "Spieler XYZ gefunden" zu vermeiden, solltest du einmalig in der Welt /gamerule commandBlockOutput false Ausführen.
      Das weitere Vorgehen hängt von der Spielversion ab. Ich bevorzuge generell die 1.9 Methode, leider ist die 1.9 aber immernoch nicht draußen. Ich gehe daher jetzt mal von der 1.8 aus. Die Methode ist auch 1.9-kompatibel, in 1.9 kann man es aber einfacher machen.

      Also zuerst musst du ein Scoreboard-Wert aufsetzen. das machst du volgend4ermaßen: /scoreboard objectives add Willkommen dummy. Anstelle von Willkommen kannst du jeden anderen Namen nehmen, musst diesen allerdings im Folgendem beibehalten.

      In einer Clock (Klick) folgende Befehle in dieser Reihenfolge ausführen:
      1. /say @a[100,64,100,r=200,score_Willkommen=0] Nennt Spieler nur, wenn ihr Willkommensscore auf 0 ist
      2. /scoreboard players set @a Willkommen 0 Setzt den Score auf 0 zurück
      3. /scoreboard players set @a[100,64,100,r=200] Willkommen 1 Dieser Befehl wird am Ende des Ticks ausgeführt und setzt den Score auf 1, wenn der Spieler in dem Gebiet ist. Im ersten Tick, in dem der Spieler also in dem Gebiet ist, ist also Beim Ausführen von Befehl 1 der Score noch auf 0, erst am Ende wird er auf 1 gesetzt. Das verhindert eine Nachricht in jedem Tick (spam).
      Wenn du mehrere dieser Bereiche hast, musst du leider für jeden ein eigenes objective im Scoreboard aufsetzen.

      NeunEinser schrieb:

      In einer Clock würde dir das allerdings den Chat zuspammen. Um generell sowas wie "Spieler XYZ gefunden" zu vermeiden, solltest du einmalig in der Welt /gamerule commandBlockOutput false Ausführen.
      Danke, sehr guter Hinweis. :)

      Ich werde das heute mal testen.
      Wenn ich es richtig verstanden habe: Wenn der Score auf 0 ist bekommt der Spieler die Willkommensnachricht, dann wird dieser auf 1 gesetzt und somit erhält er keine Nachricht mehr, weil er diese ja schon erhalten hat. Was ja Sinn macht, denn ständig mit Willkommensnachricht zusapammen is ja auch übel. :D
      Nun verlässt der Spieler aber wieder das Gebiet, wie kommt dann der Score wieder auf 0, damit er die Nachricht beim nächsten Besuch wieder erhalten kann?

      Hintergrund ist eigentlich, einem Spieler zu sagen, dass er sich im Gebiet von WEMAUCHIMMER befindet.

      Das jedes Gebiet sein eigenes Scoreboard haben muss ist eig. nicht so schlimm.

      Zum Verständnis:

      NeunEinser schrieb:

      /say Die Spieler @a[x=0,y=50,z=40,r=10] sind im Blumengarten würde dann zusätzlich noch den normalen Text hinzufügen.

      Wenn man dies in einem Befehlsblock eingibt (mit Clock) würde im Chat dann, wenn sich jemand im Radius von 10 Blöcken von den angegebenen Koordinaten befindet, die Ausgabe kommen: "WERAUCHIMMER sind im Blumengarten" ?


      MonaLisa schrieb:

      Nun verlässt der Spieler aber wieder das Gebiet, wie kommt dann der Score wieder auf 0, damit er die Nachricht beim nächsten Besuch wieder erhalten kann?
      Der 2. Befehl resettet vor dem 3. von jedem Spieler den Wert wieder auf 0. Wenn der 3. Befehl den Spieler dann nicht mehr findet, wird der Wert nicht mehr auf 1 am Tickende gesetzt und bleibt somit wieder auf 0 stehen.

      MonaLisa schrieb:

      Wenn man dies in einem Befehlsblock eingibt (mit Clock) würde im Chat dann, wenn sich jemand im Radius von 10 Blöcken von den angegebenen Koordinaten befindet, die Ausgabe kommen: "WERAUCHIMMER sind im Blumengarten" ?

      Ja.
      Die Spieler MonaLise, Micky261 and KnurzelBenny sind im Blumengarten als Beispiel. Und ja, es steht auch wenn das Spiel auf Deutsch gestellt ist "and" statt "und" da, das lässt sich aber nicht vermeiden. Es werden in dem Fall in der Regel aber sowieso einzelne Nachrichten kommen, da es unwahrscheinlich ist, dass der Blumengarten in demselben Tick von mehreren Spielern Betreten wird. (Die Spieler MonaLise sind im Blumengarten)
      Es würde sich in dem Fall anbieten, die Nachricht generell im Singular zu verfassen ;)

      MonaLisa schrieb:

      NeunEinser schrieb:

      In einer Clock würde dir das allerdings den Chat zuspammen. Um generell sowas wie "Spieler XYZ gefunden" zu vermeiden, solltest du einmalig in der Welt /gamerule commandBlockOutput false Ausführen.
      Danke, sehr guter Hinweis. :)

      Was mir gerade noch einfällt: Du solltest auch /gamerule logAdminCommands false ausführen, ansonsten wird dir deine Serverkonsole zugespammt :D

      Klar brauch man Clocks. Der Repeating Befehlsblock ist ja selbst nichts anders als eine Clock.
      Du kannst alte Fill Clocks mit Repeating und Chain Befehlsblöcken ersetzen, und wenn du solltest in der 1.9 auch diese Befehlsblöcke nutzen, da sie einfacher sind (klare einleuchtende Aktivierungsreihenfolge) und auch weniger CPU lastig sind (erzeugen keine Block-Updates)

    Du bist nicht angemeldet.
    Anmelden oder Registrieren