Эта тема создана для общения модостроителей. Не обязательно, если вы строите моды например только для ТЧ - тема предназначена для общения мододелов и ТЧ, и ЧН, и ЗП. Общайтесь, выкладывайте, разъясняйте. Также здесь обсуждаются не только модостроительство, но и сами моды.
Приветствуется: - Помощь другим модостроителям - Дружеское общение на тему модостроительства
Запрещается: - Оффтоп (Сообщения не по теме) - Провокации и оскорбления - Реклама своих модов
Разрешается: - Выкладывание ссылок на какой-либо нужный материал
Сообщение отредактировал Вектор - Воскресенье, 21.08.2011, 18:31:14
Вектор, об этом чуть позже, напиши мне сначало свой диалог. Можешь его не проверять, я сам пойму правильно или нет. (фраз побольше сделай, и диалог в code засунь)
Истинный путь MOD ver. 1.3.0 (ТЧ) готов! Истинный путь v2.0 (ТЧ) готов!
Вектор, да, всё нормально, вот только последняя фраза. Ты поставил туда чтобы диалог закрывался. Эту функцию не нужно вставлять во фразы НПС, а нужно в свои фразы. Просто таким образом ты не увидишь последнюю фразу сидоровича (Тебя привезли на Грузовике смерти. Что это такое, потом расскажу.) Диалог просто закроется. Теперь насчет того, чтобы несколько раз не повторялось. Знаешь что такое инфопоршни? Это что-то типа носителя информации, через них можно начать квест, закончить квест, сделать чтобы диалог не повторялся бесконечно и т.д. Инфопоршни прописываются здесь: config\gameplay\info_(нужная локаци, хотя можно так же, как и с диалогами поступить).xml. Вписываешь инфопоршень "без всего":
Code
<info_portion id="esc_trader_sp"></info_portion>
Главное чтобы имена (id) инфопоршней не повторялись. Теперь к диалогу. Ниже строчки с названием диалога иногда пишут вот такую фигатень:
Code
<has_info>тут_инфопоршень</has_info>
или
Code
<dont_has_info>тут инфопоршень</dont_has_info>
или вообще вместе.
<has_info>тут_инфопоршень</has_info> - вставляешь инфопоршень, и только после выполнения инфопоршня начнётся диалог. <dont_has_info>тут инфопоршень</dont_has_info> - наоборот. После выполнения инфопоршня диалог пропадёт. По такому принципу можно сделать диалог, которые проходит только один раз. То есть на строчку ниже id диалога в твоём случае вставляем:
Code
<dont_has_info>esc_trader_sp</dont_has_info>
Следовательно теперь нужно сделать выполнения инфопоршня в диалоге, чтобы он не повторялся. Для этого используют:
Code
<give_info>инфопоршень</give_info>
Вставлять нужно ниже текста фразы в определённую ветку. Кстати такой способ может служить не только для того, чтобы диалог был только один раз, но и для начал квеста и т.п. (Запомни это). Значит нам нужно вставить:
Code
<give_info>esc_trader_sp</give_info>
В самую последнюю фразу диалога ниже текста. Если вставишь скажем в первую или другую ничего особенного не произойдёт. Просто например ты вставишь в первую ветку. И получится так. если ты скажешь первую фразу выолнится инфопоршень, случайно закроешь диалог, захочешь его прочитать снова, а дилог то уже пропадёт По этому лучше ставить в последнюю ветку. Думаю насчет этого ты всё понял. Напиши теперь ещё один другой диалог чтобы повторялся только один раз ну и для практики сделай в какой-нибудь фразе два варианта ответа. чтобы это сделать просто пишешь ниже одного next'a ещё другой, который указывает на другую твою фразу.
Истинный путь MOD ver. 1.3.0 (ТЧ) готов! Истинный путь v2.0 (ТЧ) готов!
Сообщение отредактировал Vova-VIP - Воскресенье, 21.08.2011, 16:27:39
Вектор, давай по-новой. Ты напутал next'ы. Проверь снова куда они ведут. Например фразы 6 здесь вообще нет. Ну так инфопоршень ты прописал, он выполнится, но диалог не пропадёт, а знаешь почему? Потому что ты свой инфопоршень не прописал в <dont_has_info>esc_trader_sp</dont_has_info>, а оставил мой старый. По новой напиши, проверю. Когда диалоги делаешь будь внимательнее, проверь всё на взгляд, просто если ошибка, замучаешься искать её, если диалог большой.
Истинный путь MOD ver. 1.3.0 (ТЧ) готов! Истинный путь v2.0 (ТЧ) готов!
Вектор, ну так может покажешь готовый диалог? Кстати Has_info или dont_has_info так же можно вставлять не в весь диалог, а скажем в определённую фразу. ну скажем у тебя прописаны два варианта ответа. если ты во фразе второго ответа выше текста напишешь Has_info с инфопоршнем, то ветка (так же как и с диалогом) появится только тогда, когда выполнится заданый инфопоршень. Ну если с dont_has_info и так понятно что будет. Так же в диалоги вместо Has_info или dont_has_info можно вставить так называемый "прекондишн'. Я их обычно ставлю в определённые фразы, в весь диалог не ставлю, но сразу что я хочу тебе сказать, "прекондишн' не работает, если ты его поставишь на первую фразу. Ставь скажем на вторую фразу выше текста. Ну а теперь что это такое: Можно сделать так, чтобы ветка диалога открывалась тогда, если у тебя есть скажем водка, или 500 руб. При отсутствие давнного объекта фразы просто не будет. Как это делается. Сделай в папке scripts новый пустой файл со своим названием. Туда пропишёшь функцию. Вот например (тут нужно чтобы названия функции не совпадали):
Проверка на наличие предмета:
Code
function actor_has_habar1() return db.actor:object("предмет") end
Проверка на наличие определённой суммы денег:
Code
function does_actor_have_money(actor, npc) return actor:money() >= 500 end
Выбери функцию какую хочешь. Теперь вставляем в нужную фразу в диалоге, скажем мы выбрали проверку на наличие предмета (прекондишн лучше вставлять в свою фразу), пишем выше текста:
Всё. Ну теперь спрашивай что хочешь ещё узнать насчет диалогов и напиши какой нибудь диалог с несколькими next'ами, чтобы повторялся один раз и чтобы одна ветка появлялась только после наличия денег, ну или предмета.
Истинный путь MOD ver. 1.3.0 (ТЧ) готов! Истинный путь v2.0 (ТЧ) готов!
Вектор, не совсем. Сказал прекондишн не работает на первой фразе. Смотри как было бы самый раз:
Code
<dialog id="second_dialog"> <dont_has_info>esc_trader_vector1</dont_has_info> <phrase_list> <phrase id="0"> <text>Эй, Сидорович...</text> <next>1</next> </phrase> <phrase id="1"> <text>Чего надо?</text> <next>2</next> <next>3</next> </phrase> <phrase id="2"> <precondition>test_heren.actor_has_habar1</precondition> --то есть мы ставим проверку на колбасу, есть ли она у нас, в случае отсутствия мы сможем сказать только 3 фразу <text>Тебе нужна колбаса?</text> <next>4</next> </phrase> <phrase id="3"> <text>Да нет, ничего.</text> </phrase> <phrase id="4"> <text>Колбаса? Нужна! Гони сюда!</text> <next>5</next> <next>7</next> </phrase> <phrase id="5"> <text>Вот держи...</text> <next>6</next> </phrase> <phrase id="6"> <text>Какая свежая, прям как родной шаурма! Мммм!</text> <give_info>esc_trader_vector1</give_info> <action>test_heren.actor_has_habar1_2</action> </phrase> <phrase id="7"> <text>Обойдёшься, жирное чудовище!</text> <give_info>esc_trader_vector1</give_info> </phrase> </phrase_list>
+ в твоём скрипте должно быть:
Эта функция для того, чтобы сидор забирал колбасу (1 штуку)
Code
function actor_has_habar1_2(first_speaker, second_speaker) dialogs.relocate_item_section(first_speaker, "kolbasa", "out") end
ну и проверка на колбасу
"Вникни" в мой диалог и сделай что-то похожее + покажи свои функции.
-------------------
Я пока расскажу один нюанс. Если ты пишешь во фразу очень большой текст, игра может вылететь. Чтобы этого избежать поставь вместо текста во фразе скажем very_big_dialog_mod, потом открываешь config\text\rus\stable_dialogs.xml и пишешь туда свой "стринг", в самый низ например, перед </string_table>:
Code
<string id="very_big_dialog_mod"> <text>Сюда пиши текст, любых размеров</text> </string>
Всё, вылетать не будет. Кстати таким образом можно сделать, чтобы когда НПС говорил что-нибудь воспроизводился звук, скажем он будет воспроизводится во время того длинного квеста. открываешь: sounds\characters_voice\dialogs\ и создаёшь там звук OGG с именем very_big_dialog_mod.ogg и теперь, когда НПС будет говорит эту длинную фразу начнётся звук. Всё... Теперь если ты правильно будешь делать то, что я тебе объяснил можно создавать диалоги. Считай научился. Теперь тебе нужно знать разные функции, чтобы можно было их вставлять в диалог, типа чтобы НПС забирал предмет, отдавал предмет, давал деньги, забирал деньги и т. д.
Истинный путь MOD ver. 1.3.0 (ТЧ) готов! Истинный путь v2.0 (ТЧ) готов!
Сообщение отредактировал Vova-VIP - Воскресенье, 21.08.2011, 17:33:19
function does_actor_has_money(actor, npc) return actor:money() >= 100 end
function give_kolbaska(first_speaker, second_speaker) dialogs.relocate_item_section(first_speaker, "kolbasa", "in") dialogs.relocate_money(first_speaker, 100, "out") end
function give_vodochka(first_speaker, second_speaker) dialogs.relocate_item_section(first_speaker, "vodka", "in") dialogs.relocate_money(first_speaker, 100, "out") end
Vova-VIP, насчёт квеста: как сделать квест "Поговорить, скажем, с Волком"
Сообщение отредактировал Вектор - Воскресенье, 21.08.2011, 18:25:41
Вектор, идеально Насчет квестов, значит смотри, диалог ты напишешь сам, в котором будет начало квеста, сейчас расскажу про квесты.
Добавлено (21.08.2011, 18:57:20) --------------------------------------------- Описываю не так точно, но я думаю ты поймёшь. Открывай config\gameplay\tasks_escape.xml (или другую локацию) и прям в самом начале выше первоой строчки напиши:
Code
<!----------------------------------------------------------Поговорить с Волком----------------------------------------------------------> <game_task id="esc_mod_first_quest" prio="500"> <title>Волк</title> <objective> <text>То что я сейчас пишу можешь даже не менять, то не отображается в игре.</text> <icon>ui_iconsTotal_defend_lager</icon> <infoportion_complete>esc_mod_first_quest_done</infoportion_complete> <infoportion_fail>esc_wolf_dead</infoportion_fail> <map_location_type hint="Волк">green_location</map_location_type> <object_story_id>Escape_novice_lager_volk</object_story_id> </objective> <objective> <text>Поговорить с Волком.</text> <map_location_type hint="Волк">green_location</map_location_type> <object_story_id>Escape_novice_lager_volk</object_story_id> </objective> </game_task>
esc_mod_first_quest - id квеста. нужно чтобы не повторялось с другими prio="500" - можешь вообще никогда менять. Тут смотри, если в первом квесте prio="500", а во втором prio="400", то в ПДА первый квест будет на первом месте. <title>Волк</title> - Название квеста <text>То что я сейчас пишу можешь даже не менять, то не отображается в игре.</text> - между text можешь писать что угодно. <icon>ui_iconsTotal_defend_lager</icon> - Иконка задания (здесь она немного не та) <infoportion_complete>esc_mod_first_quest_done</infoportion_complete> - после выполнения какого инфопоршня выполнится квест. То есть вот этот инфопоршень тебе нужно будет прописать и добавить в диалог с волком. <infoportion_fail>esc_wolf_dead</infoportion_fail> - после выполнения какого инфопоршня провалится квест. В этом случае не трогая. Тут типа если Волк умрёт, квест провалится. <map_location_type hint="Волк">green_location</map_location_type> - Текст на метке на карте (Волк), а green_location - это зелёная метка. Можешь поставить blue_location, это белая метка. <object_story_id>Escape_novice_lager_volk</object_story_id> - цель метки <text>Поговорить с Волком.</text> - название пункта в квесте (у нас получается один пункт) <map_location_type hint="Волк">green_location</map_location_type> и <object_story_id>Escape_novice_lager_volk</object_story_id> - метки, ставить такие же, как и в предыдущем <objective></objective>.
Всё. Сначала сделай сам квест, диалог, который начинает квест, и диалог у волка, которые завершает квест, потом поясню все нюансы.
Истинный путь MOD ver. 1.3.0 (ТЧ) готов! Истинный путь v2.0 (ТЧ) готов!
Сообщение отредактировал Vova-VIP - Воскресенье, 21.08.2011, 19:00:25
<task>id(название)квеста</task> - это и есть начало нужного квеста. То есть если написать такой инфопршень и в во фразу в диалоге написать: <give_info>инфопоршень_123</give_info>, то заданый квест начнётся.
Истинный путь MOD ver. 1.3.0 (ТЧ) готов! Истинный путь v2.0 (ТЧ) готов!
<dialog id="tretiy_dialog"> <dont_has_info>infoportion_vector2</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> <give_info>infoportion_vector2</give_info> <next>4</next> </phrase> <phrase id="5"> <text>Сейчас, выполню.</text> </phrase> </phrase_list> </dialog> </game_dialogs>
Квест оформлен будет немного не так, но об этом позже расскажу или сейчас рассказать? Сам квест будет работать, если ты сделал диалог у Волка и прописал инфопоршень "без всего": esc_mod_vector_first_quest_doneв info_escape
Истинный путь MOD ver. 1.3.0 (ТЧ) готов! Истинный путь v2.0 (ТЧ) готов!
Вектор, значит смотри. Ты поставил новые инфопоршень в диалогу к волку. не стоило. Во-первых нужно указать на диалоге <has_info>infoportion_vector2</has_info>, то есть этот диалог появится только после начала задания, а в <dont_has_info></dont_has_info> можно было вставить инфопоршень выполнения задания, в твоём случае:
Да, и ты забыл give_info поставить в диалог с волком. Насчет второго пункта в квесте. Значит смотри тебе нужно <infoportion_complete>esc_mod_vector_first_quest_done</infoportion_complete> убрать из первого <objective> </objective> и поставить его во второй (потому что первый <objective> </objective> - это весь квест, а второй это уже пункт квеста. Значит теперь нам нужно сделать второй пункт. Сделай ещё один <objective> </objective>, в этот раз тебе покажу какой:
Code
<objective> <text>Вернуться к Сидоровичу</text> <infoportion_complete>Другой_инфопоршень</infoportion_complete> <map_location_type hint="Сидорович">blue_location</map_location_type> <object_story_id>Escape_Trader</object_story_id> </objective>
Да, и не забудь вот этот <infoportion_complete>Другой_инфопоршень</infoportion_complete> вставить в первый </objective>, чтобы после него не были выполнены тупо все пункты, а все пункты и сам квест. Да кстати, после того как поговоришь с Волком нужно естественно делать сделать новый с сидором, у которого будет: