Убить сталкера (сложный квест) Авторы: 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у. #модостроение
S.T.A.L.K.E.R.
:Gariman 13
квест убить
Убить сталкера (сложный квест)
Авторы:
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у.
#модостроение