Autor: Restor
Název: WE - Rozprava o MUI, co to je? Ako na to?
Jeden krátky spôsob ako spraviť z klasického triggeru "MUI trigger"
Priebežne to doplním o periodic event triggery.
Najprv treba čo to vedieť o premenných, moj služobne mladší kolega rednečisko spravil celkom schopný tutorial na premenné, takže bez pochopenia, o čom sú premenné, ďalej nečítajte.
Čo je to MUI? Nie, nie je to žiadny ďalší programovací "jazyk", ako sa mi jedno decko z tejto stránky snažilo nakecať, a ešte kecalo, že mui s editorom nemá nič spoločné, a že som vlastne noob, keď sa tým zaoberám, ale pravda je taká, že problematika MUI je dosť podstatná v multiplayerových mapách. Presný význam tejto skratky v angličtine neviem, ale značí to niečo ako Možnosť viacnásobného používania triggeru v jeden okamih.
Tažko sa to v teórii vysvetľuje, zoberme si krátky príklad, máme trigger
E:unit - starts the effect of an ability
C:ability being cast = TRALALA
A:set Casting unit = CASTER
set Target of ability being cast = TARGET
wait 5 sec
create special efect XY above CASTER
create special efect YZ above TARGET
Tí chytrejší pochopili, že CASTER a TARGET sú premenné. Fajn, všetko funguje, do tej doby kým v tom intervale tých 5 sekúnd nejaká iná jednotka nezačaruje rovnaký spell, vtedy sa logicky stane to že premenné CASTER a TARGET sa prepíšu na tú druhú dvojicu jednotiek, a po uplynutí pôvodných 5 sec. vzniknú špecial efekty u druhej dvojice, a po tých ďalších 5 sec, znova u tej druhej, skrátka, všetko po waite by sa týkalo poslednej jednotky, ktorá by naštartovala tento trigger.
Vyzerá to možno zložito, ale je to logicky veľmi jednoduché, tuto rozpíšem spôsob, ako to riešim ja (tých spôsobov je samozrejme viacej, ale tento je taký najľahší)
Vytvoríme si štyri premenné
CASTER-typ unit, a premenná bude array
TARGET-typ unit, a premenná bude array
DUMMY -typ unit, a premenná bude array
NUMBER-typ integer (pociatocna hodnota 0)
Máme tu názov dummy, tí ktorí vedia, o čo ide, môžu preskočiť k ďalšiemu odstavcu. Dummy je jednotka, ktorá ma abilitu locust (nedá sa označiť), je neviditelná, nezraniteľná, ma priesvitný model (dá sa hocikde stiahnuť), a pathing má nulový. Skrátka, je to také nič. Práve takú unitu vytvoríme.
A urobíme trigger
E: Unit- Starts the effect of an ability
C: ability being Cast = TRALALA
A: Unit: Create 1 Dummy for Player 1 blabla
Unit: Add a 5.00 Generic expiration timer to (Last Created unit)
Set DUMMY(NUMBER)=Last Created Unit
Set CASTER(NUMBER)=Casting Unit
Set TARGET(NUMBER)=Target unit of ability being cast
Set NUMBER = NUMBER+1
ale teraz ešte druhý trigger
E: Unit - Dies
C: Unit type of dying unit equal to Dummy
A: For each (Integer A) from 1 to 8192, do Actions
If
Dying Unit Equal to DUMMY(INTEGER A)
Then
Create special efect XY above CASTER(Integer A)
Create special efect YZ above TARGET(Integer A)
Else
Do nothing (netreba davat, len aby bolo jasno)
No a to je celé, čo to robí? Namiesto waitu sme tam zadali čas za aký zomrie tá dummy unita, a vtedy sa spustí druhý trigger, a môžeme vidieť, že hodnota NUMBER sa vždy zvyšuje, a kedže premenné CASTER,DUMMY,TARGET sú na tej hodnote závislé, tak nedochádza k prepisovaniu premenných.
V druhom triggery sa pomocou Integer A zistí, aké to NUMBER vlastne tieto tri premenné CASTER,DUMMY,TARGET majú. To sa zistí cez dying unit, a tým sa môžu premenné CASTER a TARGET použiť so správnym arrayom (to je to NUMBER), a budú to tie isté jednotky, ktoré naštartovali pôvodný trigger pred 5 sekundami.
Ešte samozrejme je tu otázka, prečo je tu to číslo 8192, je to najvyššia hodnota, akú integer môže nadobudnúť, a preto, keď ju už nadobudne, treba ho resetnúť naspäť na nulu.
Prvý triger upravíme takto do finálnej podoby
E: Unit- Starts the effect of an ability
C: ability being Cast = TRALALA
A: If NUMBER=8192, then Set NUMBER=0, Else nothing
Unit: Create 1 Dummy for Player 1 blabla
Unit: Add a 5.00 Generic expiration timer to (Last Created unit)
Set DUMMY(NUMBER)=Last Created Unit
Set CASTER(NUMBER)=Casting Unit
Set TARGET(NUMBER)=Target unit of ability being cast
Set NUMBER = NUMBER+1
Čiže teoreticky ani tento trigger stále nie je čistý MUI (žeby sa dal používať mnoho jednotkami naraz bez straty funkčnosti), ale dá sa použiť iba 8192 jednotkami v rámci tých 5 sekúnd, ale to je podľa mňa dostatočný počet, ktorý sa asi v žiadnej hre nenaplní. (dá sa samozrejme aj toto obísť, použitým ďalšej premennej, a bude to 16384, ale netreba)
Takže MUI je vlastne to, ak sa trigger dá použivať viackrát v jednom časovom intervale.
P.S
Trigery kde sú eventy Periodic Event, alebo akcie "check every X sec of time" sa robia kapánek odlišne, tí schopnejší si to vedia už spraviť sami, pre ostatných to napíšem keď sa mi bude chcieť.
P.P.S
Triggery bez waitov (a bez periodic eventov a vôbec bez časových hovadín) su MUI sami o sebe. Tam nešaškujte, a nehajte to tak, ako to je.