Створення примітивного квеста на пошук предмета, без переробки спавна
на 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>