Item Manipulation Triggers

Z Moriawiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Verze z 12:13, 23. 10. 2007
Tartaros (Diskuse | příspěvky)
(doplneny predpokladane parametry)
← Předchozí porovnání
Verze z 12:31, 23. 10. 2007
Tartaros (Diskuse | příspěvky)
(Systemove triggery - chybejici kus, fuj nemam rad psani neceho znova)
Následující porovnání →
Řádka 42: Řádka 42:
| @LeaveGround || Point4D point || Volan pred opustenim pozice na mape. Pozor - za opusteni se povazuje i presunuti ze zeme na zem. | @LeaveGround || Point4D point || Volan pred opustenim pozice na mape. Pozor - za opusteni se povazuje i presunuti ze zeme na zem.
|- |-
-| ! @Stack || Item addedStack, Item waitingStack, bool toBeDeleted || Volan tesne pred stacknutim dvou +| ! @Stack || Item addedStack, Item waitingStack, bool toBeDeleted || Volan tesne pred stacknutim dvou itemu, na obou z nich, pouze s rozdilnou hodnotou toBeDeleted. V okamziku volani byl addedStack prave polozen na stejne misto jako waitingStack (at uz v kontejneru nebo na zemi), a ceka se na to jestli tento trigger povoli jejich stacknuti. V pripade ze ano, bude addedStack smazan a amount waitingstacku zvetsen. Jadro se pokousi o stacknuti pouze v pripade ze oba itemy maji stejny ItemDef a jsou Stackable.
- +Pokud je item implementaci tohoto triggeru presunut jinam, bude po skonceni opet vracen, pripadne rovnou smazan (protoze pouziti Cont= musi garantovat ocekavany vysledek)
|- |-
|} |}
- 
- 
===Klientske triggery=== ===Klientske triggery===

Verze z 12:31, 23. 10. 2007

Item Manipulation Triggers = triggery ktery se prekvapive poustej pri manipulaci s itemama. Aktualni (a brzo minuly) stav techto triggeru je zalozen na zpetne kompatibilite se sphereserverem. Kdyz sem to delal tak mi na ty kompatibilite zalezelo jaksi vic nez ted :) To mne ale mezitim preslo, takze je cas to udelat po svem a kompletne a lepe.

Ve sphere jsou toto vselijake ty @equip a @pickup a @dropon triggery. Nic proti nim ale jsou lehce nekonzistentni - napriklad @pickup se vola jen kdyz je item zvednut primo klientem, zatimco @equip se vola i pri equipnuti itemu ze skriptu... Tedy spatne se rozlisuje jestli je akce primo provadena klientem nebo az "druhotne" nejakym skriptem. Proto jsem se rozhodl udelat ve mnoziny triggeru - jedny volane pri (resp. tesne pred) kazdym pokusu klienta neco zvednout/polozit/stacknout (a ty budou vesmes Cancellable, a budou mit jasne danyho puvodce, tj. toho hrace), a druhou ktera se bude volat pri kazdy zmene lokace/stavu itemu (a ty vesmes cancellable nebudou, nybrz budou spis "oznamovaci", s tim ze puvodce muze byt nejasny). Tyto dve skupiny se pochopitelne budou castecne prekryvat, resp. doplnovat, a faktem je ze to znamena spustu volani triggeru pri kazdy manipulaci s itemem... Ale dokud se neukaze opak tak si myslim ze si to muzeme dovolit :)


Poradi parametru zde popsane budiz zavazne, tj. plati i pro LScript. V nekterych pripadech muzou byt parametry "obalene" do potomka ScriptArgs, pak budou parametry vypsany jako NazevTridyPotomkaScriptArgs(A param1, B param2, C param3, ...) a znamena to ze v C# lze trigger v Triggergroupe/pluginu deklarovat bud s 2 parametry - z toho druhy bude NazevTridyPotomkaScriptArgs, nebo s vypsanim jednotlivych A param1, B param2, C param3, ...

Vykricnikem oznacene triggery jsou Cancellable (tedy return 1/true z nich zpusobi zastaveni akce/sekvence triggeru)

Systemove triggery

Tyto triggery budiz volany pri kazde zmene vlastnosti Cont nebo P. Pri kazdem volani triggeru plati ze musi byt dodrzovany vsechny bezne invarianty, tj. nikdy neni item nekde "ve vzduchu", ale je presne definovano jestli oznamovana akce (zmena stavu) uz probehla nebo prave probehne.

Fakt ze tyto triggery jsou "oznamovaci" podtrhuje i to ze pokud je trigger nekam premisti, budou opet vraceny na sve misto (uz vidim ten vopruz tohle programovat, co sem si to na sebe vymyslel :) )


Nazev triggeru Parametry Stav pri volani, Popis
@Create Volan po vytvoreni (ne pri loadu!), tesne po umisteni do sveta. Tento trigger sem az tak uplne nezapada, pisu ho sem spise pro uplnost... Potom je zavolan i trigger oznamujici toto umisteni.
@Dupe Item copy, Item model, bool iAmCopy Volan pri duplikaci itemu na vzoru i predloze, pouze s rozdilnym parametrem iAmCopy. iAmCopy = true pokud copy == this. Na duplikatu je volan tesne po @Create, tedy po te co je umisten na stejne misto jako vzor. Potom je zavolan i trigger oznamujici toto umisteni.

Pokud je item implementaci tohoto triggeru presunut jinam, bude po skonceni opet vracen (protoze pouziti Dupe() musi garantovat ocekavany vysledek)

@EnterItem Container cont Volan po vlozeni do cont. V nazvu je "Item", nikoliv "Cont" nebo "Container" aby to nebylo zavadejici (protoze Cont muze bejt i Character...)

Pokud je item implementaci tohoto triggeru presunut jinam, bude po skonceni opet vracen (protoze pouziti Cont= musi garantovat ocekavany vysledek)

@EnterChar Character cont, byte layer Volan po equipnuti na cont.

Pokud je item implementaci tohoto triggeru presunut jinam, bude po skonceni opet vracen (protoze pouziti Cont= musi garantovat ocekavany vysledek)

@EnterGround Point4D point Volan po polozeni na zem. "Enter ground" sice nezni nejprirozeneji ale zda se mi to lepsi nez "LandOnGround" a podobne, a je to aspon konzistentni.

Pokud je item implementaci tohoto triggeru presunut jinam, bude po skonceni opet vracen (protoze pouziti P(...) musi garantovat ocekavany vysledek)

@LeaveItem Container cont Volan tesne pred opustenim kontejneru (tedy plati ze cont == this.Cont).

Pokud je item implementaci tohoto triggeru presunut jinam, je tato sekvence volani triggeru prerusena a bude zacata znova. Nicmene presunu tim nebude zabraneno.

@LeaveChar Character cont, byte layer Volan tesne pred unequipnuti. Pozor - za unequipnuti(a znovuequipnuti) se povazuje i "jen" zmena layeru.

Pokud je item implementaci tohoto triggeru presunut jinam, bude po skonceni opet vracen (protoze pouziti Cont= musi garantovat ocekavany vysledek)

@LeaveGround Point4D point Volan pred opustenim pozice na mape. Pozor - za opusteni se povazuje i presunuti ze zeme na zem.
 ! @Stack Item addedStack, Item waitingStack, bool toBeDeleted Volan tesne pred stacknutim dvou itemu, na obou z nich, pouze s rozdilnou hodnotou toBeDeleted. V okamziku volani byl addedStack prave polozen na stejne misto jako waitingStack (at uz v kontejneru nebo na zemi), a ceka se na to jestli tento trigger povoli jejich stacknuti. V pripade ze ano, bude addedStack smazan a amount waitingstacku zvetsen. Jadro se pokousi o stacknuti pouze v pripade ze oba itemy maji stejny ItemDef a jsou Stackable.

Pokud je item implementaci tohoto triggeru presunut jinam, bude po skonceni opet vracen, pripadne rovnou smazan (protoze pouziti Cont= musi garantovat ocekavany vysledek)

Klientske triggery

Pokud projde @Pickup*, je vysledkem equipnuti itemu do dragging layeru

Pokud projde @Dropon*, je vysledkem unequipnuti itemu z dragging layeru

Kazdy tento trigger ma svoji odpovidajici @Item_* verzi triggeru volanou na charu.

To be continued...


Nazev triggeru Parametry Stav pri volani, Popis
 ! @PickupFromGround Character pickingChar, Point4D point
 ! @PickupFromItem Character pickingChar, Container cont
 ! @PickupFromChar Character pickingChar, Character cont, byte layer
 ! @DropOnGround Character droppingChar, Point4D point
 ! @DropOnItem Character droppingChar, Container cont
 ! @DropOnChar Character droppingChar, Character cont, byte layer