|
|
Pro přidání zprávy do shoutboxu, musíte být přihlášeni.
|
|
|
|
Master, multisource a env_global
| |
| Zamykání dveří a zakazování/povolování různých entit. Ukažte svým entitám kdo je jejich pán.
Master
Co je to Master (pán)? Je to vlastnost entity, která umožňuje uzamčení (zakázání) dané entity nadřazenou entitou (Masterem). Do tohoto políčka napíšeme jméno entity, která mu bude nadřazená. Masterem můžou být pouze dvě entity a to multisource a game_team_master (který v csku nefunguje správně).
Mastera můžeme vyplnit u všech těchto entit:
tankovité: func_tank, func_tanklaser, func_tankmortar
dvéřité: func_door, func_door_rotating, momentary_door, func_water
spínačové: trigger_counter, trigger_autosave, trigger_gravity, trigger_hurt, trigger_multiple, trigger_once, trigger_push, trigger_teleport,
herní: game_counter, game_counter_set, game_end, game_player_equip, game_player_hurt, game_player_team, game_score, game_team_master, game_team_set, game_text, game_zone_player
tlačné: func_button, func_rot_button, button_target, momentary_rot_button
Master u části z nich ale nefunguje, takže pokud narazíte na nějakou takovou entitu, nahlašte jí v komentářích a já ji vyškrtnu.
multisource
Multisource je nejpoužívanější entita jako Master. Jakmile ji aktivujeme (např. tlačítkem), odemknou se všechny entity, které ji mají uvedenou jako mastera. Jednoduchý příklad se zamykáním dveří:
func_door - Master: zlypan
multisource - Name: zlypan
func_button - Target: zlypan
Dveře jsou na začátku zamčené, protože zlypan čeká na aktivaci tlačítka. Jakmile tlačítko zmáčkneme, dveře se odemknou. Když se tlačátko deaktivuje, opět se zamknou.
Toto funguje ale jen pro tlačítko, které "vyprší". Pokud bychom chtěli spíše spínač - toggle tlačítko, musíme přidat trigger_relay.
func_door - Master: zlypan
multisource - Name: zlypan
trigger_relay - Name: rele, Target: zlypan
func_button - Target: rele
Funguje to úplně stejně jako předtím. Důvod, proč musíme použít relé, je chyba ve zdrojovém kódu.
Poznámka pro Valve: v souboru buttons.cpp na řádce 761 má být else if
Tohle ale není jediná funkce multisource. Jak už název napovídá, umožňuje zpracování více zdrojů. Jednoduchý příklad s odemykáním dveří dvěma tlačítky:
func_door - Master: zlypan
multisource - Name: zlypan
func_button - Target: zlypan
func_button - Target: zlypan
Dveře jsou zamčené dokud nesepneme obě tlačítka naráz. Jakmile se jedno znich deaktivuje, dveře se opět zamknou.
V případě toggle tlačítek musíme opět použít relé.
Další funkce multisource nesouvisí s Masterem, ale také se hodí znát. Jakmile je multisource aktivován vším co ho aktivuje, je možné nastavit Target, který se spustí.
Příklad - máme vysouvací dveře, které jsou aktuálně ve vrchní pozici a jsou podepřeny dřevěnými zábranami, aby nespadly dolů.
func_door - Name: dvere
multisource - Name: zlypan, Target: dvere
func_breakable - Target: zlypan
func_breakable - Target: zlypan
...
Po rozstřílení všech zábran dveře spadnou dolů. (Pozor, toto nebude fungovat v dalším kole!)
Poslední funkcí multisource je možnost číst tzv. Global State - proměnná, která se chová jako takový master pro multisource. Ještě předtím, než se multisource aktivuje a odemkne své poddané (např. nějaké ty dveře) zkontroluje Global State. Pokud je vyplněn a je nastaven na On, multisource se odemkne. Jakmile se Global State změní na Off, multisource se zamkne.
Global State není entita sama o sobě, je to pouze jméno nějaké té proměnné, ze které může číst multisource a trigger_auto (opět má smysl spíše v singleplayeru) a měnit její obsah může env_global.
env_global
Jak již bylo zmíněno, env_global mění obsah určité globální proměnné. Rozebereme si jeho vlastnosti:
Name - klasika, jméno entity
Global State to Set - jméno globální proměnné, kterou budeme nastavovat
Trigger Mode:
> On - vždy nastaví hodnotu na On
> Off - nastaví hodnotu na Off
> Dead - zruší proměnnou
> Toggle - přepne hodnotu z On na Off nebo naopak
Initial State - v kombinaci s Flagem Set Initial State nastaví hodnotu proměnné po startu mapy; výchozí hodnota je Off
Uvedeme si zase nějaký jednoduchý příklad, opět zamykací dveře (s toggle tlačítkem):
func_door - Master: zlypan
multisource - Name: zlypan, Global State Master: zamek
env_global - Name: odemkni, Global State to Set: zamek, Trigger Mode: Toggle
func_button - Target: odemkni
Dveře jsou zamčené, aktivujeme tlačítko, změníme GS, tím se odemkne multisource a naše dveře. Deaktivací tlačítka se dveře opět zamknou. Musíme použít toggle tlačítko, protože normální tlačítko nevysílá signál o deaktivaci (resp. vysílá ho pouze pro multisource).
Env_global se hodí, když chceme mít např. jedno tlačítko pro zamčení dveří a druhé pro odemčení.
func_door - Master: zlypan
multisource - Name: zlypan, Global State Master: zamek
env_global - Name: odemkni, Global State to Set: zamek, Trigger Mode: On
func_button - Target: odemkni
env_global - Name: zamkni, Global State to Set: zamek, Trigger Mode: Off
func_button - Target: zamkni
A aby to náhodou nebylo moc lehké, můžeme mít pro zamčení a odemčení vždy dvě tlačítka.
func_door - Master: zlypan
multisource - Name: zlypan, Global State Master: zamek
env_global - Name: odemkni, Global State to Set: zamek, Trigger Mode: On
multisource - Name: odemykac, Target: odemkni
func_button - Target: odemykac
func_button - Target: odemykac
env_global - Name: zamkni, Global State to Set: zamek, Trigger Mode: Off
multisource - Name: zamykac, Target: zamkni
func_button - Target: zamykac
func_button - Target: zamykac
Global State není globální jen tak, protože to je hezké jméno. Jmenuje se tak kvůli tomu, že hodnota této proměnné se zachovává i přes loadingy do dalších map (v singleplayeru). Pokud tedy dumáte, jak v HL1 udělali Blast Pit, tak je to právě přes env_global.
Zmiňoval jsem entitu trigger_auto, která umí číst Global State, ale není příliš vhodná do multiplayeru. Její (ne)výhoda je, že se aktivuje po startu mapy. V singlu je to super funkce, v multi to může udělat nečekané věci, pokud máme Global State inicializovaný na On.
Příkladová mapa.
Příště se mrkneme na nějaký opravdový oříšek. :) |
|
|
|
|
#1 |
dne 11.07.2013 13:23:05
| ±0
#2 |
dne 17.07.2013 15:08:19
| ±0
|
|
|
Pro přidání komentáře musíte být přihlášený.
|
|
|
|
Nejnovější příspěvky (BRUT)
(Asiimovicek)
(Gyuki)
(nifty)
(Backup)
(boxolop1)
(boxolop1)
(boxolop1)
(Slivka)
(latins)
|
|
|
Hosté on-line: 30
Členové on-line: 0
Registrovaní členové: 949
Nejnovější člen: verseludes
|
|
| |
A u těch dveří, které spadnou po zničení zábran jak to nefunguje v dalším kole - To se dá nahradit game_counterem místo mutisource, když se tam dá počet aktivací podle počtu zábran. A na začátku dalšího kola samozřejmě game_counter_set na reset.