209 сообщений в этой теме

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

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

[spoiler=Разбираем конкретно параметры:]
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

title_functor - функция-обработчик для заголовка (по умолчанию condlist)
Примеры смотри в task_functor.script

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

descr_functor - функция-обработчик для описания (по умолчанию condlist)
Примеры смотри в task_functor.script

target - цель на карте (метка)
Примеры использования:
target = zat_a2_stalker_barmen (ID объекта (в данном случае нпц), на которого будет поставлена метка)
target = {
условие}obj_id- если выполняется условие, метка будет поставлена на выбранный объект.

descr_functor - функция-обработчик для цели (должна возвращать ID персонажа) (по умолчанию target_condlist)
Примеры смотри в task_functor.script

condlist_x - группа параметров, позволяющая задавать условия выполнения, провала или отмены задания. Число в имени ключа позволяет задать несколько последовательно пронумерованных (начиная с нуля) параметров. Кондлист каждого параметра может возвращать следующие значения: complete (выполнить задание), fail (провалить задание), reversed (отменить задание).
Примеры использования:
condlist_0 = {условие} complete - если выполняется условие, задание выполнено.
condlist_1 = {
условие} reversed - есливыполняется условие, значит есть возможность повторить задание.
condlist_2 = {
условие} fail - если
выполняется условие, задание провалено.

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


reward_money - денежная награда
reward_item - награда в виде предмета

Примеры использования:
reward_money = 5000 -- даем актору 5000.
reward_item = wpn_ak74 -- даем актору АК-74


Примечание: Награда выдается двумя методами: от НПЦ или просто свалиться с неба. Если не найден НПЦ, с которым мы в диалоге, то валится с неба.

dont_send_update_news - булевое значение. При включении отключает новости при обновлении квеста.

[spoiler=Создаем примитивный квест:]
Используемые файлы:
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">
<dont_has_info>quest_vodka_done</dont_has_info>
<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>

Сохраняем




Скачать пример квеста - по этой ссылке или по этой
Источник: link


Создание квеста с использованием рестрикторов (Автор - @GEONЕZIS)

Создание многоэтапного квеста на последовательный поиск предметов (Автор - @GEONЕZIS)

Создание квеста с добавлением дополнительных внутриэтапных подзаданий. Особенности- отсутствие диалогов, использование рестрикторов.  (Автор - @GEONЕZIS)

Создание квеста с добавлением дополнительных внутриэтапных заданий. Особенности- отсутствие диалогов, использование физических объектов класса physic_destroyable_object в качестве квестовых предметов. (Автор - @GEONЕZIS)

Создание квеста с добавлением дополнительных внутриэтапных заданий. Особенности- отсутствие диалогов, добавление тайников в качестве квестовых предметов. (Автор - @GEONЕZIS)

Создание однотипного квеста на одновременный поиск двух разных предметов. Особенности- использование элементарных скриптовых функций actor_has_item() (Автор - @GEONЕZIS)

Создание примитивного квеста на поиск двух различных предметов, с выдачей ачивмента. 

Особенности- способ написания задание с его обновлением по инфопорциям, добавление по завершении простого достижения (ачивмента). (Автор - @GEONЕZIS)

Создание сложного квеста с использованием объекта класса inventory_box. Особенности- отсутствие диалогов, использование рестрикторов, выдача тайника в качестве награды. (Автор - @GEONЕZIS)

 

Квест на убийство мутанта через туториал ("Press F To Win") (Автор - @FantomICW)

 

 

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

  • http://www.amk-team.ru/forum/uploads//ratings/bf.gif × 1
  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 4

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


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

Наконец-то хоть кто-то написал нормальный мануал... XMK респект и +.

Изменено пользователем кровоSTALKER

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


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

а будет продолжение? Очень интересно!

 

 

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

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


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

Я не понял только одно, как сделать чтобы например ГГ отдаёт водку, а борода взамен ему давал арт, и где распологаються кодовые имена, вот например в квесте водка код бороды boroda!

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


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

Dead men, по-русски пожалуйста опиши что тебе надо

и что за кодовые имена? спавн-секции чтоли?

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


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

Ну я новичёк, поэтому незнаю как это точно называется, ну вот например код колбасы = st_kolbasa, а мне нужен код кардана и вообще где они храняться!!! :ny_unsure:

 

хочу узнать!! :ny_ph34r_1:

 

Я не понял только одно, как сделать чтобы например ГГ отдаёт водку, а борода взамен ему давал арт, и где распологаються кодовые имена, вот например в квесте водка код бороды boroda!

 

 

Ну я новичёк, поэтому незнаю как это точно называется, ну вот например код колбасы = st_kolbasa, а мне нужен код кардана и вообще где они храняться!!! :ny_unsure:

Ответьте плиз!!!

Строгое предупреждение от модератора n6260
Рин одли на сутки за дублирование постов в теме.

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


Ссылка на сообщение
Поделиться на других сайтах
а будет продолжение? Очень интересно!

что именно? Задавайте вопросы, по возможности отвечу

 

Dead men Если ты этого не знаешь, зачем лезешь в квестостроение?

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


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

XMK как я понял предмет который от нас требуется прописывается в скрипте?

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

Верно?

Раньше квесты не писал... с конфигами дружу, попробую. Спасибо.

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


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

Перво-наперво,спасибо огромное за статью по созданию квеста в ЗП. Буду читать,пробовать. И небольшой вопрос.

На что влияет приоритет квеста и его сюжетность/не сюжетность?

 

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


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

Строгое предупреждение от модератора Halford
Не цитируем предыдущий пост.

Это же примитивный квест, на сюжет он ни как не влияет. Репутация игрока скорее тоже не изменится. Так что... в общем грубо говоря такие квесты чисто для разнообразия игры.

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


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

Вопросы:

Как поставить ограничитель, что бы квест раньше н-времени не появлялся?

Что бы было несколько ответов

И как быть что бы квест сам появлялся как например сообщение от охотника на янове о появлении химеры?

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


Ссылка на сообщение
Поделиться на других сайтах
Это же примитивный квест, на сюжет он ни как не влияет. Репутация игрока скорее тоже не изменится. Так что... в общем грубо говоря такие квесты чисто для разнообразия игры.

Я имел в виду это.

storyline - флаг задания (true - сюжетное, false - несюжетное)

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


Ссылка на сообщение
Поделиться на других сайтах
Как поставить ограничитель, что бы квест раньше н-времени не появлялся?

Вроде:

<dont_has_info>jup_b15_zulus_b301_reward_dialog</dont_has_info>

Это лепить надо после:

<dialog id="ваше_название">

Теперь диалог появится после того как найдете Зулуса в Припяти и возьмете пулемет, но я могу ошибаться.

Что бы было несколько ответов

    <dialog id="ваше_название">
    <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>
                </phrase>
        <phrase id="3">
        <text>Убью гад.</text>    
                <!---<action>dialogs.break_dialog</action>--->
            </phrase>            
    </phrase_list>    
    </dialog>

 

И как быть что бы квест сам появлялся как например сообщение от охотника на янове о появлении химеры?

ХЗ)

 

Ответьте плиз!!!

www.google.ru

Или

http://www.stalkerin.gameru.net/wiki/index...%B8%D1%86%D0%B0

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

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


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

Проверил да, ты был прав с проверкой на выдачу квеста! Спасибо! пойду шаманить над фриплеем...

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


Ссылка на сообщение
Поделиться на других сайтах
Теперь диалог появится после того как найдете Зулуса в Припяти и возьмете пулемет, но я могу ошибаться.

Если я не ошибаюсь,don't это отрицание,то есть проверка идёт на то,что поршня нет. То есть до диалога будет задание,а после-нет,не возьмёшь уже.

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


Ссылка на сообщение
Поделиться на других сайтах
XMK как я понял предмет который от нас требуется прописывается в скрипте?

да, это прекондишн для диалога

 

на обновление задания стоит:

title = {=actor_has_item(vodka)}vodka_barmen_prinesti_name,

 

На что влияет приоритет квеста и его сюжетность/не сюжетность?

после выполнения какого либо квеста, вероятность что игра переключится на этот

 

Репутация игрока скорее тоже не изменится.

чтоб изменить репу игрока у сталкеров при выполнении квеста (пример) надо дописать:

on_complete = %=inc_faction_goodwill_to_actor(stalker:200)%

 

 

Как поставить ограничитель, что бы квест раньше н-времени не появлялся?

в диалог проверки на инфопоршни вставляй

статья по диалогам:

http://www.stalkerin.gameru.net/wiki/index...%D0%BE%D1%80%29

 

Guzerus

<dont_has_info> проверка на отсутствие опр.инфопоршня

<has_info> проверка на присутствие опр.инфопоршня

<precondition>файл.функция</precondition> сюда можно запихать функцию, в которой можешь проверить всё что угодно

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


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

Назрел уникальный вопрос: возможно что бы взятия квеста начился скриптовый музон?!

 

Добавлено через 62 мин.:

Сделал квест для Шульги но происходит вылет:

Expression : false

Function : CXml::Load

File : D:\prog_repository\sources\trunk\xrXMLParser\xrXMLParser.cpp

Line : 87

Description : XML file:gameplay\dialogs_jupiter.xml value: errDescr:Error reading end tag.

 

Вот диалог

<game_dialogs>

<dialog id="arsenal_duty_dialog">

<give_info>jup_b207_sell_dealers_pda_freedom</give_info>

<phrase_list>

<phrase id="0">

<text>Здраствуй командир, чего грустный такой?</text>

<next>1</next>

<phrase>

<phrase id="1">

<text>Да кто то сдал наш склад свободе, а там столько оружия было...теперь ситуация в лагере не в нашу пользу..Короче рядом есть старый склад, принеси нам оттуда оружия,сталкер, будь другом.</text>

<next>2</next>

<next>4</next>

<phrase>

<phrase id="2">

<text>Так и быть помогу.</text>

<give_info>quest_arsenal_give</give_info>

<action>dialogs_jupiter.give_arsenal_quest</action>

<phrase>

<phrase id="4">

<text>Я подумаю</text>

<action>dialogs.break_dialog</action>

<phrase>

 

<dialog id="arsenal_duty_prines">

<has_info>arsenal_duty_give</has_info>

<precondition>dialogs_jupiter.is_has_arsenal_duty</precondition>

<phrase_list>

<phrase id="1">

<text>Отлично теперь бойцы смогут сделать склад на подходах к Чернобылю-2</text>

 

<next>2</next>

</phrase>

<phrase id="0">

<has_info>arsenal_has_duty</has_info>

<text>Вот твой драный арсенал!Ух и тяжелый!</text>

<next>1</next>

</phrase>

<phrase id="2">

<text>?!</text>

<action>dialogs_zaton.transfer_arsenal_to_duty</action>

<next>3</next>

</phrase>

<phrase id="3">

<text>Прости просто это оружие нужно было для нашей ударной группы, идущей к Чернобылю-2. У меня есть инфа что туда пытаются и бандосы попасть, а этого допустить нельзя!</text>

<give_info>arsenal_duty_done</give_info>

</phrase>

<phrase_list>

 

 

 

Добавлено:

Скажите в чем проблема

Сообщение от модератора Halford
Не накрыл где-то тэг...

 

Добавлено через 161 мин.:

Эмм поясните поподробней про этот тег, что такое и с чем его едят?

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

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


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

</dialog>

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


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

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

 

Добавлено через 62 мин.:

Кажется нашел в чем проблема-не создается развлетвленный диалог с двумя и более вариантами ответа-если делать по схеме ТЧ

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


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

Поправьте,если ошибаюсь,но у уважаемого ZeeK в первой части диалога написано.

<game_dialogs>

<dialog id="arsenal_duty_dialog">

<give_info>jup_b207_sell_dealers_pda_freedom</give_info>

<phrase_list>

<phrase id="0">

<text>Здраствуй командир, чего грустный такой?</text>

<next>1</next>

<phrase>

И в других так же. В то время как надо ставить закрытие "/".

Вот в этой части,везде просто <phrase>.

<game_dialogs>

<dialog id="arsenal_duty_dialog">

<give_info>jup_b207_sell_dealers_pda_freedom</give_info>

<phrase_list>

<phrase id="0">

<text>Здраствуй командир, чего грустный такой?</text>

<next>1</next>

<phrase>

<phrase id="1">

<text>Да кто то сдал наш склад свободе, а там столько оружия было...теперь ситуация в лагере не в нашу пользу..Короче рядом есть старый склад, принеси нам оттуда оружия,сталкер, будь другом.</text>

<next>2</next>

<next>4</next>

<phrase>

<phrase id="2">

<text>Так и быть помогу.</text>

<give_info>quest_arsenal_give</give_info>

<action>dialogs_jupiter.give_arsenal_quest</action>

<phrase>

<phrase id="4">

<text>Я подумаю</text>

<action>dialogs.break_dialog</action>

<phrase>

 

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

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


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

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

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!


Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.


Войти

  • Пользователи, читающие эту тему   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.