Otwórz menu główne

Zmiany

Pętle

Dodane 2519 bajtów, 02:19, 27 paź 2019
Utworzono nową stronę "'''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..."
'''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.

== pętla while ==
Pętla '''while''' jest wykonywana w nieskończoność dopóki warunki się zgadzają.
<pre>on script load:
while true:
broadcast "Nie zapomnij dodać "wait 10 minutes" :)"
wait 10 minutes</pre>

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:
<pre>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</pre>

=== Inne pętle loop ===
Kody można zapętlać określoną liczbę razy, np:
<pre>set {_a} to 0
loop 30 times:
add 1 to {_a}
broadcast {_a}</pre>

== 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).

<code>every 1 tick:</code>
<code>every 30 seconds:</code>
<code>every 1 minute:</code>
<code>every 1 real day:</code>

Przykład:
<pre>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}</pre>
112
edycji