Квест на убийство мутанта через туториал ("Press F To Win")
Платформа: Сталкер Зов Припяти 1.6.02 Автор: FantomICW, использованы наработки для Смерти Вопреки Уровень сложности: средний (не для самых зелёных новичков) Введение Приветствую! К своему Дню рождения (26.07) я хотел бы преподнести Сталкер-сообществу еще один небольшой подарок. В этот раз мое внимание привлекла тема, затронутая в "Вопроснице"... Относительно недавно пользователь ap-pro Telnov1996 задал один вопрос:
ЦитатаTelnov1996
Можно ли организовать скриптовые сцены борьбы с мутантами, работающие по принципу 'Press "F" to win'?
К обсуждению подключились уважаемый Dorian23Grey и, собственно, я сам. Ситуация выходит следующая: 1. Во-первых, на X-Ray сцены с анимациями в стиле CoD, Metro и т. д. делать не очень удобно, как таковые. 2. Требуется иметь отличные умения в анимации объектов. 3. Нужно настроить взаимодействие логики с таймерами и анимации. На данный момент такое мало кто реализовывал. Однако, вариант, когда ГГ подходит к мутанту, запускается туториал с последующим выполнением убийства, - вполне реализуемая фишка. Сегодня об этом и пойдет речь. Пускай, на Затоне в пределах Северного озера поселился уникальный болотный псевдогигант, которому совершенно плевать на пули сталкеров. Единственный быстрый способ его устранить - активировать гравитационный артефакт. Когда ГГ подойдет к мутанту с артефактом, запустится туториал с надписью "Активировать артефакт". При нажатии F, запустится функция, которая создаст на месте мутанта партикл разрыва от грави-аномалии. Подготовка к действу
- Paint Net, Adobe Photoshop или другой редактор текстур (если кто-то будет создавать мутанту уникальную текстуру) - Notepad++
Опять же, если желаете сделать для своего мутанта уникальную текстуру, пожалйста. Как по мне, то новую модель или текстуру стоит сделать, ибо супер-крутой псевдогиг должен как-то выделяться среди своих сородичей. Я сделал условный "ретекстур" (в кавычках, потому что ляпнуть чуток крови и "узеленить" текстуру - ретекстуром назвать нельзя) монстра под болото.: Если кому нужна текстура, ловите (бамп подключен стандартный).
Для хорошего эффекта разрыва тела в аномалии, я буду использовать некоторые партиклы от АМК:
Код
amk\\blow_body amk\\zomb_explode
У кого они есть (или есть альтернативный вариант) - супер, отлично. У кого их нету - не волнуйтесь, чуть позже я загружу готовый particles.xr, а пока приложу два варианта таблицы партиклов для обоих случаев.
Если вы работаете не в СДК, а с ACDC, то вам нужно будет снять координаты для места, где будет сидеть мутант. Само место действия (примерно) показвыаю на карте: Я прошел немного вперед к воде, снял координаты:
3. В configs/text/rus/st_dialogs_zaton.xml поместим текстовку диалогов:
Код
<string id="zat_super_psevdogig_take_task_dialog_0"> <text>Как дела, Борода? Есть новости какие-то?</text> </string> <string id="zat_super_psevdogig_take_task_dialog_1"> <text>Здравствуй. Новость-не новость, а у нас на Северном озере поселился какой-то убер-псевдогигант, который не дает сталкерам (да и псевдоплотям, что уж тут говорить) покоя...Тварь неубиваемая какая-то. Посоветовавшись с Гонтой, решили попробовать его (я про псевдогиганта) активацией артефакта ликвидировать. Подходящий артефакт у меня вот есть, а смельчака для этого задания найти не можем...</text> </string> <string id="zat_super_psevdogig_take_task_dialog_2"> <text>Знаешь, я мог бы вам помочь.</text> </string> <string id="zat_super_psevdogig_take_task_dialog_3"> <text>Ты с Цементного завода рухнул? Да эта хрень тебя может в псевдочебурек превратить...А кто мне будет все те же арты таскать? На ком Лоцман зарабатывать будет? Короче, ты уверен?</text> </string> <string id="zat_super_psevdogig_take_task_dialog_4"> <text>Уверен. Мне скучно, прост)00)).</text> </string> <string id="zat_super_psevdogig_take_task_dialog_5"> <text>Ну, окей, удачи. Вот тебе "Грави" для активации. Будь аккуратен.</text> </string> <string id="zat_super_psevdogig_task_end_dialog_0"> <text>Все, старик. Нету больше твоего убер-псевдогигабайта.</text> </string> <string id="zat_super_psevdogig_task_end_dialog_1"> <text>Вах, слушай, молодец какой! Молоток! Возьми себе печеньку.</text> </string>
С диалогами все. Здесь все просто, поэтому детально рассказывать о них не буду. Если же эта часть показалась Вам сложной, то, простите, этот урок не совсем для Вашего уровня знаний.
1. В configs/misc/tm_zaton.ltx добавим секция квеста:
Немного разобра: - иконка стоит от миссии на устранение логова кровососов - задание имеет две стадии: часть на устранение мутанта и часть, которая требует поговорить с Бородой (на эту часть обновление происходит при получении инфопорции zat_super_psevdogig_af_activation, мы к ней вернемся позже) - в первой части метка задания падает на сквад мутанта (его story_id - zat_super_psevdogig_squad), во второй - на Бороду - квест заканчивается при получении инфы psevdogig_task_finished, которая выдается в уже созданном нами диалоге Как видите, квест по структуре очень простой. 2. Прописываем в configs/text/rus/st_quests_zaton.xml его текстовую часть:
Код
<string id="zat_super_psevdogig_task_1"> <text>Помощь криворуким: устранить убер-псевдогиганта</text> </string> <string id="zat_super_psevdogig_task_1_text"> <text>Я оказался прав: все сталкеры на Затоне - криворукие болваны. Теперь мне нужно за них устранить очень крутого мутанта на Северном озере.</text> </string> <string id="zat_super_psevdogig_task_2"> <text>Помощь криворуким: сломать Бороде нос</text> </string> <string id="zat_super_psevdogig_task_2_text"> <text>Хочу сказать пару ласковых слов Бороде. Какого фига это барыго в экзе не сказало мне, что меня на озере ждет не убер-псевдогигант, а жирная зеленая Гидра Затонская?</text> </string>
Переходим к конфигам мутанта.
Сообщение отредактировал FantomICW - Пятница, 25.07.2014, 23:25
2. Дальше требуется создать мутанту сквад в configs/misc/squad_descr_zaton.xml:
Код
[zat_super_psevdogig_squad]:online_offline_group faction = monster_special npc = super_psevdogig ;НПС в скваде - наш псевдогигант target_smart = zat_sim_2 ;Целевой смарт - полуостров на Северном озере spawn_point = zat_sim_2_giant_home ;Спавн поинт - поинт "логова" для мутанта story_id = zat_super_psevdogig_squad ;Sid совпадает с названием секции (ваш Кэп)
1. Прежде всего, открываем файл логики смарта полуострова - configs/scripts/zaton/smart/zat_sim_2.ltx, и внизу добавляем секцию exclusive с ссылкой на эксклюзивную логику гиганта:
Итак, логика нашего мутанта называется giant. 2. Переходим к самой логике. Создаем файл zaton\zat_sim_2_super_psevdogig.ltx. Заполняем его:
Код
[logic@giant] ;Название логики - giant (смотрите выше) suitable = {=target_squad_name(zat_super_psevdogig_squad)} true ;Логика доступна только для монстра из нашего сквада monster_job = true prior = 200 active = mob_home@giant
[mob_home@giant] on_info = %=restore_health% ;Здоровье мутанта постоянно пополняется ;Если дистаниция до ГГ меньше 7 метров, в наличии есть квестовый артефакт, а активного туториала нету, то запускается туториал убийства: on_info2 = {=dist_to_actor_le(7) =actor_has_item(super_psevdogig_af_gravi) !has_active_tutorial} %=run_tutorial(zat_super_psevdogig_af_tutor)% ;Если дистаниция до ГГ больше 7 метров, в наличии есть квестовый артефакт, а туториал запущен, то запускается туториал убийства: on_info3 = {=dist_to_actor_ge(7) =actor_has_item(super_psevdogig_af_gravi) =has_active_tutorial} %=stop_tutorial% ;При получении инфы "zat_super_psevdogig_af_activation", убиваем НПС функцией "kill_npc" из xr_effects.script: on_info4 = {+zat_super_psevdogig_af_activation} %=kill_npc% ;При получении инфы "zat_super_psevdogig_af_activation_begin", удаляем НПС вообще и запускаем партиклы аномалии/разрыва новой функцией on_info5 = {+zat_super_psevdogig_af_activation_begin} %=zat_super_psevdogig_explode_2% path_home = giant_home ;В way_zaton.ltx это - zat_sim_2_giant_home ("логово") ;Настройки охраны "логова": home_min_radius = 20 home_max_radius = 50 aggressive = true
3. Настало время использовать ранее снятые координаты. Распаковываем all.spawn с ACDC или же используем СДК Левел Эдитор, чтоб создать точку для монстра в way_zaton.ltx:
1. В логике мы уже упомянули предмет super_psevdogig_af_gravi. Это секция квестового артефакта, который мы якобы будем активировать. Открываем configs/misc/quest_items.ltx, и добавляем туда его:
Стандартная секция квестового предмета с "родителем" device_pda. 2. Также в логике мы объявили запуск туториала:
Код
%=run_tutorial(zat_super_psevdogig_af_tutor)%
Все туториалы игры прописываются в configs/ui/game_tutorials.xml. Вам, вполне возможно, секция ниже может показаться какой-то странной штукой. На самом деле, там все просто, но, считаю, это лучше разбирать в отдельных уроках по худу и гуи, поэтому сейчас можете не забивать голову. Самые важные параметры я укажу:
for k,v in pairs(items_pack) do dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, v.item, v.amount) end
dialogs.relocate_money_to_actor(first_speaker, second_speaker, 3000) end
Используем условно сложную таблицу items_pack. Каждый ее элемент состоит из двух пунктов: item - секция предмета amount - количество, которое нужно выдать Далее некий цикл в виде стандартного for k,v inpairs(название_таблицы) do Это означает, что функция ниже может выполниться для каждого элемента таблицы (v). У нас это:
Обратите внимание на v.item и v.amount. Ну, а в выдаче денег не вижу ничего сложного. 2. Последнее, что нам нужно сделать, - это две функции: одна выдается при использовании туториала, а вторая - из логики. В xr_effects.script добавляем первую функцию:
Код
function zat_super_psevdogig_explode_1(actor, npc) db.actor:give_info_portion("zat_super_psevdogig_af_activation_begin") --Выдаем инфу remove_item(actor, npc, {"super_psevdogig_af_gravi"}) --Забираем у ГГ артефакт (он же активируется) end
Опять же, ничего сложного. Два простых действия. Единственное, замечу, что remove_item - это тоже функция из xr_effects.script. Теперь добавляем вторую:
for i = 1,3 do fx_table_2[i].particle:play_at_pos(npc_position) end end
У нас есть две таблицы. Каждая имеет три партикла (каждый партикл в функциях ниже объявляется так: таблица[i].particle). Зачем нужно было делить из на две таблицы? Просто лучше, чтоб партиклы грави-аномалии начали играться чуть раньше партиклов разрыва тела. Цикл здесь задан немного по-другому:
Код
for i = 1,3 do
Гляньте на пронумерованные элементы таблиц, и все станет с этим циклом ясно. Также надо заметить, что, поскольку функция вызывается прямо из логики НПС, мы можем задать удобную локальную переменную для объявления позиции данного НПС в реальном времени:
Код
local npc_position = npc:position()
Кто не понял, вот это npc, после которого двоеточие, - это и есть псевдогигант. Гляньте на аргументы функции: (actor, npc) Итак, мы используем локальную переменную для выполнения функции с циклом/таблицей:
Код
fx_table_1[i].particle:play_at_pos(npc_position)
Задействована движковая функция play_at_pos, предназначенная конкретно для партиклов. Если у Вас нету партиклов АМК, то вторую таблицу изменяем:
Вот и все, со всем разобрались. Смотрим результат.
Результат
Чуть позже я также дополню материал, чтоб при ликвидации псевдогиганта игрались некоторые звуки аномалий и его самого... Итого, ничего сверхсложного или особенного мы не сделали, но...Представьте, что мы можем использовать такую схему в связке с анимационной схваткой с химерой или сосычем. Основы есть, есть и то, к чему нужно стремиться. На самом деле, мы еще не успели перелопатить весь моддинг, не так ли?
На этом урок закончен. Всем большое спасибо!
Сообщение отредактировал FantomICW - Суббота, 26.07.2014, 00:33