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

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


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

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

Два вопроса имеются:

 

1). Что означает green_location и blue_location ?

 

2). Как привязать инфо-поршень к предмету ? Т.е. к примеру берем квест на поиск предмета, при этом спауним его где-то на локации. В PDA подсказки:

"Найти предмет"

"Отнести предмет заказчику"

Идем, подбираем предмет - как сделать что-бы в этот момент происходило сообщение о выполнении пункта "Найти предмет" и выполнялся требуемый инфо-поршень ?

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


Ссылка на сообщение
Посмотри тему уроки по модостроению на этом же форуме. Там как раз рассматривался квест по типу "найти-принести"

Посмотрел, Вы имели в виду пример квеста по поиску АКСу ? Если я правильно разобрался, это не совсем то, о чем я спрашивал. Там, при диалоге с НПС, выполняется проверка на наличие в инвентаре необходимого предмета. А я о другом спрашивал.

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


Ссылка на сообщение
(изменено)

Уф, подразобрался малость - получилось сделать квест типа "найти-принести".

Правда не все гладко - не могу разобраться, почему у меня метка на карте на НПС, которому необходимо сдать квест, указывает совсем не на него, а куда-то в другое место. Место правда не меняется - это низинка с аномалиями за деревней новичков, где еще при первом подходе к этой низинке разрывает плоть в аномалии и выскакивает информационное сообщение от Сидора. НПС'а я создаю сам, спауню рядом от входа в бункер Сидоровича, двигаться ему запрещаю.

Чую, что-то я не прописал в его профиле ? Подскажите, что ?

 

И еще вопросик. Решил усложнить квест, для тренировки так сказать. Идея такая: есть созданный мною НПС и есть предмет, заспауненный где-то на локации. Хочу сделать, чтоб при взятии предмета актером в инвентарь, у этого НПС'а появлялся нужный диалог. До того как предмет взят актером, этого диалога быть не должно. Как сделать в этом случае ?

Хотя будет ли это квестом называться, в стандартном его понимании ?

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

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


Ссылка на сообщение
При взятии предмета выдавать этот поршень, тогда диалог появится

Проблема как раз в этом - как отследить взятие предмета актером, если никакого задания на это не выдавалось и соотетственно не крутится никакой скрипт, отслеживающий наличие этого предмета в инвентаре ?

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


Ссылка на сообщение
(изменено)

<phrase_list>
<phrase id="0">
    <text>Привет, сталкер...</text>
    <next>1</next>
</phrase>        
<phrase id="1">
    <text>escape_test_1</text>
    <next>2</next>
</phrase>
<phrase id="2">
    <text>escape_test_2</text>
<action>dialogs.break_dialog</action>
    <next>3</next>
</phrase>
<phrase id="3">
    <text>escape_test_3</text>
    <next>4</next>
</phrase>
<phrase id="4">
    <text>escape_test_4</text>
</phrase>
</phrase_list>

есть такой фрагмент кода. В нем в фразе 2 стоит

<action>dialogs.break_dialog</action>

если я правильно понимаю, то на этом месте диалог должен прерваться ?

А у меня выполняется фраза 3, и только тогда диалог прерывается.

Что это ?

 

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

Дальше - круче. Есть диалог, в котором завершается выполнение квеста по поиску и передаче предмета квестодателю.

<dialog id="escape_test_quest">
<dont_has_info>escape_test_quest_complete</dont_has_info>
<has_info>escape_test_quest_have_item</has_info>
<phrase_list>
    <phrase id="0">
        <text>Привет, сталкер...</text>
        <next>1</next>
    </phrase>        
    <phrase id="1">
        <text>escape_test_quest_phrase_1</text>
        <next>2</next>
    </phrase>
    <phrase id="2">
        <text>escape_test_quest_phrase_2</text>
        <next>3</next>
    </phrase>
    <phrase id="3">
        <text>escape_test_quest_phrase_3</text>
        <!-- здесь пытаюсь вызвать ф-цию -->
        <action>my_functions.test_func()</action>

        <!-- Завершаем задание -->
        <give_info>escape_test_quest_complete</give_info>
        <action>dialogs.break_dialog</action>
    </phrase>
</phrase_list>
</dialog>

Файл my_functions.script создан в папке gamedata/scripts, в нем тестовая ф-ция:

function test_func()

    text = "выполнена ф-ция test_func"
    news_manager.send_tip(db.actor, text, nil, nil, 6000)

    return true
end

в результате - квест засчитывается, сообщение об этом на экране появляется, в ПДА переходит в раздел "Выполненные". А ф-ция test_func() не выполняется. Что не так ?

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

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


Ссылка на сообщение
1. Зачем тогда писать 3 и 4 фразу если на 2 диалог точно заканчивается?

Вопрос не в этом, просто хочу знать - почему dialogs.break_dialog не прерывает диалог на той фразе, где ф-ция вызвана, а дает отработать еще одной фразе ?

 

Насчет скобок - привычка из нормального программирования, пока привыкну...

 

А как все-же насчет неправильного отображения метки НПС на карте ? (см. сообщение #328).

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


Ссылка на сообщение

А чему помогать-то ? Где коды диалога(ов)\задания(ий), что значит "восстановить у Сидоровича".....

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


Ссылка на сообщение
(изменено)

и опять же не забирается артефакт Выверт и отдаётся артефакт Грави, которого у меня в инвентаре нет

Чуток на эту тему: ф-ция типа relocate_item_section НЕ проверяет наличие необходимого предмета, а передает его путем создания\спавна. Следовательно, необходимо использовать какой-то прекондишн на проверку - а есть ли у ГГ требуемый предмет в инвентаре(то-бишь в рюкзаке). Если есть - передаем, если нет - блокируем ветку в диалоге на передачу предмета.

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

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


Ссылка на сообщение
(изменено)

bar_kornet_camp = true

esc_kornet_brigada = true

road_kornet_brigada = true

road_kornet_brigada_end = true

это лишнее, ведь ниже у тебя указаны условия активности для всех этих смартов.

 

 

а сразу ломится,почему-то на Агропром и там сидит

Какой-то из вышеперечисленных смартов находится на Агро ? И где именно он "сидит" - в каком гулаге ?

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

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


Ссылка на сообщение

Значит в Баре все-же сидит, т.е. bar_kornet_camp = {-kornet_esc} отрабатывает ? На Кордон должен идти - доходит или нет ? Или он даже в Баре не сидит ? Конкретнее, плиз...

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


Ссылка на сообщение

Ну вот уже яснее - все указывает на то, что Ваш непись под прописанные ему в кастом-дате гулаги не попадает. В самих гулагах, к примеру в bar_kornet_camp как работа для этого непися прописана ? Community непися подходит для гулага ?

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


Ссылка на сообщение
(изменено)
я спрашивал ещё в первый раз - предикат использовать нужно

так и я спрашивал

к примеру в bar_kornet_camp как работа для этого непися прописана

фрагмент кода покажи из load_job, где расписан гулаг bar_kornet_camp.

 

... даже попробовал такую

Да не будет иметь никакого значения, что в логике у непися, если сам гулаг его не может принять на работу. Т.е. должна соблюдаться логическая связка: непись имеет подходящий community и разрешение на работу в нужном гулаге(или как минимум подходящий community), а гулаг имеет работу\ы на которые может принять этого непися.

 

А "другой способ" это фигня, извиняй за выражение. Поправить выдачу работ в гулагах - проще и правильнее.

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

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


Ссылка на сообщение
(изменено)

Вроде нормально все, теперь давай в студию load_states и checkStalker, а так же какой community прописан неписю ?

И еще неплохо бы проверить - может место в bar_kornet_camp успевает занять какой-то другой непись, подходящий по community и твоему корнету просто уже нет места ? Вот он и уходит в другой гулаг.

 

Попробуй прописать предикэйт во все нужные гулаги...

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

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


Ссылка на сообщение
(изменено)

1) Заспавнить на нужном месте объект(лучше рестриктор, его можно будет использовать для логики квеста), у которого будет прописан стори_ид, зарегистрированный в файле gamedata\config\game_story_ids.ltx. На этот объект повесить метку нужного типа. Как вариант: если нужное место - существующий кэмп(ну обычно бочка с костром), можно попробовать задействовать рестриктор костра.

 

2)

как сделать, чтоб диалог появился после того, как непись дойдёт до указанного места? ...Куда можно повесить инфопоршин?А то через рестриктор не срабатывает..

Как раз на рестриктор и будет лучше всего. По входу в него выдавать инфо-порцию, по которой активировать нужную ветку в диалоге.

Изменено пользователем AndreySol
  • Не нравится 1

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


Ссылка на сообщение

 

 

Создавать ещё один игровой объект, который обновляется, к слову, через stalker_binder - да, очень правильно...

А перевод рестриктора в nil по завершению его активности еще никто вроде не отменял....

  • Нравится 1
  • Не нравится 1
  • Не согласен 1

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


Ссылка на сообщение

 

 

вот только при каждой загрузки такие рестрикторы всё равно проходят весь свой "путь" работы вплоть до nil. Чтобы такой рестриктор больше не приносил неудобств его нужно удалять, а не в nil переводить.

Чет мне нигде не попадалось в оригинале от ПЫСов, чтоб они вместо отключения рестриктора переводом в nil удаляли отработавшие свою логику...

Да и утверждение Ваше спорное, насчет прохождения рестрикторов при каждой загрузке по всей своей логике до nil.

Ну к примеру такая логика рестриктора:

[logic]active = sr_idle
 
[sr_idle]
on_actor_dist_le_nvis = 70 | sr_idle@check_start_graveyard
 
[sr_idle@check_start_graveyard]
on_info = {-gar_start_quest} sr_idle@start_graveyard %=gar_send_bes_alarm%
on_info2 = {+gar_start_quest} nil
 
[sr_idle@start_graveyard]
on_timer = 17000 | nil %+gar_start_quest =gar_dm_bandits_fight%

в ф-ции gar_send_bes_alarm выдается сообщение актеру и проигрывается звук.

По Вашему утверждению, при каждой загрузке сохраненки логика этого рестриктора будет отрабатывать заново ? Тогда при каждом приближении к рестриктору на установленное расстояние эта ф-ция будет отрабатывать ? Чет у меня это не происходит...

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


Ссылка на сообщение

 

 

Но посмотрите, как это все отрабатывается в соответствующих скриптах, и ужаснитесь.
Так может эти "соответствующие скрипты" в студию - вместе и поужасаемся...
  • Нравится 1
  • Не нравится 2

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


Ссылка на сообщение
(изменено)

Заранее прописанное в xml задание можно выдать так:

 local new_task = CGameTask()
 local result = new_task:load("идентификатор задания")
 db.actor:give_task(new_task, 3600000, true)

Если вторым параметром в give_task задать 0, то выдается бессрочно.

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

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


Ссылка на сообщение
1 час назад, Grishamen сказал:

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

Выдать в диалоге инфо-порцию, а в логике прописать необходимые действия. Про логику читать по ссылке ниже:

http://stalkerin.gameru.net/wiki/index.php?title=Настройка_логики._Часть_0

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

×
×
  • Создать...