Нашей задачей является создание простейшего диалога персонажа.

Итак, начнём

 

#include «DIALOGS\Jakob Nickerson_dialog.h» //этой строкой мы подключаем файл в котором будут храниться фразы. В дальнейшем мы будем обращаться к его элементам как к массиву DLG_TEXT[i]. Этого можно и не делать, а писать все фразы сразу в этом файле.

 void Process Dialog Event()

{

            //Объявление и присваивание переменных.

ref NPChar, PChar, d; //создаём ссылки на героя, перса и диалог.

PChar = Get Main Character(); //присваиваем PChar  указатель на героя

aref Link, Diag; //это ссылки диалога

string NPC_Meeting; //строковая переменная, служит указателем встречи.

 

Delete Attribute(&Dialog,"Links"); // Удаляем все старые линки и  т.п.

 

makeref(NPChar,Character Ref); //Создаём линки героев, персов и диалога.

makearef(Link, Dialog.Links);

makeref(d, Dialog);

makearef(Diag, NPChar.Dialog);

 

string iDay, iMonth; //Создаём(для примера) переменные дня и месяца и присваиваем им нужные значения

iDay = environment.date.day;

iMonth = environment.date.month;

string lastspeak_date = iday + “ " + iMonth;

 

            //Разговор

switch(Dialog.CurrentNode)

{

//Первый диалог.

case “First time”:

            //Устанавливаем звуки, камеру и анимацию

Dialog.defAni = «Gov_Dialog_1";

Dialog.ani = «Gov_Dialog_1";

Dialog.defCam = “1”;

Dialog.defSnd = «dialogs\0\017";

Dialog.defLinkAni = «dialog_1";

Dialog.defLinkCam = “1”;

Dialog.defLinkSnd = «dialogs\woman\024";

Dialog.cam = “1”;

                       

////////////////////////////////////////////////////////////////////////////////////////////////////

/*Здесь должен находиться сам диалог(фразы, ответы и линки)*/

////////////////////////////////////////////////////////////////////////////////////////////////////

 

Diag.TempNode = “first time”;//Эта переменная указывает с какого вариант диалога начнется диалог в следующий раз.

break;

            //Вариант выхода.

case “exit”:

Diag.CurrentNode = Diag.TempNode;

 Dialog Exit();

break;

 

 

Мы создали основу диалога. Теперь необходимо добавить, что мы будем говорить.  Я приведу лишь малую часть(можно сказать что я  совсем ничего не приведу).

 

Как я уже говорил в начале, если вы используете файл  с фразами, то к фразе можно  получить доступ обращением к массиву DLG_TEXT[2]. Важно помнить, что нумерация строк идёт с 0, а не с 1.

d.Text = это то что перс скажет главному герою.

Link.l1 = вариант ответа 1

Link.l1.go = Ссылка на действие при выборе 1 варианта ответа.

Dialog.snd = «voice\ROMU\ROMU001";//Звук

Add Dialog Exit Quest("piratefun"); //Выполнить квест при выходе из диалога. Квесты описываются  в файле:  PROGRAM/QUESTS/quests_reaction.c

Add Quest Record("blaze_to_Isenbrandt", “2”); //Добавить в журнал запись

link.l1 = pcharrepphrase(DLG_TEXT[12], DLG_TEXT[13]); //Так можно сделать случайный выбор фразы, которую можно будет сказать.

 

Маленький пример:

Содержание .c файла.

 

d.Text = TimeGreeting() + DLG_TEXT[0] + NPChar.name + " " + NPChar.lastname + DLG_TEXT[1];

Link.l1 = DLG_TEXT[2] + Pchar.name + " " + Pchar.lastname + DLG_TEXT[3] + PChar.Ship.name + DLG_TEXT[4];

Link.l1.go = "meeting";

Link.l2 = DLG_TEXT[5];

Link.l2.go = "exit";

 

Содержание .h файла

 

string DLG_TEXT[6] = {

"Friend, I'm ",

"! How can I help you?",

"-I'm ",

",I sail the ",

", I'd like to talk about the meeting...",

"-You can't.",

}

 

Специальные примеры

Вызов меню верфи:

 

case "SHIPYARD_interface":

Diag.CurrentNode = Diag.TempNode;

if (npchar.quest.Meeting != lastspeak_date)

{

                int iTest_ship;

 

                DeleteAttribute(npchar, "shipyard");

npchar.shipyard.ship1 = SHIP_TARTANE;

npchar.shipyard.ship4 = SHIP_LUGGER_PIRATE;

npchar.shipyard.ship5 = SHIP_SLOOP_PIRATE;

npchar.shipyard.ship12 = SHIP_BRIG_PIRATE;

npchar.shipyard.ship14 = SHIP_CORVETTE_PIRATE;

npchar.shipyard.ship16 = SHIP_BLACK_PEARL_PIRATE;

npchar.quest.Meeting = lastspeak_date;

}

DialogExit();

LaunchShipyard(npchar);

break;

 

case "CANNONS_interface":

Diag.CurrentNode = Diag.TempNode;

DialogExit();

LaunchCannons();

break;

Вызов меню торговли:

case "shop":

 

TakeNItems(Npchar,"potion1", Rand(10)+1);

TakeNItems(Npchar,"potion2", Rand(3)+1);

TakeNItems(Npchar,"potionrum", Rand(10)+1);

TakeNItems(Npchar,"potionwine", Rand(3)+1);

 

TakeNItems(Npchar,"jewelry1", Rand(4)+1);

TakeNItems(Npchar,"jewelry2", Rand(4)+1);

TakeNItems(Npchar,"jewelry4", Rand(4)+1);

TakeNItems(Npchar,"indian4", Rand(4)+1);

TakeNItems(Npchar,"indian13", Rand(4)+1);

 

Diag.CurrentNode = Diag.TempNode;

DialogExit();

 

LaunchItemsTrade(NPChar);

break;

 

Hosted by uCoz