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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вс, 13.05.2012, 21:44 | Сообщение # 46
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый День!
Сделал квест на поиск 7 артефактов 7 разных видов, по штуке каждого вида.
[cut=Скрипт квеста]function esc_rasvet_astronom_artefact_quests()
task_manager.get_task_manager():give_task("esc_rasvet_astronom_artefact_quests")
end
function esc_rasvet_astronom_artefact_quests_actor(first_speaker, second_speaker)
return db.actor:object("af_baloon") ~= nil and
db.actor:object("af_gravi") ~= nil and
db.actor:object("af_ice") ~= nil and
db.actor:object("af_glass") ~= nil and
db.actor:object("af_fuzz_kolobok") ~= nil and
db.actor:object("af_gold_fish") ~= nil and
db.actor:object("af_fire") ~= nil
end

function esc_rasvet_astronom_artefact_quests_otdat(first_speaker, second_speaker)
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_baloon")
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_gravi")
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_ice")
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_glass")
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_fuzz_kolobok")
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_gold_fish")
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_fire")

end
function esc_rasvet_astronom_artefact_quests_nagrada_actor(first_speaker, second_speaker)
dialogs.relocate_money_to_actor(first_speaker, second_speaker, 60000)
end[/cut]
Если прописать эти артефакты в стартовый набор, то квест проходим. Скрипты работают. Но если сохраниться после взятия квеста, и до его сдачи, то сохранения вылетают с логом
[cut=Лог]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 : ...es 1\Зов Припяти\gamedata\scripts\sgm_dialogs.script:5462: attempt to index field 'actor' (a nil value)
[/cut] Предполагаю, что где-то ошибка скрипта, но не вижу где. Заранее благодарен за советы.

Обрати внимание на строку скрипта на который ссылается лог. denis2000

Добавлено (13.05.2012, 21:44)
---------------------------------------------
Добрый Вечер! Хочу вернуться к вылету, о котором писал в предыдущем посту.
В строке 5462 находится функция return db.actor:object("af_baloon") ~= nil. Вроде в ней нет ничего необычного.
В сборнике модостроения Хована про такой вылет написано, что скрипт пытается обратится к параметру, но его не существует. Добавить в конфиг необходимый параметр. Как я понял, скрипт должен проверять наличие артефактов у ГГ, и при наличии всех 7 штук обновить задание квеста. Если не перезагружаться, то все работает.
Насчет совета добавить в конфиг необходимый параметр. Как это сделать? Заранее благодарен за советы?

 
XOBAHДата: Вс, 13.05.2012, 22:11 | Сообщение # 47
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 991 ]

sergej5500, Не, не угадал. Нужно проверять наличие самого ГГ...
Переделай проверку, таким образом
[cut]if db.actor ~= nil then
return db.actor:object("af_baloon") ~= nil and
db.actor:object("af_gravi") ~= nil and
db.actor:object("af_ice") ~= nil and
db.actor:object("af_glass") ~= nil and
db.actor:object("af_fuzz_kolobok") ~= nil and
db.actor:object("af_gold_fish") ~= nil and
db.actor:object("af_fire") ~= nil
else return false
end[/cut]
PS: Могу ошибаться в синтаксисе, ибо в голове висят экзамены и синтаксис другого языка...


 
sergej5500Дата: Вс, 20.05.2012, 22:09 | Сообщение # 48
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый Вечер!
Начал делать цепочку квестов для сталкеров Петрухи и Шило. Так как оригинальные Петруха и Шило ребята немногословные, (после спасения они говорят только: "Спасибо, что спас"), сделал для них поправку логики вида:
on_info = {+zat_b53_thanks_dialog_end =dist_to_actor_ge(65)} nil %=release_npc%.
После помощи Петрухе и получения награды, при удалении ГГ на 65 метров оба персонажа исчезают.
Для реализации квестов создал 2 новых НПС с визуалами и именами Петрухи и Шила, спавн которых происходит по [cut=функции]if has_alife_info("zat_b53_thanks_dialog_end") and dont_has_alife_info("zaton_petrusha_spawn") then
create("zaton_petrusha",120.94340515137,-7.3475394248962,190.58274841309,1174506,316)
give_info("zaton_petrusha_spawn")
end
if has_alife_info("zat_b53_thanks_dialog_end") and dont_has_alife_info("zaton_shilo_spawn") then
create("zaton_shilo",113.15841674805,-3.9360427856445,190.3991394043,1160053,316)
give_info("zaton_shilo_spawn")
end[/cut]В результате 2 НПС спавнятся на Скадовске и для них можно делать квесты.
После получения награды от оригинального Петрухи из котла и до удаления ГГ на 65 метров Петруха и Шило существуют в двух экземплярах. То есть можно их пристрелить и затем на Скадовске встретить живыми и здоровыми. Вопрос, есть ли какая-нибудь инфопорция, выдаваемая в случае атаки главным героем или мутантами, бандитами этого конкретного сквада, которую можно прописать в логику уже заспавнившихся на Скадовске Петрухи и Шила и обеспечить их исчезновение. Заранее благодарен за советы.


Сообщение отредактировал sergej5500 - Вс, 20.05.2012, 22:33
 
denis2000Дата: Пн, 21.05.2012, 12:44 | Сообщение # 49
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Абсолютно ничего не мешает выдать инфопорцию при удалении НПС и спавнить новых при наличии ее. Тогда не будет никаких "дубликатов".

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Пн, 21.05.2012, 23:08 | Сообщение # 50
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер!
Проблему с дубликатами Петрухи и Шила отчасти решил, прописав им в логику строку
on_info = {+zat_b53_actor_enemy} nil %=release_npc%. Инфопорцию взял из логики оригинальных Петрухи и Шила.
Касательно совета denis2000: Абсолютно ничего не мешает выдать инфопорцию при удалении НПС и спавнить новых при наличии ее. Тогда не будет никаких "дубликатов".
Как это сделать технически? Функция release_npc используется в логике Меча и Петьки Размандяя. Вроде никаких инфопорций из нее не выводится. Как по срабатыванию этой функции прописать инфопорцию, пригодную для скрипта спавна "дубликатов"? В сборнике Хована есть функции проверки: жив НПС или мертв. После удаления Петруха не жив, не мертв. Заранее благодарен за советы.
 
denis2000Дата: Пн, 21.05.2012, 23:56 | Сообщение # 51
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Ну так вот же:
Code
on_info = {+zat_b53_thanks_dialog_end =dist_to_actor_ge(65)} nil %=release_npc +zat_b53_release_nps%.

где - zat_b53_release_nps выдаваемая инфопорция. Стем же успехом заспавнить нпс можно прямо здесь или телепортировать существующих!


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Чт, 24.05.2012, 20:48 | Сообщение # 52
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Quote (sergej5500)
online_cond

Это работать не будет, нужно спавнить сквады по условию.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Пт, 25.05.2012, 23:38 | Сообщение # 53
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый Вечер!
Попробовал спавн сталкеров из оригинальной игры по условию. Проверял на сквадах Спартака и Кастета.
[cut=Что изменил]Из конфигов сквадов убрал строки

spawn_point = zat_b7_stalkers_raiders_spawn и spawn_point = zat_b7_stalkers_victims_spawn_1

Из файла simulation.ltx убрал строки
zat_b7_stalkers_raiders = zat_stalker_base_smart и zat_b7_stalkers_victims_1 = zat_b7

В файл sgm.tasks добавил функцию спавна

if db.actor:object("af_quest_b14_twisted") and dont_has_alife_info("zat_b7_stalkers_raiders_spawn") then
create_force("zat_b7_stalkers_raiders","zat_stalker_base_smart")
give_info("zat_b7_stalkers_raiders_spawn")
end
if db.actor:object("af_quest_b14_twisted") and dont_has_alife_info("zat_b7_stalkers_victims_1_spawn") then
create_force("zat_b7_stalkers_victims_1","zat_b7")
give_info("zat_b7_stalkers_victims_1_spawn")
end

Спавн происходит при взятии артефакта на земснаряде[/cut]
Функция спавна работает. У Спартака вроде все нормально, а у Кастета проблема. Султан не хочет давать квест на Шевченко. Сответствующие фразы просто не появляются в диалоге. Диалоги и логику сталкеров я не трогал. В чем может быть проблема. Заранее благодарен за советы.


Сообщение отредактировал sergej5500 - Пт, 25.05.2012, 23:39
 
denis2000Дата: Сб, 26.05.2012, 00:36 | Сообщение # 54
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Исправляй квест "Наезд", его состояние зависит от наличия этих сквадов.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Вс, 17.06.2012, 16:36 | Сообщение # 55
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Попробуй убавить количество НПС до 6.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
FREEM@NДата: Вс, 22.07.2012, 20:33 | Сообщение # 56
Легенда Зоны
Свобода
Сообщений: 1031
Награды: 8
Репутация: [ 271 ]

А как создать такой квест типа принеси/подай на ЗП (хочю учёным прописать квест на поиск гаусс-пушки)
У меня ЗП версии 1.6.2 (если надо)

Читай КМБ. denis2000
 
sergej5500Дата: Вс, 22.07.2012, 21:32 | Сообщение # 57
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

FREEM@N
Посмотрите эту тему
Здесь также много ценной информации
 
prohodchikДата: Вс, 04.11.2012, 12:45 | Сообщение # 58
Новичок
Пользователи
Сообщений: 50
Награды: 0
Репутация: [ 0 ]

Как можно сменить основные квесты поиска вертолетов на другие?

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

Сообщение отредактировал prohodchik - Вс, 04.11.2012, 12:46
 
denis2000Дата: Вс, 04.11.2012, 13:29 | Сообщение # 59
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

prohodchik, Можно например в файле zat_b101_logic.ltx замените выдачу квестов с такого:
Code
=give_task(zat_b101_heli_5_crash) +zat_b101_give_task =give_task(jup_b8_heli_4_crash) +jup_b8_give_task =give_task(zat_b28_heli_3_crash) =give_task(zat_b100_heli_2_crash) =give_task(jup_b9_heli_1_crash) +jup_b9_give_task =set_active_task(zat_b28_heli_3_crash)

на свои.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
BadQVIKДата: Пт, 07.12.2012, 19:41 | Сообщение # 60
Удаленные



denis2000, Просмотрел я КМБ, если честно то ничего не нашел...У меня с квестами была вечная проблема.Никак не могу научиться их делать. В ТЧ вроде как умудрился, а вот с ЗП посложнее будет! Если сможешь помочь, вытащи где-нибудь тутор по моей проблеме: как сделать чтобы мною созданный Нпс мог продавать информацию.
На сколько я понял...Это не совсем сложно. Пишется диалог, в него вставляются поршни, эти поршни вызывают функцию со скрипта.Ну а в скрипте как понятно лежит та самая функция-условие(цена информации).Вот как-то так.
Приме что я хочу сделать:
[cut noguest=Обязательно к прочтению!!!]Примечание--Нпс Игорек!
Допустим наш Игорек стоит на Скадовске.Гг подбегая к нему выявляет такой диалог
- Привет а ты КТо?
- Я игорек главный информатор в зоне!
- У тебя есть информация про новых мутантов?
- Конечно, я продам тебе ее за 2000 тысячи...

Условия Гг если да
- Хорошо вот деньги
Условия Гг если нет
- Нет спасибо слишком дороговато!

Вот. Надеюсь я довольно точно обосновал свою проблему и просьбу. Мне будет достаточно если вы ребята объясните мне в текстовом виде: как это все блин сделать! Ну и если можно упакованный в архив пример такой неистовой мути....
Спасибо за внимание, жду ответа.Всем удачи![/cut]

Простейший диалог, реализовать его вы в состоянии сами. denis2000
 
Поиск: