Eventy

Na Sphere existuji nejake objekty (v zasade itemy a chary), kazdy z nich ma nejaka vlastni data (property) a kazdy z nich ma nejake mozne cinnosti ktere se s nimi mohou stat. Pro kazdou tuto cinnost jexistuje nejaka interni defaultni akce, ktera odpovida typu toho objektu.
Takze napriklad u itemu s t_door je defaiultni akce na 2xclick to, ze se dvere otevrou/zavrou.

Tyto akce jde zmenit, bud primo ve scriptu toho konkretniho objektu (k dverim pridas vlastni trigger coz je vlastne call-back funkce, kterou koule zavola pred vlastnim zpracovanim "interne", napriklad:


[ITEMDEF i_door_tezke] TYPE=t_door // timhle rikas jak se chova defaultne sphera k jednotlivym akcim
.....

On=@DClick // na .51a je to ONTRIGGER=DCLICK
if <src.str> < 100
src.message Dvere jsou na tebe prilis tezke
return 1 // 1=ukonci dalsi zpracovani a nic nedelej
else
src.message otevrel jsi tezke dvere
return 0 // 0=skonci uzivatelsky script a pokracuj interni akci
endif

Eventy jsou obecne takove skupiny triggeru, ktere nejsou spojene s konkretnim itemem, navic (podle interni implementace) se deli na dva typy:
EVENTS jsou dynamicke vlastnosti, (seznamy callbacku), ktere jsou soucasti toho ktereho itemu, lze je za chodu pridavat, brat, apod.
TEVENTS jsou naproti tomu eventy prirazene primo definici typu jako celku (typ=itemdef nebo chardef), to znamena pro vsechny objekty daneho typu stejne.

predstav si nasledujici:

[EVENT e_spell_immune] On=@SpellEffect
say Haha!
RETURN 1

[CHARDEF c_kostra_immune] ID=....
NPC=brain_undead
....
TEVENTS=e_spell_immune
...


Tohle ti vyrobi kostlivaky kteri nebudou zranitelni magii. Pokud das na jinou potvoru:
.set events e_spell_immune
tak ta konkretni kostra bude immuni, ale ostatni ne.
zmenit TEVENTS primo pres npc nejde, ale neprimo (do resyncu) pokud bys dal (verze od verze jinak...):
.set typedef.tevents=-e_spell_immune
tak tim seberes vsemkostram ze uz nejsou immuni.

Poznamka: Zalezi hodne na verzi koule, jestli eventy funguji jen na charech nebo i na itemech, jestli kdyz das eventu vic, tak se dostane k rizeni kazdy nebo to pouzije jen prvni z nich (bez ohledu na RETURN 0) apod.

Poslal: lynx - Středa, 21 září, 2005 - 09:10 CET