Создание новых квестов и редактирование существующих
Если у вас появились вопросы по созданию и редактированию квестов, изменению существующих и добавлению новых в игру. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Сборник модостроения ЗП 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 за это полезное сообщение:
XOBAH, ты не смог бы мне скинуть файл info_zaton.xml. Просто не хочу из за одного фала расспаковать весь архив. Памяти не так уж и много на компе. А с Total Commander не открывает почему то.
Эти 0 пользователя(ей) поблагодарили maaz-1 за это полезное сообщение:
и добавлен в диалоги сидоровичу (подскажи где тут ошибка?)
Выделил, дальше не вникал. XOBAH
Добавлено (20.11.2011, 21:24) --------------------------------------------- а в чем ошибка ?
В том что лишняя строка я приводил ее тебе просто как пример с аргументами. XOBAH
Добавлено (24.11.2011, 23:38) --------------------------------------------- строку убрал и все равно ничего нет
Переписывай полностью диалог, ибо твой квест никогда никто нормально не сдаст. Как я понимаю структура диалога такая: Есть работа? - Да, сгоняй за водкой (выдача квеста) - Вот держи - Ух ты! Спасибо (выдача инфопоршня) Нету никаких проверок перед взятием квеста (взят-ли этот квест или нет, или он уже пройден), сдать квест невозможно (будет сдаваться только тот квест, который выдается при попытке сдать квест) В info_escape у тебя зареган не тот поршень, который используется в диалоге\кондлисте XOBAH
Добавлено (27.11.2011, 00:49) --------------------------------------------- можешь мне написать диалог? а то переписываю его уже наверное раз 10 но ничего кроме ошибок не получаю....
Добавлено (01.12.2011, 23:08) --------------------------------------------- XOBAH можешь помочь с диалогом? (переписываю его уже какой раз но ничего не получается)
Эти 0 пользователя(ей) поблагодарили Kosha за это полезное сообщение:
Всем привет. Заспавнил нпс (через all.spawn) в Зов Припяти на подключенной локации Милитари, и решил прописать ему квест. Квест простой на поиск водки. Но после разговора с нпс вылет с логом
Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ...call of pripyat\gamedata\scripts\task_manager.script:49: attempt to index global 'task_objects' (a nil value)
В скриптах прописал
function give_vodka_quest() task_manager.get_task_manager():give_task("quest_vodka_give") end function is_has_vodka_borode() if db.actor:object("vodka") then return true end return false end function transfer_vodka_to_boroda(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "vodka") end
Раньше на затоне такой квест делал и все нормально было. Может с локацией надо что нибудь сделать? В скриптах регистрировал
Причем здесь локация!? Ищи ошибку в описателе задания. denis2000
Вот что я прописал в dialog_military
<dialog id="begun_1_start"> <dont_has_info>quest_energo_give</dont_has_info> <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> <next>3</next> </phrase> <phrase id="3"> <text>Кстати раз уж подошел, сможешь мне помочь?</text> <next>4</next> <next>5</next> </phrase> <phrase id="4"> <text>Да конешно. Говори что надо</text> <next>6</next> </phrase> <phrase id="5"> <text>Нет, и так дел хватает.</text> <give_info>quest_energo_done</give_info> </phrase> <phrase id="6"> <text>Да вот бегаю, бегаю, отдохнуть даже не дают. Старшина чуть что сразу наряд на несколько дней.</text> <next>7</next> </phrase> <phrase id="7"> <text>Жаловаться нестоит, говори что сделать надо.</text> <next>8</next> </phrase> <phrase id="8"> <text>Купи мне энергетика, банки так четыре. Друга еще угощу. Я денег дам. Сам бы сходил, но нельзя.</text> <next>9</next> </phrase> <phrase id="9"> <text>Давай деньги, пойду куплю</text> <next>10</next> </phrase> <phrase id="10"> <text>Вот держи, только безалкогольного.</text> <action>dialogs_military.begun_money</action> <action>dialogs_military.give_energo_quest</action> <next>11</next> </phrase> <phrase id="11"> <text>Понял.</text> <give_info>quest_energo_give</give_info> </phrase> </phrase_list> </dialog>
<dialog id="begun_finish"> <has_info>quest_energo_give</has_info> <dont_has_info>quest_energo_done</dont_has_info> <precondition>dialogs_military.is_has_energo</precondition> <phrase_list> <phrase id="0"> <text>Да, вот держи, 4 банки как обещал.</text> <action>dialogs_military.transfer_energo</action> <next>1</next> </phrase> <phrase id="1"> <text>Ну спасибо тебе большое, возьми еще копеечку, купи и себе тоже. Я уж думал ты меня кинешь.</text> <give_info>quest_energo_done</give_info> <action>dialogs_military.begun_money</action> <next>2</next> </phrase> <phrase id="2"> <text>И тебе спасибо за доверие.</text> </phrase> </phrase_list> </dialog>
function begun_money(first_speaker, second_speaker) dialogs.relocate_money_to_actor(first_speaker, second_speaker, 1000) end
function give_energo_quest() task_manager.get_task_manager():give_task("quest_energo_give") end function is_has_energo() if db.actor:object("energy_drink") then return true end return false end function transfer_energo(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "energy_drink") end
razor_md, Измените координаты спавна НПС на Затоновские - если вылета нет, то возможна проблемма с лоацией. "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение:
Подскажите пожалуйста как ставить метку на пустое место? Что и где нужно создавать?
Метку на пустое место поставить нельзя! Только на объект, например на рестриктор. denis2000
Создал рестриктор по урокам от Хована, не получается:( [cut=all.spawn] [1871] ; cse_abstract properties section_name = space_restrictor name = spot_docs position = 404.85687255859,36.262756347656,-11.836292266846 direction = 0,0,0
Вот добавил стори и all spawn не хочет запаковываться Что не так? [cut noguest=спавн][1871] ; cse_abstract properties section_name = space_restrictor name = spot_docs position = 404.85687255859,36.262756347656,-11.836292266846 direction = 0,0,0
Подскажите как сделать чтобы на новой локации работали квесты и некоторые скриптовые функции в диалогах, все время вылетает...(локация милитари из ЧН)...Может где её зарегистрировать нужно или прописать ?
В Урок 8 в подробной инструкции от tracker описан необходимый минимум для подключения локации и ответьте на мой предыдущий вопрос. denis2000
Сделал этот квест на Затоне бороде - все отлично работает...На новой подключенной локе - вылет с тем же логом что писал в первом посте...Урок смотрел, все сделал так же, вылет как был так и есть. Все проблему решил. В скрипте task_objects.script была допущена ошибка...Удалил - все пошло поехало...
Добавлено (02.03.2012, 12:27) --------------------------------------------- Еще вопросик, из за чего происходит вылет с логом stack trace: ? В основном происходит если я создаю новый квест на основе другого. Да и другие новые созданные квесты тоже перестают работать. Раньше как то методом тыка исправил, сейчас уже не помню как.... Надеюсь на помощь
Сообщение отредактировал razor_md - Вс, 26.02.2012, 14:20
Эти 0 пользователя(ей) поблагодарили razor_md за это полезное сообщение:
razor_md, это не полный лог ошибки, а лишь его окончание. практически любая ошибка им завершается. нужно приводть последние сторочки лога чтобы точно определить причину. Смерти Вопреки Spectrum Project AP_Prodaction
Эти 0 пользователя(ей) поблагодарили Geonezis за это полезное сообщение:
это не полный лог ошибки, а лишь его окончание. практически любая ошибка им завершается. нужно приводть последние сторочки лога чтобы точно определить причину.
Я лог вылета вывожу комбинацией ctrl+v в блокноте после вылета игры, как по-другому вывести я незнаю. Видел еще в папке STALKER CALL OF PRIPYAT\users\logs файлы с логами, но там сплошная абракадабра в них... ----------------------------- Лог stack trace: он на что ссылается вообще? На незакрытый тег, на скрипт какой нибудь или ??? ------------- P.S это не проблема, просто хочу расширить знания в моддинге...
Сообщение отредактировал razor_md - Пт, 02.03.2012, 15:16
Эти 0 пользователя(ей) поблагодарили razor_md за это полезное сообщение:
razor_md, stack trace - это трассировка стека (тоесть сдержимое верхушки стека с адресом возврата и дополнительно отображается текущий модуль при исполнении которого произошла ошибка). Например:
Code
001B:02A6F7E7 xrRender_R1.dll
Строка stack trace будет в каждом логе! Просто не всегда будет иметь дополнительную информацию. "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение:
Моё почтение всем! Не знаю, по адресу ли попал, но всё же...
SGM_CoP_2.2 От изъятия ермаковского девайса при переходе на Затон остался неприятный осадок. Ведь сцену можно поправить, на честный обмен: связник изымает миноискатель и георадар, но что-то предлагает взамен. "Майор, у вас есть интересные штучки для нашей конторы, которые Вам без особой надобности. Я их изымаю для общего блага. Вот вам координаты нашего тайника на Затоне в качестве материальной и моральной компенсаций, отмечены на флешке". Флешка прилагается. Как вариант: "А Вы неплохо экипировались, майор. Кстати, не одолжите на время миноискатель, а то бандиты столько мин расставили в последнее время, что возникает вопрос, откуда у них столько этого добра?[cut noguest]А действительно, откуда? Или я пропустил какой-то квест? [/cut] Я-то пришёл налегке, а Вы уже пообтёрлись... Да и георадар наши спецы с удовольствием изучат. Обещаю вернуть при оказии" Оказия - это возможность смастерить нечто подобное у Новикова (при наличии запчастей, за которыми придётся побегать Ну, и разные комбинации на базе этих вариантов.
Кстати, возвращаясь к теме под спойлером... Когда игрок (по первому разу ) начинает колесить по мех.двору с георадаром в безуспешных поисках "клада", можно добавить квест от командира группы (их там, вроде бы, двое) "Разминировать проходы. СРОЧНО". А в диалоге при получении награды можно бросить намёк на северную стоянку бандитов: "Ну, друг, спасибо, выручил ты нас с этими минами. А я всё голову ломал над донесениями разведчиков, что это за "движение" в последнее время от "железки" на мех.двор и обратно у бандитов... Причём тянули они туда что-то большое и под усиленной охраной". Как вариант попроще: задание от любого ком.группы - "На севере заминирован проход. Ваша помощь миноискателем была бы очень кстати". ГГ по-любому "зацепит" груз в составе, проходя мимо... Конечно, играя второй раз, игрок сразу же "ломанётся" на север, но помня свой первый поиск груза...
C такими предложениями Вам к Николаю, или же, сюда. XOBAH
Добавлено (24.03.2012, 23:36) --------------------------------------------- XOBAH, Благодарю. К Николаю, думаю, рановато, а второй вариант задействую. [cut noguest]И эт-та... Я же не майор, я только учусь К чему такие вежливости между сталкерами?[/cut]
Сообщение отредактировал Мык - Сб, 24.03.2012, 19:21
Эти 0 пользователя(ей) поблагодарили Мык за это полезное сообщение: