123 lines
3.6 KiB
Markdown
123 lines
3.6 KiB
Markdown
# BEHAVIOUR
|
|
|
|
Procedura. Wykonuje kod zapisany w polu `CODE`, opcjonalnie obwarowany warunkiem wskazanym w polu `CONDITION`. Argumenty wywołania dostępne są wewnątrz kodu jako `$1`, `$2`, …, opisane szerzej w [Argumenty procedur](../engine/scripts.md#argumenty-procedur).
|
|
|
|
## Pola
|
|
|
|
### CODE
|
|
|
|
```
|
|
STRING CODE
|
|
```
|
|
|
|
Treść procedury — blok kodu w nawiasach klamrowych, zgodny ze składnią opisaną w rozdziale [Skrypty](../engine/scripts.md#bloki-kodu).
|
|
|
|
Przykład:
|
|
|
|
```
|
|
BEHGOTOTITLE:CODE={BEHSETSCENE^RUN();G_SARCADESCENE^SET("EGIPTLEJ");BEHCSSTART^RUN();}
|
|
```
|
|
|
|
### CONDITION
|
|
|
|
```
|
|
STRING CONDITION
|
|
```
|
|
|
|
Nazwa zmiennej typu [`CONDITION`](CONDITION.md) lub [`COMPLEXCONDITION`](COMPLEXCONDITION.md), używana przez metodę [`RUNC`](#runc) oraz przez [`RUNLOOPED`](#runlooped) jako warunek przerwania pętli. Jeżeli pole nie jest ustawione, metody działają bezwarunkowo.
|
|
|
|
## Metody
|
|
|
|
### RUN
|
|
|
|
```
|
|
mixed RUN([mixed param1, ..., mixed paramN])
|
|
```
|
|
|
|
Wykonuje kod procedury. Przekazane argumenty są dostępne w kodzie jako `$1`, `$2`, …. Wartość zwracana to wynik wyrażenia [`@RETURN`](../engine/scripts.md#operatory-skoku) w ciele procedury, lub `NULL`, jeżeli `@RETURN` nie został wywołany.
|
|
|
|
**Parametry**
|
|
|
|
- `param1, …, paramN` — argumenty procedury (opcjonalne, dowolnego typu).
|
|
|
|
**Zwraca**: wartość zwrócona przez procedurę lub `NULL`.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
__LOAD_SETTINGS__^RUN();
|
|
BEHSELECTOBJ^RUN(VARITER);
|
|
BEHADDITEM^RUN(SOBJECT|SPARAM0, VARITER);
|
|
BEHENTERRABBIT^RUN("ANNHILL0", -1);
|
|
```
|
|
|
|
### RUNC
|
|
|
|
```
|
|
mixed RUNC([mixed param1, ..., mixed paramN])
|
|
```
|
|
|
|
Wywołuje procedurę pod warunkiem, że warunek wskazany w polu `CONDITION` jest spełniony. Jeżeli `CONDITION` nie jest ustawione, zachowuje się jak [`RUN`](#run). Argumenty i wartość zwracana — jak w `RUN`.
|
|
|
|
**Parametry**
|
|
|
|
- `param1, …, paramN` — argumenty procedury.
|
|
|
|
**Zwraca**: wartość zwróconą przez procedurę lub `NULL` (również, gdy warunek nie był spełniony).
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
BEHREMOVEMENUITEM^RUNC("CHOMIK");
|
|
BEHREMOVEMENUITEM^RUNC(VARSTRINGTEMP);
|
|
BEH_HERO_FINISHED_0^RUNC();
|
|
```
|
|
|
|
### RUNLOOPED
|
|
|
|
```
|
|
void RUNLOOPED(INTEGER start, INTEGER length)
|
|
void RUNLOOPED(INTEGER start, INTEGER length, INTEGER step, [mixed extraArg1, ..., mixed extraArgN])
|
|
```
|
|
|
|
Wywołuje procedurę w pętli `for` z licznikiem przekazywanym jako `$1`. Dodatkowe argumenty (od czwartego włącznie) trafiają do procedury jako `$2`, `$3`, … . Jeżeli pole `CONDITION` jest ustawione, jego warunek jest sprawdzany przed każdą iteracją — jeżeli warunek nie jest spełniony, pętla się kończy.
|
|
|
|
Pętla jest równoważna następującemu pseudokodowi:
|
|
|
|
```
|
|
for (int i = start; i < start + length; i += step) {
|
|
// wywołanie procedury z $1 = i, $2..$N = extraArgs
|
|
}
|
|
```
|
|
|
|
Jeżeli `step` jest pomijany lub przekazany jako `0`, używana jest wartość `1`. Operator [`@BREAK`](../engine/scripts.md#operatory-skoku) w ciele procedury kończy pętlę `RUNLOOPED` (ale nie procedurę wywołującą).
|
|
|
|
**Parametry**
|
|
|
|
- `start` — wartość początkowa licznika.
|
|
- `length` — liczba iteracji do wykonania (`startVal < endVal` to `startVal + length`).
|
|
- `step` — (opcjonalnie) krok licznika. Domyślnie `1`.
|
|
- `extraArg1, …, extraArgN` — (opcjonalnie) dodatkowe argumenty przekazywane do procedury.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
BEHSHOWMENU^RUNLOOPED(0, ARRAYWARSZTATMENUPRZEDMIOTY^GETSIZE());
|
|
BEHSHOWPIONEK^RUNLOOPED(1, 9);
|
|
BEHINITZASLONAX^RUNLOOPED(0, 7, 1, "[80*$1]");
|
|
```
|
|
|
|
## Sygnały
|
|
|
|
### ONINIT
|
|
|
|
Wywoływany w momencie inicjalizacji procedury.
|
|
|
|
### ONDONE
|
|
|
|
Wywoływany po zakończeniu wywołania procedury.
|
|
|
|
### ONSIGNAL
|
|
|
|
Wywoływany po otrzymaniu sygnału (zobacz [Zdarzenia i sygnały](../engine/events.md#onsignal)).
|