В папке 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).
Давайте создадим миссию допустим что-то принести:
В том файле пишем:
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.
Проект портала World of Gothic RU. © 2005-2009 marazmus, MaGoth и команда World of Gothic RU.
Копирование материалов сайта разрешено только при явном согласии авторов материалов.
При копировании материалов прямая ссылка на сайт обязательна.