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

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


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

WodkaGT

 

<phrase id="1">

<text>МЕДВЕД По ко...А, ну ладно. В общем так, какие-то сволочи обчистили мою нычку с жрачкой. Уж кому она понадобилась в таком количестве, черт его знает. Не помог бы ты мне, а то скоро тут юбилей у нас намечается, уже месяц как группировка образовалась, а тут, р-раз и на тебе, а еды-то и нету.</text>

<next>2</next>

<next>3</next>

</phrase>

<phrase id="2">

<text>Нет, ты что, я тебе, что, склад продовольственный ходячий, что ли???</text>

</phrase>

<phrase id="3">

<text>Я тут подумал, а чего у тебя не хватает-то?</text>

</phrase>

 

Понятно?

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

[оффтоп]Ладно, раз уж отправили сюда, то тут и отвечу. Хотя мой вопрос не по этой теме, а именно по ОДНОТИПНЫМ квестам, ну да ладно[/оффтоп]

Вот собсно вопрос:

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

 

Апд: я заспавнил своего торговца, и хочу добавить однотипные квесты именно ему. Тоесть с веткой диалогов как у Судора\Бармена "Мне нужна работа..."

 

АПД 2: и все-таки я считаю, что зря закрыли мою тему, ведь вопрос не по самодельным, а по однотипным квестам!!!

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

Нужна помощь!

 

Добавил в игру кошку, сделал чтобы при ее убийстве у нее появлялась шкура с описанием в инвентаре. Решил сделать квест от Сидора на добычу этой шкуры. Добавил в файл

task_manager.ltx задание:

;--[tm_monster_part_3]

;--type = monster_part

;--community = actor

;--text = tm_monster_part_3_text

;--description = tm_monster_part_3_descr

;--parent = trader

;--target = mutant_cat_skin

;--reward_money = 2000

;--reward_reputation = +10

;--reward_rank = 5

;--time = 604800

;--reward_item = ammo_9x39_ap, ammo_9x39_ap, ammo_9x39_ap, ammo_9x39_ap

;--prior = 1

(закоментировал потом,т.к. возникли проблемы). Далее добавил описание квеста в файл stable_task_manager.xml:

 

<string id="tm_monster_part_3">

<text>Притащить шкуру кота</text>

</string>

<string id="tm_monster_part_3_descr">

<text>Заказ Сидоровича: "Притащить шкуру кота"\n Награда: 2000, 4 пачки патронов для моего "Винтореза".</text>

</string>

<string id="tm_monster_part_3_text">

<text>Короче, Меченный, у нас тут последнее время за железнодорожным мостом кошаков развелось тьма, надо бы отстрелять их. А заодно принесешь мне шкурку этого кота-баюна. Говорят, на Большой земле они спросом пользуются, потому что мех их на бобровый похож. Ну, короче, принеси мне шкуру этого "бобрового" мутанта, а я тебя не обижу.\n В награду дам 2000 и 4 пачки для твоего винтореза. Возьмешься?</text>

</string>

Как только я хочу взять этот квест игра вылетает и Выдает такую ошибку:

FATAL ERROR

 

[error]Expression : no_assert

[error]Function : CXML_IdToIndex<class CEncyclopediaArticle>::GetById

[error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\xml_str_id_loader.h

[error]Line : 112

[error]Description : item not found, id

[error]Arguments : tm_monster_part_3_descr

Я так понимаю, что не найден id итема. Что делать? И еще если я разблокирую дополнительные квесты в файле task_manager.ltx, то опять ршибка:

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

Если один человек что-то сделал, то другой завсегда разломать сможет

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

Volyna я так понимаю что ты добавил шкуру кошки и она у тебя спавниться по типу хвостов собачьих, щупалец кровососа? Если так то добавил ты ее(свою новую шкуру) в monster_items?

 

Вот это

<string id="tm_monster_part_3">

<text>Притащить шкуру кота</text>

</string>

<string id="tm_monster_part_3_descr">

<text>Заказ Сидоровича: "Притащить шкуру кота"\n Награда: 2000, 4 пачки патронов для моего "Винтореза".</text>

</string>

<string id="tm_monster_part_3_text">

<text>Короче, Меченный, у нас тут последнее время за железнодорожным мостом кошаков развелось тьма, надо бы отстрелять их. А заодно принесешь мне шкурку этого кота-баюна. Говорят, на Большой земле они спросом пользуются, потому что мех их на бобровый похож. Ну, короче, принеси мне шкуру этого "бобрового" мутанта, а я тебя не обижу.\n В награду дам 2000 и 4 пачки для твоего винтореза. Возьмешься?</text>

</string>

 

надо прописывать в файле stable_task_manager.xml

А еще в storyline_info_taskmanager.xml надо писать примерно следующие

<article id="tm_monster_part_3_descr" name="monster_part_3" article_type="task">

<text>tm_monster_part_3_descr</text>

</article>

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

Вообщем метод не мой, я его взял у banderosa(а он в свою очередь взял Linspiro) как создать квест с рандомными наградами. Беру любого торгоша или любого другого уникального непися и добавляяю ему диалог. Например Волк. Создадим квест что если мы принесем 3 хвоста или 3 копыта Волку он нам выдаст рандомно(т.е. случайно) награду.

1)В character_desc_escape к уже прописанным диалогам Волка добавляю свой

 

<actor_dialog>prinesi_hvost</actor_dialog> - вот мой диалог.

<start_dialog>escape_lager_volk_talk</start_dialog>

<start_dialog>dm_hello_dialog</start_dialog>

<actor_dialog>dm_cool_info_dialog</actor_dialog>

<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>

<actor_dialog>tm_wolf_dialog</actor_dialog>

<actor_dialog>tm_wolf_reward</actor_dialog>

<actor_dialog>escape_lager_volk_story</actor_dialog>

<actor_dialog>escape_lager_volk_story2</actor_dialog>

 

2) Откроем файл stable_dialogs_escape и в конце напишем следующий диалог:

 

<string id="prinesi_hvost_0">

<text>Здорово! Что делаешь?</text>

</string>

<string id="prinesi_hvost_1">

<text>Привет меченый да вот бизнес налаживаю. Послушай ты же по зоне мотаешся, живность всякую отстреливаешь принеси мне 3 хвоста слепых собак либо 3 копыта кабанов местных.А то у меня заказчик появился на живность всякую,говорят он из них лекарства делает. А на местных новичков разве можно расчитывать? они ж при виде кабана сами своих копыта готовы отдать. Вообщем принесешь, отблагодарю нормально, не обижу.</text>

</string>

<string id="prinesi_hvost_2">

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

</string>

<string id="prinesi_hvost_3">

<text>Ну что Волк принес я хвосты принимай.</text>

</string>

<string id="prinesi_hvost_4">

<text>Копыта принес, это хорошо,получи расчет.</text>

</string>

<string id="prinesi_hvost_5">

<text>Хвосты принес ну ладно тоже ничего, может и они на что-нибудь сгодятся.</text>

</string>

<string id="prinesi_hvost_6">

<text>Сегодня пустой, так поболтать заскочил.</text>

</string>

 

3)Дальше открываем файл dialogs_escape( в принципе лучше создать свой диалоговый файл типа"dialogs_new" потом легче если что совмещать с другими модами главное не забудьте прописать свой файл в файле systems)

и в конце пишу диалог пример:

<game_dialogs>

<dialog id="prinesi_hvost"> это id диалога то что мы добавили волку в его секцию

<phrase_list>

<phrase id="0">

<text>prinesi_hvost_0</text>

<next>1</next>

</phrase>

<phrase id="1">

<text>prinesi_hvost_1</text>

<next>2</next>

<next>3</next>

<next>6</next>

</phrase>

<phrase id="2">

<precondition>new_dialog.prines_kopyto</precondition> это условие при котором открывается данная

<text>prinesi_hvost_2</text> фраза в нашем диалоге(должна выполниться

<next>4</next> функция prines_kopyto из файла new_dialog

</phrase>

<phrase id="3">

<precondition>new_dialog.prines_hvost</precondition> аналогично 1 условию тоолько там копыта,

<text>prinesi_hvost_3</text> а здесь хвосты

<next>5</next>

</phrase>

<phrase id="4">

<action>new_dialog.otdal_kopyto</action> здесь срабатывает функция передачи копыта и получение

<text>prinesi_hvost_4</text> рандомной награды.

</phrase>

<phrase id="5">

<action>new_dialog.otdal_hvost</action> аналогично, только отдаются хвосты.

<text>prinesi_hvost_5</text>

</phrase>

<phrase id="6">

<text>prinesi_hvost_6</text>

<action>dialogs.break_dialog</action>

</phrase>

</phrase_list>

</dialog>

 

4)Теперь надо создать наш скриптовый файл и прописать наши функции. Создаем файл new_dialog а в нем пишем следующие

 

local nagrad = {

 

level_1 = {

"ammo_9x39_sp5",

"ammo_7.62x54_7h14",

"ammo_5.45x39_ap", это список того из чего будет выбираться награда 1 и2 уровня.Для хвостов 1 уровень

"ammo_5.56x45_ap", Для копыт второй. Специально добавил колбасу и хлеб, ну чтобы разочаровываться

"ammo_11.43x23_hydro", иногда(рулетка).

"bread",

"kolbasa",

"ammo_5.56x45_ss190"

},

level_2 = {

"af_armor_1",

"af_babka_1",

"af_cry_1",

"af_dik_1",

"af_kol_1",

"af_pudd_1",

"af_spirit_1",

"bread",

"kolbasa",

"af_night_star",

"af_gold_fish",

"af_electra_moonlight",

"af_rusty_sea-urchin",

"af_dummy_glassbeads"

}

}

 

function prines_kopyto(first_speaker, second_speaker)

local actor, trader

if db.actor and db.actor:id() == first_speaker:id() then

actor = first_speaker

trader = second_speaker

else

actor = second_speaker

trader = first_speaker

end

local mutant_boar_leg = 0

actor:iterate_inventory(function (dummy, item) if item:section()=="mutant_boar_leg" then

mutant_boar_leg = mutant_boar_leg+1 end end, nil)

if mutant_boar_leg>=3 then

return true

else

return false

end

end

 

 

function otdal_kopyto(first_speaker, second_speaker)

local item = ""

local actor, trader

if db.actor and db.actor:id() == first_speaker:id() then

actor = first_speaker

trader = second_speaker

else

actor = second_speaker

trader = first_speaker

end

item = nagrad.level_2[math.random(table.getn(nagrad.level_2))]

flamethrower.relocate_n_items_section(trader, "mutant_boar_leg", "out", 3)

dialogs.relocate_item_section(second_speaker, item , "in")

end

 

 

function prines_hvost(first_speaker, second_speaker)

local actor, trader

if db.actor and db.actor:id() == first_speaker:id() then

actor = first_speaker

trader = second_speaker

else

actor = second_speaker

trader = first_speaker

end

local mutant_dog_tail = 0

actor:iterate_inventory(function (dummy, item) if item:section()=="mutant_dog_tail" then mutant_dog_tail=mutant_dog_tail+1 end end, nil)

if mutant_dog_tail>=3 then

return true

else

return false

end

end

 

 

function otdal_hvost(first_speaker, second_speaker)

local item = ""

local actor, trader

if db.actor and db.actor:id() == first_speaker:id() then

actor = first_speaker

trader = second_speaker

else

actor = second_speaker

trader = first_speaker

end

item = nagrad.level_1[math.random(table.getn(nagrad.level_1))]

flamethrower.relocate_n_items_section(trader, "mutant_dog_tail", "out", 3)

flamethrower.relocate_n_items_section(actor, item , "in", count)

end

 

Функции prines_kopyto и prines_hvost проверяют наличие у нас в инвентаре 3 хвостов либо 3 копыт и соответственно

допускают нас к фразам(<precondition>new_dialog.prines_kopyto</precondition>) в которых у нас происходит обмен копыт и хвостов на рандомную награду. Функции otdal_hvost и otdal_kopyto забирают у нас копыта и хвосты и выдают награды из соответствующего списка. Все.

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

У меня такая проблема: один маркер на карте нужно поставить на Гордоне Фримене:) (<class>mil_stalker_freeman</class> - в character_desc_military)

а второй - на wpn_gungauss (заспавнен в инвентаре у Призрака\для теста у шизоида на болотах Милитари) - если не ошибаюсь - изменения нужно вносить в tasks_military.xml не знаю как и где шоб не вылетало :(:(

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

Zorndaik смотри в tasks прописываешь задание а в нем в конце такие строчки

 

<map_location_type hint="Пличко">blue_location</map_location_type> вот это метка на Пличко

<object_story_id>bar_dolg_guard_commander</object_story_id> здесь bar_dolg_guard_commander это взято id из файла game_story_ids.

 

У сумасшедшего id "Mil_Crazy", а у фримена точно незнаю, но возможно id "rostok_naemnik". Ты game_story_ids еще раз сам посмотри.

 

Если у тебя уже составлено в tasks_military твое заданние выложы сюда посмотрим как его сделать правильно.

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

Квест делал на основе "Вернуть фмильное ружье" для Охотника. Вот секция из tasks_military:

<game_task id="mil_freeman_gauss">

<title>mil_freeman_gauss</title>

<objective>

<text>mil_bring_freeman_gauss</text>

<icon>ui_iconsTotal_mil_gordon_gauss</icon>

<infoportion_complete>mil_freeman_quest_finish</infoportion_complete>

</objective>

<objective>

<text>mil_freeman_find_gauss</text>

<icon>ui_iconsTotal_mil_gordon_gauss</icon>

<map_location_type hint="bar_hunter_find_rifle">green_location</map_location_type>

<object_story_id>bar_hunter_toz</object_story_id>

<function_complete>task_dialogs.has_gordon_gauss</function_complete>

<infoportion_set_complete>mil_freeman_quest_find_gauss</infoportion_set_complete>

</objective>

<objective>

<text>mil_freeman_return_gauss</text>

<icon>ui_iconsTotal_mil_gordon_gauss</icon>

<map_location_type hint="bar_hunter_return_rifle">green_location</map_location_type>

<object_story_id>bar_hunter_toz</object_story_id>

<infoportion_complete>mil_freeman_quest_finish</infoportion_complete>

</objective>

</game_task>

Все маркеры перекидываются на Охотника в баре - bar_hunter_find_rifle - понимаю, шо эта строчка, но не знаю, на какую ее заменить.

 

ЗЫ. Фримен у меня живой - находится на Милиари - вот его секция:

<!-- ************************ Гордон Фримен *********************** -->

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

<name>ros_freeman_name</name>

<icon>ui_npc_u_green_stalker_7</icon>

<map_icon x="0" y="0"></map_icon>

<bio>ros_freeman_bio</bio>

 

<class>mil_stalker_freeman</class>

<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>

<money min="200" max="6000" infinitive="0"></money>

 

<rank>201</rank>

<reputation>90</reputation>

 

<visual>actors\novice\green_stalker_7</visual>

<snd_config>characters_voice\human_01\newbie\</snd_config>

<crouch_type>0</crouch_type>

 

<supplies>

[spawn] \n

wpn_desert_eagle \n

ammo_11.43x23_fmj \n

</supplies>

 

#include "gameplay\character_criticals_3.xml"

#include "gameplay\character_dialogs.xml"

 

<start_dialog>mil_freeman_start</start_dialog>

<actor_dialog>mil_freeman_quest_start</actor_dialog>

<actor_dialog>mil_freeman_quest_finish</actor_dialog>

</specific_character>

 

Да и еще. про wpn_gungauss не забудьте (работал над квестом по статье от BAC-FC9L - он в ней на tasks_*** особо не останавливался.

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

Zorndaik маркер указывает на то что у тебя в этих строчках

 

<object_story_id>bar_hunter_toz</object_story_id>

 

А это - bar_hunter_return_rifle- название твоего маркера, его можно писать и по-русски(т.е. в твоем случае на маркере будет написано bar_hunter_return_rifle)

 

bar_hunter_toz - по id это по-моему оружие, которое нужно принести охотнику.

 

"bar_hunter" это сам охотник. Я так понимаю тебе нужно чтобы маркер указывал сначало на твою пушку, а затем на гордона фримена? Видишь ли чтобы повесить маркер на что-нибудь у этого непися либо вещи должен быть id либо

При спавне непися или оружия присваивать ему sid. Например когда я спавню непися то это выглядеть так

function add_monolit()

local obj=amk.spawn_item("mil_monolit_rush_respawn_1",vector():set(32.9309,-0.00135,197.588),1242,20400)

local tbl = amk.read_stalker_params(obj)

tbl.sid = 9498 -- это и есть sid присвоенный в данном случае мертвому монолитовцу. Зато теперь я могу

tbl.health = 0 повесить на него метку в таске:<object_story_id>9498</object_story_id>

tbl.updhealth = 0

amk.write_stalker_params(tbl, obj)

end

 

Правда я непробовал присваивать sid вещям, так что не знаю точно получится или нет. А ты случаем фримена не через all.spawn спавнил? тогда в его секции(в all.spawn) можно было прописать ему id.

 

Попробуй так.

 

game_task id="mil_freeman_gauss">

<title>Принести гаусс-пистолет Фримену</title>

<objective>

<text>Найти гаусс-пистолет</text>

<icon>ui_iconsTotal_mil_gordon_gauss</icon>

<infoportion_complete>mil_freeman_quest_finish</infoportion_complete>

</objective>

<objective>

<text>Найти гаусс-пистолет</text>

<icon height="50" width="50" x="100" y="50">ui\ui_icons_task</icon>

<function_complete>task_dialogs.has_gordon_gauss</function_complete>

<infoportion_set_complete>mil_freeman_quest_find_gauss</infoportion_set_complete>

</objective>

<objective>

<text>Принести гаусс-пистолет Фримену</text>

<icon>ui_iconsTotal_mil_gordon_gauss</icon>

<map_location_type hint="Фримен">green_location</map_location_type>

<object_story_id>mil_stalker_freeman</object_story_id>

<infoportion_complete>mil_freeman_quest_finish</infoportion_complete>

</objective>

</game_task>

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

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

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

Помогите создать разветлённый диалог т.е. в зависимости от варианта ответа будет разная реакция НПС.

Dуше Uносящий Nатуральный Aндроид Dелающий Aнанасы Nормально!

<a href="http://www.radikal.ru" rel="nofollow" target="_blank" onclick='PopShow3()'></a>

Ссылка на комментарий
Помогите создать разветлённый диалог т.е. в зависимости от варианта ответа будет разная реакция НПС.

 

Dunadan а мы ведь чуть выше это разбирали как это сделать на примере Wodka или не понятно получилось?

Ссылка на комментарий
Dunadan а мы ведь чуть выше это разбирали как это сделать на примере Wodka или не понятно получилось?

Нет, у меня другая тема.

К примеру:

 

-Ну вот я принес тебе щупальца кровососа...

-Ой спасибо выручил. Выбирай что хочешь лунный свет или морской ёж.

-Лунный свет <=> морской ёж (тут выбор надо сделать

потом ответ:

-Лунный свет так лунный свет <=> ну держи ежа.

И тут происходит отдача артефакта

Dуше Uносящий Nатуральный Aндроид Dелающий Aнанасы Nормально!

<a href="http://www.radikal.ru" rel="nofollow" target="_blank" onclick='PopShow3()'></a>

Ссылка на комментарий
Нет, у меня другая тема.

К примеру:

 

-Ну вот я принес тебе щупальца кровососа...

-Ой спасибо выручил. Выбирай что хочешь лунный свет или морской ёж.

-Лунный свет <=> морской ёж (тут выбор надо сделать

потом ответ:

-Лунный свет так лунный свет <=> ну держи ежа.

И тут происходит отдача артефакта

 

Dunadan а тебе не подойдет то что я про рандомные награды писал(сообщение 26 в этой теме)? Там как раз награда разная. Правда при таком варианте не предсказуемо что ты в итоге получишь.

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

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

Проблема следующая, когда я жму строку отказа от беготни, то квест все равно начинается...

Как я понял за отказ и сброс отвечает слудующий код... (Не смотрите что это Шерстюком обозвано, я на Кузнецове диалог проверяю)

<phrase id="4">

<text>sherstpda_1_dialog_4</text>

<action>sak_dialog.sherstpda_have</action>

<give_info>sherstpda_start</give_info>

</phrase>

<phrase id="5">

<text>sherstpda_1_dialog_5</text>

<give_info>sherstpda_start</give_info>

<action>dialogs.break_dialog</action>

</phrase>

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

и еще вопрос косвенно касающийся квестов - как встроить проверку количества денег? А то у меня 10000 отнимается только "на бумаге", а реально как было 40 рублей, так и осталось

Ссылка на комментарий
function bar_dolg_propusk_done(first_speaker, second_speaker) эта функция отдачи арта Пличко

dialogs.relocate_item_section(second_speaker, "af_armor_3", "out",)

second_speaker:set_relation(game_object.friend, first_speaker) эта строчка делает Пличко другом.

end

 

Нашел ошибку в этой функции. После слова "out" стоит запятая. Она здесь совсем не нужна.

  • Спасибо 1

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

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

При создании квеста его имя в task_manger.ltx можно писать любое(по-английски разумеется) или есть какие-то правила?

Я - заядлый АМКаголик!

Ссылка на комментарий
Нашел ошибку в этой функции. После слова "out" стоит запятая. Она здесь совсем не нужна.

 

Это моя ошибка но так как пост не мой исправить я не могу.

 

Уже исправлено.

PS. И зачем было стирать?

potap

 

 

При создании квеста его имя в task_manger.ltx можно писать любое(по-английски разумеется) или есть какие-то правила?

 

 

<map_location_type hint="Пличко">blue_location</map_location_type> в этом месте текст произвольный, но обычно пишут по русски имя к кому надо принести что то или прийти за наградой

<object_story_id>bar_dolg_guard_commander</object_story_id> здесь указываются данне из game_story_ids (bar_dolg_guard_commander это и есть Пличко)

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

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

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

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

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

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

Войти

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

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

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