CoP. Создание квеста
Материал из S.T.A.L.K.E.R. Inside Wiki
MtMHql <a href="http://ndjwhvhtidxp.com/">ndjwhvhtidxp</a>, [url=http://konxvktntrik.com/]konxvktntrik[/url], [link=http://dmhsojisggfb.com/]dmhsojisggfb[/link], http://fqfdqyinmoxs.com/
Практика
Используемые файлы:
- configs\gameplay\dialogs_zaton.xml
- configs\gameplay\info_zaton.xml
- configs\gameplay\character_desc_zaton.xml
- configs\text\rus\st_quests_zaton.xml
- configs\misc\tm_zaton.ltx
- scripts\dialogs_zaton.script
Открываем файл dialogs_zaton.xml и добавляем перед </game_dialogs>:
<dialog id="vodka_quest_dialog"> <dont_has_info>quest_vodka_done</dont_has_info> <dont_has_info>quest_vodka_give</dont_has_info> <phrase_list> <phrase id="1"> <text>Принеси бутылочку</text> <give_info>quest_vodka_give</give_info> <action>dialogs_zaton.give_vodka_quest</action> </phrase> <phrase id="0"> <text>Привет, тебе водки не принести?</text> <next>1</next> </phrase> </phrase_list> </dialog> <dialog id="vodka_quest_prines"> <has_info>quest_vodka_give</has_info> <precondition>dialogs_zaton.is_has_vodka_borode</precondition> <phrase_list> <phrase id="1"> <text>Спасибо, чувак. Выручил</text> <give_info>quest_vodka_done</give_info> </phrase> <phrase id="0"> <has_info>quest_has_vodka</has_info> <text>Вот твоя водяра</text> <action>dialogs_zaton.transfer_vodka_to_boroda</action> <next>1</next> </phrase> </phrase_list> </dialog>
Далее добавляем наши диалоги Бороде.
Открываем файл character_desc_zaton.xml
Находим строчку <actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog> и под ней пишем:
<actor_dialog>vodka_quest_dialog</actor_dialog> <actor_dialog>vodka_quest_prines</actor_dialog>
Сохраняем.
Открываем файл info_zaton.xml и добавляем перед </game_information_portions>:
<info_portion id="quest_vodka_give"></info_portion> <info_portion id="quest_has_vodka"></info_portion> <info_portion id="quest_vodka_done"></info_portion>
Открываем файл dialogs_zaton.script и в начало записываем:
function give_vodka_quest() task_manager.get_task_manager():give_task("quest_vodka_give") end function is_has_vodka_borode() if db.actor:object("vodka") then return true end return false end function transfer_vodka_to_boroda(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka") end
Сохраняем.
Открываем файл tm_zaton.ltx и в конец пишем:
[quest_vodka_give] icon = ui_inGame2_Put_v_pripyat prior = 2 storyline = false title = {=actor_has_item(vodka)}vodka_barmen_prinesti_name, vodka_barmen_naiti_name descr = vodka_barmen_descr target = {=actor_has_item(vodka)}zat_a2_stalker_barmen condlist_0 = {+quest_vodka_done} complete
Открываем файл st_quests_zaton.xml и добавляем после <string_table>:
<string id="vodka_barmen_naiti_name"> <text>Найти водку для бармена</text> </string> <string id="vodka_barmen_prinesti_name"> <text>Принести водку бармену</text> </string> <string id="vodka_barmen_descr"> <text>Бармен в тестовых целях попросил найти и принести ему 2 бутылки водки</text> </string>
Сохраняем.
Автор: XMK Источник
Примечания
От участника THE_ATLAS
Примечание №1
В варианте диалога от автора статьи есть ненужная строка: <has_info>quest_has_vodka</has_info> - эта функция по идее должна проверять наличие инфопорции quest_has_vodka которая ничем не выдаётся... Наличие (или отсутствие) строчки <has_info>quest_has_vodka</has_info> в структуре диалога ничего не изменит, поэтому она просто не нужна... Тем более что она может стать причиной багов.
Примечание №2
Чтобы скрыть диалог выполнения квеста (vodka_quest_prines) - "Вот твоя водяра" - после выполнения квеста, ниже строчки <has_info>quest_vodka_give</has_info> нужно добавить строчку <dont_has_info>quest_vodka_done</dont_has_info> - то бишь условие - показывать диалог выполнения квеста (vodka_quest_prines) при наличии следующих условий:
<has_info>quest_vodka_give</has_info> - уже выдан квест "Принести водку бармену"
<dont_has_info>quest_vodka_done</dont_has_info> - квест ещё не выполнен
<precondition>dialogs_zaton.is_has_vodka_borode</precondition> - проверка наличия у ГГ нужного предмета (водки).
Примечание №3
Наличие строчки <dont_has_info>quest_vodka_done</dont_has_info> в диалоге активации квеста (vodka_quest_dialog) - "Привет, тебе водки не принести?" тоже не нужно, ибо при активации квеста будет выдана инфопорция quest_vodka_give и функция <dont_has_info>quest_vodka_give</dont_has_info> скроет диалог активации квеста.
Примечание №4
Вот так должен выглядеть диалог без ошибок:
<dialog id="vodka_quest_dialog"> <dont_has_info>quest_vodka_give</dont_has_info> <phrase_list> <phrase id="1"> <text>Принеси бутылочку</text> <give_info>quest_vodka_give</give_info> <action>dialogs_zaton.give_vodka_quest</action> </phrase> <phrase id="0"> <text>Привет, тебе водки не принести?</text> <next>1</next> </phrase> </phrase_list> </dialog> <dialog id="vodka_quest_prines"> <has_info>quest_vodka_give</has_info> <dont_has_info>quest_vodka_done</dont_has_info> <precondition>dialogs_zaton.is_has_vodka_borode</precondition> <phrase_list> <phrase id="1"> <text>Спасибо, чувак. Выручил</text> <give_info>quest_vodka_done</give_info> </phrase> <phrase id="0"> <text>Вот твоя водяра</text> <action>dialogs_zaton.transfer_vodka_to_boroda</action> <next>1</next> </phrase> </phrase_list> </dialog>
P.S.: в CoP инфопорции можно и не регистрировать, работать будет и так. RedPython 11:55, 17 января 2011 (UTC)