Stalker_Monolit 58 Опубликовано 12 Января 2017 (изменено) ЧН: Квест "Найти и принести два предмета". Сегодня постараюсь подробно расписать создание задания "Найти и принести". Квест будет активироваться через диалог секцией <action></action>, и завершаться выдачей инфопорции <give_info></give_info>, думаю вам стоит прочесть статью по написанию диалогов. Список необходимых файлов и папок в папке gamedata: configs\gameplay\ character_desc_marsh.xml dialogs_marsh.xml info_marsh.xml configs\misc\ tm_marsh.ltx configs\text\rus\st_quest_bring_vodka_medkit.xml ;--\ Создать файл. scripts\quest_bring_vodka_medkit.script ;--\ Создать файл. Прописываем диалоги в "Характер нужного нам НПС'а", пусть это будет Холод: Файл: character_desc_marsh.xml Секция: <specific_character id="mar_csky_barman" team_default = "1"> После строки: <actor_dialog>treasure_dialog</actor_dialog> Пишем: <actor_dialog>quest_find_vodka_medkit</actor_dialog> <actor_dialog>quest_bring_vodka_medkit</actor_dialog> Все, с этим файлом закончили, сохраняем и закрываем за не надобностью. Теперь нам нужно создать два диалога, на поиск "quest_find_vodka_medkit" и на принесение предмета "quest_bring_vodka_medkit": Файл: dialogs_marsh.xml В самом низу перед строкой "</game_dialogs>" создаем диалоги: <dialog id="quest_find_vodka_medkit"> <dont_has_info>quest_vodka_medkit_give</dont_has_info> <!-- При получение инфопорции "quest_vodka_medkit_give" блокировать диалог. --> <precondition>quest_bring_vodka_medkit.not_have_vodka_medkit</precondition> <!-- Прекондишин для проверки скриптом на отсутствие предметов у ГГ. Если нет необходимых предметов диалог будет активен. --> <phrase_list> <phrase id="0"> <text>Мне нужна работа, есть что на примете?</text> <next>1</next> </phrase> <phrase id="1"> <text>Есть, нужна бутылка водки и аптечка.</text> <next>2</next> <next>3</next> </phrase> <phrase id="2"> <text>Хорошо, принесу.</text> <next>4</next> </phrase> <phrase id="3"> <text>Я передумал.</text> <action>dialogs.break_dialog</action> <!-- Экшен на завершение диалога. --> </phrase> <phrase id="4"> <text>Вот и славненько.</text> <give_info>quest_vodka_medkit_give</give_info> <!-- Получение инфопорции. --> <action>quest_bring_vodka_medkit.give_quest_bring_vodka_medkit</action> <!-- Экшен на выдачу квеста. --> </phrase> </phrase_list> </dialog> <dialog id="quest_bring_vodka_medkit"> <has_info>quest_vodka_medkit_give</has_info> <!-- Проверка, есть ли у нас инфопорция, при получение инфопорции "quest_vodka_medkit_give" диалог будет активен. --> <dont_has_info>quest_vodka_medkit_done</dont_has_info> <!-- При получение инфопорции "quest_vodka_medkit_done" блокировать диалог. --> <precondition>quest_bring_vodka_medkit.have_vodka_medkit</precondition> <!-- Прекондишин для проверки скриптом на наличие предметов у ГГ. Если есть необходимые предметы диалог будет активен. --> <phrase_list> <phrase id="0"> <text>Задание выполнено, держи предметы.</text> <action>quest_bring_vodka_medkit.quest_bring_vodka_medkit_bring_object</action> <!-- Экшен на передачу предметов НПС'у. --> <next>1</next> </phrase> <phrase id="1"> <text>Благодарю, держи награду.</text> <action>quest_bring_vodka_medkit.quest_bring_vodka_medkit_get_money</action> <!- Экшен на получение награды. --> <give_info>quest_vodka_medkit_done</give_info> <!-- Получение инфопорции, получили инфопорцию "quest_vodka_medkit_done" завершили квест. --> </phrase> </phrase_list> </dialog> Все, с этим файлом закончили, сохраняем и закрываем за не надобностью. Создание инфопорции: Файл: info_marsh.xml В самом низу перед строкой "</game_information_portions>" создаем инфопорции: <info_portion id="quest_vodka_medkit_give"></info_portion> <info_portion id="quest_vodka_medkit_done"></info_portion> Все, с этим файлом закончили, сохраняем и закрываем за не надобностью. Создание самого квеста: Файл: tm_marsh.ltx В секцию [list_tm_marsh] вписываем: quest_bring_vodka_medkit_1 quest_bring_vodka_medkit_2 В самом низу пишем: [quest_bring_vodka_medkit_1] auto_name = false ;--\ Автоматическое имя, не совсем понятно зачем здесь эта строка. type = storyline ;--\ Тип задания, есть варианты "bring_item - Принести предмет", "recover_item - Вернуть предмет", "eliminate_smart - Уничтожение смарта", "defend_smart - Защита смарта", "capture_smart - Захват смарта", "take_reward - Получение награды", "storyline - Сюжетное задание". task_type = additional ;--\ Тип задания, есть вырианты "storyline - Сюжетное задание", "additional - Второстепенное задание". name = quest_find_vodka_medkit_name ;--\ Название задания, из text\rus\st_*.xml документа. text = quest_bring_vodka_medkit_text ;--\ Описание задания, из text\rus\st_*.xml документа. target_cond = {=actor_on_level(marsh)} true ;--\ Условие для маркера. target_story_ids = 302 ;--\ Установка маркера на объект по его story_id, список story_id'ов game_story_ids.ltx. prior = 10 ;--\ Приоритет задания, чем выше это число, тем приоритетней задание. condlist_0 = {=actor_has_item(vodka)=actor_has_item(medkit)} complete ;--\ Условие выполнения квеста, в данном случаи проверка на нахождение двух предметов у ГГ. on_complete = %=give_inited_task(storyline:quest_bring_vodka_medkit_2:csky)% ;--\ По завершению поиска необходимых предметов вклучаеться следующий квест "quest_bring_vodka_medkit_2". [quest_bring_vodka_medkit_2] auto_name = false type = storyline task_type = additional name = quest_bring_vodka_medkit_name text = quest_bring_vodka_medkit_text target_cond = {=actor_on_level(marsh)} true target_story_ids = 302 prior = 10 condlist_0 = {+quest_vodka_medkit_done} complete ;--\ Условие выполнения квеста, в данном случаи при получение инфопорции "quest_vodka_medkit_done" считается выполненным. Все, с этим файлом закончили, сохраняем и закрываем за не надобностью. Создание описания для квеста: Файл: st_quest_bring_vodka_medkit.xml Пишем: <?xml version="1.0" encoding="windows-1251" ?> <string_table> <string id="quest_find_vodka_medkit_name"> <text>Найти водку и аптечку для Холода.</text> </string> <string id="quest_bring_vodka_medkit_name"> <text>Принести водку и аптечку Холоду.</text> </string> <string id="quest_bring_vodka_medkit_text"> <text>Найти и принести бутылку водки и аптечку.</text> </string> </string_table> Все, с этим файлом закончили, сохраняем и закрываем за не надобностью. Создание скрипта на активацию квеста, проверку предметов и выдачу награды: Файл: quest_bring_vodka_medkit.script Пишем: function give_quest_bring_vodka_medkit() xr_effects.give_inited_task(nil, nil, {"storyline", "quest_bring_vodka_medkit_1", "csky"}) end -- возвращает false при проверке на наличие в инвентаре ГГ двух необходимых предметов function not_have_vodka_medkit(first_speaker, second_speaker) return ((db.actor:object("vodka") == nil) and (db.actor:object("medkit") == nil)) end -- возвращает true при проверке на наличие в инвентаре ГГ двух необходимых предметов function have_vodka_medkit(first_speaker, second_speaker) return ((db.actor:object("vodka") ~= nil) and (db.actor:object("medkit") ~= nil)) end -- передача предметов НПС'у function quest_bring_vodka_medkit_bring_object(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka") dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "medkit") end -- получение награды function quest_bring_vodka_medkit_get_money(first_speaker, second_speaker) dialogs.relocate_money(first_speaker, 800, "in") end Все, с этим файлом закончили, сохраняем и закрываем за не надобностью. Ну вот урок по квесту "Найти и принести" завершен. Автор урока и примера: ThirteenDogs ThirteenDogs.spaces.ru Скачать урок и пример можно тут: https://yadi.sk/d/5vra5UtC38e9ff Изменено 12 Января 2017 пользователем Stalker_Monolit 1 1 AtmosFear 3 for Clear Sky Поделиться этим сообщением Ссылка на сообщение