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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
lychagin0Дата: Пт, 07.03.2014, 15:55 | Сообщение # 181
Легенда Зоны
Вольные сталкеры
Сообщений: 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 | Сообщение # 182
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
lychagin0Дата: Пт, 07.03.2014, 18:28 | Сообщение # 183
Легенда Зоны
Вольные сталкеры
Сообщений: 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 | Сообщение # 184
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
lychagin0Дата: Сб, 08.03.2014, 00:17 | Сообщение # 185
Легенда Зоны
Вольные сталкеры
Сообщений: 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 | Сообщение # 186
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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

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

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

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

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

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


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

makdm, Спасибо, сейчас ещё раз проверю. Или у меня уже ум за разум зашёл с этим квестом, или я попутал что делал, а что нет.

 
prohodchikДата: Ср, 16.07.2014, 20:41 | Сообщение # 192
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

Где можно увидеть список story_ids квестодателей в ЧН?

В game_story_ids.ltx denis2000

Как создать новых квестодателей? Где их необходимо прописать, помимо game_story_ids?

Все тоже что и для обычных НПС. denis2000

Какой тип квеста указать для задания по зачастке (убийству) группы NPC?

type = eliminate_smart denis2000

А как он узнает, какой смарт нужно убить? Что нужно прописать для конкретного смарта?


Проект в разработке – "Болотные легенды"

Сообщение отредактировал prohodchik - Ср, 16.07.2014, 20:34
 
denis2000Дата: Ср, 16.07.2014, 20:53 | Сообщение # 193
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

prohodchik,
Код
target_cond = {=target_smart_name(<имя смарта>)} true


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
prohodchikДата: Чт, 17.07.2014, 15:39 | Сообщение # 194
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

denis2000, где можно увидеть список существующих смартов?

В all.spawn. denis2000


Проект в разработке – "Болотные легенды"
 
Shram22Дата: Чт, 31.07.2014, 14:08 | Сообщение # 195
Удаленные



А как в sgm 2.2 убрать все квесты и всех нпс на новых локациях?
 
Поиск: