Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Создание и редактирование квестов
denis2000Дата: Пн, 10.10.2011, 21:25 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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

Создание новых квестов и редактирование существующих

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


Много интересного материала здесь (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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
makdmДата: Вт, 04.03.2014, 10:47 | Сообщение # 181
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата 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

А на самый первый тайтл при запуске задания можно вообще не ставить никаких проверок.


Терпение......
И все получится!
 
sergej5500Дата: Вт, 04.03.2014, 12:32 | Сообщение # 182
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Listed,
У меня надписи TITLE_DOESNT_EXIST появлялись, когда я ошибочно прописывал название квеста. То есть игра запускала несуществующий квест. Совет могу дать такой, проверять правильность запуска всех квестов мода на правильность их вызова. Название квеста в файлах tm_*** должно совпадать с названием квеста в скрипте или рестрикторе.
 
lychagin0Дата: Вт, 04.03.2014, 18:30 | Сообщение # 183
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

Цитата 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 wacko то появляется сигнал начала квеста, появляется иконка с сообщением: TITLE_DOESNT_EXIST но сам квест не запускается нет выполнения on_init
Помогите разобраться.

Добавлено (04.03.2014, 18:30)
---------------------------------------------
[cut noguest=Скрины]
Это вызов квеста без ошибок, квест запускается. В пда пусто.




Эти две картинки с закомментированным инклудом файла. Сам квест не запускается.[/cut]




Сообщение отредактировал lychagin0 - Вт, 04.03.2014, 18:32
 
makdmДата: Вт, 04.03.2014, 19:33 | Сообщение # 184
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

lychagin0, вот эти пустые строчки попробуйте убрать

reward_item =
reward_money =


Терпение......
И все получится!
 
lychagin0Дата: Ср, 05.03.2014, 01:43 | Сообщение # 185
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

Цитата makdm ()
вот эти пустые строчки попробуйте убрать

Убрал, не помогло. Всё то же самое. Даже не соображу в какую сторону думать.


 
lychagin0Дата: Пт, 07.03.2014, 15:55 | Сообщение # 186
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

Добрый день. При запуске нового квеста получаю сообщение
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
 
denis2000Дата: Пт, 07.03.2014, 16:35 | Сообщение # 187
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

lychagin0, %=give_task("gar_angar_shturm")% - Почему в кавычках!?

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
lychagin0Дата: Пт, 07.03.2014, 18:28 | Сообщение # 188
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

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 не выполняется. Спасибо.


 
denis2000Дата: Пт, 07.03.2014, 19:32 | Сообщение # 189
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Имя квеста TITLE_DOESNT_EXIST, может быть только в двух случаях:
1. Нет секции квеста который вызвали
2. Из секции квеста невозможно считать параметр title
Проверить читается ли секция можно например изменяя имя иконки квеста - если иконка меняется секция читается. Проверить читается ли параметр title тоже очень просто, приравняйте его к пустой строке - если при выдачи задания есть вылет менеджера сообщений, то параметр читается.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
lychagin0Дата: Сб, 08.03.2014, 00:17 | Сообщение # 190
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

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


 
denis2000Дата: Сб, 08.03.2014, 00:50 | Сообщение # 191
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

lychagin0, Все относящееся к on_init, надеюсь одна строка? Пробуйте для эксперимента убрать параметр on_init.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
lychagin0Дата: Сб, 08.03.2014, 01:04 | Сообщение # 192
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

denis2000, да одна конечно, пробовал убирал, вообще никаких признаков запуска квеста. Я сам в полном недоумении, ведь сделал уже не один квест на разных локах. А тут просто не представляю что происходит. Да, я пробовал запустить через диалог, для проверки всунул вот так:
function promzone_start()
task_manager.get_task_manager():give_task("gar_angar_shturm")
give_object_to_actor("ecolog_military_outfit")
end

Костюмчик не появился. Но on_init работает.


 
makdmДата: Сб, 08.03.2014, 10:51 | Сообщение # 193
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

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]


Терпение......
И все получится!
 
lychagin0Дата: Сб, 08.03.2014, 11:07 | Сообщение # 194
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

makdm, спасибо за Ваш совет, но проблема не в этом, сквд в полном составе появляется там где положено. Я пробовал и без телепортации, я не пойму почему нет старта квеста, но выполняется действие которое должно быть выполнено только при старте квеста. Т.е. проблемма которую я озвучивал в теме общих вопросов так и осталась, там я сделал скрины. А использование Вашей функции наиболее оптимальный вариант заставить НПС делать то что нужно по сюжету. До функции я отправлял их по путям с переключением логики. Получалось нормально, но я решил, что очень нудно для игрока, и ускорил процесс.

 
makdmДата: Сб, 08.03.2014, 11:11 | Сообщение # 195
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата lychagin0 ()
но проблема не в этом

Я ради эксперимемента поставил ваше задание в игру.
Сделал как написал выше.У меня всё работает.
А вот как только добавил функцию телепортации в on_init - задание перестало появляться в ПДА.


Терпение......
И все получится!
 
Поиск: