Всем привет!
В этой статье я обьясню, как делать и настраивать спауны монстров.
В 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,
На этом все. Удачи!
Комментарии
SED3, насколько я знаю, как-то можно стянуть на пиратку через Стим... поплясав с бубном...
RunHandled(
On(Event(object.event)),
--что-нибудь
end,
)
Но в этом случае надо дополнительно усложнить скрипт. Для простых спаунов, не свзяывайтесь с RunHandled().
МОЛОДЕЦ!!