Суббота, 20.04.2024, 13:36
Under sky of Half-Life
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта

Категории каталога
На движке Valve Source [29]
На движке Half-Life 1 [1]

Главная » Статьи » Статьи по мэппингу » На движке Valve Source

Учим монстра ходить + npc_maker

Учим монстра ходить

Часть первая - минимум.

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

Если суперкоротко то вот все что нужно для этого:
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

Категория: На движке Valve Source | Добавил: JOHN (17.08.2008)
Просмотров: 4891 | Комментарии: 8
Всего комментариев: 8
8 monster  
отличная статья

7 JOHN  
Да я вроде понял... Но при стыке острых углов, стены получаются меньше юнита недалеко от стыка.
Нет это не критично, можно стены и 64 делать. Но у меня косяков не было, о такой опасности слышу первый раз :).

6 monolife  
>Я стены делал и меньше - стыки острых углов(><).
Я про стены говорил, а не про стыки (>опустошил его с толщиной стенок 8 юнитов)

5 JOHN  
Битые ссылки на картинки ликвидированы, спасибо!

4 JOHN  
P.S. Я еще и файлы - примеры выложу если у меня такое право появится...

3 JOHN  
Я стены делал и меньше - стыки острых углов(><). Эту статью я писал одновременно делая все это. Так что все опробовано, и все было отлично. Но могу переписать если это критично.

По поводу "крашенных" изображений не понял вообще :(.


2 plazmer  
Ровно половина крашенных изображений! Пожалуйста, исправь.
Да - точно, неутомимый Джон! Продолжай в том же духе! smile
Статья будет очень интересной.

1 monolife  
>опустошил его с толщиной стенок 8 юнитов
на сколько я помню, внешние стены должны быть не менее 16 юнитов, иначе будет глобальная дырка:)

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Логин:
Пароль:

Поиск

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

© 2024, MonoLife