SoC. Создание квеста принести предмет — S.T.A.L.K.E.R. Inside Wiki

SoC. Создание квеста принести предмет

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск

В этой статье я попытаюсь рассказать, как создать квест по поиску предмета на примере Пличко (Тот, что не пускает нас к Воронину).

Начнем: 1) Надо создать наш диалог. Ищем файл stable_dialogs_bar(путь gamedata\config\text\rus) и в конце пищем два диалога примерно вот таких:

<string id="bar_ohran_propusk_0">
<text>Дружище послушай, у меня очень ценная информация для твоего командира, давай как-нибудь договоримся?</text>
</string>
<string id="bar_ohran_propusk_1">
<text>В принципе можно,но услуга за услугу.Дело у меня есть к тебе меченый.У меня клиент есть, хорошо платит но ему нужны только ценные артефакты. Сможешь мне принести артефакт Панцирь?</text>
</string>
<string id="bar_ohran_propusk_2">
<text>Ну ты и ... ладно жди достану тебе панцири, черепаха ты наша.</text>
</string>
<string id="bar_ohran_propusk_3">
<text>Ну ты и жлоб поглядывай за углами вдруг шальная пуля прилетит.</text>
</string>


<string id="bar_friend_propusk_0">
<text>Привет сержант не забыл наш уговор?.</text>
</string>
<string id="bar_friend_propusk_1">
<text>Да помню-помню было такое,долго же ты,а еще меня черепахой называл,а сам... ну ладно принес?.</text>
</string>
<string id="bar_friend_propusk_2">
<text>А как же держи,попотеть пришлось.</text>
</string>
<string id="bar_friend_propusk_3">
<text>Ну в нашем деле не без этого проходи че стоишь.</text>
</string>

Первый называется bar_ohran_propusk, а второй bar_friend_propusk. Учтите все диалоги должны начинаться со слов меченого. 2)Находим файл dialogs_bar(путь gamedata\config\gameplay) и составляем скелет нашего диалога опять же в конце файла:

<dialog id="bar_ohran_propusk">
<phrase_list>
<phrase id="0">
<text>bar_ohran_propusk_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>bar_ohran_propusk_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>bar_ohran_propusk_2</text>
</phrase>
<phrase id="3">
<text>bar_ohran_propusk_3</text>
<action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>
<dialog id="bar_friend_propusk">
<phrase_list>
<phrase id="0">
<text>bar_friend_propusk_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>bar_friend_propusk_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text>bar_friend_propusk_2</text>
<next>3</next>
</phrase>
<phrase id="3">
<text>bar_friend_propusk_3</text>
</phrase>
</phrase_list>
</dialog>

Все у нас есть диалог. Вот эта строчка <action>dialogs.break_dialog</action> означает что из скриптового файла dialogs вызывается функция break_dialog. Т.е. если мы откажемся нести арт Пличко то диалог прерывается. Все если мы правильно сделали то сохраняем наши изменения. 3) Находим файл character_desc_bar и ищем Пличко(тот что нас не пускает к Воронину) и добавляем ему два диалога:

<actor_dialog>bar_ohran_propusk</actor_dialog>
<actor_dialog>bar_friend_propusk</actor_dialog> - это наши диалоги.
<start_dialog>bar_dolg_base_guard_start</start_dialog>
<actor_dialog>bar_dolg_base_guard_talk</actor_dialog>
<actor_dialog>bar_dolg_base_guard_story</actor_dialog>
<actor_dialog>bar_dolg_base_guard_rules</actor_dialog>
  1. include "gameplay\character_dialogs.xml"

Сохраняем наши изменения и запускаем игру если мы сделали все правильно то у него появиться два диалога.

Диалог мы сделали, но нам теперь нужно сделать так чтобы он нас пустил к Воронину т.е. приделать Пличко квест. В папке gameplay есть много файлов таких как info_known_objects,info_l05dark_valley и т.д. Это все инфопоршни игры без них квест не получиться. Нам надо создать свои инфопоршни. Создадим свой файл где будут лежать наши инфопоршни.Я назвал сой файл info_dan_way(не забудь те прописать его в файле system т.е. добавить к остальным файлам с инфопоршними свой файл) Внутри он будет выглядеть примерно так

<?xml version='1.0' encoding="windows-1251" ?>
 
<game_information_portions>
 
<info_portion id="bar_dolg_propusk_start"> это наши инфопоршень №1
<task>bar_dolg_propusk</task> это цель задания которая указывается в game_tasks
</info_portion>
 
<info_portion id="bar_dolg_propusk_have"></info_portion> это наши инфопоршень №2
 
<info_portion id="bar_dolg_propusk_done"></info_portion>это наши инфопоршень №3
 
</game_information_portions>

Дальше открываем game_tasks и после всех инклудов вписываем наш квест

<game_task id="bar_dolg_propusk">
<title>Принести арты Пличко</title>
<objective>
<text>Найти артефакт панцирь</text>
<icon>ui_iconsTotal_artefact</icon>
<infoportion_complete>bar_dolg_propusk_done</infoportion_complete>
</objective>
<objective>
<text>Найти артефакт панцирь</text>
<icon height="50" width="50" x="100" y="50">ui\ui_icons_task</icon>
<function_complete>dan_dialog.bar_dolg_propusk_have</function_complete>
<infoportion_set_complete>bar_dolg_propusk_have</infoportion_set_complete>
</objective>
<objective>
<text>Принести артефакт Пличко</text>
<map_location_type hint="Пличко">blue_location</map_location_type>
<object_story_id>bar_dolg_guard_commander</object_story_id>
<infoportion_complete>bar_dolg_propusk_done</infoportion_complete>
</objective>
</game_task>

Все теперь нам надо добавить инфопоршни в наш диалог, находим dialogs_bar ищем в нем наши диалоги и добавляем инфопоршни;

<dialog id="bar_ohran_propusk">
<dont_has_info>bar_dolg_propusk_start</dont_has_info> это значит что диалог не появиться у Пличко
<dont_has_info>bar_dolg_propusk_have</dont_has_info> если сработали наши инфопоршни т.е. чтобы
<dont_has_info>bar_dolg_propusk_done</dont_has_info> после выполнения задания диалог вновь не появлялся
<phrase_list>
<phrase id="0">
<text>bar_ohran_propusk_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>bar_ohran_propusk_1</text>
<next>2</next>
<next>3</next>
</phrase>
<phrase id="2">
<text>bar_ohran_propusk_2</text>
<action>dan_dialog.bar_dolg_propusk_have</action> т.е. будет выполняться функция
<give_info>bar_dolg_propusk_start</give_info> bar_dolg_propusk_have из сриптового файла dan_dialog.
</phrase>
<phrase id="3">
<text>bar_ohran_propusk_3</text>
<give_info>bar_dolg_propusk_start</give_info> информации о получении первого инфопоршня.
<action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>


<dialog id="bar_friend_propusk">
<dont_has_info>bar_dolg_propusk_done</dont_has_info> не показывать после получения 3 инфопоршня
<has_info>bar_dolg_propusk_have</has_info> показывать если есть второй инфопоршень
<phrase_list>
<phrase id="0">
<text>bar_friend_propusk_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>bar_friend_propusk_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text>bar_friend_propusk_2</text>
<action>dan_dialog.bar_dolg_propusk_done</action> вызывается функция bar_dolg_propusk_done
<give_info>bar_dolg_propusk_done</give_info> информация о получения 3 инфопоршня задание выполенено
<next>3</next>
</phrase>
<phrase id="3">
<text>bar_friend_propusk_3</text>
<give_info>bar_dolg_base_pass</give_info> это срабатывает инфопоршни о пропуске нас на базу долга.
<give_info>bar_dolg_community_start</give_info>
<give_info>bar_dolg_community_leader</give_info>
</phrase>
</phrase_list>
</dialog>

Теперь нам надо создать свой скриптовой файл и вписать 2 функции. Одна нужна для проверки наличия в инвентаре панциря и соответственно включения инфопоршня bar_dolg_propusk_have. Вторая для передачи Пличко арта. Например dan_dialog и вписать наши функции.

function bar_dolg_propusk_have(task, objective) эта функция проверяет наличие арта 
if db.actor ~= nil then
return db.actor:object("af_armor_3") ~= nil
end
return false
end
function bar_dolg_propusk_done(first_speaker, second_speaker) эта функция отдачи арта Пличко
dialogs.relocate_item_section(second_speaker, "af_armor_3", "out")
second_speaker:set_relation(game_object.friend, first_speaker) эта строчка делает Пличко другом.
end

Ну вот вроде все. Если сделали все правильно, то после того, как принесли арт Пличко, вас свободно пропустят на базу долга. Автор не я! Статья взята с AMK Team.

Другие места
LANGUAGE