TF2/Team-Specific Doors:ru

From Valve Developer Community
< TF2
Revision as of 10:42, 11 January 2009 by Sin0d (talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Двери для определенной команды открываются только для какой-либо одной команды, и чаще всего помещаются перед респауном.

Создание Двери респауна

В этом примере мы будем делать дверь для респауна красной команды, которая откроется только для нее.

Энтити filter_activator_tfteam

Для начала, создадим энтити (Shift+E) filter_activator_tfteam. Эта энтити (фильтр) определит, какая команда может открыть дверь. В его свойствах (Alt+Enter) нужно будет присвоить значения Team (т.е. команды), Name (имя) и Filter mode (способ фильтра) соответствующей команде. В нашем примере Team - Red (красная команда), Filter Mode - Allow entities that match criteria, Name - red_filter (название может быть любым, но советую не мудрить с ним, ибо оно нам еще понадобится).

На одну команду нужен только один filter_activator_tfteam (т.е. всего 2: для красной и синей команды). Все ваши какие-либо ограничения (фильтры) могут быть связаны с этими 2-мя filter_activator_tfteam. Месторасположение этих энтити может быть любое (в игре вы их не увидите), но хорошо было бы поместить эти фильтры в местах, в которых вы их не потеряете. Так что поместите наш готовый filter_activator_tfteam в область респауна команды.

Энтити prop_dynamic

Энтити prop_dynamic, которая служит дверью для респауна.

Идем дальше, создайте энтити (Shift+E) prop_dynamic, откройте его свойства Edit -> Properties (Alt+Enter). Жмем двойным щелчком по World Model, далее выделяем вкладку props_gameplay, там находим модель двери door_slide_large_door.mdl жмем ОК - дверь готова.

Энтити func_door

Примерно так должна выглядить func_door.

У нас есть дверь, теперь нужно заставить ее открываться и закрываться. С этим нам поможет func_door - браш-энтити. Для создания этой энтити рисуем браш длиной/высотой/шириной примерно в нашу дверь (ну ширину можно чуть побольше сделать). Красим этот браш в текстуру tools/toolsnodraw (для удобства, введите это в Filter в окне выбора текстур), т.к. это будет невидимая преграда в игре. Превращаем браш в энтитю - Tools -> Tie to Entity (Ctrl+T), выбираем в свойсвах func_door. Но это еще не все. Теперь нам нужно покопаться в свойствах (Alt+Enter) func_door:

Свойство Описание Значение
Name Это имя, для удобства оно не должно быть слишком сложным и большим, оно нужно для взаимодействия с другим объектом. door_red_spawn_01
Speed Это скорость, с которой дверь будет открываться/закрываться. Обычно она колеблится около 400-500. 450
Move direction Это свойство определяет, в каком направлении дверь будет открываться, в нашем случае дверь должна двигаться вверх. Up
Lip Эта опция определяет, сколько юнитов отступа (единицы измерения Hammer) делает дверь при открытии. 3
Delay Before Reset Это значение ставьте -1, чтобы дверь не закрылась, когда кто-либо находится в дверном проеме. Иначе вся команда может просто тупо застрять в дверях респауна или вообще заблокировать дверь. -1

Далее, все в тех же свойствах перейдите во вкладочку Flags func_door. И обязательно уберите галочку с Touch Opens, иначе члены другой команды смогут заходить на вражеский респаун.

Теперь мы должны связать наш func_door с моделью двери. Выберите prop_dynamic модель двери, и в ее свойствах (Alt+Enter) установите в значение Parent имя func_door. В нашем случае, это - door_red_spawn_01.

Энтити trigger_multiple

The trigger_multiple.

The third and final component of the door is a trigger_multiple brush-based entity that will tell the door to open when a player touches the trigger, and then to close.

The trigger should be large enough to handle players approaching from odd angles, and to ensure that the door opens before the player reaches it. You will usually want to stretch the trigger volume so that it can be activated from either side of the door, rather than making two trigger volumes. It should use the tools/toolstrigger material.

Select the Outputs tab in the trigger_multiple's properties window. You will need to add two outputs, which look like this:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnEndTouchAll door_red_spawn_01 Close <none> 0.00 No
Io11.png OnStartTouchAll door_red_spawn_01 Open <none> 0.00 No


Finally, the trigger_multiple's Filter Name property should be set to your filter_activator_tfteam's name to make the door team-specific. In our case, that's red_filter.

That's it, we now have a door that will only open for the Red team!

Download the demo map here: (no link yet)

Теория Дизайна

Placement

In theory, team-specific doors can be placed anywhere, but be very careful as they can greatly alter the balance of a map.

Collision

Doors on the official maps have their prop_dynamic's Collisions property set to Not Solid. This is not required, but may be more efficient. In this case, the door's func_door brush will determine its collision, which is usually accurate enough.


Buildings

It may be necessary to add a func_nobuild brush-based entity in the doorway as well. This prevents engineers placing any buildings like sentries and dispensers in the doorway, which can cause various problems: It would look unrealistic when the door closes on the building, and it would prevent the door closing if you do not have the "Force-closed" property set to "yes". (However that property should always be set to "No" to prevent trapping the player within the door model.)

См. Также..