Pętle
Pętle umożliwiają cykliczne wykonywanie kodu określoną liczbę razy, do momentu zajścia pewnych warunków lub w nieskończoność. Skript umożliwia pętlowanie wybranych bloków, wartości, graczy, liczb lub pozwala na loopowanie kodu określoną ilość razy. Pętle dzielimy na dwie grupy:
- Skończone, wykonujące kod określoną liczbę razy
- Nieskończone, wykonujące kod przez cały czas działania skryptu.
- Warunkowe, wykonujące kod, dopóki podany warunek będzie spełniony.
Pętla while
Pętla while jest wykonywana w nieskończoność dopóki warunek jest prawdziwy (zwróci true).
on script load: while 1 is 1: broadcast "Nie zapomnij dodać ""wait 10 minutes"" :)" wait 10 minutes
Kiedy skrypt zostanie wczytany pętla while zostaje uruchomiona, ponieważ while true zawsze się zgadza. Wtedy co 10 minut zostaje ogłoszona wiadomość.
Pętla loop
Pętle loop można podzielić na dwie kategorie:
- Takie, które powtarzają kod podaną ilość razy.
- Takie, które powtórzą wszystkie wartości listy.
Zapętlające obiekty
Pętla loop może loopować wszystkie skriptowe typy np:
- Graczy
- Itemy
- Teksty
- Liczby
- Bloki
W takich pętlach zapętlony obiekt jest określany zawsze loop-value, a jego indeks jako loop-index ale można używać (zależnie od typu obiektów w liście) np:
- loop-number, gdy zapętlane wartości są liczbami.
- loop-integer, gdy zapętlane wartości są liczbami całkowitymi.
- loop-player, gdy zapętlana wartość jest graczem.
- loop-block, gdy zapętlana wartość jest blokiem.
- loop-item, gdy zapętlana wartość jest przedmiotem.
Przykłady takich pętli:
command /liczby [<text>]: trigger: loop (0.2, 0.12, 2, 3, 12 and 2): send "Liczba: %loop-number%"
command /itemy [<text>]: trigger: loop all items in player's inventory: send "%loop-item%"
Inne pętle loop
Kody można zapętlać określoną liczbę razy, np:
loop 30 times: broadcast loop-number
Periodical
Pętle te są nieskończone i wykonują się co pewien czas, określany przez timespan. Mimo skuteczności wcale nie są polecane, ponieważ mogą obciążać serwer, jeżeli periodical jest co 1 tick i zapętla wszystkich graczy (zakładając, że gra ich dużo).
every 1 tick:
every 30 seconds:
every 1 minute:
every 1 real day:
Przykład:
every 1 minute: set {_msg} to random integer between 1 and 3 if {_msg} is 1: broadcast coloured {@msg1} else if {_msg} is 2: broadcast coloured {@msg2} else if {_msg} is 3: broadcast coloured {@msg3}