Otwórz menu główne

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.

Spis treści

pętla while

Pętla while jest wykonywana w nieskończoność dopóki warunki się zgadzają.

on script load:
    while true:
        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 pętlują fizyczne rzeczy w grze, np. bloki, graczy
  • takie, które loopują kod określoną ilość razy

Zapętlające obiekty

Pętla loop może loopować

  • graczy
  • bloki
  • bloki, które zostały zniszczone przez eksplozję
  • graczy on-line
  • wartości
  • indeksy
  • ekwipunki
  • światy
  • byty

W takich pętlach zapętlony obiekt jest teraz określany jako loop-player, loop-index, loop-entity itp.

Przykład takiej pętli:

on projectile hit:
    if {gasnica::%projectile%} is true:
        loop blocks in radius 4 around projectile:
        if loop-block is fire:
            set loop-block to air	
            delete {gasnica::%projectile%}
        loop players in radius 4 around projectile:
            extinguish loop-player

Inne pętle loop

Kody można zapętlać określoną liczbę razy, np:

set {_a} to 0
loop 30 times:
    add 1 to {_a}
    broadcast {_a}

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}