Pętle

Z wiki.skript.pl
Przejdź do nawigacji Przejdź do wyszukiwania

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}