SED3.5 — Учимся делать спауны врагов

on

SED3.5 — Учимся делать спауны врагов

Всем привет!

В этой статье я обьясню, как делать и настраивать спауны монстров.
В SED3 спаун делался почти так же как и в SED1, благо там были и тачфилды, и триггеры. В SED3.5 роль тачфилдов выполняет обьект Detector Area, а триггеры вообще вырезали, оставив обьект Script. Ну, мне, честно, скрипты кажутся куда более удобными, чем триггеры. 

Собственно, сами спауны делаются так:
1. Вытаскиваем на карту обьект Legged Character (лежит в папке Characters).
Я для примера взял безголового ракетчика.
(Puppet params — Rocketman.ep, character behavior — Rocketman.cb)

2. Ищем строку Spawner, щелкаем по стрелочке, выбираем New > CSpawnerProperties.
Мы создали спаунер ракетчиков, осталось лишь его настроить.

3. Настраиваем спаунер — параметры Total number, Number in group и прочее, они вам должны быть знакомы по SED1. Также, в SED3 можно настроить зону, где будут спауниться враги. Для этого щелкаем по Spawn formation, выбираем, к примеру, Rect formation (Прямоугольник), настраиваем зону. 

В результате получаем нечто вроде этого

4. Наш спаун готов! Теперь, чтобы его активировать, нам понадобится Script. Ставим его на карту из списка обьектов (Entity list), скрипт лежит в папке Logic. 

5. Щелкните по этому оранжевому кубику дважды, слева откроется пустое окно, где пишется сам скрипт. 
Скрипты пишутся на языке Lua.

6. Спаун осуществляется так: вводится переменная, которой присваивается обьект CSpawnerEntity, и ей посылается метод SpawnSimple() (Кроме SpawnSimple(), есть другие варианты). Чтобы присвоить нашей переменной обьект CSpawnerEntity, выделите его в редакторе и, удерживая ctrl+alt+shift, перетащите на переменную. Она должна подсветиться зеленым. Теперь, поставив после нее оператор «:», выпадет список доступных методов 

Методы спауна:
 SpawnSimple() — простой спаунер, будет спаунить врагов пока не иссякнет их  количество. 
 SpawnSimpleNow() — то же, что и SpawnSimple(), но игнорирует ожидание перед  первым спауном (Initial delay) 
 SpawnGroup() — спаунит врагов группами.
 SpawnMaintainGroup() — спаунит до заполнения группы.
 SpawnOne() — спаунит только одного врага
В итоге у вас должно получиться, к примеру,
 enemy:SpawnSimple()
Запустите уровень (клавиша T), и полюбуйтесь на результат.

Теперь усложним спаун, добавив какое-либо условие, и добавив еще парочку спаунеров (каких угодно, я поставил еще гнааров впереди и клиров по краям)

Нарпимер, поставим на карту DetectorArea. Вытаскиваем его из папки Tools, настраиваем. 
Получаем примерно вот что:

Теперь, в нашем скрипте допишем ожидание активации этого поля (под активацией подразумевается проход игрока через него). Обьявим новые переменные, для новых спаунеров (gnaar и kleer) и DetectorArea(detector). 
Дописываем в скрипте:
 Wait(Event(detector.Activated)) 
  gnaar:SpawnMaintainGroup() 
  Wait(Delay(1)) 
  kleer:SpawnGroup()

Функция Wait приостанавливает выполнение скрипта до выполнения
каких-либо условий. В первом случае это ожидание события (функция Event()) активации детектора (detector.Activated). Оператор «.» служит в скриптах для проверки событий. Во втором случае условие — функция Delay(1), т.е. ожидание.

Итак, теперь при проходе через наш DetectorArea активируется спаунер гнааров, и, спустя секунду, спаунер клиров.
В качестве условия можно выбрать также и подбор предмета.
К примеру, поставим на карту Devastator (поставив и настроив Generic Item),
обьявим в скрипте переменную devastator, присвоив ей эту пушку. 
Допишем в скрипт
 Wait(Event(devastator.Picked))
И после этого активируем еще какой-нибудь спаунер, к примеру, как на этом скрине:

Примечание: если взять предмет до того как выполнится функция Wait(Delay(1)), функция Wait(Event(devastator.Picked)) выполняться не будет 

Существует аналог функции Wait() — функция On(), которая не приостанавливает выполнение скрипта, а выполняет блок кода после On() только когда выполнится условие

Т.е. в нашем случае, с помощью функции On() переписать эту часть скрипта надо так:

 On(Event(devastator.Picked)),
   function()
   scorp:SpawnMaintainGroup() 
   end,

На этом все. Удачи!

Комментарии   

№ 18  |  16.12.2012  |  0  
у меня нету SpawnSimple()…

Ответ Цитата

№ 13  |  21.12.2011  |  0  
У меня только один вопрос где, его скачать?

Ответ Цитата

№ 14  |  22.12.2011  |  0  
В библиотеке жми на «Все игры», в меню выбери «Инструменты», редактор где то там

Ответ Цитата

№ 15  |  22.12.2011  |  -1  
У меня No-Steam пиратка

Ответ Цитата

№ 16  |  22.12.2011  |  -1  
И в Cracked Steam не удается скачать (Сервера заняты)

Ответ Цитата

№ 17  |  22.12.2011  |  +2  
Ну так и на что ты надеялся с пираткой?..
SED3, насколько я знаю, как-то можно стянуть на пиратку через Стим… поплясав с бубном…

Ответ Цитата

№ 12  |  19.12.2011  |  +2  
+5 Статья класс! :D Разобрался, все получилось!! СПАСИБО! :D

Ответ Цитата

№ 11  |  17.12.2011  |  0  
Небольшая неточность, обнаружил только сейчас. Функция On() должна запускаться внутри конструкции RunHandled(), т.е., например

Листинг кода:

RunHandled(
      On(Event(object.event)),
      —что-нибудь
      end,
)


Но в этом случае надо дополнительно усложнить скрипт. Для простых спаунов, не свзяывайтесь с RunHandled().

Ответ Цитата

№ 10  |  15.12.2011  |  0  
Спасибо тебе !

Ответ Цитата

№ 9  |  12.12.2011  |  0  
Поучусь делать врагов в SED3.0

Ответ Цитата

№ 8  |  12.12.2011  |  0  
однако тяжело!
МОЛОДЕЦ!!

Ответ Цитата

№ 7  |  11.12.2011  |  0  
Отлично! Cool

Ответ Цитата

№ 6  |  11.12.2011  |  0  
спасибо, Artifica1 очень помогаешь с serious sam 3 editor :)

Ответ Цитата

№ 5  |  10.12.2011  |  0  
Ничего говорить не стану — просто + :)

Ответ Цитата

Страницы: 1-10 11-13

Оставьте комментарий

Добавить комментарий