В этом учебнике я расскажу, как заставить птицу летать по заданному маршруту. Для начала как всегда создаём комнату с небом (и желательно побольше, чтобы нашему птенчику разлетаться). Потом info_player_start, light_environment, и так далее. Затем создаём нашего гостя выступления – птичку. Их три вида: npc_seagul (чайка), npc_pigeon (голубь) и npc_crow (ворона). Я выбрал голубя. Вот его свойства: Name: pig1 --- имя птички. Target Path Corner: path1 --- точка, откуда она будет стартовать. Ну далее собственно указываем маршрут птицы. Старайтесь делать его как можно изогнутым, что бы полёт был правдоподобным. Это у нас будет ентитя path_corner. В нём нужно указать только имя (path1). Далее, чтоб удобнее было, выделяем этот path, зажимаем shift, и переносим куда нужно следующую точку маршрута. Если нужно, что бы птица летала по кругу, то нужно указать в последнем path_corner имя первого (path1). Ну, а если нужно, чтобы птичка с пёрышками активировалась далек-далеко (для красивого эффекта), то нужно построить браш (ну или кнопку, как хотите) с текстурой trigger, сделать его trigger_once, и в свойствах указать следующее (всё это указывается в ярлыке outputs): My output named: OnTrigger Targets entites named: pig1 Via this input: FlyAway With a parameter override of: path1 (в нём вы сами пишите название первой точки маршрута). В принципе всё. В примере её можно активировать триггером, но если просто подойти к птице, она сама улетит.
Пружинящая доска
1.Как всегда, начнем с создания небольшого помещения под открытым небом. В моем примере я не стал разукрашивать текстурами помещение, а применил оранжевую текстуру dev/dev_measurewall01. Небо окрасил стандартной текстурой - дефолтовой. 2.Построим небольшое возвышение (пьедестал) с простой брашевой лестницей. Ширина пьедестала 112 юнитов, высота -160. 3. Создадим из браша доску для нашего будущего импровизированного трамплина: длина доски 168 юнитов, ширина - 32, толщина - 2. Окрасим ее wood/woodshelf001a. Отправим доску в ентитю func_physbox со свойствами: Name - dsk (ну, типа, доска значит) Material Type - Wood Позиционируем доску на уровне края трамплина. 4. Теперь самое вкусненькое: создадим две точечные ентити phys_hinge, расположим их подобным образом: у обоих phys_hinge в свойстве Entity 1 укажем нашу доску - dsk. Далее, важно: в левом phys_hinge (вид сверху top(x/y) настраиваем Hinge Axis так: если ты не видишь в 2D окне маленького шарика для управления, с помощью которого нужно установить Axis, значит не нажата кнопка в Hammer "Toggle helpers" на панели инструментов Установить Axis надо именно так, как показано на рисунках для первой и второй ентити phys_hinge. 5. Выделяем доску и ентити phys_hinge, подвигаем к пьедесталу так, что бы доска была вплотную к нему. 6. Вуаля! Сохраняем и компилим карту. Наслаждаемся пружинящей доской, которая под твоим весом прогибается.
Создание прозрачной стены с проходящими через неё объектами
Сделайте комнату 512X512X256 и поставте по середине стенку с текстурой metal/citadel_metalwall076, превратие её в func_wall и настройте следующим образом: Name pass_wall; Render mode Color; FX Amount 128. Теперь поставте в одну из частей комнаты info_player_start, prop_physics(модель - models/props_c17/oildrum001_explosive.mdl, имя- phys_obj1), logic_collision_pair, weapon_physgun, env_global(Global State to Set = Super phys gun is enabled, Name = set_supergun) и logic_auto. В другую половину поместите npc_combine_s. В углу нашей комнаты (со стороны combine) поместите npc_combine_camera и направте её "взгляд" в центр комнаты. Теперь создайте у Logic_auto output: OnMapSpawn set_supergun TurnOn Теперь поместите на карту env_fade и настройте следющим образом: Name = end; Duration (seconds) = 30 Hold Fade (seconds) = 30 Fade Color (R G = 0 0 0 Настройте logic_collision_pair следющи образом: Start with collisions disabled = Yes Attachment 1 phys_obj1 Attachment 2 pass_wall Создайте в часте, где игрок, что-нибуть откуда может идти газ. На выходе из этой трубы(или что у вас там) создайте env_steam. Настройте её Pitch Yaw Roll. Настройте её так: Name stream Initial State Off Length of steam jet 180 С остальными настройками можно побаловаться. Теперь осталось настроить combine'а. Создайте слебующие Output'ы: OnDeath stream TurnOn OnDeath end Fade Вот и все! Пример готов.
Полицейский на верёвке
Cтавим aiscripted_schedule: Name SS Target NPC metpol All in radius No AI state to set Set state to COMBAT Schedule to run Set enemy to Goal Entity AND Run to Goal Entity Goal entite !player Ставим на карту npc_metropolice: Name metpol Number of manhacks None Waiting to Rappel Yes Pistols starts drawn Yes Weapon SMG1 Закладка Outputs: My output named OnRappelTouchdown Target entities named SS Via this input StartSchedule Закладка Flags: Галочка должна стоять на пунктах:Simple cops,Fall to ground,Template NPC Теперь ставим npc_template_maker: Name ntm Start disable Yes Num. Of NPCs 1 Frequency 1 Max live NPCs 1 Name of template NPC metpol (этот пункт ОЧЕНЬ важен) Закладка Outputs: My output named OnSpawnNPC Target entities named metpol Via this input BeginRappel After delay in second of 0.25 Ставим trigger_once : Start disable no Закладка Outputs: My output named OnTrigger Target entities named ntm Via this input Spawn Закладка Flags : Галочка должна стоять на пунктах: Client Начинаем разбор полетов.:))) Как только мы наступаем на trigger_once он активизирует npc_template_maker. А npc_template_maker респаунит нашего полицейского и заставляет его спускать на веревке…А энтитя aiscripted_schedule говорит нашему полицейскому,что делать после опускания на землю… Удачи!!!
Добавлено (24.10.2009, 23:04) --------------------------------------------- Эффект пробуждения
1. Создаем небольшую комнату, помещаем в неё свет и info_player_start. 2. Открываем браузер текстур и выбераем текустуру Trigger 3. Сознаем браш высотой в 1 юнит, так что бы он покрывал весь пол. 4. Выделяем этот брашь, жмем Tie to Entity и выбираем trigger_teleport. 5. В свойствах пишем: Name: trigger_knockout_teleport Start Disabled: Yes Remote Destination: destination_knockout_1 6. Во флагах оставлем отмечаным только Сlients жмем применить и закрываем. 7. Жмем Entity Tool и выбираем info_teleport_destination. Устанавливаем ей в центре нашей комнаты на полу. Эта entity нужна для определения места где появится игрок после того как придет в себя. 8. Открываем её свойства и в графу Name вписываем destination_knockout_1 9. Снова жмем на Enty Tool и выбираем prop_dynamic. Устанавливаем её на пол так, что бы одним концом она была в центе info_teleport_destination. для нас очень важно их расположение. 10. Открываем свойства: World Model: models/blackout.mdl Name: blackout blackout.mdl - это невидимая анимированная модель 11. И опять в Entity Tool, выбираем там logic_auto и устанавливаем куда понравится, её расположение не принципиально. 12. Открываем её свойства и в закладке флаги ставим галочку на Remove on Fire. (Энтя удаляется после выполнения своего предназначения) 13. Тепер в Entity Tool выбираем point_viewcontrol. Её место полодение на карте не принципиально. Это камера, вид игрокока переключится на неё. 14. Свойства камеры: Name: blackout_viewcontroller Parent: blackout Hold Time: 10 15. В закладке флагов включаем Freeze Player, Infinite Hold time и Snap to Goal angles. 16. Ставим энтю env_fade. Она отвечает за затемнение экрана игрока, расположение значения не имеет. 17. В её свойствах пишим следующее: Name: fadeIN Duration: 2 Hold Fade(seconds): 2 Fade Alpha: 255 18. Во флагах указываем Fade From Вроде все на месте, теперь надо заставить это работать 19. Выбираем logic_autо и заходим в её свойства. 20. Выбираем Outputs и жмем add: При старте карты "присоединяет" камеру к модели blackout При старте карты включает point_viewcontrol (камеру). При старте катры включает env_fade (затемнение), т.е. вы появляетесь в темноте, затем "открываете глаза". Установка анимации Exit_1 для prop_dynamic. Exit_1 - анимация для выхода игрока из машины, но здесь она тоже подойдет. Задержку я поставил изходя из времяни работы env_fade + одна скунда. 21. Теперь идем в свойства prop_dynamiс в закладку outputs и добавляем: После выполнения анимации акивирует телепорт, который переносит игрока в info_teleport_destination. теперь вы понимаете важность правильной расстановки prop_dynamiс и nfo_teleport_destination, это необходимо для того что бы экран игрока не дернулся после окончания анимации. 22. Убираем мусор. Открываем свойства Trigger_teleport и в outputs добавляем: Убиваем модель blackout она нам больше не ужна. Выключем point_viewcontrol, востанавливаем вид из глаз. Убиваем её Самоубийство Trigger_teleport, его работа выполнена 23. Всё, компилим карту.
Смена уровней (changelevel)
И так, если у вас уже есть несколько карт, вы наверняка задавались вопросом о том, как соединить их. И как вы уже догадались, сейчас я расскажу вам как это сделать. Делаем комнатку размерами 512x256x128, ставим туда свет и info_player_start. Дальше в Entity выбираем info_landmark и помещаем его в центр комнаты, в свойствах пишем Name: landmark
Выбираем текстуру Trigger и делаем брашь делящий комнату в отношении 2:1, жмем Ctrl+T и превращаем его в Trigger_changelevel. В его свойствах пишем: New map name: room2 Landmark name: landmark
Теперь жмем сохранить как => room1, потом компилим, но не запускаем игру. Одна комната есть. Теперь переносим Trigger_changelevel ближе к info_player_start и в его свойствах меняем: New map name: room1
Сохранить как => room2, потом компилим, запускаем в игре map room1. Если игрок пройдет вперед, то уровень поменяется, если снова двинется назад - поменяется обратно. Если вы хотите что бы игрок не мог сменить уровень обратно ( из room2 в room1) то сделайте Trigger_changelevel очень маленьким и подвесьте куда-нибудь к потолку, так что бы гордон не мог до него добраться. Но не в коем случае не удаляйте, без него смена уровней работать не будет! Еще один очень важный момент - Entity info_landmark должна быть на одинаковом расстоянии от info_player_start на обоих картах. Лучший способ будет скопировать кусок из конца одной карты и вставить его в начало другой.