Модостроение. Создание и редактирование квестов
|
|
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 за это полезное сообщение: |
|
|
makdm | Дата: Вт, 04.03.2014, 10:47 | Сообщение # 181 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата lychagin0 ( ) Трудно передать проблему, в диалоге нет звукового сигнала Выдавайте задание не через диалог, а через рестриктор. В рестрикторе пишите
[sr_idle@_1] on_info = { +поршень_окончания_диалога} sr_idle@_2 %=give_task(gar_angar_shturm)%
[sr_idle@_2]
Цитата lychagin0 ( ) target = gar_b35
Я так понял, что указано имя смарта, а указывать необходимо story_id объекта.Добавлено (04.03.2014, 10:47) --------------------------------------------- Да, и ещё. Если тайтлы следуют один за другим по мере прохождения квеста, то title имеет кучу ненужных проверок. Можно написать короче
title = {+gar_b310_dolg_atack_squad_start} gar_b310_dolg_atack_title2, {+gar_b310_dolg_atack_squad_start +gar_b310_dolg_atack_squad_death} gar_b310_dolg_atack_title1, {+gar_b310_poisck} gar_b310_dolg_atack_title0, {+gar_start_zavesa} gar_b310_dolg_atack_title, {+gar_pole_complete} gar_b310_dolg_atack_title3, {+laser_turrel_dead} gar_b310_dolg_atack_title4, {+gar_b309_alfa_power_squad_death} gar_b310_dolg_atack_title5
А на самый первый тайтл при запуске задания можно вообще не ставить никаких проверок.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 04.03.2014, 12:32 | Сообщение # 182 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Listed, У меня надписи TITLE_DOESNT_EXIST появлялись, когда я ошибочно прописывал название квеста. То есть игра запускала несуществующий квест. Совет могу дать такой, проверять правильность запуска всех квестов мода на правильность их вызова. Название квеста в файлах tm_*** должно совпадать с названием квеста в скрипте или рестрикторе.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
lychagin0 | Дата: Вт, 04.03.2014, 18:30 | Сообщение # 183 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| Цитата makdm ( ) story_id объекта это story_id
Цитата makdm ( ) кучу ненужных проверок кол-во проверок пока тестовое.
Попробую через рестриктор, но всё равно интересно узнать, что за проблема. Почему это происходит. Сделал не один квест, а с таким не сталкивался.
Добавлено (04.03.2014, 14:39) --------------------------------------------- Попробовал через рестриктор, то же самое. Причём если всё правильно (есть #include "tm_garbage.ltx" и в вызове функции нет ошибки) то квест запускается без всяких внешних эффектов, т.е. нет звукового сигнала начала, нет иконки и в пда всё чисто. Но выполняется on_init = %=create_squad(gar_b310_dolg_atack_squad:gar_b310)% и квест идет нормально, но без сообщений о переключении. Если есть ошибка( нет #include "tm_garbage.ltx" или вызов сделать так %=give_task(gar_angar_shturm то появляется сигнал начала квеста, появляется иконка с сообщением: TITLE_DOESNT_EXIST но сам квест не запускается нет выполнения on_init Помогите разобраться.
Добавлено (04.03.2014, 18:30) --------------------------------------------- [cut noguest=Скрины] Это вызов квеста без ошибок, квест запускается. В пда пусто.
Эти две картинки с закомментированным инклудом файла. Сам квест не запускается.[/cut]
Сообщение отредактировал lychagin0 - Вт, 04.03.2014, 18:32 |
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
makdm | Дата: Вт, 04.03.2014, 19:33 | Сообщение # 184 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| lychagin0, вот эти пустые строчки попробуйте убрать
reward_item = reward_money =
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
lychagin0 | Дата: Ср, 05.03.2014, 01:43 | Сообщение # 185 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| Цитата makdm ( ) вот эти пустые строчки попробуйте убрать Убрал, не помогло. Всё то же самое. Даже не соображу в какую сторону думать.
|
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
lychagin0 | Дата: Пт, 07.03.2014, 15:55 | Сообщение # 186 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| Добрый день. При запуске нового квеста получаю сообщение TITLE_DOESNT_EXIST, в mod_crash_log.txt появляется лог: There is no task ["gar_angar_shturm"] in task ini_file or ini_file is not included!!! Но в task_manager.ltx есть #include "tm_garbage.ltx" название вызываемого квеста соответствует названию из файла tm_garbage.ltx(поиск находит идент. секцию.) Пробовал запускать через диалог, через рестриктор, всё едино. Вот на всякий случай кусок из [cut noguest= task_manager.ltx]; Выдача заданий: =give_task(тип_задания:ид_задания:группировка)
#include "tm_zaton.ltx" #include "tm_jupiter.ltx" #include "tm_pripyat.ltx" #include "tm_darkvalley.ltx" #include "tm_military.ltx" #include "tm_agroprom.ltx" #include "tm_agroprom_underground.ltx" #include "tm_x18.ltx" #include "tm_escape.ltx" #include "tm_marsh.ltx" #include "tm_red_forest.ltx" #include "tm_employer.ltx" #include "tm_extended.ltx" #include "tm_garbage.ltx"[/cut]
[cut noguest= tm_garbage.ltx][gar_angar_shturm] icon = ui_inGame2_BlockpostProtection prior = 120 storyline = false title = {+gar_b310_dolg_atack_squad_start} gar_b310_dolg_atack_title2 descr = {+gar_b310_dolg_atack_squad_start} gar_dolg_descr condlist_0 = {+gar_b310_dolg_atack_complete} complete [/cut]
Вызов из рестриктора: [cut=Логика рестриктора][logic] active = sr_idle [sr_idle] on_info = {-gar_b35_dolg_start} %+gar_b35_dolg_start% on_info1 = {+gar_b310_dolg_atack_squad_start} sr_idle@wiat %=give_task("gar_angar_shturm")%
[sr_idle@wiat] [/cut] Квест на подсоединённой к СГМ-2.2 локации. Другой квест запускается. А где тут накосячил не найду. gar_b310_dolg_atack_squad_start выдаётся через диалог. Заранее спасибо за подсказку.
Сообщение отредактировал lychagin0 - Пт, 07.03.2014, 16:08 |
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 07.03.2014, 16:35 | Сообщение # 187 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| lychagin0, %=give_task("gar_angar_shturm")% - Почему в кавычках!?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
lychagin0 | Дата: Пт, 07.03.2014, 18:28 | Сообщение # 188 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| denis2000, спасибо, это уже от невнимательности. Просто уже менял вызов раз 200. Сейчас убрал "" и всё вернулось на круги своя. Теперь нет запуска, в пда чисто, лога нет но в таком виде :
[cut noguest=Квест][gar_angar_shturm] icon = ui_inGame2_BlockpostProtection prior = 120 storyline = false on_init = %=create_squad(gar_b310_dolg_atack_squad:gar_b310) =all_squads_online(gar_b310) =teleport_squad(gar_b310_dolg_atack_squad:gar_b310_spawn_point)% title = {+gar_b310_dolg_atack_squad_start} gar_b310_dolg_atack_title2 descr = {+gar_b310_dolg_atack_squad_start} gar_dolg_descr condlist_0 = {+gar_b310_dolg_atack_complete} complete[/cut]
Выполняется on_init а дальше всё: condlist_0 не выполняется. Спасибо.
|
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 07.03.2014, 19:32 | Сообщение # 189 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Имя квеста TITLE_DOESNT_EXIST, может быть только в двух случаях: 1. Нет секции квеста который вызвали 2. Из секции квеста невозможно считать параметр title Проверить читается ли секция можно например изменяя имя иконки квеста - если иконка меняется секция читается. Проверить читается ли параметр title тоже очень просто, приравняйте его к пустой строке - если при выдачи задания есть вылет менеджера сообщений, то параметр читается.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
lychagin0 | Дата: Сб, 08.03.2014, 00:17 | Сообщение # 190 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| denis2000, после того, как убрал "" из функции запуска квеста, в ПДА вообще нет ничего, диалог проходит до своего завершения. Нет сообщения о новом задании, но я по Вашему совету сделал вот так:
[cut noguest=Квест][gar_angar_shturm] icon = ui_inGame2_FindArmySquad prior = 120 storyline = false on_init = %=create_squad(gar_b310_dolg_atack_squad:gar_b310) =all_squads_online(gar_b310) =teleport_squad(gar_b310_dolg_atack_squad:gar_b310_spawn_point)% title = descr = {+gar_b310_dolg_atack_squad_start} gar_dolg_descr condlist_0 = {+gar_b310_dolg_atack_complete} complete[/cut]
Выполняется только on_init, все три функции отрабатываются. icon поменял, но её как не было так и нет. На отсутствие title нет реакции. condlist_0 то же не работает. Почему то работает только on_init
|
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 08.03.2014, 00:50 | Сообщение # 191 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| lychagin0, Все относящееся к on_init, надеюсь одна строка? Пробуйте для эксперимента убрать параметр on_init.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
lychagin0 | Дата: Сб, 08.03.2014, 01:04 | Сообщение # 192 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| denis2000, да одна конечно, пробовал убирал, вообще никаких признаков запуска квеста. Я сам в полном недоумении, ведь сделал уже не один квест на разных локах. А тут просто не представляю что происходит. Да, я пробовал запустить через диалог, для проверки всунул вот так: function promzone_start() task_manager.get_task_manager():give_task("gar_angar_shturm") give_object_to_actor("ecolog_military_outfit") end
Костюмчик не появился. Но on_init работает.
|
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
makdm | Дата: Сб, 08.03.2014, 10:51 | Сообщение # 193 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| lychagin0, ошибка появляется из-за того, что вы пытаетесь телепортировать сквад, который возможно не успел полностью проспавниться.
teleport_squad(gar_b310_dolg_atack_squad:gar_b310_spawn_point)
Уберите функцию телепортации из параметра on_init, оставьте только on_init = %=create_squad(gar_b310_dolg_atack_squad:gar_b310) =all_squads_online(gar_b310)%
а в секции сквада[gar_b310_dolg_atack_squad]:online_offline_group пропишите
spawn_point = gar_b310_spawn_point
Тогда сквад сразу появится в нужной точке, а само задание появится в ПДА.Добавлено (08.03.2014, 10:51) --------------------------------------------- Если же сквад по сцене в игре, необходимо сначала проспавнить, а потом телепортировать на нужную точку, то всегда делайте проверку на то, что сквад успел проспавниться
[logic] active = sr_idle [sr_idle] on_info = {-gar_b35_dolg_start} %+gar_b35_dolg_start% on_info2 = {+gar_b310_dolg_atack_squad_start} sr_idle@wiat %=give_task(gar_angar_shturm)%
[sr_idle@wiat] on_info = {=squad_exist(gar_b310_dolg_atack_squad)} sr_idle@wiat_1 %=teleport_squad(gar_b310_dolg_atack_squad:gar_b310_spawn_point)%
[sr_idle@wiat_1]
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
lychagin0 | Дата: Сб, 08.03.2014, 11:07 | Сообщение # 194 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| makdm, спасибо за Ваш совет, но проблема не в этом, сквд в полном составе появляется там где положено. Я пробовал и без телепортации, я не пойму почему нет старта квеста, но выполняется действие которое должно быть выполнено только при старте квеста. Т.е. проблемма которую я озвучивал в теме общих вопросов так и осталась, там я сделал скрины. А использование Вашей функции наиболее оптимальный вариант заставить НПС делать то что нужно по сюжету. До функции я отправлял их по путям с переключением логики. Получалось нормально, но я решил, что очень нудно для игрока, и ускорил процесс.
|
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
makdm | Дата: Сб, 08.03.2014, 11:11 | Сообщение # 195 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата lychagin0 ( ) но проблема не в этом Я ради эксперимемента поставил ваше задание в игру. Сделал как написал выше.У меня всё работает. А вот как только добавил функцию телепортации в on_init - задание перестало появляться в ПДА.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
|