1. Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, сыграть в увлекательные ФРПГ, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
    Скрыть объявление
  2. Форум аддона "Возвращение" 2.0:
    — Обсудить игру, почитать о прохождениях и/или разрешить свои вопросы по игре вы можете в одной из тем одноименного форума. Посетить...
    — Прочитать историю изменения и/или скачать последнюю версию аддона "Возвращение", вы можете на страницах наших ресурсов. Скачать...
    Скрыть объявление

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

Тема в разделе "Скриптинг", создана пользователем MEG@VOLT, 9 июл 2013.

Статус темы:
Закрыта.
  1. MEG@VOLT

    MEG@VOLT ★★★★★★★
    Модератор

    Регистрация:
    24 мар 2006
    Сообщения:
    1.604
    Благодарности:
    647
    Баллы:
    290
    Пример №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.
     
  2. MEG@VOLT

    MEG@VOLT ★★★★★★★
    Модератор

    Регистрация:
    24 мар 2006
    Сообщения:
    1.604
    Благодарности:
    647
    Баллы:
    290
    Ну вот и первый тутор в CHM
    У кого windows vista и выше, зайдите после скачки в свойства файла, и там нажмите разблокировать.
     

    Вложения:

    • СДПТ-D.chm
      Размер файла:
      42 КБ
      Просмотров:
      102
    Хелдар, hell9999 и Валера поблагодарили.
Статус темы:
Закрыта.

Поделиться этой страницей

Neverwinter