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

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

Пример №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 Рейтинг Ролевых Ресурсов