Miller | Дата: Сб, 31.12.2011, 14:00 | Сообщение # 1 |
Администратор
Группа: Администратор
Сообщений: 199
Статус: Offline
| Здесь вы научитесь создавать новые диалоги, редактировать их и пр. Автор: Vova Miller [IP Team]
1. Начну с того, как привязать диалог к НПС. Открываем характер НПС. Предположим наш диалог называется (id) mod_my_first_dialog. В характере ниже </supplies> пишем:
Code <start_dialog>mod_my_first_dialog </start_dialog>
или
Code <actor_dialog>mod_my_first_dialog </actor_dialog>
</start_dialog> - это диалог, в котором первую ветку самого диалога будет говорит НПС (не забывайте, что </start_dialog> может использоваться у каждого НПС только один раз). </actor_dialog> - это диалог, в котором первая фраза будет твоя (можно использовать на одном НПС сколько угодно).
2. Теперь переходим к самому диалогу. Откраем config\gameplay\dialogs_(локация).xml Листаем в самый низ, и вставляем диалог перед </game_dialogs> и после </dialog> (</dialog> - закрывает предыдущий диалог, а между <game_dialogs> и </game_dialogs> содержаться все диалоги). Вот пример простейшего диалога, который можно сделать за 5 секунд (пример с </actor_dialog>):
Code <dialog id="mod_my_first_dialog"> <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> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog>
Т.к. мы привязали этот диалог к НПС как actor_dialog, то у нас будет возможность сказать НПС: "Глупый НПС, дай денег!", в ответ получим: "Нету денег. Все уже раздал.", и снова мы можем ответить: "Ладно, завтра отдашь.". На последней фразе диалоговое окно зароется, т.к. на ней прописана функция: <action>dialogs.break_dialog</action> Напомню что бы было, если бы я прописал это не как actor_dialog, а как start_dialog, чтобы у вас в голове прояснилось в чем разница: НПС: "Глупый НПС, дай денег!" (сказал бы сразу при открытие диалогового окна) ГГ: "Нету денег. Все уже раздал." (и при нажатии на фразу диалог бы закрылся, т.к. в последней фразе стоит функция.)
Теперь посмотрим на ID фраз. Первую фразу всегда лучше начинать с 0. Это будет первая фраза. В ней же (в нашем примере) стоит: <next>1</next> , то есть следующая фраза под ID 1. Предположим если первая фраза выглядела бы вот так:
Code <phrase id="0"> <text>Глупый НПС, дай денег!</text> <next>1</next> <next>2</next> </phrase>
То НПС мог бы нам ответить как и фразой с ID 1, так и с фразой ID 2 (в игре мы уже не сможем проконтролировать как конкретно ответит НПС). Если бы фразу "Глупый НПС, дай денег!" сказал бы НПС, то у нас бы было два варианта, как ответить ему фразами 1 и 2.
Если вы ничего не поняли, или просто лень разбираться в тексте, то предлагаю вам самим тестировать разные варианты в игре (например так я и научился создавать диалоги).
3. Построим диалог по-длиннее, чтобы вы поняли, как дополнять ещё фразы. Вот пример (actor_dialog):
Code <dialog id="mod_my_first_dialog"> <phrase_list> <phrase id="0"> <text>Привет, Сталкер!</text> <next>1</next> </phrase> <phrase id="1"> <text>Привет!</text> <next>2</next> <next>7</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> <next>6</next> </phrase> <phrase id="6"> <text>Ясно. Пока!</text> <next>7</next> </phrase> <phrase id="7"> <text>Ладно, пока!</text> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog>
Попробуйте сами проанализировать, как диалог будет выглядеть в игре (запишите скажем на листочке), а потом уже посмотрите как получится в игре. Если у вас не было ни одной ошибки, то смело переходите к следующему пункту. Если же были ошибки, то проверьте в чем ошиблись, и лучше ещё рассмотрите структуру диалогов в конфиге.
4. Здесь чуть позже научу вас как прописывать функции в диалог (забирает деньги, даёт деньги, даёт предметы или забирает и т.д.) и др.
Примечания:
1: start_dialog может использоваться только на одном диалоге у определённого НПС.
2: В конфиге диалога нельзя писать большие тексты, иначе будет вылет. Чтобы написать большой текст во фразу и чтобы не было вылета, в конфиге диалога на месте текста, напишите, например: mod_long_phrase_1 Откройте config\text\rus\stable_dialogs.xml, листай в самый низ, и вставьте следующий код после </string> и перед </string_table>:
Code <string id="mod_long_phrase_1"> <text>Большой текст нужно писать сюда</text> </string>
Такой принцип может использоваться не только для больших текстов.
3: Замечали, что в оригинале ТЧ в некоторых диалогах воспроизводился голос? Вы можете сделать то же самое. Пользуясь схемой, как в п. 2, делаем такую же фразу для НПС, на которой проиграется звук (не работает на фразах ГГ). Предположим мы между <text> и </text> прописали: mod_long_phrase_2. Открываем папку: sounds\characters_voice\dialogs\ и туда добавляем нужный нам звук с названием mod_long_phrase_2.ogg.
4 (Инфопоршни): Как же сделать, чтобы в ветке диалога выполнялся инфопоршень, и чтобы диалог не повторялся бесконечно? Помогут "инфопоршни". Как поставить выполнение инфопоршня в диалог? - В определённую ветку диалога ниже текста вставляем: Code <give_info>ID_инфопоршня</give_info> Как сделать чтобы диалог не повторялся? - В созданном диалоге выше <phrase_list>, но ниже строки с ID диалога вставляем: Code <dont_has_info>инфопоршень_1</dont_has_info> И в ветку диалога, после которой он больше не будет повторятся вставляем выполнение инфопоршня "инфопоршень_1". То есть для диалога мы указали, чтобы он отображался, если "инфопоршень_1" не выполнен. Как сделать чтобы какой-либо диалог отображался только после другого диалога? - В первый диалог, после которого откроется другой, в нужную ветку вставляем выполнение инфопоршня, например, "инфопоршень_2". Во второй диалог, который должен появится после первого, выше <phrase_list>, но ниже строки с ID диалога вставляем: Code <has_info>инфопоршень_2</has_info> То есть, мы сделали так, чтобы второй диалог не отображался, пока не выполнится "инфопоршень_2".
Кстати, теги <has_info> и <dont_has_info> можно использовать не только для всего диалога, но и для отдельной ветки диалога. Тогда, их нужно вставлять выше тега текста.
ID инфопоршней прописываются в config\gameplay\info_*******.xml
|
|
| |
botik | Дата: Сб, 31.12.2011, 16:52 | Сообщение # 2 |
Прибывший
Группа: Сталкер
Сообщений: 1
Статус: Offline
| Miller, спс помог
|
|
| |
Марс | Дата: Вс, 12.02.2012, 11:53 | Сообщение # 3 |
Прибывший
Группа: Сталкер
Сообщений: 3
Статус: Offline
| А где "Характер"Взять?
|
|
| |
Miller | Дата: Вс, 12.02.2012, 12:49 | Сообщение # 4 |
Администратор
Группа: Администратор
Сообщений: 199
Статус: Offline
| Марс, характер НПС это как бы место, где прописывает его группировка, оружие, звуки, форма, иконка и пр. Ну вот например Характер Волка находится в файле config\gameplay\character_desc_escape.xml Второй характер - это Волк. Начинается вот так:
|
|
| |
Марс | Дата: Вс, 12.02.2012, 16:51 | Сообщение # 5 |
Прибывший
Группа: Сталкер
Сообщений: 3
Статус: Offline
| Miller, Спасибо.Ща попробую.
|
|
| |