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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
    Скрыть объявление
  2. Внимание!
    — Требуется примерно по 3-5 человек на каждую из версий ОС:: - Windows® XP SP3, Windows® Vista SP2, Windows® 7 SP1, Windows® 8, Windows® 8.1, Windows® 10(build 10 1607) и Windows® 10(build 10 1703). Для стационарных ПК и ноутбуков. Заявку на участие можно оставить здесь...
    Скрыть объявление

Для чайников

Тема в разделе "Модостроение", создана пользователем Olhado, 15 июн 2007.

Модераторы: Marvіn, MEG@VOLT
  1. lorddemonik1

    lorddemonik1 Участник форума

    Регистрация:
    15 мар 2012
    Сообщения:
    343
    Благодарности:
    124
    Баллы:
    210
    Пол:
    Мужской
    Ты когда текст читаешь, как это делаешь? Сверху вниз или свой способ?=)
     
  2. MaGoth

    MaGoth ★★★★★★★★★★★
    Администратор

    Регистрация:
    7 янв 2005
    Сообщения:
    14.884
    Благодарности:
    6.720
    Баллы:
    740
    Пол:
    Мужской
    А в чем там проблема ?!

    Смотрим на кондишен оригинала:
    Код (Text):
    FUNC INT DIA_Abuyin_Zukunft_Condition()

    {  
        if Npc_KnowsInfo (other, DIA_Abuyin_Weissagung)
        && (DIA_Abuyin_Zukunft_permanent == FALSE)
        && (Kapitel == 1)
        {  
            return TRUE;
        };
    };
    Если условие верно, то выполняется этот диалог:
    Код (Text):
    FUNC VOID DIA_Abuyin_Zukunft_Info()
    {  
        AI_Output (other, self,"DIA_Abuyin_Zukunft_15_00");//Erzдhl mir von der Zukunft.
       
        if B_GiveInvItems (other,self, ItMI_Gold, 25)
        {
            AI_Output (self, other,"DIA_Abuyin_Zukunft_13_01");//Gut, Suchender des Wissens. Ich werde mich nun in Trance begeben. Bist du bereit?
            Info_ClearChoices (DIA_Abuyin_Zukunft);
            Info_AddChoice (DIA_Abuyin_Zukunft,"Ich bin bereit",DIA_Abuyin_Zukunft_Trance);
        }
        else
        {
            AI_Output (self, other,"DIA_Abuyin_Zukunft_13_02");//Oh Vater der Mьnzen, fьr einen Blick in die Zeit bitte ich dich um eine Gabe von 25 Goldstьcken.
        };
    };
    Если в нем Гг заплатил Абуину 25 голды, то добавляется этот диалог:
    Код (Text):
    FUNC VOID DIA_Abuyin_Zukunft_Trance()
    {
            AI_PlayAni  (self,"T_MAGRUN_2_HEASHOOT");
            Wld_PlayEffect("SPELLFX_TELEPORT",  self, self, 0, 0, 0, FALSE );
           
            AI_Output (self, other,"DIA_Abuyin_Zukunft_Trance_13_00");//(Trance)... Orks ... sie bewachen einen Zugang ... ein alter Stollen ... das Tal der Minen ...
            AI_Output (self, other,"DIA_Abuyin_Zukunft_Trance_13_01");//(Trance) ... Mдnner mit strahlenden Rьstungen ... ein Magier ... dein Freund ist bei ihnen ... er wartet auf dich ...
            AI_Output (self, other,"DIA_Abuyin_Zukunft_Trance_13_02");//(Trance) ... Feuer! Ein Angriff ... ein mдchtiges Wesen ... die Flammen ... viele ... werden sterben ...
           
            AI_Output (self, other,"DIA_Addon_Abuyin_Zukunft_Trance_13_00");//(Trance) ... was ist das ... ? Eine Stadt ... Ruinen ... Quarhodron in Jharkendar ...
            AI_Output (self, other,"DIA_Addon_Abuyin_Zukunft_Trance_13_01");//(Trance) ... er wird gerufen ... Quarhodron in Jharkendar!
           
            AI_PlayAni  (self,"T_HEASHOOT_2_STAND");
            AI_Output (self, other,"DIA_Abuyin_Zukunft_Trance_13_03");//... Tut mir Leid - die Vision ist vorьber. Ich sehe nichts mehr.
           
            DIA_Abuyin_Zukunft_permanent = TRUE;
            Abuyin_Zukunft = 1;
            Info_ClearChoices (DIA_Abuyin_Zukunft);
           
            B_GivePlayerXP ((XP_Ambient*4));
    };
    Названия файлов в нем не играют ни какой роли, функции отрабатываются сверху вних и по номерам диалогов, а два этих файла: DIA_Addon_Abuyin_Zukunft_Trance_13_00, были добавлены в аддоне..
     
    Kreol Nekr и Vlad_Torop поблагодарили.
  3. ElderGamer

    ElderGamer
    Модостроитель

    Регистрация:
    16 апр 2008
    Сообщения:
    1.979
    Благодарности:
    1.218
    Баллы:
    295
    Появляется опция "Я готов!". Когда игрок выбирает её, вызывается функция DIA_Abuyin_Zukunft_Trance.
     
    Vlad_Torop поблагодарил.
  4. Play_Now

    Play_Now Участник форума

    Регистрация:
    13 ноя 2009
    Сообщения:
    558
    Благодарности:
    345
    Баллы:
    230
    Пол:
    Мужской
    Уже все разжевали, но напишу еще раз

    Открыть спойлер

    Код (Text):
    instance DIA_Abuyin_Zukunft(C_Info) //Объявили диалог у Абуина с некоторыми (переменными), методами
    {
        npc = VLK_456_Abuyin;
        nr = 2;
        condition = DIA_Abuyin_Zukunft_Condition;
        information = DIA_Abuyin_Zukunft_Info;
        permanent = TRUE;
        description = "Расскажи мне о будущем (заплатить 25 золотых).";
    };


    var int DIA_Abuyin_Zukunft_permanent; //Объявили переменную числового значения

    func int DIA_Abuyin_Zukunft_Condition() //Кондищен функция диалога
    {
        //Условие, в котором проверяется, чтобы текущая глава была первая, ГГ говорил с Абуином и объявленная ранее переменная равна FALSE
        if(Npc_KnowsInfo(other,DIA_Abuyin_Weissagung) && (DIA_Abuyin_Zukunft_permanent == FALSE) && (Kapitel == 1))
        {
            return TRUE; //Если все верно, то возвращается у функции TRUE, и запуститься диалог
        };
    };

    func void DIA_Abuyin_Zukunft_Info() //Функция диалога с Абуином
    {
        AI_Output(other,self,"DIA_Abuyin_Zukunft_15_00");    //Расскажи мне о будущем. //Здесь работает функция вызова диалога,
    в котором ГГ говорит фразу после комментария,
    а DIA_.... это название файла, в котором содержится озвучка диалога,
    если файла нет, то и самой озвучки нет, диалог при этом пройдет, но с некоторой задержкой.
        if(B_GiveInvItems(other,self,ItMi_Gold,25)) //Здесь ставиться условие, если ГГ заплатит Абуину, то будет проигрываться диалог, который стоит в скобках
        {
            AI_Output(self,other,"DIA_Abuyin_Zukunft_13_01");    //Хорошо, о, Жаждущий Знаний. Я сейчас войду в состояние транса. Ты готов?
            Info_ClearChoices(DIA_Abuyin_Zukunft); //Функция очистки окна выбора диалогов
            Info_AddChoice(DIA_Abuyin_Zukunft,"Я готов!",DIA_Abuyin_Zukunft_Trance); //Добавление в меню диалога ГГ "Я готов!", при выборе которой сработает вызов другой функции диалога
        }
        else //Если ГГ не заплатит 25 золотых, то проиграется следующий диалог
        {
            AI_Output(self,other,"DIA_Abuyin_Zukunft_13_02");    //О, Отец Монет, я прошу у тебя 25 золотых в обмен на взгляд в туманное будущее.
        };
    };

    func void DIA_Abuyin_Zukunft_Trance() //Функция монолога, когда ГГ заплатит 25 золотых
    {
        AI_PlayAni(self,"T_MAGRUN_2_HEASHOOT"); //Функция проигрывания анимации Абуина (self)
        Wld_PlayEffect("SPELLFX_TELEPORT",self,self,0,0,0,FALSE); //Функция проигрывания анимации PFX эффекта у Абуина (self)
        //Диалоги проигрываются сверху-вниз, по номерам, которые указаны в файле диалога DIA_..._13_00 в этом случае, он будет проигрываться первым
        AI_Output(self,other,"DIA_Abuyin_Zukunft_Trance_13_00");    //(в трансе) Орки... они охраняют вход... старый туннель... Долина Рудников...
        AI_Output(self,other,"DIA_Abuyin_Zukunft_Trance_13_01");    //(в трансе) Люди в сверкающих доспехах... маг... твой друг с ними... он ждет тебя...
        AI_Output(self,other,"DIA_Abuyin_Zukunft_Trance_13_02");    //(в трансе) Огонь! Нападение... могучего существа... пламя... многие... погибнут...
        AI_Output(self,other,"DIA_Addon_Abuyin_Zukunft_Trance_13_00");    //(в трансе) ...Что это?.. Город... Руины... Куарходрон из Яркендара...
        AI_Output(self,other,"DIA_Addon_Abuyin_Zukunft_Trance_13_01");    //(в трансе) ...Он был призван... Куарходрон из Яркендара!
        AI_PlayAni(self,"T_HEASHOOT_2_STAND");
        AI_Output(self,other,"DIA_Abuyin_Zukunft_Trance_13_03");    //... Извини - видение кончилось. Больше я ничего не смог увидеть.
        DIA_Abuyin_Zukunft_permanent = TRUE; //Операция присваивания
        Abuyin_Zukunft = 1; //Операция присваивания
        Info_ClearChoices(DIA_Abuyin_Zukunft);
        B_GivePlayerXP(XP_Ambient * 4); //Добавление ГГ опыта
    };
     
    Последнее редактирование: 27 ноя 2017
    Vlad_Torop поблагодарил.
  5. Vlad_Torop

    Vlad_Torop Участник форума

    Регистрация:
    2 май 2014
    Сообщения:
    733
    Благодарности:
    469
    Баллы:
    180
    Пол:
    Мужской
    В этом и было мое недопонимание.
    Я подумал,если DIA_Abuyin имеет номер 13_00,и DIA_Addon_Abuyin имеет номер 13_00(в одном и том же диалоге),то происходит какая-то вариативность.
    Сейчас поэкспериментировал со своим нпс,все понял.
    Всем спасибо.
     
  6. Kreol Nekr

    Kreol Nekr Забанен

    Регистрация:
    21 ноя 2014
    Сообщения:
    231
    Благодарности:
    108
    Баллы:
    100
    Пол:
    Мужской
    На всякий случай 13 это номер голоса, а 00 это номер строки диалога.
     
  7. Ulthrax

    Ulthrax Участник форума

    Регистрация:
    28 июн 2017
    Сообщения:
    218
    Благодарности:
    67
    Баллы:
    55
    Пол:
    Мужской
    Усем трямки в этой теме.

    Имею идею добавить ГГ в Готике 2 фичу сбора статистики - кого и сколько ухлопал, чего и сколько нашел/спер/скрафтил и т.п. Ну, с чего начать самое начало, думаю, найду - то поставить, это скормить еще чему-нибудь, получить кучу распакованного файла и радоваться.

    Собственно, раз тема для чайников, то, значит, можно задавать дилетантские вопросы? Их таки есть у меня:

    1) Куда дальше копать? Имею подозрение, что, раз никаких визуальных штук менять не предполагается, то мне не нужно 3Д-моделирование, конвертирование музыки и возня с анимациями, а потребуется чистый скриптинг. Сталбыть, мне нужен будет мануал по синтаксису скриптового языка Готики и список соглашений об именовании всяких там переменных. Я прав?

    2) Как вообще производится с точки зрения скриптования обработка всяких там взаимодействий ГГ с прочим? Ну, например, инвентарь, параметры и возможности героя находятся в скрипте героя, а их текущие значения и флаги берутся из файла сохранения либо изменяются внешними событиями. А вот, например, ГГ сковал меч - где записывается (и записывается ли) этот факт? Или ГГ собрал 200 яблок, 30 съел и 100 пустил на пироги - как/где это записано? Или ГГ вскрыл сундук и нашел 100 монет + 1 эссенцию маны - сами-то монеты и бутылка запишутся в инвентарь, возможно, в параметры героя запишется +1 успешное вскрытие. Но можно ли как-то зафиксировать, что именно столько монет и бутылок герой именно добыл из вскрытого им сундука?

    3) Чтобы, например, не перегружать параметры героя и (возможно) избежать необходимости начинать новую игру, есть мысль собирать статистику просто в лог-файл, например, в формате "%дата_время% / %игровые_дата_время% / убил(съел, скрафтил) / %ID_вражины(предмета)% / %количество% / чем убил". Это вообще возможно (позволяет ли игра писать свой файл)? И как к этому вопросу лучше подступиться?

    Спасибо заранее!
     
    Kreol Nekr поблагодарил.
  8. lorddemonik1

    lorddemonik1 Участник форума

    Регистрация:
    15 мар 2012
    Сообщения:
    343
    Благодарности:
    124
    Баллы:
    210
    Пол:
    Мужской

    2) Обработка происходит в зависимости от того, как ты ее укажешь. Чтобы было понятней объясню на еде:
    Съел яблоко, у яблока в скрипте помимо +хп указано запоминать сколько съел, как только это число стало => 25, дает 1 силы и счетчик обнуляется скриптом.
    Открыть спойлер

    Код (Text):
    func void Use_Apple()
    {
        Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Apple); // восстановление хп
        if(Npc_IsPlayer(self))
        {
            Apple_Bonus = Apple_Bonus + 1; // счетчик сколько съел
            if(Apple_Bonus == 7) // если 7 съел
            {
                Print(PRINT_Eat1);// вывод сообщения
            };
            if(Apple_Bonus == 15) // если 15
            {
                Print(PRINT_Eat2);// вывод сообщения
            };
            if(Apple_Bonus == 25)// если 25
            {
                Print(PRINT_Eat3); // вывод сообщения
                B_RaiseAttribute(self,ATR_STRENGTH,1); // повышение силы
                Snd_Play("LevelUp"); // воспроизведение звука
                Apple_Bonus = 0; // обнуление счетчика
            };
        };
    };

    Ковка по умолчания не записывается, но сделать можно как с яблоком. Предметы из сундука не пишутся, но можно сделать, хотя придется все сундуки перелопатить
    3) Игра не умеет в писание и изменение файлов.

    З.Ы Однако все некоторые вещи возможны расширителями, но тут все немного сложнее будет...
     
    Ulthrax поблагодарил.
  9. kor.angar

    kor.angar Участник форума

    Регистрация:
    28 ноя 2017
    Сообщения:
    89
    Благодарности:
    20
    Баллы:
    30
    Пол:
    Мужской
    Всем привет!

    В игре есть свойство брони. Самый простой пример это бандитская броня, если ГГ в ней его все атакует. Есть броня фракций, доспехи наемников, ментов, магов. Если ГГ не в броне то соответственно члены фракции (гильдии) ругаются не хотят с ГГ говорить. Конец вводной части.


    Есть броня из ползунов. Когда герой в ней, кое кто не хочет с ГГ говорит, появляется реплика что мол не подходит тебе это броня или просто ничего не происходит. Честно пару часов перечитывал топики на форуме, но так и не нашел где это прописано в скриптах игры. В файлах игры тоже ковырялся но не нашел.

    Потому и пишу здесь.
     
  10. WoOliN

    WoOliN Участник форума

    Регистрация:
    13 окт 2012
    Сообщения:
    78
    Благодарности:
    19
    Баллы:
    175
    AI\Human\C_Human\C_PlayerIsFakeBandit.d
    AI\Human\C_Human\C_PlayerHasFakeGuild.d
     
    kor.angar поблагодарил.
  11. kor.angar

    kor.angar Участник форума

    Регистрация:
    28 ноя 2017
    Сообщения:
    89
    Благодарности:
    20
    Баллы:
    30
    Пол:
    Мужской
    Спасибо!

    а вот еще вопрос возник сегодня по обучению Языку Зодчих.
    Миксир гад не хочет в Хориносе учить
    в спойлере код Миксира
    Открыть спойлер
    Код (Text):
    instance DIA_Addon_Myxir_CITY_EXIT(C_Info)
    {
        npc = KDW_140300_Addon_Myxir_CITY;
        nr = 999;
        condition = DIA_Addon_Myxir_CITY_EXIT_Condition;
        information = DIA_Addon_Myxir_CITY_EXIT_Info;
        permanent = TRUE;
        description = Dialog_Ende;
    };


    func int DIA_Addon_Myxir_CITY_EXIT_Condition()
    {
        return TRUE;
    };

    func void DIA_Addon_Myxir_CITY_EXIT_Info()
    {
        AI_StopProcessInfos(self);
    };


    instance DIA_Addon_Myxir_CITY_HelloCITY(C_Info)
    {
        npc = KDW_140300_Addon_Myxir_CITY;
        nr = 5;
        condition = DIA_Addon_Myxir_CITY_HelloCITY_Condition;
        information = DIA_Addon_Myxir_CITY_HelloCITY_Info;
        permanent = TRUE;
        description = "Ты останешься в городе?";
    };


    func int DIA_Addon_Myxir_CITY_HelloCITY_Condition()
    {
        return TRUE;
    };


    var int DIA_Addon_Myxir_CITY_HelloCITY_OneTime;

    func void DIA_Addon_Myxir_CITY_HelloCITY_Info()
    {
        AI_Output(other,self,"DIA_Addon_Myxir_CITY_HelloCITY_15_00");    //Ты останешься в городе?
        AI_Output(self,other,"DIA_Addon_Myxir_CITY_HelloCITY_12_01");    //Кто-то из нас должен оставаться здесь, когда Ватраса в городе нет.
        VatrasAbloeseIstDa = TRUE;
        if((RavenIsDead == TRUE) && (DIA_Addon_Myxir_CITY_HelloCITY_OneTime == FALSE))
        {
            AI_Output(self,other,"DIA_Addon_Myxir_CITY_HelloCITY_12_02");    //Я хотел тебе сказать еще одну вещь.
            AI_Output(self,other,"DIA_Addon_Myxir_CITY_HelloCITY_12_03");    //В Яркендаре ты совершил поистине героический подвиг.
            AI_Output(other,self,"DIA_Addon_Myxir_CITY_HelloCITY_15_04");    //К сожалению, у меня еще есть незавершенные дела в Хоринисе.
            AI_Output(self,other,"DIA_Addon_Myxir_CITY_HelloCITY_12_05");    //Это так, но я уверен, что ты справишься с ними, Хранитель.
            AI_Output(other,self,"DIA_Addon_Myxir_CITY_HelloCITY_15_06");    //Увидим.
            DIA_Addon_Myxir_CITY_HelloCITY_OneTime = TRUE;
            B_GivePlayerXP(XP_Ambient);
        };
    };


    instance DIA_Addon_Myxir_CITY_Teach(C_Info)
    {
        npc = KDW_140300_Addon_Myxir_CITY;
        nr = 90;
        condition = DIA_Addon_Myxir_CITY_Teach_Condition;
        information = DIA_Addon_Myxir_CITY_Teach_Info;
        permanent = TRUE;
        description = "Научи меня этому языку.";
    };


    var int DIA_Addon_Myxir_CITY_Teach_NoPerm;
    var int DIA_Addon_Myxir_CITY_Teach_OneTime;

    func int DIA_Addon_Myxir_CITY_Teach_Condition()
    {
        if((Myxir_Addon_TeachPlayer == TRUE) && (DIA_Addon_Myxir_CITY_Teach_NoPerm == FALSE) && (DIA_Addon_Myxir_Teach_NoPerm == FALSE) && (DIA_Addon_Myxir_ADW_Teach_NoPerm == FALSE))
        {
            return TRUE;
        };
    };

    func void DIA_Addon_Myxir_CITY_Teach_Info()
    {
        B_DIA_Addon_Myxir_TeachRequest();
        if(DIA_Addon_Myxir_CITY_Teach_OneTime == FALSE)
        {
            Log_CreateTopic(TOPIC_Addon_KDWTeacher,LOG_NOTE);
            B_LogEntry(TOPIC_Addon_KDWTeacher,LogText_Addon_MyxirTeach);
            DIA_Addon_Myxir_CITY_Teach_OneTime = TRUE;
        };
        if((PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == FALSE) || (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == FALSE) || (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] == FALSE))
        {
            Info_ClearChoices(DIA_Addon_Myxir_CITY_Teach);
            Info_AddChoice(DIA_Addon_Myxir_CITY_Teach,Dialog_Back,DIA_Addon_Myxir_CITY_Teach_BACK);
        };
        if(PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == FALSE)
        {
            B_DIA_Addon_Myxir_TeachL1();
            Info_AddChoice(DIA_Addon_Myxir_CITY_Teach,B_BuildLearnString(NAME_ADDON_LEARNLANGUAGE_1,B_GetLearnCostTalent(other,NPC_TALENT_FOREIGNLANGUAGE,LANGUAGE_1)),DIA_Addon_Myxir_CITY_Teach_LANGUAGE_1);
        }
        else if((PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == FALSE) && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == TRUE))
        {
            B_DIA_Addon_Myxir_TeachL2();
            Info_AddChoice(DIA_Addon_Myxir_CITY_Teach,B_BuildLearnString(NAME_ADDON_LEARNLANGUAGE_2,B_GetLearnCostTalent(other,NPC_TALENT_FOREIGNLANGUAGE,LANGUAGE_2)),DIA_Addon_Myxir_CITY_Teach_LANGUAGE_2);
        }
        else if((PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] == FALSE) && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == TRUE) && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == TRUE))
        {
            B_DIA_Addon_Myxir_TeachL3();
            Info_AddChoice(DIA_Addon_Myxir_CITY_Teach,B_BuildLearnString(NAME_ADDON_LEARNLANGUAGE_3,B_GetLearnCostTalent(other,NPC_TALENT_FOREIGNLANGUAGE,LANGUAGE_3)),DIA_Addon_Myxir_CITY_Teach_LANGUAGE_3);
        }
        else
        {
            B_DIA_Addon_Myxir_TeachNoMore();
            DIA_Addon_Myxir_CITY_Teach_NoPerm = TRUE;
        };
    };

    func void DIA_Addon_Myxir_CITY_Teach_LANGUAGE_X()
    {
        B_DIA_Addon_Myxir_Teach_LANGUAGE_X();
    };

    func void DIA_Addon_Myxir_CITY_Teach_BACK()
    {
        Info_ClearChoices(DIA_Addon_Myxir_CITY_Teach);
    };

    func void DIA_Addon_Myxir_CITY_Teach_LANGUAGE_1()
    {
        if(B_TeachPlayerTalentForeignLanguage(self,other,LANGUAGE_1))
        {
            DIA_Addon_Myxir_CITY_Teach_LANGUAGE_X();
        };
        Info_ClearChoices(DIA_Addon_Myxir_CITY_Teach);
    };

    func void DIA_Addon_Myxir_CITY_Teach_LANGUAGE_2()
    {
        if(B_TeachPlayerTalentForeignLanguage(self,other,LANGUAGE_2))
        {
            DIA_Addon_Myxir_CITY_Teach_LANGUAGE_X();
        };
        Info_ClearChoices(DIA_Addon_Myxir_CITY_Teach);
    };

    func void DIA_Addon_Myxir_CITY_Teach_LANGUAGE_3()
    {
        if(B_TeachPlayerTalentForeignLanguage(self,other,LANGUAGE_3))
        {
            DIA_Addon_Myxir_CITY_Teach_LANGUAGE_X();
        };
        Info_ClearChoices(DIA_Addon_Myxir_CITY_Teach);
    };


    Вообщем смотрю я код и понять не могу почему Миксир не хочет учить :)
     
    Последнее редактирование модератором: 30 дек 2017
  12. WoOliN

    WoOliN Участник форума

    Регистрация:
    13 окт 2012
    Сообщения:
    78
    Благодарности:
    19
    Баллы:
    175
    func int DIA_Addon_Myxir_CITY_Teach_Condition()
    {
    if((Myxir_Addon_TeachPlayer == TRUE) ...

    Это условие должно быть выполнено, а выполняется оно единственный раз - это при встрече с Миксиром на раскопках магов воды (когда портал ещё закрыт). То есть - если при той встрече ГГ не спросил Миксира об обучении языкам, то в городе он уже никак не сможет изучить языки.
    Убери условие и проверь без него.

    Ну и описание диалога можно изменить на *Научи меня языку Зодчих* для большей логичности.
     
    Последнее редактирование: 30 дек 2017
    kor.angar поблагодарил.
  13. Aven Felon

    Aven Felon Участник форума

    Регистрация:
    15 июл 2016
    Сообщения:
    794
    Благодарности:
    414
    Баллы:
    120
    Пол:
    Мужской
    Отшельник разве не учит!?
    Или он только третьему учил:oops:
     
  14. Dimus

    Dimus ★★★★★★★
    Модератор

    Регистрация:
    19 июл 2010
    Сообщения:
    3.959
    Благодарности:
    2.245
    Баллы:
    540
    Пол:
    Мужской
    Отшельник учит любому из языков, но только однократно. А условие, которое может блокировать обучение у вернувшегося в город Миксира, было убрано ещё в скриптпатче Efectivo.
     
    Последнее редактирование: 31 дек 2017
    kor.angar поблагодарил.
  15. kor.angar

    kor.angar Участник форума

    Регистрация:
    28 ноя 2017
    Сообщения:
    89
    Благодарности:
    20
    Баллы:
    30
    Пол:
    Мужской
    Пользуясь случаем хочу поблагодарить всех за исчерпывающие ответы на предыдущие вопросы :-D

    Читаю значит я топик Создание NPC и вставка его в игру, вношу правки в персонажи и все у меня получается:-D
    Придаю NPC индивидуальности строго по инструкции
    Открыть спойлер
    Код (Text):

    ...
    fight_tactic = FAI_HUMAN_MASTER ;
    ...
    HitChance [NPC_TALENT_1H] = 90; //Владение Одноручником
    HitChance [NPC_TALENT_2H] = 60; //Владение Двуручником
    HitChance [NPC_TALENT_BOW] = 60; //Умение обращаться с Луком
    HitChance [NPC_TALENT_CROSSBOW] = 30; //Умение обращаться с Арбалетом
    ...
     


    Запускаю игру, NPC стоит довольный как слон. Но талант при этом несмотря на высокий процент имеет значение "Боец", а мне надо "Мастер".

    Вопрос: как прописать значение(обучен, боец, мастер) для соответствующего(1H,2H,BOW,CROSSBOW) таланта у NPC

    к примеру
    1h=мастер
    2h=боец
    BOW=боец
    CROSSBOW=обучен


    Вообщем я разобрался. так сделать нельзя. ибо все это определяется общей строчкой fight_tactic = FAI_HUMAN_MASTER ;
    то есть, если чувак мастер, то он мастер прям во всем сразу :-D

    В готике 1 была такая фишка, как именное оружие и отдельно нпс реагировали достаточно агрессивно на то что ГГ ходил с их оружием. Сначала была фраза что то типа «у тебя мое оружие, похоже стоит переломать тебе пальцы».

    Собственно вопрос заключается в следующим, как это можно реализовать во второй Готике?

    К примеру у Диего идет проверка:
    какое оружие у ГГ, если оружие ГГ = ItMw_diego, то Диего что-то говорит и атакует ГГ.
     
    Последнее редактирование модератором: 9 янв 2018
  16. WoOliN

    WoOliN Участник форума

    Регистрация:
    13 окт 2012
    Сообщения:
    78
    Благодарности:
    19
    Баллы:
    175
    Для описания оружия есть параметры принадлежности (owner и ownerGuild), но как они работают и работают ли сами по себе - мне неизвестно.

    Легче всего сделать обычный диалог, в котором НПЦ сам обратиться к ГГ, если у того есть определённая инстанция оружия в инвентаре.
    Поищи диалоги с параметром important = TRUE; - это как раз диалоги, в которых НПЦ сам обращается к ГГ.
    В условия нужно будет вставить наличие у ГГ определённого предмета (предмет лучше всего сделать единичным в мире - так он и будет типа как персональным).
    А уже из самого диалога можно вызывать атаку.
    Если сильно поизвращаться, то может получится вызвать реакцию НПЦ на большом расстоянии и его перемещение к ГГ, для начала самого диалога.
     
  17. kor.angar

    kor.angar Участник форума

    Регистрация:
    28 ноя 2017
    Сообщения:
    89
    Благодарности:
    20
    Баллы:
    30
    Пол:
    Мужской
    это я сразу понял и сделал

    диалогов в игре таких много, но вот обращение при условие это не часто. штраф к примеру. вообщем банально содрать не с чего :-D

    вот код Декстера с important = TRUE;
    Открыть спойлер

    Код (Text):
    instance DIA_Dexter_Kill(C_Info)
    {
        npc = BDT_1060_Dexter;
        nr = 2;
        condition = DIA_Dexter_Kill_Condition;
        information = DIA_Dexter_Kill_Info;
        permanent = FALSE;
        important = TRUE;
    };


    func int DIA_Dexter_Kill_Condition()
    {
        if(Npc_IsInState(self,ZS_Talk) && ((Dexter_NoMoreSmallTalk == TRUE) || (Knows_Dexter == FALSE)))
        {
            return TRUE;
        };
    };

    func void DIA_Dexter_Kill_Info()
    {
        if(Knows_Dexter == TRUE)
        {
            AI_Output(self,other,"DIA_Addon_Dexter_Add_09_02");    //(нападает) Считай, что сам напросился...
        }
        else
        {
            AI_Output(self,other,"DIA_Dexter_Kill_09_01");    //О, лучше ты здесь не появлялся. Ты не тот человек не в том месте.
        };
        MIS_Steckbriefe = LOG_OBSOLETE;
        B_CheckLog();
        B_Greg_ComesToDexter();
        Info_ClearChoices(DIA_Dexter_Kill);
        Info_AddChoice(DIA_Dexter_Kill,Dialog_Ende,DIA_Dexter_Kill_ENDE);
    };
     


    что то это слишком сложно для меня. надо какой то простой вариант.

    может сделать сделать что то типа как с кольцом аквамарина?

    Открыть спойлер


    instance DIA_Addon_Orlan_Ranger(C_Info)
    {
    npc = BAU_970_Orlan;
    nr = 2;
    condition = DIA_Addon_Orlan_Ranger_Condition;
    information = DIA_Addon_Orlan_Ranger_Info;
    description = "Это мне только кажется или ты уставился на мое кольцо?";
    };


    func int DIA_Addon_Orlan_Ranger_Condition()
    {
    if(Npc_KnowsInfo(other,DIA_Orlan_WERBISTDU) && (SCIsWearingRangerRing == TRUE))
    {
    return TRUE;
    };
    };

    func void DIA_Addon_Orlan_Ranger_Info()
    {
    AI_Output(other,self,"DIA_Addon_Orlan_Ranger_15_00"); //Мне это только кажется или ты уставился на мое кольцо?
    AI_Output(self,other,"DIA_Addon_Orlan_Ranger_05_01"); //Я и не знаю, что я об этом должен думать.
    Orlan_KnowsSCAsRanger = TRUE;
    Info_ClearChoices(DIA_Addon_Orlan_Ranger);
    Info_AddChoice(DIA_Addon_Orlan_Ranger,"Мужик! Да я принадлежу к 'Кольцу воды'!",DIA_Addon_Orlan_Ranger_Idiot);
    Info_AddChoice(DIA_Addon_Orlan_Ranger,"Это аквамарин. Уже видел такой?",DIA_Addon_Orlan_Ranger_Aqua);
    };
     
    Последнее редактирование: 9 янв 2018
  18. lorddemonik1

    lorddemonik1 Участник форума

    Регистрация:
    15 мар 2012
    Сообщения:
    343
    Благодарности:
    124
    Баллы:
    210
    Пол:
    Мужской

    Нет, эта строчка лишь сделана для простоты, она суммирует все навыки.
    Удали ее и введи
    Открыть спойлер

    B_AddFightSkill(self,NPC_TALENT_1H,60);
    B_AddFightSkill(self,NPC_TALENT_2H,30);
    B_AddFightSkill(self,NPC_TALENT_BOW,10);
    B_AddFightSkill(self,NPC_TALENT_CROSSBOW,10);

    Думаю поймешь что за что отвечает.

    Насчет нападение из-за оружия... Могу предложить только нападение, в том случае, если оружие или предмет есть в инвентаре.
    Открыть спойлер

    instance DIA_Xardas_Hello(C_Info)
    {
    npc = NONE_100_Xardas;
    nr = 1;
    condition = DIA_Xardas_Hello_Condition;
    information = DIA_Xardas_Hello_Info;
    permanent = TRUE;
    important = TRUE;
    };


    func int DIA_Xardas_Hello_Condition()
    {
    If(Npc_hasItems(hero,ItMw_1H_Mace_L_03) >= 1)
    {
    return TRUE;
    };

    };

    func void DIA_Xardas_Hello_Info()
    {
    AI_Output(self,other,"DIA_Addon_Xardas_Hello_14_00"); // У тебя мое оружие, отдавай
    B_GiveInvItems(other,self,ItMw_1H_Mace_L_03,1); // Забирает палку во время разговора, сделано, чтобы после диалога, не напал повторно ввиду того, что оружие не экипированно...
    AI_StopProcessInfos(self);
    B_Attack(self,other,AR_NONE,1);
    };

    З.ы Отбирает предмет из диалога и кидается. Отбирает, чтобы не повторял диалог

    З.ы.ы можно сделать отбор оружия после поражения в бою, но тогда придется тонну написать, какой персонаж какое оружие при обыске/победе над гг, должен забрать
     
    Последнее редактирование: 10 янв 2018
    kor.angar поблагодарил.
  19. kor.angar

    kor.angar Участник форума

    Регистрация:
    28 ноя 2017
    Сообщения:
    89
    Благодарности:
    20
    Баллы:
    30
    Пол:
    Мужской
    2 lorddemonik1
    Ой спасибо! Стало гораздо понятнее. На Диего проверил работает :)

    Открыть спойлер
    instance DIA_DiegoNW_ItMw(C_Info)
    {
    npc = PC_Thief_NW;
    nr = 1 ; //важность,т.е в где будет стоять строка в начале в конце в середине.
    condition = DIA_DiegoNW_ItMw_Condition;
    information = DIA_DiegoNW_ItMw_Info;
    permanent = TRUE;
    important = TRUE; //если false то диалог начинаете вы,если TRUE нпс начинает разговор с вами!
    };

    func int DIA_DiegoNW_ItMw_Condition()
    {
    If(Npc_hasItems(hero,ItMw_diego) >= 1)
    {
    return TRUE;
    };

    };

    func void DIA_DiegoNW_ItMw_Info()
    {
    AI_Output(self,other,"DIA_Addon_Xardas_Hello_14_00"); // У тебя мое оружие, отдавай
    B_GiveInvItems(other,self,ItMw_diego,1); // Забирает палку во время разговора, сделано, чтобы после диалога, не напал повторно ввиду того, что оружие не экипированно...
    AI_StopProcessInfos(self);
    B_Attack(self,other,AR_NONE,1);
    };


    Но хочется всё таки что была проверка на то, что оружие у ГГ экипировано. иначе как то странно получается :)
     
    Последнее редактирование: 10 янв 2018
  20. lorddemonik1

    lorddemonik1 Участник форума

    Регистрация:
    15 мар 2012
    Сообщения:
    343
    Благодарности:
    124
    Баллы:
    210
    Пол:
    Мужской
    Да знаю я, я сундук, не могу вспомнить как проверка делается на экипировку, не объявляя кучу переменных, как с кольцом кольца
    Попробуй это:
    Открыть спойлер

    instance DIA_Xardas_Hello(C_Info)
    {
    npc = NONE_100_Xardas;
    nr = 1;
    condition = DIA_Xardas_Hello_Condition;
    information = DIA_Xardas_Hello_Info;
    permanent = FALSE;
    important = TRUE;
    };


    func int DIA_Xardas_Hello_Condition()

    {
    var C_Item EquipWeap;
    EquipWeap = Npc_GetEquippedMeleeWeapon(hero);
    if (Hlp_IsItem(EquipWeap,ItMw_1H_Mace_L_03) == TRUE)
    {
    return TRUE;
    };

    };

    func void DIA_Xardas_Hello_Info()
    {
    AI_Output(self,other,"DIA_Addon_Xardas_Hello_14_00"); // У тебя мое оружие, отдавай
    AI_StopProcessInfos(self);
    B_Attack(self,other,AR_NONE,1);
    };



    Upd: YAY Я проверил, все работает, Ксардас кинулся когда я одел дубину. Осталось только приделать забор оружия после поражения гг и все.(Хотя может тебе это не надо)
     
    Последнее редактирование: 10 янв 2018
Модераторы: Marvіn, MEG@VOLT

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