Модостроение. Создание и редактирование квестов
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:25 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Создание и редактирование квестов Создание новых квестов и редактирование существующих Если у вас появились вопросы по созданию и редактированию квестов, изменению существующих и добавлению новых в игру. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Code function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Code Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Code Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Чт, 04.04.2013, 21:15 | Сообщение # 106 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| FantomICW, Попробуй прекондишионы прописать таким образом: [cut=Функции]function actor_have_pda_ross(first_speaker, second_speaker) if db.actor ~= nil then return db.actor:object("pda_ross") ~= nil else return false end end
function actor_not_have_pda_ross(first_speaker, second_speaker) if db.actor ~= nil then return db.actor:object("pda_ross") == nil else return false end end[/cut]
Сообщение отредактировал sergej5500 - Чт, 04.04.2013, 21:52 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
FantomICW | Дата: Чт, 04.04.2013, 21:51 | Сообщение # 107 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| sergej5500, сделал, все тот-же лог
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
sergej5500 | Дата: Чт, 04.04.2013, 21:52 | Сообщение # 108 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| FantomICW, Так же возможна ошибка в спавне. Сквады, которые спавнятся через create_squad, имеют в конфиге строку spawn_point, прописанный в all.spawn (координаты точки спавна). Попробуй заспавнить сквад через конфиг смарт-террайна.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
FantomICW | Дата: Чт, 04.04.2013, 21:57 | Сообщение # 109 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| sergej5500, в алл.спавн надо что-то делать, или достаточно прописать в simulation.ltx что-то в роде jup_killer_ross_squad = jup_b46?
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
Geonezis | Дата: Чт, 04.04.2013, 22:11 | Сообщение # 110 |
Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
| FantomICW, закоменти по одной функции вызываемые в диалоге и посмотри при какой конкретно у тебя происходит вылет. И дальше от нее пляши.
Смерти Вопреки Spectrum Project AP_Prodaction
|
|
|
Эти 0 пользователя(ей) поблагодарили Geonezis за это полезное сообщение: |
|
|
sergej5500 | Дата: Чт, 04.04.2013, 22:12 | Сообщение # 111 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| FantomICW, В configs\scripts\jupiter\smart\jup_b46 добавь код: [cut=Код]respawn_params = respawn@jup_b46
[respawn@jup_b46] spawn_mercenary@jup_killer_ross_squad
[spawn_mercenary@jup_killer_ross_squad] spawn_squads = jup_killer_ross_squad spawn_num = {+pila_quest_init -jup_killer_ross_squad_death} 1, 0[/cut] Добавь сквад в simulation_objects_props [jup_killer_ross_squad]:default_squad sim_avail = false Убери строку on_info4 = {+pila_quest_init -spawn_jup_killer_ross_squad} %=create_squad(jup_killer_ross_squad:jup_b46) +spawn_jup_killer_ross_squad% из jup_b46_spatial_bubble_zone. Попробуй запустить квест.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
mizabrik | Дата: Чт, 04.04.2013, 22:25 | Сообщение # 112 |
Почетный инженер «Свободы»
Свобода
Сообщений: 360
| FantomICW, попробуй убрать лишнюю строчку <?xml… в файле с текстом.
|
|
|
Эти 0 пользователя(ей) поблагодарили mizabrik за это полезное сообщение: |
|
|
FantomICW | Дата: Чт, 04.04.2013, 22:37 | Сообщение # 113 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| sergej5500, не помогло. Сейчас попробую с функциями поделать.
Функции в порядке, xml вроде тоже в норме, по крайней мере проверь теги с подсветкой синтаксиса, шерсти логику. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
sergej5500 | Дата: Чт, 04.04.2013, 22:47 | Сообщение # 114 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| FantomICW, Возможно, вылет из-за xr_conditions. Попробуй добавить в этот файл код: function actor_have_pda_ross(actor, npc, p) return (sgm_dialogs.actor_have_pda_ross(actor, npc)) or (has_alife_info("pila_quest_end")) end function actor_not_have_pda_ross(actor, npc, p) return (sgm_dialogs.actor_have_pda_ross(actor, npc)) or (has_alife_info("pila_quest_end")) end
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Ааз | Дата: Чт, 02.05.2013, 22:17 | Сообщение # 115 |
Хозяин Зоны
Зомби
| Возник вопрос: Есть рабочий квест на поиск и возвращение дробовика. В общем-то квест работает, но метка на сам дробовик не вешается, не смотря на то, что он прописан как квестовый предмет и имеет собственный стори ид, который использован в логике квеста (tm_zaton.ltx).
[cut noguest=Квест в tm_zaton.ltx][zat_noah_shotgun_quest] icon = ui_inGame2_Bezopasnoe_mesto storyline = false title = {+zat_actor_have_noah_quest_shotgun} zat_noah_shotgun_quest_name_1, {-zat_actor_have_noah_quest_shotgun} zat_noah_shotgun_quest_name descr = {+zat_actor_have_noah_quest_shotgun} zat_noah_shotgun_quest_text_1, {-zat_actor_have_noah_quest_shotgun} zat_noah_shotgun_quest_text target = {+zat_actor_have_noah_quest_shotgun} zat_b18_noah, {-zat_actor_have_noah_quest_shotgun} wpn_spas12_noah_quest condlist_0 = {+zat_noah_shotgun_quest_end} complete condlist_1 = {+zat_b18_noah_dead} fail[/cut]
[cut noguest=Сам квестовый предмет в fcop_quest_items.ltx (инклуд файла прописан в system.ltx)];----------------------------------------------------------------------------- ; Уникальный SPAS-12 по квесту Ноя ;----------------------------------------------------------------------------- [wpn_spas12_noah_quest]:device_pda ;В configs/weapons/spas12.ltx внизу есть практчный вариант дробовика. Фактически, полностью аналогичен "Карабинеру". Хотите, можете опробовать GroupControlSection = spawn_group discovery_dependency = $spawn = "weapons\wpn_spas12_noah_quest" ; name and section in level editor cform = skeleton class = II_ATTCH visual = dynamics\weapons\wpn_spas12\wpn_spas12.ogf cost = 17500 quest_item = true inv_name = st_wpn_spas12_noah_quest inv_name_short = st_wpn_spas12_noah_quest description = st_wpn_spas12_noah_quest_descr inv_grid_width = 5 inv_grid_height = 1 inv_grid_x = 12 inv_grid_y = 3 story_id = wpn_spas12_noah_quest auto_attach = false ;Strap postion attach_bone_name = bip01_spine2 ;variation 1 - better attach_position_offset = -0.245, -0.11, -0.265 attach_angle_offset = 1.326452, -0.15708, 1.919862 ;variation 2 - from weapons ltx ;attach_position_offset = -0.25, -0.11, -0.26 ;attach_angle_offset = 1.308999, -0.15708, 1.919862[/cut]
[cut noguest=Диалоги квеста в dialogs_fcop.xml (файл прописан в system.ltx)]<dialog id="zat_noah_shotgun_quest_end_dialog"> <precondition>dialogs_zaton.zat_noah_have_shotgun</precondition> <has_info>zat_noah_shotgun_quest_init</has_info> <dont_has_info>zat_noah_shotgun_quest_end</dont_has_info> <phrase_list> <phrase id="2"> <text>zat_noah_shotgun_quest_end_dialog_2</text> <next>3</next> </phrase> <phrase id="1"> <text>zat_noah_shotgun_quest_end_dialog_1</text> <next>2</next> </phrase> <phrase id="0"> <text>zat_noah_shotgun_quest_end_dialog_0</text> <give_info>zat_noah_shotgun_quest_end</give_info> <action>dialogs_zaton.zat_noah_shotgun_quest_relocate_shotgun_from_actor</action> <next>1</next> </phrase> <phrase id="3"> <text>zat_noah_shotgun_quest_end_dialog_3</text> <next>4</next> </phrase> <phrase id="4"> <text>zat_noah_shotgun_quest_end_dialog_4</text> <next>5</next> </phrase> <phrase id="5"> <text>zat_noah_shotgun_quest_end_dialog_5</text> <action>dialogs_zaton.zat_noah_shotgun_quest_relocate_award_to_actor</action> <next>6</next> </phrase> <phrase id="6"> <text>zat_noah_shotgun_quest_end_dialog_6</text> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> <dialog id="zat_noah_shotgun_quest_dialog"> <precondition>dialogs_zaton.zat_noah_not_have_shotgun</precondition> <dont_has_info>zat_noah_shotgun_quest_init</dont_has_info> <dont_has_info>zat_noah_shotgun_quest_no</dont_has_info> <phrase_list> <phrase id="100"> <text>zat_noah_shotgun_quest_dialog_100</text> <give_info>zat_noah_shotgun_quest_no</give_info> <next>101</next> </phrase> <phrase id="102"> <text>zat_noah_shotgun_quest_dialog_102</text> <action>dialogs.break_dialog</action> </phrase> <phrase id="101"> <text>zat_noah_shotgun_quest_dialog_101</text> <next>102</next> </phrase> <phrase id="4"> <text>zat_noah_shotgun_quest_dialog_4</text> <action>dialogs.break_dialog</action> </phrase> <phrase id="2"> <text>zat_noah_shotgun_quest_dialog_2</text> <next>3</next> </phrase> <phrase id="3"> <text>zat_noah_shotgun_quest_dialog_3</text> <action>dialogs_zaton.zat_noah_shotgun_quest_give</action> <give_info>zat_noah_shotgun_quest_init</give_info> <next>4</next> </phrase> <phrase id="1"> <text>zat_noah_shotgun_quest_dialog_1</text> <next>2</next> <next>100</next> </phrase> <phrase id="0"> <text>zat_noah_shotgun_quest_dialog_0</text> <next>1</next> </phrase> </phrase_list> </dialog>[/cut]
[cut noguest=Инфопоршни из info_fcop.xml (файл прописан в system.ltx)]<info_portion id="zat_noah_shotgun_quest_init"></info_portion> <info_portion id="zat_zat_noah_shotgun_quest_no"></info_portion> <info_portion id="zat_noah_shotgun_quest_end"></info_portion> <info_portion id="zat_noah_quest_shotgun_spawn"></info_portion> <info_portion id="zat_actor_have_noah_quest_shotgun"></info_portion>[/cut]
Вот что тут не так? Подскажите пожалуйста.
|
|
|
Эти 0 пользователя(ей) поблагодарили Ааз за это полезное сообщение: |
|
|
Geonezis | Дата: Чт, 02.05.2013, 22:44 | Сообщение # 116 |
Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
| Ааз, пересоздай заново секцию квестового предмета по образцу из оригинала (quest_items.ltx) . Сделай ее классом device_pda, или identity_immunities.
Смерти Вопреки Spectrum Project AP_Prodaction
|
|
|
Эти 0 пользователя(ей) поблагодарили Geonezis за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 02.05.2013, 23:08 | Сообщение # 117 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Ааз, Согласен с многоуважаемым Geonezis. Нужен другой класс предмета, достаточно просто закоментировать переменную class = II_ATTCH и этот параметр будет унаследован, как раз из секции device_pda.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Странныый | Дата: Сб, 04.05.2013, 19:55 | Сообщение # 118 |
Удаленные
| Как сделать квест на ЧН? Видел что ранее об этом спрашивал Kosha, можете рассказать поподробнее? начать например с второстепенного квеста (уничтожить отряд врага или вернуть аптечку)
Встречное предложение: Вы разберетесь в этом вопросе сами и сделаете урок в теме КМБ и многие вас за это поблагодарят. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили Странныый за это полезное сообщение: |
|
|
Ааз | Дата: Вт, 07.05.2013, 21:59 | Сообщение # 119 |
Хозяин Зоны
Зомби
| Снова обращаюсь за помощью. Понимаю, что возможно уже достал) Собственно, в чем проблема. Диалог при взятии квеста у НПС работает, но дальше никакой реакции. То есть квест не выдается, я пробежался по местам предполагаемого спавна предметов - там везде пусто. То бишь квест не запускается элементарно. [cut noguest=Диалоги в dialogs_fcop.xml (файл прописан в систем.лтх)]<dialog id="zat_demiurg_search_documents"> <dont_has_info>zat_search_documents_start</dont_has_info> <phrase_list> <phrase id="0"> <text>Привет, звал?</text> <next>1</next> </phrase> <phrase id="1"> <text>Да, есть кое-что любопытное. Про лабораторию Х17 слышал чего-нибудь? Если нет, то оно и понятно - деятельность её была засекречена, чем они там занимались, никто не знает. Но прошел слух, будто диггеры накопали документы из этой лаборатории. Однако диггеров потом кто-то убил. Мои люди выяснили, что это были 2 отряда Ренегатов, они явно спешили и очень наследили. На месте убийств остались эти самые документы. Нужно забрать их и принести мне.</text> <next>2</next> </phrase> <phrase id="2"> <text>А где искать-то?</text> <next>3</next> </phrase> <phrase id="3"> <text>Одна часть документов лежит здесь, на Затоне, где-то под землей, скорее всего это пещера или даже лаборатория. Хотя нет, в лабораторию под "Железным лесом" диггеры не смогли бы попасть, значит остаются пещеры. Вторая часть документов находится в окрестностях Юпитера, в одном из железнодорожных тоннелей.</text> <action>dialog_zaton.give_demiurg_search_documents_quest</action> <give_info>zat_search_documents_start</give_info> <next>4</next> </phrase> <phrase id="4"> <text>Ну тогда я отправляюсь на поиски.</text> <action>dialog_zaton.jup_document_x17_create</action> </phrase> </phrase_list> </dialog> <dialog id="zat_demiurg_search_doсuments_complete"> <has_info>zat_search_documents_have_2</has_info> <dont_has_info>zat_search_documents_end</dont_has_info> <precondition>dialog_zaton.actot_have_all_documents</precondition> <phrase_list> <phrase id="0"> <text>Нашел я эти документы, побегать солидно пришлось.</text> <next>1</next> </phrase> <phrase id="1"> <text>Главное, что нашел.</text> <next>2</next> </phrase> <phrase id="2"> <text>Держи.</text> <action>dialog_zaton.actot_to_demiurg_give_documents</action> <next>3</next> </phrase> <phrase id="3"> <text>Отлично, вот твоя награда и можешь быть свободен. Если ты мне понадобишься, я тебя найду.</text> <give_info>zat_search_documents_end</give_info> </phrase> </phrase_list> </dialog>[/cut]
[cut noguest=Инфопоршни]<!--Квест на поиск двух частей документов--> <info_portion id="zat_search_documents_start"></info_portion> <info_portion id="zat_search_documents_end"></info_portion> <info_portion id="zat_search_documents_have_1"></info_portion> <info_portion id="zat_search_documents_create_2"></info_portion> <info_portion id="zat_search_documents_have_2"></info_portion>[/cut]
[cut noguest=Задание в tm_zaton.ltx][zat_demiurg_search_documents] icon = ui_inGame2_Gipoteza storyline = false title = {+zat_search_documents_have_2} zat_demiurg_search_documents_name2, {+zat_search_documents_create_2 -zat_search_documents_have_2} zat_demiurg_search_documents_name1, {-zat_search_documents_have_1} zat_demiurg_search_documents_name descr = {+zat_search_documents_have_2} zat_demiurg_search_documents_text2, {+zat_search_documents_create_2 -zat_search_documents_have_2} zat_demiurg_search_documents_text1, {-zat_search_documents_have_1} zat_demiurg_search_documents_text target = {+zat_search_documents_have_2} zat_demiurg, nil condlist_0 = {+zat_search_documents_end} complete on_complete = %=inc_faction_goodwill_to_actor(stalker:70)% reward_money = 7500[/cut]
[cut noguest=dialogs_zaton.script]--Квест на поиск документов function jup_document_x17_create(first_speaker, second_speaker) alife():create("jup_document_x17_part_1_info",vector():set(-196.644760,3.487357,-436.577667),383164,480) end
function give_demiurg_search_documents_quest() task_manager.get_task_manager():give_task("zat_demiurg_search_documents") end
function actot_to_demiurg_give_documents(first_speaker, second_speaker) local items_table = {"jup_document_x17_part_1_info","zat_document_x17_part_2_info"} for k,v in pairs(items_table) do if db.actor:object(v) ~= nil then dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, v) end end end
function actot_have_all_documents(first_speaker, second_speaker) return db.actor:object("jup_document_x17_part_1_info")~=nil and db.actor:object("zat_document_x17_part_2_info")~=nil end[/cut]
[cut noguest=new_tasks.script]function task_spec() local level_name=level.name() if level_name=="zaton" then if has_alife_info("zat_search_documents_start") and (not has_alife_info("zat_search_documents_have_1")) and db.actor:object("jup_document_x17_part_1_info") then db.actor:give_info_portion("zat_search_documents_have_1") end if has_alife_info("zat_search_documents_have_1") and (not has_alife_info("zat_search_documents_create_2")) then alife():create("zat_document_x17_part_2_info",vector():set(19.153345,3.747883,369.347382),984300,59) db.actor:give_info_portion("zat_search_documents_create_2") end if has_alife_info("zat_search_documents_create_2") and (not has_alife_info("zat_search_documents_have_2")) and db.actor:object("zat_document_x17_part_2_info") then db.actor:give_info_portion("zat_search_documents_have_2") end end end[/cut]
Сообщение отредактировал Ааз - Вт, 07.05.2013, 21:59 |
|
|
Эти 0 пользователя(ей) поблагодарили Ааз за это полезное сообщение: |
|
|
Geonezis | Дата: Вт, 07.05.2013, 22:40 | Сообщение # 120 |
Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
| Ааз, 1. Выдача квеста была? 2. Функцию task_spec() ты на апдейт в биндере повесил?
Смерти Вопреки Spectrum Project AP_Prodaction
|
|
|
Эти 0 пользователя(ей) поблагодарили Geonezis за это полезное сообщение: |
|
|
|