Skript dokáže pracovat pouze v objektu a pracuje i když jste offline, umožňuje interakci s objekty, avatary, ostatními skripty, virtuálním prostředím nebo internetem. Funguje na principu podnět reakce neboli: „co se bude dít, když …“
Stav objektu
Každý objekt může být jen v těchto čtyřech stavech:
- rezznutý
- attachnutý
- jako HUD
- v inventory
Jediný stav kdy skript nereaguje a je pozastaven je v inventáři.
Z čeho se skript skládá
Každý skript obsahuje několik základních elementů
- STATES – stav objektu
- EVENTS – událost
- VARIABLES – proměnné různých typů
- CONSTANTS – konstanty
- FLOW CONTROL – řízení běhu skriptu
- FUNCTIONS – definované kusy kódu
- OPERATORS – znaky operace
Hlavní syntaxe kódu
Kód píšeme do bloků příkazů uzavřených mezi { a }. Každý řádek s příkazem musí končit znakem ;
Text napsaný za //je komentář a skript ho ignoruje, parametry funkcí se uvádí mezi ( a ), pokud je parametrů více, oddělují se čárkou.
Interní SL editor nám pomáhá vše barevně odlišovat.
STATES
jsou různé stavy či situace skriptu
každý skript musí obsahovat alespoň state DEFAULT, který je aktivován vždy jako první při startu (nebo restartu)
příkladem jsou například
- dveře(3 states): default, otevřené, zamčené,
- světlo(2 states): default, rozsvíceno
- teleport(1 state): default
EVENTS
jsou události, které nastaly a které vyžadují reakci (na základě nich se něco spustí)
každý state musí obsahovat alespoň 1 event
příkladem jsou třeba:
dveře: kliknutí na dveře, uplynutí určitého času, příchod ke dveřím
světlo: kliknutí na světlo, detekce času(na základě střídání dne a noci v SL)
teleport: sednutí nebo kliknutí na teleport
Jak State a Event spolu fungují?
Nejdůležitější Events
- attach – objekt byl obléknut či svlečen
- changed – když se změní vlastnosti objektu
- link_message – skripty v primsetu si posílají zprávy
- listen – odchytávání textu z chatu
- money – když objektu někdo zaplatí
- on_rez – při vyndání objektu z inventory
- state entry – při přechodu do state
- timer – po uplynutí určitého času
- touch_start – na objekt někdo kliknul myší
attach(key attached) { příkaz1; příkaz2; … }
key attached obsahuje identifikátor nositele
changed(integer change) { příkaz1; příkaz2; … }
integer change obsahuje, co se na objektu změnilo:
CHANGED_INVENTORY změna inventory objektu
CHANGED_COLOR změna barvy / průhlednosti
CHANGED_SHAPE změna tvaru objektu (ořezání, typ primu)
CHANGED_SCALE změna velikosti objektu
CHANGED_TEXTURE změna textury objektu, glow, rotace textury
CHANGED_LINK změna slinkování, posazení avatara
CHANGED_ALLOWED_DROP změna povolení vhazovat do objektu věci
CHANGED_OWNER změna vlastníka objektu
CHANGED_REGION změna regionu, kde je objekt
CHANGED_TELEPORT pokud byl objekt teleportován
link_message(integer sender_num, integer num, string str, key id) { příkaz1; příkaz2; … }
- Odchytává zprávy zaslané pomocí llMessageLinked
- sender_num obsahuje číslo primu v primsetu, který zprávu poslal
- 3 další proměnné obsahují číslo, řetězec a identifikátor předaný zprávou
listen(integer channel, string name, key id, string message) { příkaz1; příkaz2; … }
- Odchytává zprávy z chatu i skrytých kanálů, definuje se pomocí funkce llListen
- channel obsahuje číslo kanálu, na kterém se zpráva zachytila
- name a id jsou jméno a identifikátor autora zprávy
- message je text odchycené zprávy
money(key id, integer amount) { příkaz1; příkaz2; … }
- id obsahuje identifikátor nositele
- amount obsahuje výši darované částky
on_rez(integer start_param) { příkaz1; příkaz2; … }
- start_param obsahuje speciální parametr při rezzování objektu pomocí skriptu, při vyndání z inventory je vždy nula
state_entry() { příkaz1; příkaz2; … }
- zcela bez parametrů
timer() { příkaz1; příkaz2; … }
- zcela bez parametrů
- nastává po čase určeném pomocí llSetTimerEvent
touch_start(integer num_detected) { příkaz1; příkaz2; … }
- num_detected obsahuje počet detekovaných agentů, obvykle se pracuje s agentem s číslem nula, třeba llDetectedKey(0)