Použití: nositel addEventHandler ["event",{akce po spuštění}]
event: Killed, Hit, Engine,
GetIn, GetOut, Fired,
IncomingMissile, Dammaged,
Gear, Fuel, Init
Eventhandlery umožňují tvůrci mise (od verze 1.85) spustit nějakou akci, právě tehdy,
když se stane určitá událost (angl. event). Všechny eventhandlery (EH) vrací
pole parametrů. V akci po spuštění se na něj odkazuje podobně
jako ve scriptech pomocí _this
. Jako první v poli (_this select 0
) je vždy název jednotky, ke které je EH
přirazen (nositel).
Na jedné jednotce může byt i vícero EH. Většina EH se po smrti nositele stane
nepoužitelnou. EH se dají odstranit příkazy removeAllEventHandlers a
removeEventHandler. V MP zustávají EH na mrtvole, nepřenáší
se na respawnutého vojáka. Ale dá se využít toho, že si respawnutý voják
ponechává svoje jméno.
EH jsou v případech, které ošetřují, výhodnější než běžné
příkazy editoru. Např. se nemusí celou hru monitorovat zda je jednotka živá, zda je
prázdná nadrž apod. Eventhandler se
spustí právě tehdy, když daná situace nastane a navíc poskytne parametry,
které by se jinak těžko zjišťovaly. Např. kdo koho zabil nebo zasáhnul a kam, kdo vystoupil z
určité pozice ve vozidle, kdo jakou zbraní vystřelil.
Ale EH se, do verze 1.91cz, bohužel stávají nepoužitelnými, pokud je mise
uložena a později nahrána. Tato chyba je opravena až ve verzi 1.94beta.
událost: parametr0[typ], parametr1[typ], parametr2[typ] ... |
Spuštění: co spustí akci daného EH |
Popis EH: událost: Killed, Hit, Engine, GetIn, GetOut, Fired, IncomingMissile, Dammaged, Gear, Fuel, Init typ: objekt - objekt ve hře (voják, vozidlo, budova) řetězec - text (ohraničený uvozovkami) bool - true/false (pravda/nepravda) číslo - reálné číslo |
Příklad: nositel addEventHandler ["event",{akce po spuštění}] |
Podmínka editoru: Jaká jednoduchá podmínka by se musela kontrolovat v editoru, aby ošetřila stejnou událost bez použití EH. Takto podmínka je však dost nepružná. Je u ní potřeba znát, nebo zajistit, určitý výchozí stav. EH je díky parametrům pružný. |
Killed: nositel[objekt], zabiják[objekt] |
Spuštění: zabití/zničeni nositele |
Pomocí tohoto EH se dá zjistit, kdo byl vrahem (zabil/zničil) nositele. |
Příklad: kdo zabil rukojmí? rukojmi addEventHandler ["killed",{_this exec "vrah.sqs"}] vrah.sqs
_mrtvy=_this select 0
|
Podmínka editoru: !alive (nositel) |
Hit: nositel[objekt], střelec[objekt], poškozeni[číslo] |
Spuštění: zasažení nositele |
Zjištěni, jak moc střelec poškodil nositele. Za poškozeni se bere jen zásah,
který může jednorázově nositeli způsobit znatelnější zranění (určitě
větši jak 0.016 . Takže na člověka to je jakákoli zbraň, ale u aut (až na trabant) a
lehčí obrněné techniky je ignorována střelba z ručních zbrani. U
těžké techniky jsou ignorovány i granáty. Pokud bude jednotka poškozena zásahem za 0.3, tak ji bude zbývat 0.7 života (příkaz damage). |
Příklad: ohlášeni poraněni vojáka ve skupině: vojak addEventHandler ["hit",{_this exec "zasah.sqs"}] zasah.sqs _ja=_this select 0
|
Podmínka editoru: damage nositel > X |
Engine: nositel[objekt],motor[bool] |
Spuštění: zapnuti/vypnuti motoru u vozidla (nositele) |
Detekce zapnutí (motor=true) nebo vypnutí (motor=false) motoru vozidla. |
Příklad: Spuštění bomby po otočení klíčku (nastartováni motoru) vozidlo addEventHandler ["engine",{_this exec "bum.sqs"}] bum.sqs _vozidlo=_this select 0
|
Podmínka editoru: fuel vozidlo < X |
GetIn: nositel[objekt], pozice[řetězec], nasedající[objekt] |
Spuštění: kdokoli nastoupil do vozidla (nositele) |
Detekuje, zda někdo nastoupil do vozidla a udává na jakou pozici (driver, cargo, gunner) nasednul. Ale už nezahlásí, jestliže člověk uvnitř vozidla změní svoji pozici. Jednoduše proto, že neprovede akci nastoupeni, ale akci změna pozice, pro kterou EH není. |
Příklad: když hráč vleze do tanku jinam, než na pozici střelce, tak je z tanku vyhozen a je mu dána hláska, ať nastoupí jako střelec. tank addEventHandler ["getin",{_this exec "padej.sqs"}] padej.sqs _tank=_this select 0 |
Podmínka editoru: count crew nositel > X |
GetOut: nositel[objekt], pozice[řetězec], vysedající[objekt] |
Spuštění: vystoupeni z vozidla (nositele) |
Obdoba EH GetIn, ale pro vystupováni. Detekuje vystoupeni z vozidla a z jaké pozice (driver, cargo, gunner) se vystoupilo. |
Podmínka editoru: count crew nositel < X |
Fired: nositel[objekt], zbraň[řetězec], hlaveň[řetězec], mód střelby[řetězec], střela[řetězec] |
Spuštění: Když nositel vystřelí. Za výstřel se bere i hozeni granátu či dýmovnice a i položení miny nebo nálože. |
zbraň: název zbraně. Throw pro hození ručního granátu nebo
dýmovnice; Put pro pokládání min a výbušnin hlaveň: většinou shodná s názvem zbraně. Jiná je snad jen u střelby z podvěšeného granátometu. mód střelby: Single, Burst, FullAuto pro ruční zbraně; HandGrenade pro ruční granát; Flare pro vystřeleni světlice střela: název projektilu ve hře. Tzn. ne název zásobníku používaného příkazem addMagazine. Využitelné pro detekci střely pomoci příkazu nearestObject. Pokud se má kontrolovat střelba z techniky, tak je potřeba dát EH technice a ne jejímu střelci. Výstřel provede technika, střelec "jen" mačká spoušť. |
Na přesné zjišťování všech hodnot, zvláště u addonovych
zbrani a techniky, doporučuji přiklad: player addEventHandler ["fired",{hintC format ["%1",_this]}] |
Podmínka editoru: nositel ammo "Y" < X |
IncomingMissile: nositel[objekt], střela[retezec], střelec[objekt] |
Spuštění: vystřelení řízené střely (angl. missile) nebo neřízené rakety (angl. rocket) na zaměřeného nositele. |
Zaměřením se rozumí to, že má střelec cíl v
zaměřovacím rámečku.
Není potřeba na cíl mířit (čtverec doplněn kosočtvercem). V obtížnosti kadet (cadetmode) tento EH detekuje i výstřel raketometčíka, jelikož je mu umožněno automatické zaměřeni raketometu Carl Gustav a AT4. střela: název projektilu ve hře - stejně jako u EH Fired |
Příklad: upozornění na vystřelení rakety (samozřejmě po zaměřeni) na tank tank addEventHandler ["incomingmissile",{_this exec "raketa.sqs"}] raketa.sqs _terc=_this select 0
|
Podmínka editoru: neexistuje |
Dammaged : nositel[objekt], poškozená část[řetězec], poškození části[číslo] |
Spuštění: poškození nějaké části jednotky. Využitelné hlavně u lidských jednotek. |
Poškozená část je třeba u džípu "pravý zadní tlumič". Jeho
poškození může mít hodnotu 0 až 1. Podobně tak jako poškození
celé jednotky. Ale
úplně zničený tlumič (hodnota 1) neznamená úplně zničený džíp. Ten je jako celek
poškozený třeba jen na hodnotu 0.2. Ale u vojáka je kompletní poškození
hlavy ("hlava",1) zároveň jeho smrti. EH dammaged zůstává aktivní i po smrti jednotky. Nepoužitelným se stává, až když jsou všechny části nositele zničeny (poškozeny na uroveň 1). |
Příklad: objeví se hláška, když je voják zasažen do hlavy vojak addEventHandler ["dammaged",{_this exec "headshot.sqs"}] headshot.sqs _vojak=_this select 0
|
Podmínka editoru: neexistuje |
Gear: nositel[objekt], podvozek[bool] |
Spuštění: zatáhnutí nebo vysunuti podvozku u letounu. |
Když letoun podvozek vysune, parametr podvozek je nastaven na true. Naopak, když letoun podvozek zasune, nastaví se hodnota false. |
Příklad: Ohlášení vysunuti/zasunuti podvozku letadlo addEventHandler ["gear",{_this exec "podvozek.sqs"}] podvozek.sqs _let=_this select 0
|
Podmínka editoru: neexistuje |
Fuel: nositel[objekt], nádrž[bool] |
Spuštění: vyprázdnění nádrže vozidla (nádrž=false), nebo změna z nulového stavu nádrže (nádrž=true) tzn. do prázdné nádrže se dostalo palivo |
Příklad: vozitko addEventHandler ["fuel",{_this exec "dno.sqs"}] dno.sqs _vozidlo=_this select 0 |
Podmínka editoru: fuel nositel == 0 |
Init: nositel[objekt] |
Tento EH pravděpodobně slouží tvůrcům addonů - jednotka (model) ho musí nějakým způsobem podporovat.Funkci má asi podobnou jako init řádek u jednotky. |
Příklad spuštění (jen má domněnka): podporovaná jednotka objeví na mapě (začátek mise, createUnit, respawn) |
nositel removeEventHandler ["event",index] |
Odebere nositeli jeden určitý EH. Index je celé číslo, které vrací addEventHandler. Po odebrání se indexy všech ostatních EH stejného typu, které mají vyšší index než ten odebraný, sníží o jedničku. |
Příklad: přidání třech EH a uložení jejich indexů do globálních proměných eh1, eh2, eh3 (0, 1, 2) eh1=nositel addEventHandler ["killed",{akce1}] a později odebrání druhého EH: nositel removeEventHandler ["killed",eh2] Po odebrání EH2, se index prvního EH nezmění (0), ale index třetího EH se sníží o jedna (2->1) a je potřeba snížit o jedna proměnou eh3, protože v ní zůstává stále původní hodnota (2). Použití už neplatné hodnoty v eh3 sice nevyvolá chybu, ale také se třetí EH nevymaže (protože už se fakticky stal druhým). |
nositel removeAllEventHandlers "event" |
Odebere nositeli všechny EH daného typu. |
Použité zdroje:
Operation Flashpoint - Resistance: Scripting Commands (comref_102002) z www.flashpoint1985.com
angl. sekce editace
EventHandler tutoriál od Aliho z www.koflex.cz/ruprt/
sekce tutoriály
Vytvořil Brt. Srpen 2003