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

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


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

Попробуй таск сделать вот так

<game_task id="escape_krisuk_quest">

<title>Найти документы в Х-10</title>

<objective>

<text>Отдать документы Сяку</text>

<icon>ui_iconsTotal_find_item</icon>

<infoportion_complete>zadanie_krisuk_vipolnil</infoportion_complete>

<article>opisanie_2</article>

</objective>

<objective>

<text>Найти спрятанные документы</text>

<function_complete>dap_werit.escape_krisuk_have</function_complete>

<infoportion_set_complete>zadanie_krisuk_vipolnil</infoportion_set_complete>

</objective>

<objective>

<text>Отдать документы Сяку</text>

<infoportion_complete>zadanie_krisuk_vipolnil</infoportion_complete>

<map_location_type hint="Сяк">blue_location</map_location_type>

<object_story_id>Sak</object_story_id>

</objective>

</game_task>

 

Создаю глобальный мод с новыми локациямЭ

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

Вот еще в сети нашёл статью

Однотипные квесты

Содержание
1 Описание
2 Структура однотипных квестов
3 Создаем квест
4 Авторы


Как известно, при разговоре с некоторыми NPC (Сахаров, Бармен, Сидорович, Лукаш, Волк, Шустрый Долговец, Лысый, Охотник и Осведомитель) появляется ветка «есть ли для меня работа?». В целях упрощения создания однотипных квестов, выдаваемых через эту ветку, разработчики создали следующую схему...


Сами задания находятся в конфиге:


gamedata\config\misc\task_manager.ltx

Цели квестов и условия их выполнения фиксируются в скрипте:
gamedata\scripts\task_manager.script

Ветки диалогов, отвечающие за эти задания (например, у Сидоровича) выглядит так:

<actor_dialog>tm_trader_dialog</actor_dialog>
<actor_dialog>tm_trader_reward</actor_dialog>

Где первый actor_dialog – диалог с выдачей задания, а второй - диалог по заданию и получению награды, либо отказа от выполнения оного. Никто нас насильно его выполнять не заставляет.

При получении задания информация об этом прописывается и в PDA, не забываем об этом. Информация добавляется с помощью файла:
gamedata\config\gameplay\storyline_info_taskmanager.xml

Описание задания хранится в файле:
gamedata\config\text\rus\stable_task_manager.xml

Всего существует шесть видов подобных заданий:
eliminate_lager - уничтожить лагерь
defend_lager - защитить лагерь
kill_stalker - убить сталкер
artefact - найти артефакт
monster_part - найти часть монстра
find_item - найти предмет


Для создания дополнительного квеста у Сидоровича нам понадобятся всего три файла:
gamedata\config\gameplay\storyline_info_taskmanager.xml
gamedata\config\misc\task_manager.ltx
gamedata\config\text\rus\stable_task_manager.xml

Открываем task_manager.ltx, в начале видим длинный список заданий, а уж потом сами задания и условия выполнения к ним. Т.е. cначала идет:

[...]
tm_kill_stalker_5
tm_kill_stalker_6
tm_kill_stalker_7
[...]

А затем то, что нам нужно:

[...]
[tm_kill_stalker_6]
type = kill_stalker
community = actor
text = tm_kill_stalker_6_text
description = tm_kill_stalker_6_descr
parent = trader
target = sim_stalker_novice
;reward_money = 1000
reward_reputation = +3
reward_rank = 2
reward_item = af_vyvert, conserva
time = 86400
prior = 1

[tm_kill_stalker_7]
type = kill_stalker
community = actor
text = tm_kill_stalker_7_text
description = tm_kill_stalker_7_descr
parent = trader
target = esc_wolf
reward_money = 10000
reward_reputation = +3
reward_rank = 2
reward_item = vodka, conserva
time = 86400
prior = 1
[...]

Рассмотрим структуру этих записей, заодно создав новую:
[tm_kill_stalker_7] – наше задание
type = kill_stalker – тип задания, в данном случае – убийство сталкера
community = actor – комьюнити, к которому принадлежит выполняющий задание (странный параметр, в игре используется - везде выставлен равным actor'у)
text = tm_kill_stalker_7_text – описание нашего задания в диалоге
description = tm_kill_stalker_7_descr – описание нашего задания в PDA
parent = trader - заказчик
target = esc_wolf – цель, в данном случае мы собираемся грохнуть Волка
reward_money = 10000 – сколько денег нам дадут за выполнение
reward_reputation = +3 – повышение/понижение репутации после выполнения задания
reward_rank = 2 – кличество очков ранга, выдаваемых за выполнение
reward_item = vodka, conserva – предметы, выдаваемые в награду за квест
time = 86400 – время выполнения квеста
prior = 1 – приоритет задания

Не забываем про PDA. В файл:
gamedata\config\gameplay\storyline_info_taskmanager.xml

Добавляем следующие строки:

<article id="tm_kill_stalker_7_descr" name="kill_stalker" article_type="task">
        <text>tm_kill_stalker_7_descr</text>
</article>

Текст на русском для задания нужен? Тогда открываем
gamedata\config\text\rus\stable_task_manager.xml

И туда вгоняем следующие строки:

<string id="tm_kill_stalker_7">
        <text>Убить Волка</text>
    </string>
    <string id="tm_kill_stalker_7_text">
        <text>Достал меня Волк! Понимаешь, достал! Ворует у меня водку, понимаешь, потом идет и клянчит деньги на
тушенку, потому что новички его не слушают и есть ничего не дают, а вот сойти со своего места и пойти охотится на кабанов, он,
видите ли, не хочет, ибо ЛЕНЬ! Грохни его, Меченый, я в долгу не останусь.</text>
    </string>
    <string id="tm_kill_stalker_7_descr">
        <text>Сидрыч заказал убийство Волка</text>
    </string>

Важно! Эти строки не должны выходить за пределы тегов <string_table> и </string_table>.

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


Статья создана: Arhet
+ еще есть программа для создания основы таких квестов
Но вставлять их в игру самому надо Изменено пользователем Murarius

Oldstalket-Team

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

Exo_G@mer, Глупость. Такие квесты уже никто не делает

Сообщение от модератора ColR_iT
Я делаю! Не говори того, чего не может быть впринципе.
Изменено пользователем ColR_iT

Создаю глобальный мод с новыми локациямЭ

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

Создал квест.А как его зделать сюжетным?или как убрать сюжет.В зове припяти я знаю как убираеться сюжет.А вот в ТЧ не знаю.

Oldstalket-Team

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

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

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

 

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

 

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

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

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

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

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

Создаю глобальный мод с новыми локациямЭ

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

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

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

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

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

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

 

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

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

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

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

PS: если не представляешь как это сделать, прошу в личку.

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

ТЧ 1.0004. SAP и Trans mod

github

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

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

Ссылка на комментарий
AndreySol, недавно напоминал. Клик, только секцию при проверке нужно поменять на свою. Как выдать инфопоршень, можно найти в Справочнике по функциям и классам. Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

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

Здраствуйте пытаюсь создать квест в чистом небе типа сходи поговори

но как создать скрипт не знаю может поможете? :ny_rolleyes:

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

<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 диалог точно заканчивается?

2. <action>my_functions.test_func()</action>, скобки убери, а в функции убери return. Возврат нужен для скриптовой проверки, я не помню какой тег для этого, но для action этого не надо.

ТЧ 1.0004. SAP и Trans mod

github

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

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

 

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

 

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

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

Люди если кому не лень создайте для меня урок(как для новичка) по созданию квеста,хочу создать такой квест как первый в тч,что бы меня

ждали люди я прихожу к ним и мы идём штурмовать лагерь!!!!!!!

 

Лучше свою лень побори. Поищи по форуму, почитай. Cyclone

  • Не нравится 1
Ссылка на комментарий

помогите квест делал на основе нового персонажа заспауниного через скрипт. ему задание добавил, а оно не даётся хотя звук соответствующий просходит, вот файлы помогите http://rghost.ru/35720215

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

помогите пожалуйста. При создании квеста новому нпс в тч на кардоне. квест не выдаёться см скрины

d312e98d8427.jpg

425e9f324d1c.jpg

 

так вот почему так происходит.

<dialog id="esc_unik_npc_qest">

<dont_has_info>esc_unik_npc_start</dont_has_info>

<phrase_list>

<phrase id="0">

<text>esc_unik_npc_qest_0</text>

<next>1</next>

</phrase>

<phrase id="1">

<text>esc_unik_npc_qest_1</text>

<next>2</next>

</phrase>

<phrase id="2">

<text>esc_unik_npc_qest_2</text>

<next>3</next>

</phrase>

<phrase id="3">

<text>esc_unik_npc_qest_3</text>

<next>4</next>

</phrase>

<phrase id="4">

<text>esc_unik_npc_qest_4</text>

<next>5</next>

</phrase>

<phrase id="5">

<text>esc_unik_npc_qest_5</text>

<next>6</next>

</phrase>

<phrase id="6">

<text>esc_unik_npc_qest_6</text>

<next>7</next>

</phrase>

<phrase id="7">

<text>esc_unik_npc_qest_7</text>

<next>8</next>

<next>9</next>

</phrase>

<phrase id="8">

<text>esc_unik_npc_qest_8</text>

<give_info>esc_unik_npc_start</give_info>

<action>new_life.spawn_ak74u</action>

</phrase>

<phrase id="9">

<text>esc_unik_npc_qest_9</text>

<action>dialogs.break_dialog</action>

</phrase>

<phrase id="10">

<text>esc_unik_npc_qest_10</text>

</phrase>

</phrase_list>

</dialog>

<dialog id="esc_unik_npc_completed">

<precondition>new_life.escape_ak74u_have</precondition>

<has_info>escape_ak74u_have</has_info>

<dont_has_info>escape_ак74u_done</dont_has_info>

<phrase_list>

<phrase id="0">

<text>esc_unik_npc_completed_0</text>

<next>1</next>

</phrase>

<phrase id="1">

<text>esc_unik_npc_completed_1</text>

<next>2</next>

</phrase>

<phrase id="2">

<text>esc_unik_npc_completed_2</text>

<give_info>escape_ak74u_done</give_info>

<action>new_life.give_ak74u</action>

<next>3</next>

</phrase>

<phrase id="3">

<text>esc_unik_npc_completed_3</text>

<action>new_life.complete_quest</action>

</phrase>

</phrase_list>

</dialog>

 

<game_information_portions>

<info_portion id="storyline_actor_start">

<task>storyline_eliminate_gunslinger</task>

<action>esc_unik_npc.esc_unik_npc</action>

</info_portion>

 

<!---------------------------------------esc_unik_npc----------------------------------------------------->

<specific_character id="esc_unik_npc" team_default = "1">

<name>esc_unik_npc</name>

<icon>ui_npc_u_stalker_neytral_rukzak_3</icon>

<bio>esc_wolf_bio</bio>

 

<class>trader</class>

<community>trader</community> <terrain_sect>stalker_terrain</terrain_sect>

 

<rank>367</rank>

<reputation>-60</reputation>

<money min="60000" max="200000" infinitive="0"/>

 

<snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>-1</crouch_type>

 

<visual>actors\neytral\stalker_neytral_rukzak_3</visual>

<supplies> [spawn] \n

wpn_vintorez \n

ammo_9x39_pab9 \n

#include "gameplay\character_food.xml"

</supplies>

#include "gameplay\character_criticals_3.xml"

<actor_dialog>esc_unik_npc_qest</actor_dialog>

<actor_dialog>esc_unik_npc_completed</actor_dialog>

<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>

</specific_character>

 

<game_task id="escape_ak74u">

<title>Найти потерянный Калаш</title>

<objective>

<text>Найти потерянный Калаш</text>

<icon>ui_iconsTotal_weapons</icon>

<infoportion_complete>escape_ak74u_done</infoportion_complete>

<article>tex_escape_ak74u</article>

</objective>

<objective>

<text>Найти Калаш</text>

<function_complete>new_life.escape_ak74u_have()</function_complete>

<infoportion_set_complete>escape_ak74u_have</infoportion_set_complete>

</objective>

<objective>

<text>Принести Калаш Живому</text>

<map_location_type hint="Живой">blue_location</map_location_type>

<object_story_id>esc_unik_npc</object_story_id>

<infoportion_complete>escape_ak74u_done</infoportion_complete>

</objective>

</game_task>

 

<info_portion id="esc_unik_npc_start">

<task>escape_ak74u</task>

</info_portion>

<info_portion id="escape_ak74u_have"></info_portion>

<info_portion id="escape_ak74u_done"></info_portion>

 

 

function spawn_ak74u()

    amk.spawn_item("wpn_gauss",vector():set(-223.36528015137,-19.629007559478,-132.66230773926),30990,62) -- спавн ak74u в тоннеле на кордоне

end

 

function escape_ak74u_have()

    return sak.have_item_namber("wpn_ak74u",1) ~= false -- проверка на нахождение предмета в рюкзаке

end

 

function give_ak74u(first_speaker, second_speaker) -- передача предмета

    sak.out_item_namber("wpn_ak74u", 1)

end

 

function complete_quest(first_speaker, second_speaker) -- получение награды

    dialogs.relocate_money(second_speaker, 5000, "in")

end

 

 

local items_count=0

local itemin=nil

 

function have_item_namber(itm,need_namber)

local actor=db.actor

items_count=0

itemin=itm

actor:iterate_inventory(cheking_item,actor)

if items_count>=need_namber then

return true

else

return false

end

end

function cheking_item(actor,item)

local items=item:section()

if items==itemin then

items_count=items_count+1

end

end

function create_items(npc,section,number)

for i=1,number do

alife():create(section,

npc:position(),

npc:level_vertex_id(),

npc:game_vertex_id(),

npc:id())

end

end

local reloc_params={}

local stalk

function out_item_namber(itm_section,need_number)

reloc_params.itm_section=itm_section

reloc_params.itm_cnt=need_number

reloc_params.itm_cnt_found=0

db.actor:iterate_inventory(checkout_items_count,db.actor)

reloc_params.itm_cnt_found=0

if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then

db.actor:iterate_inventory(out_items_count,db.actor)

end

news_manager.relocate_item(db.actor, "out", itm_section)

reloc_params={}

end

function relocate_item_namber(stalker,itm_section,need_number)

stalk=stalker

reloc_params.itm_section=itm_section

reloc_params.itm_cnt=need_number

reloc_params.itm_cnt_found=0

db.actor:iterate_inventory(checkout_items_count,db.actor)

reloc_params.itm_cnt_found=0

if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then

db.actor:iterate_inventory(reloc_items_count,db.actor)

end

news_manager.relocate_item(db.actor, "out", itm_section)

reloc_params={}

end

function checkout_items_count(actor,item)

if item.section and item:section()==reloc_params.itm_section then

reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1

end

end

function reloc_items_count(actor,item)

if item.section and item:section()==reloc_params.itm_section and reloc_params.itm_cnt_found<reloc_params.itm_cnt then

db.actor:transfer_item(item, stalk)

reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1

end

end

function out_items_count(actor,item)

if item.section and item:section()==reloc_params.itm_section and reloc_params.itm_cnt_found<reloc_params.itm_cnt then

amk.remove_item_from_inventory(item, actor)

reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1

end

end

 

 

function spawn_item(spawn_item, pos, gv,lv)

if gv==nil then gv=db.actor:game_vertex_id() end

if lv==nil then lv=db.actor:level_vertex_id() end

return alife():create(spawn_item, pos, lv, gv)

end

 

function remove_item_from_inventory(remove_item,npc)

if npc==nil then npc=db.actor end

if remove_item~=nil then

-- npc:mark_item_dropped(remove_item)

alife():release(alife():object(remove_item:id()), true)

return true

end

return false

end

 

 

так вот помогите пожалуйста игра тени чернобыля версия 1.0006

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

Решил заняться сюжетом своего мода, старый удалил. ГГ появляется у сетки за блокпостом и в это время должно появиться задание:

 

Найти безопасное место

Узнать у местных о Зоне

 

Инфопоршень для выдачи задания - storyline_acrtor_start, дальше надо создать само задание, например в info_l01escape.xml, тут мало что понятно. Помогите плиз создать мой первый квест, максимально объяснив за что отвечает каждая строка. А следующие задания я уже сам смогу сделать.

Скрытая Аномалия, История Прибоя, Зона Поражения 1 и 2, АМК 1.4, Обреченный Город, ТТ2, НС 2009, НС 2010 + ДМХ 1.3.4, R.M.A. mod 1.1, Apocalipsis mod, Dies Irae, Долг. ФВ, OGSM v2.3.1 Ultimate, НС 2010 + ООП+К+МА, LWR, Истинный Путь, История Мессера.

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

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

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

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

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

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

Войти

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

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

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