Нашей задачей является создание простейшего диалога персонажа.
Итак, начнём…
#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]); //Так можно сделать случайный выбор фразы, которую можно будет сказать.
Маленький пример:
|
Специальные примеры
Вызов меню верфи:
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; |