Создание диалогов - простой тутор

Создание диалогов - простой тутор

Пример №1

В папке Gothic II\_work\Data\Scripts\Content\Story\Dialoge создаём файл DIA_NONE_1000_Dedroit.d (файл с диалогом - допустим, убить кого-нибудь).

Вот содержимое этого файла:

instance DIA_Dedroit_q (C_Info) 
{ 
	npc = NONE_1000_Dedroit; //ваш нпс 
	nr = 2; 
	condition = dia_Dedroit_q_condition; 
	information = dia_Dedroit_q_info; 
	permanent = FALSE; 
	important = FALSE; //если false то диалог начинаете вы,если TRUE нпс начинает разговор с вами! 
	description = "Я могу чем нибудь помочь?"; 
};
 
func int dia_Dedroit_q_condition() 
{ 
	return TRUE; 
};
 
func void dia_Dedroit_q_info() 
{ 
	AI_Output(other,self,"DIA_Dedroit_q_15_00"); //Я могу чем нибудь помочь? 
	AI_Output(self,other,"DIA_Dedroit_q_3_01"); //Да ты можешь мне почь!Ты бы мог бы убить Вино? 
	Info_ClearChoices(DIA_Dedroit_q); 
	Info_AddChoice(dia_Dedroit_q,"Нет я не буду тебе помогать.",dia_Dedroit_q_w); //Это варианты ответов,которые будут отображаться в меню диалога! 
	Info_AddChoice(dia_Dedroit_q,"Хорошо я убью Вино",dia_Dedroit_q_e); //Это второй вариант ответа! 
};
 
//Если он отказывается помогать ,то 
func void dia_Dedroit_q_w() 
{ 
	AI_Output(other,self,"dia_Dedroit_q_w_15_00"); //Я не буду помогать тебе! 
	AI_Output(self,other,"dia_Dedroit_q_w_03_01"); //Тогда не жди и отменя помощи. 
};
 
//Если игрок соглашается,то 
func void dia_Dedroit_q_e() 
{ 
	AI_Output(other,self,"dia_Dedroit_q_e_15_00"); //Хорошо я погу тебе. 
	AI_Output(self,other,"dia_Dedroit_q_e_03_01"); //Вот и отлично,еслт ты его убьёшь я щедро вознагрожу тебя! 
	Log_CreateTopic(TOPIC_KillVino,LOG_MISSION); 
	Log_SetTopicStatus(TOPIC_KillVino,LOG_Running); //дневник 
	B_LogEntry(TOPIC_KillVino,"Арес попросил меня убить Вино."); //запись в дневнике 
	MIS_KillVino = LOG_Running; //Это означает,что миссия началась! 
};
 
instance DIA_Dedroit_q2 (C_Info) 
{
	npc = NONE_1000_Dedroit; 
	nr = 1; 
	condition = dia_Dedroit_q2_condition; 
	information = dia_Dedroit_q2_info; 
	permanent = FALSE; 
	important = FALSE; 
	description = "Я убил Вино."; 
}; 
 
func int dia_Dedroit_q2_condition() 
{ 
	if(Npc_IsDead(Vino) && (MIS_KillVino == LOG_Running)) 
	//это означает,что если Вино мёртв то начинается этот диалог! 
	{ 
		return TRUE; 
	}; 
};
 
func void dia_Dedroit_q2_info() 
{ 
	AI_Output(other,self,"dia_Dedroit_q2_info_15_00"); //Я убил Вино. 
	AI_Output(self,other,"dia_Dedroit_q2_info_3_01"); //Великолепно, как я и обещал - мой подарок! 
	MIS_KillVino = LOG_SUCCESS; //миссия завершена 
	Log_SetTopicStatus(TOPIC_KillVino,LOG_SUCCESS); 
	B_LogEntry(TOPIC_KillVino,"Я убил вино, а Арес как и обещал дал мне подарок."); //запись в дневнике 
	B_GivePlayerXP(500); //количество получаемого опыта,в даном случае - 500. 
	b_giveinvitems(self,other,ItMW_Addon_Stab03,1); //непись даёт нам подарок посох воды! 
};
 
instance NONE_1000_Dedroit_EXIT(C_Info) 
{ 
	npc = NONE_1000_Dedroit; 
	nr = 999; 
	condition = NONE_1000_Dedroit_EXIT_Condition; 
	information = NONE_1000_Dedroit_EXIT_Info; 
	permanent = TRUE; 
	description = "Конец"; 
};
 
func int NONE_1000_Dedroit_EXIT_Condition() 
{ 
	return TRUE; 
};
 
func void NONE_1000_Dedroit_EXIT_Info() 
{ 
	AI_StopProcessInfos(self); 
};

Вот так должен выглядеть наш диалог без комментариев:

instance DIA_Dedroit_q (C_Info)
{
npc = NONE_1000_Dedroit;
nr = 2;
condition = dia_Dedroit_q_condition;
information = dia_Dedroit_q_info;
permanent = FALSE;
important = FALSE;
description = "Я могу чем нибудь помочь?";
};
func int dia_Dedroit_q_condition()
{
return TRUE;
};
func void dia_Dedroit_q_info()
{
AI_Output(other,self,"DIA_Dedroit_q_15_00"); //Я могу чем нибудь помочь?
AI_Output(self,other,"DIA_Dedroit_q_3_01"); //Да ты можешь мне почь!Ты бы мог бы убить Вино?
Info_ClearChoices(DIA_Dedroit_q);
Info_AddChoice(dia_Dedroit_q,"Нет я не буду тебе помогать.",dia_Dedroit_q_w);
Info_AddChoice(dia_Dedroit_q,"Хорошо я убью Вино",dia_Dedroit_q_e);
};
func void dia_Dedroit_q_w()
 
{
AI_Output(other,self,"dia_Dedroit_q_w_15_00"); //Я не буду помогать тебе!
AI_Output(self,other,"dia_Dedroit_q_w_03_01"); //Тогда не жди и отменя помощи.
AI_StopProcessInfos(self);
};
func void dia_Dedroit_q_e()
{
AI_Output(other,self,"dia_Dedroit_q_e_15_00"); //Хорошо я погу тебе.
AI_Output(self,other,"dia_Dedroit_q_e_03_01"); //Вот и отлично,еслт ты его убьёшь я щедро вознагрожу тебя!
Log_CreateTopic(TOPIC_KillVino,LOG_MISSION);
Log_SetTopicStatus(TOPIC_KillVino,LOG_Running);
B_LogEntry(TOPIC_KillVino,"Арес попросил меня убить Вино.");
MIS_KillVino = LOG_Running;
AI_StopProcessInfos(self);
};
instance DIA_Dedroit_q2 (C_Info)
{
npc = NONE_1000_Dedroit;
nr = 1;
condition = dia_Dedroit_q2_condition;
information = dia_Dedroit_q2_info;
permanent = FALSE;
important = FALSE;
description = "Я убил Вино.";
};
func int dia_Dedroit_q2_condition()
{
if(Npc_IsDead(Vino) && (MIS_KillVino == LOG_Running))
{
return TRUE;
};
};
func void dia_Dedroit_q2_info()
{
AI_Output(other,self,”dia_Dedroit_q2_info_15_00”); //Я убил вино.
AI_Output(self,other,”dia_Dedroit_q2_info_3_01”); //Великолепно,как я и обещал мой подарок!
MIS_KillVino=LOG_SUCCESS;
Log_SetTopicStatus(TOPIC_KillVino,LOG_SUCCESS);
B_LogEntry(TOPIC_KillVino,”Я убил вино,а арес как и обещал дал мне подарок.”);
B_GivePlayerXP(500);
b_giveinvitems(self,other,ItMW_Addon_Stab03,1);
};
instance NONE_1000_Dedroit_EXIT(C_Info)
{
npc = NONE_1000_Dedroit;
nr = 999;
condition = NONE_1000_Dedroit_EXIT_Condition;
information = NONE_1000_Dedroit_EXIT_Info;
permanent = TRUE;
description = “Конец”;
};
func int NONE_1000_Dedroit_EXIT_Condition()
{
return TRUE;
};
func void NONE_1000_Dedroit_EXIT_Info()
{
AI_StopProcessInfos(self);
};

Дальше заходим в Story_Globals и в самом конце прописываем

var int MIS_KillVino;

Потом заходим допустим в LOG_Constants_Yoly (находится в папке \Story\Log_Entries) и в самом конце прописываем

const string TOPIC_KillVino= “Убийство Вино”;

Удаляем существующие Ou.bin и Ou.csl, находятся в Gothic II\_work\Data\Scripts\Content\Cutscene.

Потом запускаем Spacer2, выбираем окно Output-units→update (ждем) и потом Output-units→save. Нажимаем World→Reparse Script→gothic.src.

Скомпилировать gothic.dat и ou.bin можно также прогой от Vam’а.

Убедитесь, что файл DIA_NONE_1000_DEDROIT.d включен в процесс компиляции (добавлен в gothic.src либо как STORY\DIALOGE\DIA*.d, либо как Story\Dialoge\DIA_NONE_1000_DEDROIT.d).

Пример №2

Давайте создадим миссию допустим что-то принести:

В том файле пишем:

instance DIA_DEDEROIT_q3 (C_Info)
{
npc = NONE_1000_Dedroit;//имя непися
nr = 1; //важность,т.е в где будет стоять строка в начале в конце в середине.
condition = dia_DEDEROIT_q3_condition;
information = dia_DEDEROIT_q3_info;
permanent = FALSE;
important = FALSE;
description = "Я могу ещё чем нибудьпомочь"; //То что отображается в меню дилога
};
func int dia_DEDEROIT_q3_condition()
{
if(Npc_KnowsInfo(other, DIA_DEDROIT_q2)) //условие когда начнётся диалог,в нашем случаи после разговора о убийстве Вино
{
return TRUE;
};
};
func void dia_DEDEROIT_q3_info()
{
AI_Output(other,self,"DIA_DEDEROIT_q_15_00"); //Я могу ещё чем нибудьпомочь
AI_Output(self,other,"DIA_DEDEROIT_q_03_01"); //Да ты бы мог мне принести кольцо защиты от пламени!
Info_ClearChoices(DIA_DEDEROIT_q3);
Info_AddChoice(dia_DEDEROIT_q3,"Хорошо я принесу.",dia_DEDEROIT_q3_w); //Варианты ответов
Info_AddChoice(dia_DEDEROIT_q3,"Нет, забудь",dia_DEDEROIT_q3_e); //Варианты ответов
Info_AddChoice(dia_DEDEROIT_q3,"Ты мне уже надоел.",dia_DEDEROIT_q3_r); //Варианты ответов
};
//Если игрок соглашается
func void dia_DEDEROIT_q3_w()
{
AI_Output(other,self,"dia_DEDEROIT_q3_w_15_00"); //Хорошо я принесу тебе кольцо.
AI_Output(self,other,"dia_DEDEROIT_q3_w_03_01"); //Вот и отлично!
AI_StopProcessInfos (self);
Log_CreateTopic(TOPIC_q_r,LOG_MISSION);//дневник.
Log_SetTopicStatus(TOPIC_q_r,LOG_Running);//дневник(миссия началась)!
B_LogEntry(TOPIC_q_r,"Нужно принести кольцо для Ареса"); //запись в дневнике.
};
//если игрок отказывается
func void dia_DEDEROIT_q3_e()
{
AI_Output(other,self,"dia_DEDEROIT_q3_e_15_00"); //Нет, забудь.
AI_Output(self,other,"dia_DEDEROIT_q3_e_03_01"); //Ну и ладно!
AI_StopProcessInfos (self);
};
//Если игрок говорит третий вариант ответа
func void dia_DEDEROIT_q3_r()
{
AI_Output(other,self,"dia_DEDEROIT_q3_r_15_00"); //Забудь!
AI_Output(self,other,"dia_DEDEROIT_q3_r_03_01"); //Тогда умри!
AI_StopProcessInfos (self);
B_Attack(self,other,AR_NONE,1);//функция атаки,после разговора непись будет вас атаковать
};
instance DIA_DEDEROIT_q4 (C_Info)
{
npc = NONE_1000_Dedroit;//опятьже имя
nr = 1;
condition = dia_DEDEROIT_q4_condition;
information = dia_DEDEROIT_q4_info;
permanent = FALSE;
important = FALSE;
description = "Вот, я прнёс тебе кольцо";//отображение в меню диалога
};
func int dia_DEDEROIT_q4_condition()
{
if(Npc_HasItems(other, ItRi_Prot_Fire_01)>= 1) //он начнётся если привас будет это кольцо
{
return TRUE;
};
};
func void dia_DEDEROIT_q4_info()
{
AI_Output(other,self,"DIA_DEDEROIT_q4_15_00"); //Вот, я прнёс тебе кольцо!
AI_Output(self,other,"dia_DEDEROIT_q4_03_01"); //Отлично!
b_giveinvitems(other,self, ItRi_Prot_Fire_01,1);//вы отдаёте это кольцо!
B_GivePlayerXP(250);//это сеолько опыта вы получили
Log_SetTopicStatus(TOPIC_q_r,LOG_SUCCESS);//миссия закончена
B_LogEntry(TOPIC_q_r,"Я отдал Арксу кольцо.");//запись в дневнике
};

TOPIC_q_r прописываем в \Story\Log_Entries\LOG_Constants_Yoly.d и в конце прописываем

const string TOPIC_q_r= “Кольцо для Ареса”;

А дальше тоже самое со Spacer’ом или прогой от Vam’a (написано выше)!

Автор

Автор статьи - DEDROIT.

/var/www/wogru_main/data/www/mod.worldofgothic.ru/data/pages/scripting/dialog-simple-tutorial.txt · Последние изменения: 09-01-2009 08:14 (внешнее изменение)

Проект портала World of Gothic RU. © 2005-2009 marazmus, MaGoth и команда World of Gothic RU.
Копирование материалов сайта разрешено только при явном согласии авторов материалов.
При копировании материалов прямая ссылка на сайт обязательна.

Rambler's Top100 Рейтинг Ролевых Ресурсов

низкие цены на вулканизацию резины
Проводим корпоративные мероприятия по ключ.
установить теплые металлопластиковые окна только в Биссектрисе
Playtotal.ru - сразиться в лучшие игры. Масса занимательных игр!