strelok200 0 Опубликовано 9 Сентября 2011 Поделиться Опубликовано 9 Сентября 2011 Попробуй таск сделать вот так <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> Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Exo_G@mer 1 Опубликовано 16 Октября 2011 Поделиться Опубликовано 16 Октября 2011 (изменено) Вот еще в сети нашёл статью Однотипные квесты Содержание 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 – описание нашего задания в PDAparent = 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 + еще есть программа для создания основы таких квестов Но вставлять их в игру самому надо Изменено 15 Декабря 2017 пользователем Murarius Oldstalket-Team Ссылка на комментарий
strelok200 0 Опубликовано 19 Октября 2011 Поделиться Опубликовано 19 Октября 2011 (изменено) Exo_G@mer, Глупость. Такие квесты уже никто не делает Сообщение от модератора ColR_iT Я делаю! Не говори того, чего не может быть впринципе. Изменено 19 Октября 2011 пользователем ColR_iT Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Exo_G@mer 1 Опубликовано 25 Октября 2011 Поделиться Опубликовано 25 Октября 2011 Создал квест.А как его зделать сюжетным?или как убрать сюжет.В зове припяти я знаю как убираеться сюжет.А вот в ТЧ не знаю. Oldstalket-Team Ссылка на комментарий
AndreySol 215 Опубликовано 25 Октября 2011 Поделиться Опубликовано 25 Октября 2011 Здравствуйте Все. Два вопроса имеются: 1). Что означает green_location и blue_location ? 2). Как привязать инфо-поршень к предмету ? Т.е. к примеру берем квест на поиск предмета, при этом спауним его где-то на локации. В PDA подсказки: "Найти предмет" "Отнести предмет заказчику" Идем, подбираем предмет - как сделать что-бы в этот момент происходило сообщение о выполнении пункта "Найти предмет" и выполнялся требуемый инфо-поршень ? Ссылка на комментарий
strelok200 0 Опубликовано 26 Октября 2011 Поделиться Опубликовано 26 Октября 2011 AndreySol, Посмотри тему уроки по модостроению на этом же форуме. Там как раз рассматривался квест по типу "найти-принести" Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
AndreySol 215 Опубликовано 27 Октября 2011 Поделиться Опубликовано 27 Октября 2011 Посмотри тему уроки по модостроению на этом же форуме. Там как раз рассматривался квест по типу "найти-принести" Посмотрел, Вы имели в виду пример квеста по поиску АКСу ? Если я правильно разобрался, это не совсем то, о чем я спрашивал. Там, при диалоге с НПС, выполняется проверка на наличие в инвентаре необходимого предмета. А я о другом спрашивал. Ссылка на комментарий
AndreySol 215 Опубликовано 29 Октября 2011 Поделиться Опубликовано 29 Октября 2011 (изменено) Уф, подразобрался малость - получилось сделать квест типа "найти-принести". Правда не все гладко - не могу разобраться, почему у меня метка на карте на НПС, которому необходимо сдать квест, указывает совсем не на него, а куда-то в другое место. Место правда не меняется - это низинка с аномалиями за деревней новичков, где еще при первом подходе к этой низинке разрывает плоть в аномалии и выскакивает информационное сообщение от Сидора. НПС'а я создаю сам, спауню рядом от входа в бункер Сидоровича, двигаться ему запрещаю. Чую, что-то я не прописал в его профиле ? Подскажите, что ? И еще вопросик. Решил усложнить квест, для тренировки так сказать. Идея такая: есть созданный мною НПС и есть предмет, заспауненный где-то на локации. Хочу сделать, чтоб при взятии предмета актером в инвентарь, у этого НПС'а появлялся нужный диалог. До того как предмет взят актером, этого диалога быть не должно. Как сделать в этом случае ? Хотя будет ли это квестом называться, в стандартном его понимании ? Изменено 29 Октября 2011 пользователем AndreySol Ссылка на комментарий
Desertir 202 Опубликовано 29 Октября 2011 Поделиться Опубликовано 29 Октября 2011 (изменено) Хочу сделать, чтоб при взятии предмета актером в инвентарь, у этого НПС'а появлялся нужный диалог. До того как предмет взят актером, этого диалога быть не должно. Как сделать в этом случае ? В ветке диалога поставить проверку на наличие инфопоршня. При взятии предмета выдавать этот поршень, тогда диалог появится. Так же, чтоб диалог не появился снова, нужно поставить проверку на другой поршень (на его не наличие) и выдать во время последней логической фразы. Тем самым мы будем иметь 2 инфопоршня, по одному диалог будет проходить, а по второму нет. PS: если не представляешь как это сделать, прошу в личку. Изменено 29 Октября 2011 пользователем Desertir ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
AndreySol 215 Опубликовано 29 Октября 2011 Поделиться Опубликовано 29 Октября 2011 При взятии предмета выдавать этот поршень, тогда диалог появится Проблема как раз в этом - как отследить взятие предмета актером, если никакого задания на это не выдавалось и соотетственно не крутится никакой скрипт, отслеживающий наличие этого предмета в инвентаре ? Ссылка на комментарий
Desertir 202 Опубликовано 29 Октября 2011 Поделиться Опубликовано 29 Октября 2011 (изменено) AndreySol, недавно напоминал. Клик, только секцию при проверке нужно поменять на свою. Как выдать инфопоршень, можно найти в Справочнике по функциям и классам. Изменено 29 Октября 2011 пользователем Desertir ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
dark_stalker 2 Опубликовано 30 Октября 2011 Поделиться Опубликовано 30 Октября 2011 Здраствуйте пытаюсь создать квест в чистом небе типа сходи поговори но как создать скрипт не знаю может поможете? :ny_rolleyes: Ссылка на комментарий
AndreySol 215 Опубликовано 30 Октября 2011 Поделиться Опубликовано 30 Октября 2011 (изменено) <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() не выполняется. Что не так ? Изменено 30 Октября 2011 пользователем AndreySol Ссылка на комментарий
Desertir 202 Опубликовано 30 Октября 2011 Поделиться Опубликовано 30 Октября 2011 1. Зачем тогда писать 3 и 4 фразу если на 2 диалог точно заканчивается? 2. <action>my_functions.test_func()</action>, скобки убери, а в функции убери return. Возврат нужен для скриптовой проверки, я не помню какой тег для этого, но для action этого не надо. ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
AndreySol 215 Опубликовано 30 Октября 2011 Поделиться Опубликовано 30 Октября 2011 1. Зачем тогда писать 3 и 4 фразу если на 2 диалог точно заканчивается? Вопрос не в этом, просто хочу знать - почему dialogs.break_dialog не прерывает диалог на той фразе, где ф-ция вызвана, а дает отработать еще одной фразе ? Насчет скобок - привычка из нормального программирования, пока привыкну... А как все-же насчет неправильного отображения метки НПС на карте ? (см. сообщение #328). Ссылка на комментарий
RealStalkeR 1 Опубликовано 3 Ноября 2011 Поделиться Опубликовано 3 Ноября 2011 Люди если кому не лень создайте для меня урок(как для новичка) по созданию квеста,хочу создать такой квест как первый в тч,что бы меня ждали люди я прихожу к ним и мы идём штурмовать лагерь!!!!!!! Лучше свою лень побори. Поищи по форуму, почитай. Cyclone 1 Ссылка на комментарий
HellStalkerDog 0 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 помогите квест делал на основе нового персонажа заспауниного через скрипт. ему задание добавил, а оно не даётся хотя звук соответствующий просходит, вот файлы помогите http://rghost.ru/35720215 Ссылка на комментарий
HellStalkerDog 0 Опубликовано 7 Января 2012 Поделиться Опубликовано 7 Января 2012 помогите пожалуйста. При создании квеста новому нпс в тч на кардоне. квест не выдаёться см скрины так вот почему так происходит. <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 Ссылка на комментарий
Соболь 41 Опубликовано 9 Января 2012 Поделиться Опубликовано 9 Января 2012 Решил заняться сюжетом своего мода, старый удалил. ГГ появляется у сетки за блокпостом и в это время должно появиться задание: Найти безопасное место Узнать у местных о Зоне Инфопоршень для выдачи задания - 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, Истинный Путь, История Мессера. Ссылка на комментарий
strelok200 0 Опубликовано 9 Января 2012 Поделиться Опубликовано 9 Января 2012 В файлах info_... содержатся инфопоршни Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти