Повернутися на сторінку уроків

Стаття: Квест на пошук двох предметів

Документ

Створення примітивного квеста на пошук предмета, без переробки спавна на S.T.A.L.K.E.R. Call of Pripyat

Автор: Devil_Stalker

Телеграм: https://t.me/modostoi_stalker

Файли які потрібно для роботи:

1. gamedata\configs\gameplay

-character_desc_zaton.xml

-dialogs_zaton.xml

-info_zaton.xml

2. gamedata\configs\misc

- tm_zaton.ltx

3.gamedata\configs\text\rus

- st_dialogs_zaton.xml

- st_quests_zaton.xml

4. gamedata\scripts

- dialogs_zaton.script

В файл dialogs_zaton.xml(gamedata\configs\gameplay) в низу добавим два діалога:

На видачу завдання.

<dialog id="zat_a2_stalker_barmen_af_quest_lesson_start">

<dont_has_info>zat_a2_stalker_barmen_quest_otkaz</dont_has_info>

<dont_has_info>zat_a2_stalker_barmen_quest_start</dont_has_info>

<phrase_list>

<phrase id="1">

<text>zat_a2_stalker_barmen_af_quest_lesson_start_1</text>

<next>2</next>

<next>21</next>

</phrase>

<phrase id="21">

<text>zat_a2_stalker_barmen_af_quest_lesson_start_21</text>

<give_info>zat_a2_stalker_barmen_quest_otkaz</give_info>

</phrase>

<phrase id="2">

<text>zat_a2_stalker_barmen_af_quest_lesson_start_2</text>

<next>3</next>

</phrase>

<phrase id="3">

<text>zat_a2_stalker_barmen_af_quest_lesson_start_3</text>

<next>4</next>

</phrase>

<phrase id="5">

<text>zat_a2_stalker_barmen_af_quest_lesson_start_5</text>

</phrase>

<phrase id="0">

<text>zat_a2_stalker_barmen_af_quest_lesson_start_0</text>

<next>1</next>

</phrase>

<phrase id="4">

<text>zat_a2_stalker_barmen_af_quest_lesson_start_4</text>

<action>dialogs_zaton.zat_a2_stalker_barmen_give_tm_lesson</action>

<give_info>zat_a2_stalker_barmen_quest_start</give_info>

<next>5</next>

</phrase>

</phrase_list>

</dialog>

На заввершення завдання.

<dialog id="zat_a2_stalker_barmen_af_quest_lesson_end">

<has_info>zat_a2_stalker_barmen_quest_start</has_info>

<dont_has_info>zat_a2_stalker_barmen_quest_fail</dont_has_info>

<dont_has_info>zat_a2_stalker_barmen_quest_complite</dont_has_info>

<phrase_list>

<phrase id="21">

<text>zat_a2_stalker_barmen_af_quest_lesson_end_21</text>

</phrase>

<phrase id="22">

<text>zat_a2_stalker_barmen_af_quest_lesson_end_22</text>

<give_info>zat_a2_stalker_barmen_quest_fail</give_info>

</phrase>

<phrase id="1">

<text>zat_a2_stalker_barmen_af_quest_lesson_end_1</text>

<next>2</next>

<next>21</next>

<next>22</next>

</phrase>

<phrase id="2">

<text>zat_a2_stalker_barmen_af_quest_lesson_end_2</text>

<precondition>dialogs_zaton.if_actor_has_af_cristall</precondition>

<precondition>dialogs_zaton.if_actor_has_af_medusa</precondition>

<next>3</next>

</phrase>

<phrase id="3">

<text>zat_a2_stalker_barmen_af_quest_lesson_end_3</text>

<next>4</next>

</phrase>

<phrase id="4">

<text>zat_a2_stalker_barmen_af_quest_lesson_end_4</text>

<action>dialogs_zaton.zat_a2_stalker_barmen_relocates_art</action>

<give_info>zat_a2_stalker_barmen_quest_complite</give_info>

<next>5</next>

</phrase>

<phrase id="5">

<text>zat_a2_stalker_barmen_af_quest_lesson_end_5</text>

<action>dialogs_zaton.zat_a2_stalker_barmen_relocates_money</action>

</phrase>

<phrase id="0">

<text>zat_a2_stalker_barmen_af_quest_lesson_end_0</text>

<next>1</next>

</phrase>

</phrase_list>

</dialog>

Пояснення

<dont_has_info>zat_a2_stalker_barmen_quest_start</dont_has_info>

Це алгоритм діалога у нас відсутній інфопоршень zat_a2_stalker_barmen_quest_start в

ході діалогу ми його отримаємо <give_info>zat_a2_stalker_barmen_quest_start</give_info> і наш діалог не буде активуватись знову.

<action>dialogs_zaton.zat_a2_stalker_barmen_give_tm_lesson</action> це ссилка на фунцію в скрипті(gamedata\scripts \dialogs_zaton.script ) для видачі завдання на пошук артефактів.

<precondition>dialogs_zaton.if_actor_has_af_cristall</precondition>

<precondition>dialogs_zaton.if_actor_has_af_medusa</precondition>

це ссилка на фунції в скрипті(gamedata\scripts \dialogs_zaton.script ) для перевірки наявності в рюкзаку артефактів медуза і кристал.

<action>dialogs_zaton.zat_a2_stalker_barmen_relocates_money</action> це ссилка на фунцію в скрипті(gamedata\scripts \dialogs_zaton.script ) для передачі грошової винагороди ГГ.

zat_a2_stalker_barmen_quest_otkazінфопоршень на відмову від завдання діалогу більше небуде

zat_a2_stalker_barmen_quest_startінфопоршень на видачу завдання

zat_a2_stalker_barmen_quest_failінфопоршень на провал завдання

zat_a2_stalker_barmen_quest_compliteінфопоршень на завершення завдання

Тепер пропишем текст наших діалогів

- st_dialogs_zaton.xml(gamedata\configs\text\rus)в низу перед строкою </string_table> добавим такі строки:

<string id="zat_a2_stalker_barmen_af_quest_lesson_end_0">

<text>Я з приводу роботи.</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_end_1">

<text>Ну що там?</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_end_2">

<text>Я приніс артефакти вони ще потрібні?.</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_end_21">

<text>Ще ні в процесі.</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_end_22">

<text>Я відмовляюсь виконувати це завдання.</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_end_3">

<text>Так давай їх сюди</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_end_4">

<text>Тримай.</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_end_5">

<text>Молодець ось винагорода, все урок виконано.</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_start_0">

<text>Привіт Борода чи є якась робота?</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_start_1">

<text>Так в навчальних цілях поросили знайти артефакти. Берешся?</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_start_2">

<text>Так які арти потрібно?</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_start_21">

<text>Та ні не цікаво.</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_start_3">

<text>Медузу і кристал.</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_start_4">

<text>Добре знайду арти.</text>

</string>

<string id="zat_a2_stalker_barmen_af_quest_lesson_start_5">

<text>От і добре.</text>

</string>

В файл nfo_zaton.xml (gamedata\configs\gameplay) в низу добавим Інфопоршні

<!-- lesson-->

<info_portion id="zat_a2_stalker_barmen_quest_otkaz"></info_portion>

<info_portion id="zat_a2_stalker_barmen_quest_start"></info_portion>

<info_portion id="zat_a2_stalker_barmen_quest_fail"></info_portion>

<info_portion id="zat_a2_stalker_barmen_quest_complite"></info_portion>Пояснення

В цій строкі <!-- -->    можна проаисати назву груп наших інфопоршнів які відносяться до квесту

В файл character_desc_zaton.xml(gamedata\configs\gameplay) в секції троговця бороди zat_a2_stalker_barmenдобавим ідентифікатори діалогів:

<actor_dialog>zat_a2_stalker_barmen_af_quest_lesson_start</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_af_quest_lesson_end</actor_dialog>

Пропишем функції в скриптах

dialogs_zaton.script(gamedata\scripts) в кінці пропишем фунції які ми указували в діалогах

function zat_a2_stalker_barmen_give_tm_lesson()

task_manager.get_task_manager():give_task("lesson_zat_a2_stalker_barmen")

end

function if_actor_has_af_cristall(first_speaker, second_speaker)

return first_speaker:object("af_cristall") ~= nil

end

function if_actor_has_af_medusa(first_speaker, second_speaker)

return first_speaker:object("af_medusa") ~= nil

end

function zat_a2_stalker_barmen_relocates_art(first_speaker, second_speaker)

dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_medusa")

dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_cristall")

end

function zat_a2_stalker_barmen_relocates_money(first_speaker, second_speaker)

dialogs.relocate_money_to_actor(first_speaker, second_speaker, 5000)

endПояснення

function zat_a2_stalker_barmen_give_tm_lesson()      

         task_manager.get_task_manager():give_task("lesson_zat_a2_stalker_barmen")         

end Функція для видачі завдання

function if_actor_has_af_cristall(first_speaker, second_speaker)

return first_speaker:object("af_cristall") ~= nil

end

Функція для перевірки що ГГ має артефакт кристал

function if_actor_has_af_medusa(first_speaker, second_speaker)

return first_speaker:object("af_medusa") ~= nil

end

Функція для перевірки що ГГ має артефакт медузу

function dialogs_zaton.zat_a2_stalker_barmen_relocates_art(first_speaker, second_speaker) 

dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_medusa") 

dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_cristall") 

end      Функція для передачі артефактів Бороді

function zat_a2_stalker_barmen_actor_have_art(first_speaker, second_speaker) 

dialogs.relocate_money_to_actor(first_speaker, second_speaker, 5000) 

end Функція для передачі грошової винагороди ГГ

В файл tm_zaton.ltx(gamedata\configs\misc) добавим квест:

[lesson_zat_a2_stalker_barmen]

icon = ui_inGame2_Kontrakt_s_uchenimi

prior = 1

storyline = false

title = {=actor_has_item(af_cristall) =actor_has_item(af_medusa)} zat_a2_stalker_barmen_lesson_title_3, {=actor_has_item(af_cristall) !actor_has_item(af_medusa)} zat_a2_stalker_barmen_lesson_title_2, {!actor_has_item(af_cristall) =actor_has_item(af_medusa)} zat_a2_stalker_barmen_lesson_title_1, zat_a2_stalker_barmen_lesson_title_0

descr = {=actor_has_item(af_cristall) =actor_has_item(af_medusa)} zat_a2_stalker_barmen_lesson_text_3, {=actor_has_item(af_cristall) !actor_has_item(af_medusa)} zat_a2_stalker_barmen_lesson_text_2, {!actor_has_item(af_cristall) =actor_has_item(af_medusa)} zat_a2_stalker_barmen_lesson_text_1, zat_a2_stalker_barmen_lesson_text_0

target = {=actor_has_item(af_cristall) =actor_has_item(af_medusa)} zat_a2_stalker_barmen

condlist_0 = {+zat_a2_stalker_barmen_quest_complited} complete

condlist_1 = {+zat_a2_stalker_barmen_quest_fail} fail

Пояснення

- [lesson_zat_a2_stalker_barmen] - назва завдання в таск менеджері

- icon = ui_inGame2_Kontrakt_s_uchenimi - іконка квеста

- prior = 2 - пріоритет завдання 

- storyline = false - сюжетный квест або ні

- title = - заголовки при обновленні завдання 

- descr = - дескрипшини при обновленні завдання

- target = - мітка на карті при обновленні завдання

- condlist_0 =- кондішн в квесті на завершення

- condlist_1 =- кондішн в квесті на провал

Основна особливість завдання - це послідовна перевірка структурних умов за допомогою функції actor_has_item(...). Це викликається функція xr_conditions.script для перевірки наявності у актора того чи іншого предмета. Відповідно до структури цього квесту використовуються два варіанти, коли значення функції false (!actor_has_item(...)) і true (=actor_has_item(...))

У квесті розглядаються всі можливі поєднання варіантів наявності або відсутності знайденого того чи іншого предмета.

1. коли немає ні одного.

2. перший (кристал) є, другого (медуза) немає.

3. першого немає, другий є

4. оба є.

Відповідно до незалежності від того, який арт було знайдено першим - відбудеться точне оновлення дескрипшина та заголовка завдання з указанням поточного стану. Також якщо гравець викладе з інвентарю вже знайдений арт, то завдання буде оновлено знову. Мітка на цілі в квесті (Борода) з'являється тільки при наявності обох предметів.

По видачі інфопоршня zat_a2_stalker_barmen_quest_complite квест буде завершено.

Пропишемо транскрипцію дескрипшинов і тайтлов квеста в st_quests_zaton.xml (gamedata\configs\text\rus)

<string id="zat_a2_stalker_barmen_lesson_title_0">

<text>Доручення Бороди: знайти артефакти Кристал та Медузу</text>

</string>

<string id="zat_a2_stalker_barmen_lesson_text_0">

<text>Борода попросив знайти для нього два арти – Кристал та Медузу.</text>

</string>

<string id="zat_a2_stalker_barmen_lesson_title_1">

<text>Доручення Бороди: знайти артефакт Медузу</text>

</string>

<string id="zat_a2_stalker_barmen_lesson_text_1">

<text>Артефакт Кристал знайденно. Знайти Медузу.</text>

</string>

<string id="zat_a2_stalker_barmen_lesson_title_2">

<text>Доручення Бороди: знайти артефакт Кристал</text>

</string>

<string id="zat_a2_stalker_barmen_lesson_text_2">

<text>Артефакт Медузу знайденно. Знайти Кристал.</text>

</string>

<string id="zat_a2_stalker_barmen_lesson_title_3">

<text>Доручення Бороди: передайте знайдені артефакти.</text>

</string>

<string id="zat_a2_stalker_barmen_lesson_text_3">

<text>Обидва артефакти знайдено. Віддайте їх Бороді і заберіть нагороду.</text>

</string>

Завантажити PDF-файл уроку

1.pdf