Главная Описание Скриншоты Команда Обучение Файлы Форум


          Написание миссий

 

INSTANCE DIA_Alex_MIS(C_INFO)

{

npc = bau_999_Alex;Код нпс, который будет доватьь миссию

nr = 2;Важность,местоположение в меню

condition = DIA_Alex_MIS_Condition;// название переменной

information = DIA_Alex_MIS_Info;// название переменной

permanent = FALSE;// то что диалог повторяется бесконечно, если = TRUE, если =False, то один раз

important = TRUE; // нпс начинает говорить первым =TRUE, если =False, то нечего не происходит

description = "ХХХ"; // здесь то о чём будет написанно в меню

};

 

FUNC INT DIA_Mager_MIS_Condition() //функция переменной, которая записана выше

{

if () //Тут записывается условие,условия можно посмотреть в других миссиях

{

return TRUE;

};

};

FUNC VOID DIA_Alex_MIS_Info() //функция переменной которая записана выше

 

{

AI_Output (other, self, "DIA_Alex_MIS_15_00");// //Тут идет диалог отображается в субтитрах,если (other, self) , то начинает ГГ к НПС, если наоборот, то НПС к ГГ

AI_Output (self, other, "DIA_Alex_MIS_04_01");//

AI_Output (self, other, "DIA_Alex_MIS_04_02");//

AI_Output (self, other, "DIA_Alex_MIS_04_03");//

AI_Output (self, other, "DIA_Alex_MIS_04_04");//

AI_Output (self, other, "DIA_Alex_MIS_04_05");//

AI_Output (other, self, "DIA_Alex_MIS_15_06");//

 

Log_CreateTopic (Topic_Alex,LOG_MISSION); //создаётся запись в дневнике, в теме активных заданий......(Topic_Alex) создаёшь в (Gothic II\_work\data\Scripts\Content\Story\Log_Entries)в (LOG_Constants_Mattes)

Log_SetTopicStatus (Topic_Alex,LOG_RUNNING); // миссия НАЧАЛАСЬ

B_LogEntry (Topic_Alex,"ХХХ."); //То, что написано в дневнике

 

};

 

сохраняем в (Gothic II\_work\data\Scripts\Content\Story\Dialoge)

Внимание : если вы нашли и исправили ошибку, нужно снова компилить Gothic.src

 

©francisc,помогал VenDigo, использовались уроки скриптологии Вама

 

 

Создание диалогов:

В папке 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= "Убийство Вино";

Потом заходим в спайсер2 нажимаем world->Reparse Script->gothic.src потом выбираем окно Output-units->update->refresh(ждем,удаляем Ou.bin и Ou.csl)->save. Ou.bin и Ou.csl->находятся в Gothic II\_work\Data\Scripts\Content\Cutscene!

Если вы пользуетесь прогой от вама то просто нужно прописать диалог в Gothic.src и закомпилировать! Ну вот и всё!

 

 

Итак продолжаем:

 

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

 

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

 

 

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= "Кольцо для Ареса";

 

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

 

 

Создать новую,полноценную гильдию нельзя,можно только переделать под свои нужды существующие!

 

Давайте сделам допустим гильдию сектатнтов.

 

Чтобы её сделать:

 

1)заходим в _Intern\Constants.d

 

там заменяем допустим

 

const int GIL_EMPTY_D= 15; на const int GIL_SEC= 15;(где SEC->сокращенное название гильдии)!

 

2) Заходим в Scripts\Content\Story\TEX.d

 

и в разделе const string TXT_GUILDS[66] =

 

прописываем вместо "D",ставим "Сектант",

 

3) Заходим в _work\data\Scripts\_decompiled\AI\Human\Guilds.d

 

Там вместо этого

 

/* D */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* D */ ATT_NEUTRAL, ATT_NEUTRAL, /* D */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* D */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* D */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL

 

};

 

ставим

 

/* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, /* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, /* SEC */ ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL, ATT_NEUTRAL

 

};

 

Потом всё это дело компилируем и воуля,  у нас новая гильдия!

 

Hosted by uCoz