|
Модостроение. Создание и редактирование квестов
|
|
| 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 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вс, 30.12.2012, 15:21 | Сообщение # 76 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| 9vova8 Скорее всего, у Вас ошибка здесь create_squad(zat_beta_artef_squad:zat_beta_art_spawn) Я порылся в конфигах ЗП. В чистом ЗП вроде нельзя после названия сквада писать секции типа zat_beta_art_spawn. Там должно быть название смарта, на котором спавнят сквад. Если all.spawn не собирается, то где то в секциях ошибка. И еще, в конфиге сквада нет параметра target_smart. Мой совет убрать spawn_point ошибочен. Приношу извинения.
Сообщение отредактировал sergej5500 - Вс, 30.12.2012, 15:25 |
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| 9vova8 | Дата: Сб, 05.01.2013, 17:24 | Сообщение # 77 |
|
Новичок
Пользователи
Сообщений: 91
| Как написать перед началом диалога условие на наличие предмета?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили 9vova8 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Сб, 05.01.2013, 17:34 | Сообщение # 78 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| 9vova8 Для проверки наличия предмета перед началом диалога используютя прекондишионы. Пример: <precondition>dialogs_zaton.zat_b30_owl_stalker_trader_have_arts</precondition>. При выполнении условия, прописанного в функции, диалог будет активен.
Проверка функции precondition в скрипте: function zat_b30_owl_stalker_trader_have_arts(first_speaker, second_speaker) return ((db.actor:object("af_ice") ~= nil) and (db.actor:object("af_fire") ~= nil)) end В данном случае проверяется наличие у ГГ двух артефактов. Возможно, потребуется регистрация прекондишиона в xr_conditions.scripts. Посмотрите КМБ. Урок 33.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| 9vova8 | Дата: Сб, 05.01.2013, 21:56 | Сообщение # 79 |
|
Новичок
Пользователи
Сообщений: 91
| Вот такая ошибка, когда начинаю разговор с квестодателем:
stack trace:
001B:0488105B lua.JIT.1.1.4.dll
Сообщение отредактировал 9vova8 - Сб, 05.01.2013, 23:00 |
| |
|
| Эти 0 пользователя(ей) поблагодарили 9vova8 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Сб, 05.01.2013, 22:31 | Сообщение # 80 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| 9vova8 Где то ошибка в скриптах. Опишите подробно, что и куда вставляли, что хотели сделать.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| 9vova8 | Дата: Вс, 06.01.2013, 15:26 | Сообщение # 81 |
|
Новичок
Пользователи
Сообщений: 91
| dialogs_jupiter.script [cut]function jup_b217_azot_give_tasks(first_speaker, second_speaker) task_manager.get_task_manager():give_task("jup_b217_azot_new_task") end
function jup_b217_azot_quest_create_item(first_speaker, second_speaker) alife():create("jup_b217_quest_item",vector():set(272.273224,17.865562,500.726532),1428114,6) end
function jup_azot_quest(second_speaker, first_speaker) dialogs.relocate_money_to_actor(first_speaker, second_speaker, 3000) end
function jup_b217_azot_quest_relocate_item(first_speaker, second_speaker) local items_table = { "jup_b217_quest_item", } for k,v in pairs(items_table) do if db.actor:object(v) ~= nil then dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, v) end end end [/cut] xr_effects [cut]function jup_azot_quest_1(actor, npc) if xr_conditions.actor_in_zone(actor, npc, {"jup_test_quest_restrictor_1"}) then db.actor:give_info_portion("jup_azot_quest_restr_1") give_actor(db.actor,nil,{"jup_b217_quest_item"}) end end [/cut]
Лишняя запятая в таблице итемов. denis2000
Не помогло(( Это может быть ошибка в *.xml *.ltx файлах
Это может быть ошибка где угодно, даже в диалогах. denis2000
Синтаксические ошибки, или как? И почему при попытке юзания не любого НПС, пока вычислил только гавайца и азота
Файлы то у вас, вот вы нам и скажите почему. denis2000
Заглючение только Азот, Гаваец, Борода, Кардан, медик на Янове.Добавлено (06.01.2013, 15:26) --------------------------------------------- Ещё одна проблема, но она была ещё сначала: не всегда нажимаются реплики в диалоге, иногда просто при нажатии диалог закрывается
Сообщение отредактировал 9vova8 - Вс, 06.01.2013, 14:08 |
| |
|
| Эти 0 пользователя(ей) поблагодарили 9vova8 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 06.01.2013, 16:12 | Сообщение # 82 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| 9vova8, В функции jup_azot_quest_with_death не было ключевого слова end.
Цитата (9vova8) не всегда нажимаются реплики в диалоге, иногда просто при нажатии диалог закрывается Как написал диалог так он и работает: поскольку в одной из веток на которые разделяется диалог безусловное закрытие диалогового окна!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| Пpизpак | Дата: Вс, 06.01.2013, 20:06 | Сообщение # 83 |
 Новичок
Пользователи
Сообщений: 64
| А вот как прописать перед квестом проверку на наличие определенного ранга и группировки у гг?
Комп: Intel Core i5 2400 3.1GHz, 8gb RAM, GeForce GTX 570 1gb, Win 7 64bit Stalker 1.0004 + НС от 03.09.10 + DMX 1.3.5 + фикс 1.3.5 + свои правки Stalker 1.6.02 + SGM 1.7 + свои правки
Сообщение отредактировал Пpизpак - Вс, 06.01.2013, 20:55 |
| |
|
| Эти 0 пользователя(ей) поблагодарили Пpизpак за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 06.01.2013, 22:57 | Сообщение # 84 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата (Пpизpак) А вот как прописать перед квестом проверку на наличие определенного ранга и группировки у гг?
Например так, если ранг больше 1 и ГГ сталкер: Код if (alife():actor():rank()>1) and (alife():actor():community()=="stalker") then
В чистом ЗП Ранг - бессмысленный параметр!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| Пpизpак | Дата: Пн, 07.01.2013, 18:54 | Сообщение # 85 |
 Новичок
Пользователи
Сообщений: 64
| denis2000, Я про ранги из СГМ
А сразу поделиться тайнами Мадридского двоора - слабо? Не смотря на то что это предписано шапкой темы. denis2000 xr_conditions.check_actor_rank(nil,nil,{min,max}) denis2000
Комп: Intel Core i5 2400 3.1GHz, 8gb RAM, GeForce GTX 570 1gb, Win 7 64bit Stalker 1.0004 + НС от 03.09.10 + DMX 1.3.5 + фикс 1.3.5 + свои правки Stalker 1.6.02 + SGM 1.7 + свои правки
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Пpизpак за это полезное сообщение: |
|
|
| 9vova8 | Дата: Пн, 07.01.2013, 19:19 | Сообщение # 86 |
|
Новичок
Пользователи
Сообщений: 91
| При таком условии получается такая ошибка [cut noguest=ошибка]stack trace:
001B:0387105B lua.JIT.1.1.4.dll[/cut]
[cut=условие] <precondition>actor_has_item("jup_b217_quest_item")</precondition>[/cut]
В диалогах невозможно использование аргументов функций. Создавайте новую функцию в скриптах и используйте ее. XOBAH
|
| |
|
| Эти 0 пользователя(ей) поблагодарили 9vova8 за это полезное сообщение: |
|
|
| prohodchik | Дата: Вс, 17.02.2013, 15:50 | Сообщение # 87 |
 Новичок
Пользователи
Сообщений: 50
| Цитата (denis2000) zat_b101_logic.ltx у меня нет такого файла в чистой gamedata
Проект в разработке – "Болотные легенды"
|
| |
|
| Эти 0 пользователя(ей) поблагодарили prohodchik за это полезное сообщение: |
|
|
| Ааз | Дата: Вс, 17.02.2013, 17:40 | Сообщение # 88 |
 Хозяин Зоны
Зомби
| Я делаю квест на чистый Зов Припяти 1.6.02, тип квеста: "убить сталкера", при этом возникло несколько казусов: - при убийстве сталкера не выдается инфопоршень, квест висит. - проблемы с описанием задания - не получается сделать метки в задании на НПСа, которого требуется убить и после убийства метка должна переходить на квестодателя (в моём случае убиваемый НПС и НПС-квестодатель спавнятся скриптами). Ниже привожу все изменения в файлах. [cut noguest=Файл zat_stalkers.ltx (инклуд прописан в spawn_sections.ltx)][zat_demiurg]:stalker_trader $spawn = "respawn\zat_demiurg" character_profile = zat_demiurg spec_rank = master community = stalker custom_data = scripts\zaton\zat_demiurg.ltx
[zat_renegat]:stalker $spawn = "respawn\zat_renegat" character_profile = zat_renegat spec_rank = veteran community = stalker story_id = zat_renegat custom_data = scripts\zaton\zat_renegat.ltx[/cut]
[cut noguest=character_desc_zaton_new.xml (зарегистрирован в system.ltx)]<?xml version='1.0' encoding="windows-1251"?>
<xml>
<specific_character id="zat_demiurg" team_default="1"> <name>zat_demiurg</name> <icon>ui_inGame2_neutral_1</icon> <map_icon x="1" y="0"> </map_icon> <bio>Опытный сталкер. Детальная информация отсутствует.</bio> <class>zat_demiurg</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <snd_config>characters_voice\human_01\stalker\</snd_config> <rank>635</rank> <reputation>10</reputation> <money min="15000" max="18000" infinitive="0" /> <visual>actors\stalker_neutral\stalker_neutral_nauchniy</visual>
<supplies> [spawn] \n wpn_sig550 \n ammo_5.56x45_ss190 = 1 \n
#include "gameplay\character_items_nd_nl.xml" #include "gameplay\character_food.xml" #include "gameplay\character_drugs.xml" </supplies>
<actor_dialog>zat_renegat_kill</actor_dialog> <actor_dialog>zat_renegat_kill_complete</actor_dialog> <actor_dialog>actor_break_dialog</actor_dialog>
#include "gameplay\character_criticals_4.xml" </specific_character> <specific_character id="zat_renegat" team_default="1"> <name>zat_renegat</name> <icon>ui_inGame2_bandit_2</icon> <map_icon x="1" y="0"> </map_icon> <bio>Опытный сталкер. Детальная информация отсутствует.</bio>
<class>zat_renegat</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <snd_config>characters_voice\human_02\bandit\</snd_config>
<rank>310</rank> <reputation>-5</reputation>
<visual>actors\stalker_bandit\stalker_bandit_2</visual> <supplies>
[spawn] \n wpn_ak74 \n ammo_5.45x39_fmj = 1 \n wpn_pm \n ammo_9x18_fmj = 1 \n grenade_rgd5 = 2 \n
#include "gameplay\character_items_nd.xml" #include "gameplay\character_drugs.xml" #include "gameplay\character_drugs_mil.xml" </supplies> #include "gameplay\character_criticals_4.xml" </specific_character>
</xml>[/cut]
[cut noguest=dialogs_zaton_new.xml (зарегистрирован в system.ltx)]<?xml version="1.0" encoding="windows-1251" ?> <game_dialogs> <dialog id="zat_renegat_kill"> <dont_has_info>zat_renegat_kill_done</dont_has_info> <dont_has_info>zat_renegat_kill_give</dont_has_info> <phrase_list> <phrase id="0"> <text>Привет, работа есть?</text> <next>1</next> </phrase> <phrase id="1"> <text>Да, работа для тебя будет. Но прежде спрошу: ты знаешь что-нибудь о Ренегатах?</text> <next>2</next> <next>21</next> </phrase> <phrase id="2"> <text>Нет, впервые слышу, а что?</text> <next>3</next> </phrase> <phrase id="21"> <text>Ну слышал кое-что от сталкеров. А в чем собственно проблема?</text> <next>3</next> </phrase> <phrase id="3"> <text>Вообщем, я тебе вот что скажу - я Демиург, один из оставшихся в живых чистонебовцев. Ренегаты - наши заклятые враги. С ними мы, чистонебовцы, воевали в 2011 году. Однако после боя на ЧАЭС, когда почти весь клан погиб, я думал, что они успокоятся и не станут искать оставшихся в живых. Однако я ошибался. Один из Ренегатов находится сейчас здесь, на Затоне. Не иначе, как по мою душу явился, гад смердячий, а ведь я подозревал, что за мной непременно будет слежка. Поэтому нашел прикид, в котором меня хрен кто раскусит. Ну а тебя я попрошу расправиться с идущим по моему следу противником. Оплату гарантирую. Как вернешься, побеседуем обстоятельнее. Берешься?</text> <next>4</next> </phrase> <phrase id="4"> <text>Берусь.</text> <give_info>zat_renegat_kill_give</give_info> <action>dialogs_zaton.zat_renegat_kill_quest</action> <action>renegat_spawn.spawn_zat_renegat</action> </phrase> </phrase_list> </dialog>
<dialog id="zat_renegat_kill_complete"> <has_info>zat_renegat_kill_give</has_info> <dont_has_info>zat_renegat_kill_done</dont_has_info> <has_info>zat_renegat_mertv</has_info> <phrase_list> <phrase id="0"> <text>Ренегата я устранил, от греха подальше.</text> <next>1</next> </phrase> <phrase id="1"> <text>Вот спасибо, выручил ты меня. Я уж думал, что всё - кирдык тебе...</text> <give_info>zat_renegat_kill_done</give_info> </phrase> </phrase_list> </dialog> </game_dialogs>[/cut]Добавлено (17.02.2013, 17:28) --------------------------------------------- [cut noguest=info_zaton.xml]<info_portion id="zat_renegat_kill_done"></info_portion> <info_portion id="zat_renegat_kill_give"></info_portion> <info_portion id="zat_renegat_mertv"></info_portion>[/cut]
[cut noguest=zat_profiles.xml (зарегистрирован в system.ltx)]<?xml version='1.0' encoding="windows-1251"?>
<xml>
<character id="zat_demiurg"> <class>zat_demiurg</class> </character>
<character id="zat_renegat"> <class>zat_renegat</class> </character>
</xml>[/cut]
[cut noguest=tm_zaton.ltx][zat_renegat_kill] icon = ui_inGame2_Bezopasnoe_mesto storyline = false title = zat_renegat_kill_quest_name descr = zat_renegat_kill_quest_text target = zat_demiurg condlist_0 = {+zat_renegat_kill_done} complete on_complete = %=inc_faction_goodwill_to_actor(stalker:40)% reward_money = 4500[/cut]
[cut noguest=st_quests_zaton.xml]<string id="zat_renegat_kill_quest_name"> <text>Ренегат: убрать сталкера из группировки Ренегаты.</text> </string> <string id="zat_renegat_kill_quest_text"> <text>Убить ренегата, который расположился где-то неподалеку от Скадовска, после чего доложить Демиургу о выполнении задания.</text> </string>[/cut]
[cut noguest=demiurg_spawn.script]function spawn_demiurg() if not has_alife_info("spawn_demiurg_complite") then local p=vector(),lv,gv p.x = 113.776520 p.y = -7.348208 p.z = 186.347198 lv = 1162412 gv = 316 alife():create("zat_demiurg",p,lv,gv) give_info("spawn_demiurg_complite") end end[/cut]
[cut noguest=renegat_spawn.script]function spawn_zat_renegat() if not has_alife_info("spawn_renegat_complite") then local p=vector(),lv,gv p.x = 173.417191 p.y = 11.494859 p.z = -264.904175 lv = 1262839 gv = 23 alife():create("zat_renegat",p,lv,gv) give_info("spawn_renegat_complite") end end[/cut]
[cut noguest=dialogs_zaton.script]function zat_renegat_kill_quest() task_manager.get_task_manager():give_task("zat_renegat_kill_give") end[/cut] Добавлено (17.02.2013, 17:40) --------------------------------------------- [cut noguest=zat_demiurg.ltx][logic] active = remark@trader [remark@trader] invulnerable = true on_combat = combat meet = meet_trader [combat] combat_type =
[meet_trader] abuse = false use = true allow_break = false meet_on_talking = true[/cut]
[cut noguest=zat_renegat.ltx][logic] on_death = death active = remark1 danger = danger_ignore
[danger_ignore] ignore_distance = 5
[death] on_info = %+zat_renegat_mertv%
[remark1] no_move = true anim = sit_ass on_actor_dist_le = 2| remark@hello meet = meet_guide
[meet_guide] abuse = false use = false allow_break = false meet_on_talking = false
[remark@hello] no_move = true meet = meet_guide on_actor_dist_le = 10| remark1[/cut]
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Ааз за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вс, 17.02.2013, 20:19 | Сообщение # 89 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Ааз, Я бы подправил квест таким образом.
[cut=Квест]Файл tm_zaton. target = zat_demiurg -- это квестовая метка. Она у Вас постоянно висит на квестодателе. Надо писать так: target = {+zat_renegat_mertv} zat_demiurg, zat_renegat Метка повиснет на ренегате, после смерти перескочит на квестодателя.
Секцию title = zat_renegat_kill_quest_name descr = zat_renegat_kill_quest_text лучше писать так: title = {+zat_renegat_mertv} zat_renegat_kill_quest_name1, zat_renegat_kill_quest_name descr = {+zat_renegat_mertv} zat_renegat_kill_quest_text1, zat_renegat_kill_quest_name
Текстовое содержание квеста: <string id="zat_renegat_kill_quest_name"> <text>Ренегат: убрать сталкера из группировки Ренегаты.</text> </string> <string id="zat_renegat_kill_quest_text"> <text>Убить ренегата, который расположился где-то неподалеку от Скадовска.</text> </string> <string id="zat_renegat_kill_quest_name1"> <text>Ренегат: получить награду.</text> </string> <string id="zat_renegat_kill_quest_text1"> <text>Доложить Демиургу о выполнении задания.</text> </string> [/cut]
Сообщение отредактировал sergej5500 - Вс, 17.02.2013, 20:28 |
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| Ааз | Дата: Вс, 17.02.2013, 20:57 | Сообщение # 90 |
 Хозяин Зоны
Зомби
| sergej5500, внёс исправления, начал новую игру, отметил опять отсутствие описания, при убийстве НПС задание естественно опять не обновилось. Я уж не знаю, как и быть-то...
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Ааз за это полезное сообщение: |
|
|
|