+ Antworten
Ergebnis 1 bis 6 von 6
  1. #1
    Förster Avatar von Prace
    Registriert seit
    18.06.2016
    Beiträge
    23

    Spielereien mit /function

    Heyo zusammen!

    Ich versuche mich gerade -leicht verspätet- mit dem function-Befehl auseinanderzusetzen, um mal die Commandblöcke loszuwerden und hoffentlich auch einige Laggs loszuwerden. Keine Ahnung ob die Commandblöcke tatsächlich mehr Leistung ziehen, vielleicht weiß da ja jemand Bescheid?
    Jedenfalls wollte ich als erstes einen Timer erstellen, der jeden Tick um 1 hochzählt (also 20 Ticks pro Sekunde), um anhand diesen Wertes dann Events abzurufen. Mein bisheriges Vorgehen:

    1. Timer-Dummy-Objective erstellt und in der sideBar anzeigen lassen. Dieser Score soll hochzählen.

    2. hallo.mcfunction-Datei erstellt in \data\functions\Test\ mit Inhalt:
    1. scoreboard players add @a Timer 1
    2. execute @a[score_Timer_min=100] function test:hallo2
    3. hallo2.mcfunction-Datei erstellt mit Inhalt:
    1. scoreboard players set @a Timer 0
    2. say Hi
    4. "/gamerule gameLoopFunction test:hallo" im Chat eingegeben, damit die Function durchgängig läuft.

    Tatsächlich zählt der Timer-Score nun an der Seite hoch, jedoch wird er weder resettet, noch wird die Chatnachricht "Hi" angezeigt. Wo liegt mein Fehler? Sind wie gesagt gerade meine ersten function-Versuche, würde in diesem Thread mir gerne ein paar Grundlagen aneignen, um daraus dann ein vernünftiges Projekt auf die Beine zu stellen.

    Würde mich sehr über Kommentare freuen.

  2. #2
    2 + 2 is 4, minus 1 that's 3 quick math Avatar von entereloaded
    Registriert seit
    13.05.2013
    Beiträge
    76
    Okay jetzt hab ichs , beim execute Befehl fehlen die Tilden, d.h. probiers mal mit
    execute @a[score_Timer_min=100] ~ ~ ~ function test:hallo2
    Geändert von entereloaded (10.11.2017 um 20:39 Uhr) Grund: selbstgespräche weggemacht

  3. Mag ich Prace mag diesen Beitrag
  4. #3
    Förster Avatar von Prace
    Registriert seit
    18.06.2016
    Beiträge
    23
    Zitat Zitat von entereloaded Beitrag anzeigen
    ...
    Vielen Dank, hat geklappt. Oh man, nach rund nem Jahr wieder einzusteigen ist echt nicht so leicht wenn man die ganzen Sonderregeln beachten muss. Mal gucken, wann das nächste Problem aufkommt. =P Werde dann einfach mal den Thread hier als Sammelthread verwenden.

    Edit: (10.11.2017 um 22:29)

    Und schon eröffnet sich das nächste Problem. Ich habe die hallo.mcfunction-Datei nun durch eine loop.mcfunction-Datei ersetzt, mit der ich alle anderen Functionen starte - macht die Sache erheblich übersichtlicher. Testweise möchte ich eine Textnachricht im Chat erscheinen lassen, wann immer ein Zombie stirbt - was bisher auch reibungslos klappt.

    Nun würde ich jedoch gerne direkt im Anschluss einen neuen Zombie spawnen lassen, und hier wirds jetzt schwierig. Ich hätte hierfür zwei Ideen:

    1. der neue Zombie spawnt zufällig in einem Umkreis von 10 Blöcken um den Spieler herum an einer nicht genauer definierten Stelle.

    2. der neue Zombie spawnt genau 10 Blöcke vom Spieler entfernt in dessen Blickfeld. Es war zwar irgendwie möglich, die jeweilige Rotation des Spielers zu testen und dann alle 360 möglichen Szenarien abzudecken, jedoch bleibt dann noch immer das Problem, dass man den Zombie spawnen möchte. Arbeitet man mit X Y Z berücksichtigt dies nicht die Blickrichtung des Spielers ..

    Hätte am liebsten eine Möglichkeit, dies ohne sichtbare Zusatzentities zu lösen. Am ehesten würde mir da zwar eine fliegende Feuerkugel einfallen, die vom Spieler ausgehend geworfen wird, nur sind die Partikel da leider immer sichtbar.

    ==> Generell, was ist denn die beste Möglichkeit für einen function-Zufallsgenerator, wenn man beispielsweise eine Zahl zwischen 1 und 10.000 oder 5 und 50, ... haben möchte?
    Geändert von Prace (10.11.2017 um 23:42 Uhr)

  5. Mag ich entereloaded mag diesen Beitrag
  6. #4
    2 + 2 is 4, minus 1 that's 3 quick math Avatar von entereloaded
    Registriert seit
    13.05.2013
    Beiträge
    76
    du scheinst dich ja ganz gut Auszukennen

    1. Der /spreadplayers Befehl geht jetzt auch mit relativen Koordinaten, das hatte ich glatt schon wieder vergessen, sollte auch wieder mehr mit Befehlen rumspielen.

    2. Das mit der Blickrichtung geht in der derzeitigen Version von Minecraft Java Edition immer nur etwas umständlich, wenn du nach Minecraft Raycasting findest du viel gute Möglichkeiten.

    Wenn du sagst ohne zusätzliche Entities wird das ganze n paar mehr Befehle brauchen, jenachdem wie genau das ganze sein soll. Das wichtigste hierfür sind die Selektoren ry & rym.
    (Mega stylische sehenswerte Variante von DrLorgan https://www.youtube.com/watch?v=O70K3Nz-_cc)
    Das einfachste Raycasting das ich kenne, bei dem der Spieler nix machen muss, ist das "Boat Raycasting" das ist ganz nett.

    Soweit ich das mitbekommen habe, sollte in den neuen Snapshots auch irgendwann das ^ bei Koordinaten eingeführt werden, welches es in PE/Bedrock meines wissens schon gibt, und die Blickrichtung beschreibt (vgl ~ is Koord.-Achsen Richtung). In 17w43b geht das scheinbar nicht.

    Also den "Zufallsgenerator" den ich am öftesten in Maps gesehen habe ist spreadplayers von nem Armorstand mit druckplatten drunter, das ist wohl das einfachste, um einen "zufälligen" Befehl auszuführen. Die Befehle könnten natürlich auch verschiedene Scoreboard Werte setzen.
    Für einen Scoreboard "Zufallsgenerator" gibt es viele Möglichkeiten, eine die leicht selber nachzumachen ist, einfach die letzte "Zufallszahl" mit nem festen hohen Faktor zu multiplizieren oder zu quadrieren oder so und dann Modulo der maximalen Zahl (vom "Zufallsbereich") zu nehmen die man will. Das ganze wird aber wahrscheinlich nicht jede Zahl treffen, außer man macht's richtig #MATHE. Ähm ja soll heißen so ne richtig einfache Antwort hab ich jetzt auch nicht parat. Also sei kreativ und überleg' dir wie du's machen würdest
    Geändert von entereloaded (12.11.2017 um 17:14 Uhr)

  7. Mag ich Prace mag diesen Beitrag
  8. #5
    Förster Avatar von Prace
    Registriert seit
    18.06.2016
    Beiträge
    23
    So, habe jetzt mal auf den 1.13er Snapshot gewechselt, damit die Technik nicht direkt zukunftsuntauglich ist. Joa, und anscheinend ist nun - wie du erwarten - alles erstmal kaputt. Mit /gamerule gameLoopFunction test:loop kann ich die Function nicht mehr als Startloop für alle anderen Funktionen verwenden, die Function wird nicht mehr ausgeführt .. wieso auch immer. Der Chat gibt auch keinerlei Rückmeldung. Alle anderen Befehle wurden nun auf /execute verlegt, muss also ebenfalls umgeschrieben werden. Hat wer ne Ahnung wie ich den Loop erstmal wieder zum Laufen kriege? Hab in der Wiki nichts finden können ..

    Edit: Wow, anstatt einen neuen Kommentar hier zu hinterlassen wurde nun anscheinend der alte Kommentar überschrieben. Yep, heute werden Technik und ich definitiv keine Freunde mehr "
    Geändert von Prace (14.11.2017 um 01:03 Uhr)

  9. Mag ich entereloaded mag diesen Beitrag
  10. #6
    2 + 2 is 4, minus 1 that's 3 quick math Avatar von entereloaded
    Registriert seit
    13.05.2013
    Beiträge
    76
    Zitat Zitat von Prace Beitrag anzeigen
    So, habe jetzt mal auf den 1.13er Snapshot gewechselt, damit die Technik nicht direkt zukunftsuntauglich ist. Joa, und anscheinend ist nun - wie du erwarten - alles erstmal kaputt. Mit /gamerule gameLoopFunction test:loop kann ich die Function nicht mehr als Startloop für alle anderen Funktionen verwenden, die Function wird nicht mehr ausgeführt .. wieso auch immer. Der Chat gibt auch keinerlei Rückmeldung. Alle anderen Befehle wurden nun auf /execute verlegt, muss also ebenfalls umgeschrieben werden. Hat wer ne Ahnung wie ich den Loop erstmal wieder zum Laufen kriege? Hab in der Wiki nichts finden können ..

    Edit: Wow, anstatt einen neuen Kommentar hier zu hinterlassen wurde nun anscheinend der alte Kommentar überschrieben. Yep, heute werden Technik und ich definitiv keine Freunde mehr "
    guck mal hier rein, da findest du eine gute Zusammenfassung der vorläufigen Änderungen:
    https://www.reddit.com/user/Dinnerbo...ly_preview_of/
    Ich hab das selber noch nicht ausprobiert, aber schau mal ob du das hinbekommst
    (Die relevanten Stellen im Text:
    )
    mit /reload werden jetzt auch diese Datapacks neu geladen.

+ Antworten