Перейти к контенту

Создание квеста


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

Извиняюсь за очень тупой вопрос, но как засчитать задание и выдать новое при поднятии квестового предмета?

Ну, да поможет Вам F1, да сохранит Вас F2, во имя Control`а, Alt`а и святого Delet`а. Enter.

Ссылка на комментарий

@Котошметик,  infoportion_set_complete использовать. С соответствующим поршнем, запускающим второе задание.

 

На примере почти оригинала. Унифицировать, откровенно говоря, лень:

gamedata\config\gameplay\tasks_escape.xml

Скрытый текст

Первое задание:

<game_task id="tutorial_find_artefact">
        <title>tutorial_find_artefact</title>
        <objective>
            ...
Поршень для закрытия первого задания:
            <infoportion_complete>tutorial_artefact_gain</infoportion_complete>
        </objective>
        <objective>
            <text>tutorial_find_artefact_1</text>
            ...
Поршень для закрытия первого задания:
             <infoportion_complete>tutorial_artefact_gain</infoportion_complete>


Вот здесь выдаём поршень, который запустит второе задание:
             <infoportion_set_complete>escape_dynamite_start</infoportion_set_complete>
        </objective>
    </game_task>

 

Второе задание:
<game_task id="esc_dinamit_to_volk">
...
</game_task>

 

gamedata\config\gameplay\info_l01escape.xml

Скрытый текст

 

Поршни первого задания
    <info_portion id="tutorial_artefact_start">
         <task>tutorial_find_artefact</task> -- первое задание взяли
    </info_portion>
    <info_portion id="tutorial_artefact_gain"></info_portion> --первое задание завершили

 

Поршень, запускающий второе задание:
    <info_portion id="escape_dynamite_start">
        <task>esc_dinamit_to_volk</task> -- запуск второго задания
    </info_portion>

 

 

gamedata\sripts\escape_tasks.script

Скрытый текст

Проверяем наличие квестового предмета для первого задания:
...
    if has_alife_info("tutorial_artefact_start") and -- первое задание взяли
          not has_alife_info("tutorial_artefact_gain") and -- но не закончили
        actor:object("af_blood_tutorial") ~= nil -- если предмет взяли, то
    then        
        actor:give_info_portion("tutorial_artefact_gain") -- выдаём поршень закрытия первого задания.
    end

 

  • Спасибо 1
Ссылка на комментарий

Здравствуйте.

На работе появилось свободное время и комп. Решил тряхнуть стариной и вспомнить "а что же я такого 10 лет тому делал".

 

И соответственно появилось три вопроса. Понимаю, что ответы были уже, но всё это сейчас очень трудно ищется, и прошу вас (если действительно были ответы) ткнуть носом в нужно место.

 

1. Диалог с торговцем. 

Как сделать чтобы до диалога у торговца не было ничего?

 

2. Читерство.

Подходишь ты к продавану в самом начале игры, у тебя 100500 денег и ты рад, но продаван вместо этого тебе в ответ "Что-то ты больно быстро обзавёлся такой суммой, а не наколотил ли ты бабушек в подворотне?" и соответственно посылает тебя в сад.

Условно какой-то формулой "время-деньги".

 

3. Артефакт.

Чтобы артефакт в продаже у продавана был, а вот из аномалии он вылететь не мог.

Т.е. (условно) искусственный артефакт, который получили в лаборатории или как пример: челюсть кровососа после трамплина.

 

Заранее благодарю за помощь и прошу прощения если не в том месте задан вопрос.

Ссылка на комментарий

@Saboteur 

1. Наверно сделать подгрузку ассортимента после получения инфопоршня. У торговцев в чистой игре ассортимент меняется после прохождения квестов (после выдачи определенного инфопоршня). Поговорил, получил инфо, ассортимент обновился. Настраивается все в файлах торговли конкретного торговца. 

2. На каком моменте должен посылать? При подходе, при диалоге, при попытке торговать? Я не помню, есть ли в игре функция, проверяющая количество денег у игрока. Вроде должна быть. Делаешь проверку на нее в нужный момент. Например зашиваешь в рестриктор около торговца и запрещаешь разговор, ставишь прекондишн в диалоги (чтобы одни ветки отключались, но включалась нужная), а вот как на кнопку торговли повесить эту проверку - не знаю. Или движок править, или как-то отслеживать нажатие.

3. Просто создать артефакт и не прописывать его в рождаемость аномалий, прописать торговцу как другие предметы.

Ссылка на комментарий
21.04.2021 в 18:46, Saboteur сказал(а):

2. Читерство.

Во первых, чисто по жизненной логике - чушь, чтоб торгаш, находящийся нелегально в ЧЗО, по сути под статьей, и сбывающий нелегально скупленные у нелегальных сталкеров артефакты, и чтоб он выеживался на тему откуда у конкретного сталкера взялись деньги???

Во вторых, что бы вы не навертели в диалогах и конфигах против читера - если он знает как использовать команду give_money, то что ему помешает найти и убрать из скриптов\конфигов все ваши "противучитерские" затычки?

  • Согласен 2
Ссылка на комментарий

По всем интернетам обучалки такие - "копируем это, вставляем в это(только буквы поменяйте на свои)". Непонятно, что, зачем, как это работает?

Меня же интересует такой вопрос - структура построения квеста, не знаю, как это правильно назвать. Т.е., в bind_stalker.script строка self.object:give_info_portion("storyline_actor_start") даёт инфопоршень "storyline_actor_start". Это я понял. Дальше уже в тумане. Вроде, \gamedata\config\gameplay\info_portions.xml это читает, и что-то там делает. Нарисуйте мне, пожалуйста, что-то типа:

strukt.png

 

Конкретно хочу сделать следующее - в начале НИ даётся квест "Забрать шняжку". Рядом бегает бандит с 0.25 хп и дружески настроеный к ГГ кровосос. Мне остаётся подойти, забрать с трупа шняжку, должен появиться кв "Отдай шняжку барыге" и стрелочка в ПДА на барыгу.

Изменено пользователем Orсhello
Добавлено  Опричник,

Перемещено.

Ссылка на комментарий

Ребята подскажите пожалуйста,хочу создать квест на платформе зов припяти(а точнее зов Чернобыля) на уничтожение лагеря,с чего лучше начинать,где смотреть?Извиняюсь за тупость если что…

Ссылка на комментарий

Доброе утро. Пытаюсь добавить новому нпс однотипные квесты(работу). Диалоги все появляются но при взятии задания принести артефакт.Вылет. Вчем может быть проблема? Огср движок

Скрытый текст

FATAL ERROR

[error]Expression    : start_node && path
[error]Function      : CXml::NavigateToNode
[error]File          : D:\a\OGSR-Engine\OGSR-Engine\ogsr_engine\xrCore\XML_Parser\xrXMLParser.cpp
[error]Line          : 95
[error]Description   : NavigateToNode failed in XML file 
[error]Arguments     : gameplay\game_tasks.xml

[16.11.24 04:43:45.009] ***************************[ScriptCrashHandler]**********************************
[16.11.24 04:43:45.009] stack traceback:
    [C]: in function 'load'
    d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\task_manager.script:311: in function 'action_give_task'
    d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\task_manager.script:1066: in function <d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\task_manager.script:1065>
[16.11.24 04:43:45.009]     Locals: 
[16.11.24 04:43:45.009]      userdata (*temporary) : (CGameTask): 0000019A3ECDC5F0
[16.11.24 04:43:45.009]      string (*temporary) : artefact_cit_vp
[16.11.24 04:43:45.009]     End

само задание

Скрытый текст

[tm_vasiliy_1]
type = artefact
community = actor
text = text_tm_vasiliy_1
description = desc_tm_vasiliy_1
parent = cit_vp
target = af_medusa
reward_money = 2000
reward_reputation = +10

 

Изменено пользователем Stalkersof
Ссылка на комментарий

@Stalkersof ,
dialogs.xml:

Скрытый текст
    <dialog id="tm_barman_dialog" priority="-1">
        <init_func>task_manager.init_barman_task_dialog</init_func>
    </dialog>
    <dialog id="tm_barman_reward" priority="0">
        <init_func>task_manager.init_barman_reward_dialog</init_func>
        <precondition>task_manager.has_active_vendor_task</precondition>
    </dialog>

 

 

game_tasks_by_vendor.xml - вот это первым делом проверить.

Скрытый текст
    <!-- barman -->
    <game_task id="eliminate_lager_barman">
        <title>title</title>
        <objective>
            <text>objective</text>
            <icon>ui_iconsTotal_eliminate_lager</icon>
            <function_complete>task_manager.task_complete</function_complete>
            <function_fail>task_manager.task_fail</function_fail>
        </objective>
    </game_task>

 

 

task_manager.script

Скрытый текст
local parent_by_story = {
    [003] = "trader",
    [500] = "barman",
    [902] = "ecolog",
    [507] = "dolg",
    [707] = "freedom",
    [006] = "wolf",
    [004] = "shustriy",
    [510] = "drunk_dolg",
    [504] = "hunter",
    [518] = "zastava_commander",
    [506] = "petrenko",
    [607] = "lisiy",
    [515] = "mercenary"
}

local story_by_parent = {
    trader                        = 003,
    barman                        = 500,
    ecolog                        = 902,
    dolg                        = 507,
    freedom                        = 707,
    wolf                        = 006,
    shustriy                    = 004,
    drunk_dolg                    = 510,
    hunter                        = 504,
    zastava_commander            = 518,
    petrenko                    = 506,
    lisiy                        = 607,
    mercenary                    = 515
}

 

?

  • Спасибо 1
  • Полезно 1
Ссылка на комментарий

Еще такой вопрос по однотипным квестам. Сделал два квеста с идентификатором find_item (поиск предмета) но отображается только один, т.е нельзя сделать чтоб два квеста отображались в диалоге с одним идентификатором или можно как то.

Ссылка на комментарий

@Stalkersof, параметр "приоритет" (prior = ) в task_manager.ltx у заданий какой? Вроде должно нормально отрабатывать этот момент даже  в оригинале.

Подводные камни:

1. Активным по умолчанию всё равно может быть только 1 квест данного типа (в task_manager.script у GSC даже комментарий есть по этому поводу). Без правки кода одновременно "найти" 2 предмета не получится (2 активных задания одного типа у вендора быть не может).

2. Если не ошибаюсь, это всё пишется в pstore actor-a, а он очень ограничен по размеру, т.е. следить за возможным переполнением. Что там по этому поводу в OGSR сделано - :unknw:.

  • Полезно 1
Ссылка на комментарий

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

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

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

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

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

Войти

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

Войти
  • Недавно просматривали   0 пользователей

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