Четверг, 28.11.2024, 01:42Приветствую Вас Юнга | RSS
Главная | | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
АДДОНомейкер: Пишем диалоги
AnubisДата: Среда, 02.07.2014, 21:27 | Сообщение # 1
Адмирал флота
Группа: Завсегдатаи
Сообщений: 88
Репутация: 7
Статус: Offline
Пишем диалоги

В этом уроке мы рассмотрим, как писать диалоги и привязывать их к НПС.

Для начала, все диалоги находятся в папке program\dialogs\russian. Откроем любой текстовой редактор и сохраним файл в этой папке, назвав его как угодно, только расширение у него должно быть *.с, более простой способ, это открыть файл _shablon_dialog .с и переименовать его.

Теперь рассмотрим непосредственно кодировку диалогов. Вот так выглядит код диалога:

Код
void ProcessDialogEvent()
{
  ref NPChar;
  aref Link, NextDiag;
  DeleteAttribute(&Dialog,"Links");
  makeref(NPChar,CharacterRef);
  makearef(Link, Dialog.Links);
  makearef(NextDiag, NPChar.Dialog);
   
  switch(Dialog.CurrentNode)
  {
   case "First time":
    dialog.text = "";
    link.l1 = "";
    link.l1.go = "";    
   break;

   case "Exit":
    NextDiag.CurrentNode = NextDiag.TempNode;
    DialogExit();
   break;
  }
}


Рассмотрим все более подробно.

Часть

ref NPChar;
aref Link, NextDiag;
DeleteAttribute(&Dialog,"Links");
makeref(NPChar,CharacterRef);
makearef(Link, Dialog.Links);
makearef(NextDiag, NPChar.Dialog);

обязательна. Здесь же можно прописать и переменные, если таковые используются в диалоге.

Блок ,

Код
case "First time":
dialog.text = "";
link.l1 = "";
link.l1.go = "";    
break;


это тело самого диалога между НПС и ГГ.
"First time" – название первого блока по умолчанию. Именно с него НПС начнет первый диалог с ГГ.
dialog.text = ""; - слова НПС.
link.l1 = ""; - ответ ГГ.
link.l1.go = ""; - указывает на название case, который будет запущен после диалога.

Пример:

Код
case "First time":
dialog.text = "Здравствуй, капитан. ";
link.l1 = "И вам, не хворать.";
link.l1.go = "next_dialog_1";
break;


В приведенном диалоге НПС говорит с ГГ и после диалога запускается case "next_dialog_1" . Это может быть продолжение диалога, например:

Код
case "next_dialog_1":
dialog.text = "А вы любезны, как я посмотрю. ";
link.l1 = "А кто-то сомневался?";
link.l1.go = "exit";
break;


Или, запускается case отвечающий за развитие событий в игре, например:

Код
case "next_dialog_1":
  AddDialogExitQuest("quest_case_name");
NextDiag.TempNode = "Second time";
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;


AddDialogExitQuest("quest_case_name"); - эта функция запускает case квеста (которые находятся в папке program\quests) с названием "quest_case_name".
NextDiag.TempNode = "Second time"; - указывает, что при повторном обращении ГГ к НПС запускается case диалога с названием "Second time".
NextDiag.CurrentNode = NextDiag.TempNode; - переключение текущего Node, на временный.
DialogExit(); - убирает с экрана интерфейса игры изображение диалога.

Так же, мы можем закрыть диалог, написав link.l1.go ="exit"; и прописав соответствующий case в файле диалога:

Код
case "Exit":
NextDiag.TempNode = "Second time";
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;


Несколько вариантов ответа:

Может потребоваться, что бы у ГГ был выбор между вариантами ответов. Сделать это просто. Добавляем после строчки link.l1.go = ""; еще две, точно, такие как предыдущие только с цифрой 2.
link.l2 = "";
link.l2.go = "";
Если требуется 3 или 4 вариантов ответа, то просто добавляем еще строк с соответствующими номерами. Вот пример case диалога с четырьмя вариантами ответов:

Код
case "First time":
dialog.text = "";
link.l1 = "";
link.l1.go = "";
link.l2 = "";
link.l2.go = "";
link.l3 = "";
link.l3.go = "";
link.l4 = "";
link.l4.go = "";   
break;


Запуск диалога из квеста, с определенной ветки:

При написании квеста, ГГ может встречаться с НПС несколько раз. Тогда потребуется, что бы диалог начинался после определенного события. Для этого в case квеста пишем:

Код
characters[GetCharacterIndex("id НПС")].dialog.filename = "simple.c";
characters[GetCharacterIndex("id НПС ")].dialog.currentnode = " next_dialog_3";


"simple.c"; - файл диалога, приписанный персонажу
"next_dialog_3"; - название case диалога в файле диалога simple.c

Это выражение запустит case диалога "next_dialog_3" из файла диалога. Результат увидите на экране.

Изменение диалога в зависимости от условий:

Допустим, потребовалось по сюжету квеста, что в зависимости от условий диалог развивается по двум разным направлениям. Делается это с помощью выражения:

Код
if (условие)    
{  
link.l1 = "вариант ответа 1";
link.l1.go = "";
}
else
{
link.l1 = "вариант ответа 2";
link.l1.go = "";
}


Если (if) выполняется "условие", то запускается "вариант ответа 1", если условие не выполнено (else) то запускается "вариант ответа 2"

"условия", могут быть совершенно различными. Рассмотрим некоторые из них:
sti(PChar.money) >= 1000 – если у ГГ есть ровно или больше 1000 монет
PChar.quest.QS1 == "1" – если уже выполнен case квеста с меткой 1
PChar.location == " Tortuga_House_03 " – если ГГ находится в локации, в данном случае в доме не Тортуге
CheckCharacterItem(Pchar, "id предмета") – если у ГГ есть предмет
sti(pchar.rank) >= 5 – если у ГГ уровень равен 5 или больше

"условий" для ГГ в диалоге может быть несколько, прописываются они через знак &&, например:

if (sti(PChar.money) >= 1000 && CheckCharacterItem(Pchar, "id предмета")) – у ГГ не только должно быть минимум 1000 монет, но и предмет

И напоследок, некоторые функции, которые можно использовать в диалогах:

" + NPChar.name + " – выводит имя НПС
" + Pchar.name + " – выводит имя ГГ
" + Pchar.lastname + " – выводит фамилию ГГ
" + sItemName + " – выводит название предмета
" + sName + " – имя, не привязано

Например:

Код
dialog.text = "Что привело вас ко мне, капитан " + sName + "?";
link.l1 = "Извините, " + NPChar.name + ", но мне пора.";
link.l1.go = "exit";


Если у вас возникли вопросы, по поводу написаний диалогов, то можете задавать их в этой теме.
 
  • Страница 1 из 1
  • 1
Поиск:

Design by Mark © 2024 , Redesign by Anubis © 2024
Сделать бесплатный сайт с uCoz
Яндекс.Метрика