Перейти к содержанию
Hardtmuth

[CoP] Создание типовых квестов в Зове Припяти

Рекомендуемые сообщения

 

Co-P.jpg

Статья написана: Xmk

Разбор системы квестов в S.T.A.L.K.E.R. Зов Припяти:

Разбираем конкретно параметры:

Спойлер

icon - иконка квеста
Пример использования: icon = ui_inGame2_Put_v_pripyat

prior - приоритет квеста
Пример использования: prior = 112

storyline - флаг задания (true - сюжетное, false - несюжетное)
Пример использования: storyline = true

title - название задание (id из xml) - если брать название не из xml, то в игре оно будет отображаться без пробелов
Пример использования: title = zat_a9_way_gates_check_transport_workshop_name

descr - описание задания (id из xml) - если брать название не из xml, то в игре оно будет отображаться без пробелов
Пример использования: descr = zat_a9_way_gates_check_transport_workshop_text

target - цель на карте (метка)

Примеры использования:
target =zat_a2_stalker_barmen (ID нпц, на которого будет поставлена метка)
target = {+название_инфопоршня}zat_a2_stalker_barmen -- проверка инфопоршня, после которого метка будет поставлена на нпц

on_init - инфопоршень, который "включает" задание
Пример использования: on_init = %+название_инфопоршня%

condlist_x -- блок условий. возможные значения complete, reversed, fail

Примеры использования:
condlist_0 = {+название_инфопоршня} complete - если поршень есть, задание выполнено
condlist_1 = {+название_инфопоршня} reversed - если поршень есть, есть возможность повторить задание
condlist_2 = {+название_инфопоршня} fail - если поршень есть, задание провалено

on_complete - действия, которые выполняются, если задание выполнено
on_reversed - действия, которые выполняются, если задание провалено

Примеры использования:
on_complete = %=inc_faction_goodwill_to_actor(stalker:200)% -- повышаем репу у сталкеров (функция юзаются из xr_effect)
on_reversed = {+название_ифопоршня} %=inc_faction_goodwill_to_actor(stalker:200)% -- повышаем репу у сталкеров, только если есть опр.инфопоршень
on_complete = %+название_инфопоршня% -- выдаем инфопоршень

reward_money - денежная награда

Пример использования: reward_money = 5000

Создаем примитивный квест:

Спойлер

Используемые файлы:
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>

Сохраняем.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Здравствуйте. Я знакомлюсь с модостроением на зп,начинаю делать мод,будет такое задание:придти на место *запускается кат-сцена*  и после неё будет задание помочь отбитьься от противника

Я искал как это сделать, но нигде не нашёл. И вот как такое сделать?

Зарание спасибо

Изменено пользователем Belka_mod

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Решил перед использованием немного изучить структуру кода, функции как в С++, xml ссылки. Короче час я склеивал и переклеивал этот урок, сбивало то что "quest_vodka_give" и "give_vodka_quest" похожи, я не сразу обратил внимание и сбивался приходя не туда, всё сошлось, но вот так и не понял где выполняется "quest_has_vodka".

По идеи это своего рода условие, при котором я увижу диалог: "Вот твоя водяра", но я не нашел где я получаю "quest_has_vodka".

Тем не менее не понял именно часть выполнения квеста в диалоге, но сейчас гляну как это работает в игре! 

А все-таки хотелось бы узнать подробнее как выполняется "quest_has_vodka"


Дополнено 23 минуты спустя

После выполнения задания, имея при себе водку, можно снова дать ее Бороде, хотя квеста нету, нужно добавить строку <dont_has_info>quest_vodka_done</dont_has_info> после <dialog id="vodka_quest_prines"> в файле dialog_zaton.xml

<dialog id="vodka_quest_prines">

<dont_has_info>quest_vodka_done</dont_has_info>

<has_info>quest_vodka_give</has_info>

Осталось разобраться, после выполнения задания, оно сначала обновляется, а потом уже выполняется, так как первым делом мы лишились водки, и задание сменилос "с принести, на найти" и тут же выплнилось так как условие что водку отдали выполнено. Буду искать порядок, а сейчас уже спать пошел


Дополнено 55 минуты спустя

Странно, поменял порядок, чтобы сначала применилось quest_vodka_done а потом забрал водку, и все равно сначала Актор теряет водку и задание меняется, а следом выполняется, или быть может quest_vodka_done, не применяется до конца всего диалога?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу