Убить сталкера (сложный квест)
Авторы:
Kail
Редактировал:
Nikitos817
Сразу хочу сказать, что данных персонажей в игре нет. Это все для примера. Что бы создать квест, вы должны будете сами выбрать квестодателя и жертву. Давайте сделаем квестодателя Соколовым, а жертвой будет Гарик.
1. Список файлов, которые нужно будет использовать при создании квеста.
gamedata\scripts\new_script – этот скрипт мы создадим
gamedata\config\gameplay\character_desc_локация.xml
gamedata\config\gameplay\dialogs_локация.xml
gamedata\config\gameplay\info_локация.xml
gamedata\config\gameplay\storyline_info_локация.xml
gamedata\config\gameplay\tasks_локация.xml
gamedata\config\text\rus\stable_dialogs_локация.xml
gamedata\config\game_story_ids
gamedata\spawns\all.spawn
ps: вместо all.spawn можно использовать фаил .ltx с логикой вашего сталкера (далее NPC)
pss: Мы думаем, вы знаете, как создавать новых NPC. Эту тему мы пропускаем
2. Начнем по порядку, со скрипта. Назвать скрипт можно по-своему.
Заходим в
gamedata\scripts\
и создаем скрипт с названием new_script
Туда пишем:
--[[---------------------------------------------------------------------------------
--задание от Соколова--
function money_give_sokolov(first_speaker, second_speaker)
dialogs.relocate_money(first_speaker, 7000, "in")
end
-----------------------------------------------------------------------------------]]
Разберем, что написали:
function money_give_sokolov(first_speaker, second_speaker) – название функции
dialogs.relocate_money(first_speaker, 7000, "in") – действие. В данном случае выдача денег главному герою (если вместо in поставить out, деньги отнимут).
end – конец функции.
Работа со скриптом закончена.
3. Далее заходим в:
gamedata\config\gameplay\character_desc_локация.xml
находим там вашего NPC и дописываем ссылки на диалоги.
<actor_dialog>sokolov_kvest_dialog</actor_dialog>
<actor_dialog>sokolov_kvest_dialog_done</actor_dialog>
4. Теперь надо написать скелет диалога.
Заходим в:
gamedata\config\gameplay\dialogs_локация.xml
открываем dialogs_локация.xml и пишем
после
</dialog>
-- Квест
<dialog id="sokolov_kvest_dialog">
<dont_has_info>sokolov_kvest_start</dont_has_info>
<phrase_list>
<phrase id="0">
<text>sokolov_kvest_dialog_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>sokolov_kvest_dialog_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>sokolov_kvest_dialog_2</text>
<give_info>sokolov_kvest_start</give_info> -- выдаем поршень инфопоршень на начало квеста
</phrase>
<phrase id="3">
<text>sokolov_kvest_dialog_3</text>
</phrase>
</phrase_list>
</dialog>
<dialog id="sokolov_kvest_dialog_done">
<has_info>sokolov_kvest_have</has_info>
<dont_has_info>sokolov_kvest_dialog_done</dont_has_info>
<phrase_list>
<phrase id="0">
<text>sokolov_kvest_dialog_completed_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>sokolov_kvest_dialog_completed_1</text>
<give_info>sokolov_kvest_dialog_done</give_info> -- При получении этого инфопоршня заканчивается квест.
<action>new_script.money_give_sokolov</action> -- активация функции из вашего скрипта (выдача награды ГГ)
<next>2</next>
</phrase>
<phrase id="2">
<text>sokolov_kvest_dialog_completed_2</text>
</phrase>
</phrase_list>
</dialog>
5. Далее идем в:
gamedata\config\gameplay\info_локация.xml
В этом инфопоршне мы должны создать инфопоршни.
открываем info_локация.xml и пишем:
-- Квест с Соколовым --
<info_portion id ="sokolov_kvest_start">
<task>sokolov_kvest</task>
</info_portion>
<info_portion id="sokolov_kvest_have">
</info_portion>
<info_portion id="sokolov_kvest_dialog_done">
</info_portion>
6. 50% уже сделано. Осталось сделать сторилайны.
Заходим в:
gamedata\config\gameplay\storyline_info_локация.xml
открываем и пишем storyline_info_локация.xml
--[[-------------------------------------------------------------------------------------------
<article id="text_sokolov_kvest" name="убить Гарика" article_type="task">
<text>text_sokolov_kvest</text>
</article>
---------------------------------------------------------------------------------------------]]
7. Теперь нужно создать информацию о задании.
Заходим в:
gamedata\config\gameplay\tasks_локация.xml
открываем tasks_локация.xml
и пишем
--[[------------------------------------------------------------------------------------------------------
<game_task id="sokolov_kvest">
<title>убить Гарика</title> -- название первого подзадания
<objective>
<text>убить Гарика</text>
<icon>ui_npc_u_stalker_ki_antigas</icon> -- иконка задания в ПДА
<infoportion_complete>sokolov_kvest_dialog_done</infoportion_complete>
<article>text_sokolov_kvest</article>
</objective>
<objective>
<text>убить Гарика</text>
<map_location_type hint="Гарик">green_location</map_location_type> -- сюда напишиие имя своего NPC
<object_story_id>5483</object_story_id> -- стори айди
<infoportion_complete>sokolov_kvest_have</infoportion_complete>
</objective>
<objective>
<text>Доложить о выполнение Соколову</text> -- название второго подзадания
убили сталкера, идем докладывать, что убили
<map_location_type hint="Гарик">blue_location</map_location_type>
<object_story_id>5484</object_story_id> -- стори айди квесто дателя
<infoportion_complete>sokolov_kvest_dialog_done</infoportion_complete>
</objective>
</game_task>
ps:название иконок можно посмотреть в gamedata\config\ui\ui_iconstotal.xml
--------------------------------------------------------------------------------------------------------]]
8. Создание диалогов:
Идем в:
gamedata\config\text\rus\stable_dialogs_локация.xml
открываем stable_dialogs_локация.xml
пишим после тага </string>
--[[-----------------------------------------------------------------------------------------------------
<string id="sokolov_kvest_dialog_0">
<text>Есть ли для меня работа?</text>
</string>
<string id="sokolov_kvest_dialog_1">
<text>Да есть для тебя одно дело нужно найти и убить сталкера по имени Гарик. Оплата гарантирована.</text>
</string>
<string id="sokolov_kvest_dialog_2">
<text>Я берусь.</text>
</string>
<string id="sokolov_kvest_dialog_3">
<text>В другой раз.</text>
</string>
<string id="sokolov_kvest_dialog_completed_0">
<text>Все его больше нет.</text>
</string>
<string id="sokolov_kvest_dialog_completed_1">
<text>Молодец, держи заслуженное.</text>
</string>
<string id="sokolov_kvest_dialog_completed_2">
<text>До встречи.</text>
</string>
<string id="text_sokolov_kvest">
<text>нужно найти и убить сталкера по прозвищу Гарик.</text> -- текст задания, которое отображается в пда в вкладке «подробно о задании»
</string>
--------------------------------------------------------------------------------------------------------]]
9. Итак, мы почти написали квест.
Идем в:
gamedata\config\game_story_ids
это файл стори айди. Там записываются сталкеры, которые будут отображатся на пда при взятии квестов, и прочие квестовые объекты…
Итак, отрываем game_story_ids записываем наших сталкеров
--[[----------------------------------------------------------------------------------------------
5483 = "garik"
5484 = "solokov"
ps: смотрите, что бы стори айди не повторялся, иначе будет вылет!!!
-----------------------------------------------------------------------------------------------]]
10. Последнее, что осталось сделать.
Работа с all.spawn. Если вы через скрипт нпс спавнили то надо указать путь к логике (spawn_section.ltx)
Идем в:
gamedata\spawns\all.spawn
в аллспавне или файле с вашей логикой нпс допишем вот что:
[logic]
active = (ваша логика)
on_death = death
combat_ignore = combat_ignore
[death]
on_info = %+sokolov_kvest_have%
!!!!!Это не заменяем, а дополняем к логике!!!!!
!!!!!Это дополнение пишим только к тому сталкеру, которого надо убить!!!!!
Теперь, когда он умрет, выдается поршень, что он погиб. Тогда нужно сообщить о выполнении
надеюсь у вас все получится, желаю удачи.
Если один баг. Когда квестодатель (это тот, у которого берете задание) погибает, задание остается. Над проблемой работаем. Как проблема будет решена, статья будет дополнена.
Я это не тестировал, все вопросы к Kailу.
#модостроение
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Комментарии 1