Итак, в первой части я попытаюсь объяснить как сделать простейшего монстра который идет к игроку.
Если суперкоротко то вот все что нужно для этого: 1. Сам монстр с каким-нибудь именем 2. Энтитька aiscripted_schedule тоже с каким-нибудь именем и с такими необходимыми параметрами: Target npc -имя монстра- Ai state to set Set state to COMBAT Schedule to run Set enemy to Goal Entity Goal entity !player 3. И триггер который запускает эту энтитьку одним лишь аутпутом StartSchedule Ну а если надо поподробней, то читайте дальше :)
Надеюсь карта у вас уже есть, или сделать ее не составит труда, так что
этот вопрос я особенно освещать не буду. Я просто сделал браш 512 на
512, и высотой 128 юнитов, опустошил его с толщиной стенок 8 юнитов, и
сделал перегородки так, чтобы будущий монстр не видел игрока, а игрок -
монстра. Монстром будет npc_zombie. Пожалуй на его установке можно сделать вам скриншот ;)
Теперь самое главное.
Энтитька с именем aiscripted_schedule.
Она будет объяснять зомбику куда пойти :).
Чтобы aiscripted_schedule мог пообщаться с зомби, этого самого зомби
надо обозвать. Так что в поле Name у него, впишем что-нибудь вроде
zombie1.
Теперь настройки aiscripted_schedule.
Name zombie1schedule Target npc zombie1 Ai state to set Set state to COMBAT Schedule to run Set enemy to Goal Entity Goal entity !player
Этот !player это очень рулезная команда. Где бы игрок не находился npc поползет к нему.
Но на этом все не оканчивается! Нужно еще как-нибудь заставить aiscripted_schedule командовать. Т.е.
послать ему соответствующий аутпут. Можно это делать при старте карты,
можно при попадании игрока в определенную зону. Мы сделаем сейчас зону.
Сделаем в нужном месте браш покрытый текстурой trigger, и конвертнем
его to entity, а конкретней в trigger_once. Сразу сделаем ему аутпут.
My output named OnStartTouch Targets entities named zombie1schedule Via this input StartSchedule
Самое главное окончено, теперь по идее стоит игроку войти в зону триггера, как монстр им заинтересуется.
Заинтересуется то, заинтересуется, но достаточно коряво и неумело. А
все потому, что мы еще не расставили info_node по ходу его пути. Это
такие квадратики на полу, по которым монстры ориентируются когда
куда-нибудь идут. Я злонамеренно сделал путь своему зомбику непростым,
чтобы максимально искоренить недочеты моей статейки. После расставления
info_node бегал он за мной куда бы я не пошел, а ведь я не очень-то и
старался! :). Вот посмотрите:
Если найдутся такие, кто не разобрался(например не все умеют читать), то вот исходник примера. [TestWalkingZombie1.zip
Часть вторая - облагораживание триггера
Но не будем останавливаться на достигнутом. Во первых - положим оружие, мне надоело бегать беззащитным. Во вторых,
диковато смотрится мой триггер, надо сделать менее тупо. Вполне
прокатит стиль Индиана Джонса :).
В общем вмето триггера сделаем небольшой столбик(у меня получился 8 на
8 со столиком вверху 16 на 16), и конвертнем его в func_button, нажмем
Apply, и убрав все лишние флажки, поставим только Toggle. В настройках сделаем так: Name TrapButton Move Direction(Pitch Yaw Roll) -90 0 0 (Up) Speed 1 Lip... Здесь нужно все правильно расчитать. Высота моего столбика - 52
юнита, и я утопил его в пол на 4 юнита с расчетом что он подымется на
эти 4 юнита и не будет висеть в воздухе. Но чтобы он поднялся именно
на 4 юнита, нужно задать этот самый Lip именно 52(высота)-4(расстояние
которое нужно проехать)=48. Так и напишем. Lip 48 (при условии что у вас столбик именно 52 юнита высотой. Очень аккуратно приладим сверху любимый шотган
сделав ему два аутпута:
1. On Player Pickup zombie1schedule StartSchedule 2. On Player Pickup TrapButton Press Т.е. мы запустили кнопку(она в нашем случае носит декоративный характер), и запустили скрипт запускающий в бой зомби.
Старый триггер можно удалить.
Часть третья - npc_maker
Уже давно пора уметь делать тех, кто делает монстров, да не простых, а таких чтобы шли куда надо.
Я добавил в лабиринт стен, и забабахал в дальнем углу npc_maker. Вот полюбуйтесь.
Его (npc_maker) нужно ставить очень внимательно. Он монстра сделает
там, где сам стоит. И низ монстра будет совпадать с низом npc_maker'а. Если понадобится развернуть его(куда смотрит желтая полоска, туда будет
и монстр смотреть), это делает вовсе не с помощью инструмментов
трансформации, а в настройках npc_maker'а. Самый первый пункт позволяет или в градусах выставить куда ему
смотреть, или просто поелозив мышкой по черному кружку справа вверху в
окошке его свойств, добиться нужного результата. В моем случае нужно
чтобы он смотрел вниз, и получилось у меня - 0 270 0.
Дальше идут остальные свойства: Name npc_2_maker Class name of spawned NPC npc_fastzombie Childrens' Name fastzombie
Теперь создадим(или копируем держа шифт старый) aiscripted_schedule.
Name schedule2 Target NPC fastzombie
Остальные параметры как и у предыдущего aiscripted_schedule.
Теперь создадим цепочку аутпутов чтобы все это заработало.
Для начала возьмем старого зомби. Его аутпут: OnDeath npc_2_maker Enable
Мы включили npc_2_maker после смерти зомби.
Теперь npc_maker и его аутпут: OnSpawn NPC schedule2 StartSchedule
Т.е. при создании монстра запустить скрипт с названием schedule2.
Осталось расставить в новых коридорах info_node, и если я правильно понимаю, наслаждаться.
Ну и для тех кто промотал скроллингом всю статью в поисках чего-нибудь
полезного, но так ничего и не отыскал, а также для тех кто в поте лица
старался но ничего не вышло окончательный исходник. TestWalkingZombie2.zip
Да я вроде понял... Но при стыке острых углов, стены получаются меньше юнита недалеко от стыка. Нет это не критично, можно стены и 64 делать. Но у меня косяков не было, о такой опасности слышу первый раз :).
Я стены делал и меньше - стыки острых углов(><). Эту статью я писал одновременно делая все это. Так что все опробовано, и все было отлично. Но могу переписать если это критично.
По поводу "крашенных" изображений не понял вообще :(.