sttt912 0 Опубликовано 21 Июня 2012 Поделиться Опубликовано 21 Июня 2012 (изменено) И так вот по этому уроку делал квест. Создадим квест по поиску АК74У. Для начала нужно создать диалог, сделаем его у Волка: Заходим в gamedata\config\gameplay\dialogs_escape.xml и в самом конце до строчки </game_dialogs> пишем: <dialog id="escape_volk_ak74u_quest"> <has_info>esc_kill_bandits_quest_done</has_info> <dont_has_info>escape_volk_ak74u_start</dont_has_info> <phrase_list> <phrase id="0"> <text>escape_volk_ak74u_quest_0</text> <next>1</next> </phrase> <phrase id="1"> <text>escape_volk_ak74u_quest_1</text> <next>2</next> <next>3</next> </phrase> <phrase id="2"> <text>escape_volk_ak74u_quest_2</text> <give_info>escape_volk_ak74u_start</give_info> <action>new_life.spawn_ak74u</action> </phrase> <phrase id="3"> <text>escape_volk_ak74u_quest_3</text> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> <dialog id="escape_volk_ak74u_quest_completed"> <precondition>new_life.escape_volk_ak74u_have</precondition> <has_info>escape_volk_ak74u_have</has_info> <dont_has_info>escape_volk_ак74u_done</dont_has_info> <phrase_list> <phrase id="0"> <text>escape_volk_ak74u_quest_completed_0</text> <next>1</next> </phrase> <phrase id="1"> <text>escape_volk_ak74u_quest_completed_1</text> <next>2</next> </phrase> <phrase id="2"> <text>escape_volk_ak74u_quest_completed_2</text> <give_info>escape_volk_ak74u_done</give_info> <action>new_life.give_volk_ak74u</action> <next>3</next> </phrase> <phrase id="3"> <text>escape_volk_ak74u_quest_completed_3</text> <action>new_life.complete_volk_quest</action> </phrase> </phrase_list> </dialog> Теперь нужно прописать эти диалоги Волку, для этого заходим в gamedata\config\gameplay\character_desc_escape.xml и находим профиль Волка(он называется esc_wolf), перед строкой </specific_character> пишем: <actor_dialog>escape_volk_ak74u_quest</actor_dialog> <actor_dialog>escape_volk_ak74u_quest_completed</actor_dialog> Нам понадобятся два диалога: 1 для получения квеста, 2 для передачи автомата. <dialog id="escape_volk_ak74u_quest"> - Это название диалога <has_info>esc_kill_bandits_quest_done</has_info> - эта строка означает что квест появится только если получен инфопоршень esc_kill_bandits_quest_done <dont_has_info>escape_volk_ak74u_start</dont_has_info> - эта строка означает что если получен инфопоршень escape_volk_ak74u_start , то этот диалог больше не появится. <text>escape_volk_ak74u_quest_0</text> - это ссылка на текст фразы меченого <next>1</next> - это ссылка на текст с id= 1 , а id= 1 это <text>escape_volk_ak74u_quest_1</text> (ссылка на текст Волка) <next>2</next> <next>3</next> - эти две строчки означают что идет разветвление диалога <give_info>escape_volk_ak74u_start</give_info> - выдача инфопоршня, после которого начинается квест <action>new_life.spawn_ak74u</action> - функция вызываемая из скрипта new_life, в данном случае спаунится предмет AK74У <action>dialogs.break_dialog</action> - функция отвечающая за выход из диалога Во втором диалоге есть строка <precondition>new_life.escape_volk_ak74u_have</precondition> - она отвечает за появление диалога если выполняется функция escape_volk_ak74u_have Теперь нужно сделать текст диалога на русском языке, для этого заходим в gamedata\config\tex\rus\stable_dialogs_escape.xml и в нём пишем следующее(в конце перед </string_table>): <string id="escape_volk_ak74u_quest_0"> <text>Здорова Волк, для меня есть какая-нибудь работа?</text> </string> <string id="escape_volk_ak74u_quest_1"> <text>Да, есть одно дело: вобщем шёл сюда в лагерь к Сидырычу, решил пройти через тоннель чтоб воякам денег не платить, а там собак было штук десять. Ну я начал отстреливаться, где-то шестерых убил и патроны кончились, пришлось АКСУ выкинуть, чтоб от стаи собак убежать. Таки лежит там наверно АКСУ. \nНу как, возьмёшься? Только осторожней там, после последнего выброса появились в тоннеле перещающиеся аномалии электра.</text> </string> <string id="escape_volk_ak74u_quest_2"> <text>Да, я как раз буду рядом проходить, конечно принесу...</text> </string> <string id="escape_volk_ak74u_quest_3"> <text>Нет, Волк, сам туда иди...</text> </string> <string id="escape_volk_ak74u_quest_completed_0"> <text>Привет, Волк, ну как оно?...</text> </string> <string id="escape_volk_ak74u_quest_completed_1"> <text>Сидор водку не даёт, хе хе, а так всё хорошо.</text> </string> <string id="escape_volk_ak74u_quest_completed_2"> <text>Вот, нашел я твой АКСУ.</text> </string> <string id="escape_volk_ak74u_quest_completed_3"> <text>Эх спасибо тебе Меченый, вот держи, может на что-нибудь хватит.</text> </string> Итак, диалог готов, теперь нужно сделать сам квест, для этого заходим в gamedata\config\gameplay\tasks_escape.xml и в самом конце пишем: <game_task id="escape_volk_ak74u"> <title>Найти потерянный АКСУ</title> <objective> <text>Найти потерянный АКСУ</text> <icon>ui_iconsTotal_weapons</icon> <infoportion_complete>escape_volk_ak74u_done</infoportion_complete> <article>tex_escape_volk_ak74u</article> </objective> <objective> <text>Найти АКСУ</text> <function_complete>new_life.escape_volk_ak74u_have</function_complete> <infoportion_set_complete>escape_volk_ak74u_have</infoportion_set_complete> </objective> <objective> <text>Принести АКСУ Волку</text> <map_location_type hint="Волк">blue_location</map_location_type> <object_story_id>Escape_novice_lager_volk</object_story_id> <infoportion_complete>escape_volk_ak74u_done</infoportion_complete> </objective> </game_task> <game_task id="escape_volk_ak74u"> - id квеста <title>Найти потерянный АКСУ</title> - название квеста <text>Найти потерянный АКСУ</text> - тоже название квеста)) <icon>ui_iconsTotal_weapons</icon> - иконка задания <infoportion_complete>escape_volk_ak74u_done</infoportion_complete> - квест будет выполнен, если был получен инфопоршень escape_volk_ak74u_done <article>tex_escape_volk_ak74u</article> - ссылка на текстовый файл с описанием задания <text>Найти АКСУ</text> - название подзадачи <function_complete>new_life.escape_volk_ak74u_have</function_complete> - проверка на наличие предмета <infoportion_set_complete>escape_volk_ak74u_have</infoportion_set_complete> если функция new_life.escape_volk_ak74u_have выполнилась, то выдаётся инфопоршень escape_volk_ak74u_have и выполняется подзадача <text>Принести АКСУ Волку</text> - название второй подзадачи <map_location_type hint="Волк">blue_location</map_location_type> - указатель на Волка <object_story_id>Escape_novice_lager_volk</object_story_id> - id Волка в Файле gamedata\config\game_story_ids.ltx <infoportion_complete>escape_volk_ak74u_done</infoportion_complete> - если будет получен этот инфопоршень, то выполнится подзадача и соответственно сам квест Нужно сделать инфопоршни, заходим в gamedata\config\gameplay\info_l01escape.xml и в нём в конце до строчки </game_information_portions> пишем: <info_portion id="escape_volk_ak74u_start"> <task>escape_volk_ak74u</task> </info_portion> <info_portion id="escape_volk_ak74u_have"> </info_portion> <info_portion id="escape_volk_ak74u_done"> </info_portion> Теперь нужно сделать описание квеста, заходим в gamedata\config\gameplay\storyline_info_escape.xml и пишем в конце: <article id="tex_escape_volk_ak74u" name="Найти потерянный ак74u" article_type="task"> <texture x="0" y="800" width="200" height="100">ui\ui_icon_equipment</texture> <text>tex_escape_volk_ak74u</text> </article> Сделаем описание на русском, заходим в stable_dialogs_escape.xml и в конце до строки </string_table> пишем: <string id="tex_escape_volk_ak74u"> <text>Волк попросил принести потерянный в туннеле АКСУ</text> </string> Теперь создадим скриптовый файл new_life в gamedata\scripts\new_life.script и пишем: function spawn_ak74u() amk.spawn_item("wpn_ak74u",vector():set(-78.85,-1.29,154.74),163,189935) -- спавн ak74u в тоннеле на кордоне end function escape_volk_ak74u_have() return sak.have_item_namber("wpn_ak74u",1) ~= false -- проверка на нахождение предмета в рюкзаке end function give_volk_ak74u(first_speaker, second_speaker) -- передача предмета sak.out_item_namber("wpn_ak74u", 1) end function complete_volk_quest(first_speaker, second_speaker) -- получение награды dialogs.relocate_money(second_speaker, 1500, "in") end Чтобы эти скрипты заработали, нужно создать файлы amk.script и sak.script, в аmk.script пишем: 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 В sak.script пишем: 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 ВСё! Можно тестировать. ПРИМЕЧАНИЕ!!!Если вы делаете такой квест на оригинальном сталкере, то ОБЯЗАТЕЛЬНО нужно создать файлы amk.script и sak.script Если вы делаете квест на amk моде, то нужно создать только файл sak.script Первий квест получился. Я только сделал, что в квесте вместо калаша нужно найти КПК. Все роботало. По этой же схеме начал делать второй квест. Только в скрипте new_life.scrip написал: function escape_volk_moy_kpk2_have() return sak.have_item_namber("moy_kpk2",1) ~= false end function give_volk_moy_kpk2(first_speaker, second_speaker) sak.out_item_namber("moy_kpk2", 1) end function complete_volk_quest(first_speaker, second_speaker) dialogs.relocate_money(second_speaker, 1500, "in") end При розговоре на получение награды начал ловить вылет: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: d:\games\st\shoc\gamedata\scripts\new_life.script:18: attempt to index global 'sak' (a nil value) Отредактировал функции и вышло так function escape_volk_moy_kpk2_have() return sak2.have_item_namber("moy_kpk2",1) ~= false end function give_volk_moy_kpk2(first_speaker, second_speaker) sak2.out_item_namber("moy_kpk2", 1) end function complete_volk_quest(first_speaker, second_speaker) dialogs.relocate_money(second_speaker, 1500, "in") end После начал ловить вилет при получении награды: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: d:\games\st\shoc\gamedata\scripts\sak2.script:70: attempt to index global 'amk' (a nil value) В sak скрипт отредактировал 70 строчку с amk.remove_item_from_inventory(item, actor) на amk2.remove_item_from_inventory(item, actor) И создал скрипт аmk2.script c точно таким же содержаниям. Ловлю вилет при розговоре о награде: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: d:\games\st\shoc\gamedata\scripts\sak2.script:70: attempt to index global 'amk2' (a nil value) И так вопрос^ где я накосячил? :ny_rolleyes: Изменено 21 Июня 2012 пользователем ColR_iT Ссылка на комментарий
Silver Raven 197 Опубликовано 25 Июня 2012 Поделиться Опубликовано 25 Июня 2012 (изменено) Написал диалог для Бармена на основе Dream mod. Будет вызываться при выполнении определенного квеста. Но игра слетает не находя текст по идентификатору, хотя все прописано верно, все файлы со структурами диалогов и текстовыми массивами зареганы в system.ltx FATAL ERROR [error]Expression : no_assert [error]Function : CXML_IdToIndex<class CPhraseDialog>::GetById [error]File : e:\stalker\sources\trunk\xr_3da\xrgame\xml_str_id_loader.h [error]Line : 112 [error]Description : item not found, id [error]Arguments : bar_barmen_sleep_dialog_start Сам диалог: character_desc_bar <specific_character id="bar_barman" no_random = "1"> <name>bar_barmen_name</name> <icon>ui_npc_u_barman</icon> <map_icon x="1" y="4"></map_icon> <bio>bar_barmen_bio</bio> <class>bar_barman</class> <community>trader</community> <money min="1000000" max="1100000" infinitive="1"></money> <rank>700</rank> <reputation>50</reputation> <visual>actors\barman\barman</visual> <snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>-1</crouch_type> <supplies> [spawn] \n stalker_outfit \n </supplies> <start_dialog>bar_bar_barmen_start</start_dialog> <actor_dialog>bar_bar_barmen_talk_info</actor_dialog> <!---------------------- New sleep mod ----------------------> <actor_dialog>bar_barmen_sleep_dialog_start</actor_dialog> -- этот диалог <!---------------------- New sleep mod ----------------------> <actor_dialog>bar_bar_barman_ecolog_flash_done</actor_dialog> <actor_dialog>bar_bar_barman_veterans_finish</actor_dialog> <actor_dialog>bar_bar_barman_killer_ambush</actor_dialog> <actor_dialog>tm_barman_dialog</actor_dialog> <actor_dialog>tm_barman_reward</actor_dialog> <!---------------------- Weapons repair ----------------------> <actor_dialog>bar_trader_repair</actor_dialog> <!---------------------- Weapons repair ----------------------> </specific_character> alex_mod_dialogs <dialog id="bar_barman_sleep_dialog_start"> <has_info>barman_sleep_dialog</has_info> <dont_has_info>barman_said_can_go</dont_has_info> <phrase_list> <phrase id="0"> <text>barman_sleep_dialog_0</text> <next>1</next> </phrase> <phrase id="1"> <text>barman_sleep_dialog_1</text> <next>2</next> <next>21</next> </phrase> <phrase id="2"> <text>barman_sleep_dialog_2</text> <next>3</next> </phrase> <phrase id="21"> <text>barman_sleep_dialog_21</text> <action>dialogs.break_dialog</action> </phrase> <phrase id="3"> <text>barman_sleep_dialog_3</text> <give_info>barman_said_can_go</give_info> <give_info>guard_can_be_used</give_info> <give_info>guard_didnot_say_stop</give_info> <action>alex_mod.gg_give_money_barmen_for_sleep_pleace</action> <next>4</next> </phrase> <phrase id="4"> <text>barman_sleep_dialog_4</text> </phrase> </phrase_list> </dialog> Ну и сам текстовый массив: stable_dialogs_alex_mod <!---------- New sleep mod ----------> <string id="barman_sleep_dialog_0"> <text>Мне бы прилечь где-нибудь...</text> </string> <string id="barman_sleep_dialog_1"> <text>Без проблем, только внеси предоплату за месяц, она не большая - 1500 деревянных. И можешь спать в полной безопасности сколько душе угодно.</text> </string> <string id="barman_sleep_dialog_2"> <text>Это меня устраивает, согласен.</text> </string> <string id="barman_sleep_dialog_21"> <text>Что-то дороговато выходит. Я ещё подумаю.</text> </string> <string id="barman_sleep_dialog_3"> <text>Проходи в заднюю комнату и располагайся там. Я скажу Гарику, чтобы он тебя пропускал.</text> </string> <string id="barman_sleep_dialog_4"> <text>Спасибо!</text> </string> Изменено 25 Июня 2012 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
ColR_iT 171 Опубликовано 25 Июня 2012 Поделиться Опубликовано 25 Июня 2012 Stalker_AleX333, у тебя в файле alex_mod_dialogs.xml нет диалога id у которого bar_barmen_sleep_dialog_start, а есть bar_barman_sleep_dialog_start. Ссылка на комментарий
BeeRseK 34 Опубликовано 3 Июля 2012 Поделиться Опубликовано 3 Июля 2012 Здравствуйте. Есть вопрос: есть какое нибудь ограничение на количество диалогов у непися? Я прописал неписю два диалога, через которые мы получаем квесты. Второй квест активируется только при наличии инфопоршня, который мы получаем при выполнении первого. Но диалог второго квеста не появляется. Пробовал без условия получения поршня - тоже самое. Прописал этот диалог другому неписю - всё работает. В чем может быть проблема? Почему работает только один диалог? "Все сложное - не нужно, все нужное - просто"(М. Калашников) Ссылка на комментарий
volazar 9 Опубликовано 3 Июля 2012 Поделиться Опубликовано 3 Июля 2012 (изменено) BeeRseK, нет ограничений. скорей всего напутали с условиями. Пробуйте вызвать диалог без всяких условий - появится, значит виноваты они. Не появятся - напортачили с диалогом. ЗЫ: может диалог после закрывающего тега? Как то сам так напортачил, оказалось, что было 2 глобальных закрывающих тега. И все, что было после первого - не читалось. ЗЗЫ: без приведеных кодов, можно долго молоть воду в ступе. Изменено 3 Июля 2012 пользователем volazar Ссылка на комментарий
BeeRseK 34 Опубликовано 3 Июля 2012 Поделиться Опубликовано 3 Июля 2012 volazar, вот так идет: <?xml version="1.0" encoding="windows-1251" ?> <game_dialogs> <dialog id="dialog_lukash_proverka"> <dont_has_info>lukash_pogovorili</dont_has_info> <phrase_list> <phrase id="0"> ............................идет диалог...................... <next>9</next> </phrase> <phrase id="9"> <text>Понял.</text> <give_info>lukash_pogovorili</give_info> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> <dialog id="dialog_lukash_raciya"> <phrase_list> <phrase id="0"> .........................................идет диалог............................ <next>14</next> </phrase> <phrase id="14"> <text>Как скажешь.</text> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> </game_dialogs> я пробовал делать еще один диалог, самый простенький, без инфопоршней - все равно не видит, только один видит. И не только у этого непися. У всех так. "Все сложное - не нужно, все нужное - просто"(М. Калашников) Ссылка на комментарий
volazar 9 Опубликовано 3 Июля 2012 Поделиться Опубликовано 3 Июля 2012 (изменено) BeeRseK, не знаю даже, вроде все норм. Попробуйте вместо текста, вставить идентификаторы, а сам текст прописать в соотв. файле. Может это повлияло, хотя не должно. ЗЫ: ссылку на диалог прописываете в профиле НПС? Не через инклуд? Изменено 3 Июля 2012 пользователем volazar Ссылка на комментарий
BeeRseK 34 Опубликовано 3 Июля 2012 Поделиться Опубликовано 3 Июля 2012 volazar, угу. <specific_character id="dv_svobblokpost_commander_lukash" team_default = "1"> <name>Лукаш</name> <icon>ui_npc_u_stalker_sv_balon_10</icon> <map_icon x="2" y="0"></map_icon> <bio>mil_Svoboda_blockpost_leader_bio</bio> <class>dv_svobblokpost_commander_lukash</class> <community>freedom</community> <terrain_sect>stalker_freedom_terrain</terrain_sect> <rank>916</rank> <reputation>149</reputation> <snd_config>characters_voice\human_02\freedom\</snd_config> <crouch_type>-1</crouch_type> <visual>actors\svoboda\stalker_sv_balon_10</visual> <supplies> [spawn] \n wpn_usp \n ammo_11.43x23_hydro = 1 \n wpn_g36 \n ammo_5.56x45_ap = 1 \n #include "gameplay\character_items.xml" \n #include "gameplay\character_drugs.xml" \n #include "gameplay\character_food.xml" #include "gameplay\character_criticals_3.xml" </supplies> <start_dialog>dialog_lukash_proverka</start_dialog> <start_dialog>dialog_lukash_raciya</start_dialog> <money min="600" max="2000" infinitive="0" /> #include "gameplay\character_dialogs.xml" </specific_character> Добавлено через 4 мин.: инклуд разве может помочь? "Все сложное - не нужно, все нужное - просто"(М. Калашников) Ссылка на комментарий
volazar 9 Опубликовано 3 Июля 2012 Поделиться Опубликовано 3 Июля 2012 (изменено) BeeRseK, У меня с инкудом были проблемы. Не стоит. Ваша ошибка в <start_dialog>dialog_lukash_raciya</start_dialog> start_dialog может быть только один! Все последующие прописывайте так: <actor_dialog>идентификатор диалога</actor_dialog> Т.е: <start_dialog>1</start_dialog> <actor_dialog>2</actor_dialog> <actor_dialog>3</actor_dialog> И т.д Изменено 3 Июля 2012 пользователем volazar Ссылка на комментарий
BeeRseK 34 Опубликовано 3 Июля 2012 Поделиться Опубликовано 3 Июля 2012 volazar, хмм..а я думал если start dialog - то первый диалог начинает непись, а если actor dialog то игрок начинает. "Все сложное - не нужно, все нужное - просто"(М. Калашников) Ссылка на комментарий
volazar 9 Опубликовано 3 Июля 2012 Поделиться Опубликовано 3 Июля 2012 (изменено) BeeRseK, Все верно. start dialog это диалог, который начинает непись. Типа "привет" и т.д Он только один. Все последующие диалоги должны быть заключены в теги actor_dialog. Т.е они уже твои и которые будут в списке доступных диалогов. Изменено 3 Июля 2012 пользователем volazar Ссылка на комментарий
ColR_iT 171 Опубликовано 3 Июля 2012 Поделиться Опубликовано 3 Июля 2012 volazar, ты не прав, точнее не до конца... Установить стартовых диалогов можно сколько угодно, да хоть все, но вот использоваться будет только один, который первый пройдёт по условиям, порядок тот, в котором они прописаны в профиле. На примере профиля BeeRseKа - если <start_dialog>dialog_lukash_proverka</start_dialog> не пройдёт по условиям, то будет установлен стартовый диалог <start_dialog>dialog_lukash_raciya</start_dialog>, если же в обоих не будет условий появления, то использоваться будет первый. Кстати, в схеме логики meet можно также установить стартовый диалог НПС, причём приоритет его будет выше, нежели в профиле. Ссылка на комментарий
BeeRseK 34 Опубликовано 4 Июля 2012 Поделиться Опубликовано 4 Июля 2012 ColR_iT, спс, но уже поздно - я переделал под actor dialog Да в принципе какая разница, пусть первым будет говорить игрок, это не столь важно, лишь бы всё работало нормально. "Все сложное - не нужно, все нужное - просто"(М. Калашников) Ссылка на комментарий
satanian 0 Опубликовано 9 Июля 2012 Поделиться Опубликовано 9 Июля 2012 (изменено) Подскажите , где взять тутор на создание квеста принести-отнести ...Через "amk.script" А в каких целях ты хочешь использовать этот файл? ColR_iT Изменено 9 Июля 2012 пользователем ColR_iT Ссылка на комментарий
NaslednikTutti 1 Опубликовано 16 Июля 2012 Поделиться Опубликовано 16 Июля 2012 Добрый день! Не нашел я на форуме тему, где обсуждают непосредственно схему поведения/логику нпс. Ну а т.к. я пишу квест, и в процессе написания квеста, я застрял на этом моменте, то решил написать тут. Если не по теме, то прошу модераторов переместить туда, куда надо (Только мне сообщите пожалуйста=)) Работаю на ЗП. Написал я логику для нпс: [smart_terrains] none = true [logic] active = remark combat_ignore = combat_ignore [combat_ignore] [remark@wpn] anim = hello_wpn no_move = true target = actor on_actor_dist_le = 2| remark@wait [remark@wait] anim = wait no_move = true target = actor on_actor_dist_le = 5| remark@wpn on_info = {+esc_sniper_quest_give} walker@go [walker@go] path_walk = esc_quest_sniper_start_walk path_look = esc_quest_sniper_start_look Мне нужно сделать так, чтобы нпс из состояния "remark@wait", при получении инфопоршня "esc_sniper_quest_give", перешел в состояние "walker", но не получается, получаю вылет при старте игры: FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...s.t.a.l.k.e.r. cop\gamedata\scripts\xr_remark.script:236: attempt to perform arithmetic on local 'pos' (a nil value) Помогите пожалуйста написать логику нпс правильно. Или этот вылет не связан с логикой нпс? Вообще сам квест заключается в чем. ГГ в месте с напарником, нужно зачистить блокпост. Значит, ГГ подходит к нпс, у них простой диалог. ГГ - Ну что, какии задания?, НПС - Нужно зачистить военный блокпост. Выдается квест "esc_sniper_quest_start", и при выдачи инфопоршня "esc_sniper_quest_give", нпс переходит в схему "walker@go" и бежит по заданным точкам "path_walk = esc_quest_sniper_start_walk" помогать ГГ. <dialog id="esc_sniper_start_dialog"> <dont_has_info>esc_sniper_quest_done</dont_has_info> <dont_has_info>esc_sniper_quest_give</dont_has_info> <phrase_list> <phrase id="1"> <text>Нужно зачистить военный блокпост.</text> <give_info>esc_sniper_quest_give</give_info> <action>dialogs_escape.esc_sniper_quest_start</action> </phrase> <phrase id="0"> <text>Ну что, какие задания?</text> <next>1</next> </phrase> </phrase_list> </dialog> <dialog id="esc_sniper_end_dialog"> <has_info>esc_sniper_quest_give</has_info> <dont_has_info>esc_sniper_quest_done</dont_has_info> <has_info>blokpost_killed</has_info> <phrase_list> <phrase id="1"> <text>Пошли проверим.</text> <give_info>esc_sniper_quest_done</give_info> </phrase> <phrase id="0"> <text>Вроде всех положили.</text> <next>1</next> </phrase> </phrase_list> </dialog> <info_portion id="esc_sniper_quest_done"></info_portion> <info_portion id="esc_sniper_quest_give"></info_portion> <info_portion id="blokpost_killed"></info_portion> function esc_sniper_quest_start() task_manager.get_task_manager():give_task("esc_sniper_give") end [esc_sniper_give] icon = ui_inGame2_Bezopasnoe_mesto prior = 2 storyline = false title = {+blokpost_killed}test_talk_strelok, test_killed_blokpost descr = test_mission target = {+blokpost_killed} new_nps_test, nps condlist_0 = {+esc_sniper_quest_done} complete reward_money = 1 <string id="test_killed_blokpost "> <text>Задание: Зачиска блокпоста.</text> </string> <string id="test_mission"> <text>Зачиска блокпоста.</text> </string> <string id="test_talk_strelok"> <text>Переговорить со стрелком.</text> </string> Помогите пожалуйста, где я ошибся? Не соответствует правилам. Ссылка на комментарий
Clayman 104 Опубликовано 16 Июля 2012 Поделиться Опубликовано 16 Июля 2012 NaslednikTutti, посмотри как в ЗП логика делается. Сначала ее нужно вызвать из конфига смарта в секции [exclusive]. В файле логики ты должен определить условие взятие под эту логику персонажа - сквада и определить приоритет. А насколько я знаю, remark используется для связки двух схем, а не как основная стартовая. Сначала поставь нпс в обычный walker на нужные точки пути, а потом переводи в remark. В файлах ЗП примеров предостаточно. Ссылка на комментарий
kaktus 0 Опубликовано 31 Июля 2012 Поделиться Опубликовано 31 Июля 2012 Скажите пожалуйста, как сделать что-бы квест заканчивался при диалоге, появлялся при взятии определённого предмета или кончался при поднятии предмета? Ссылка на комментарий
Стрелоk 14 Опубликовано 31 Июля 2012 Поделиться Опубликовано 31 Июля 2012 kaktus, Выдаешь определенный инфопоршень К20 Ссылка на комментарий
kaktus 0 Опубликовано 31 Июля 2012 Поделиться Опубликовано 31 Июля 2012 Стрелоk, Можешь написать как правильно выдать этот поршень? Я еще новичок в квестах уж не обессудь. Новичок - не оправдание. Смотри туторы. Cyclone Ссылка на комментарий
Magnus1 0 Опубликовано 9 Сентября 2012 Поделиться Опубликовано 9 Сентября 2012 Подскажите, возможно ли сделать так, что бы часть квеста( такая как например, найти то-то, принести его тому-то) появилась в ПДА только если я получу вообще сторонний инфопоршень? Я подозреваю, что впринцыпе можно использовать <has_info></has_info> как в диалогах , но я не уверен что это и с квстами работать будет. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти