dosinabox / g2nr_unofficial_update

Исходники скриптов, релизы, хотфиксы и тестовые версии неофициального обновления для игры "Готика 2: Ночь Ворона".
https://worldofplayers.ru/threads/36817
The Unlicense
13 stars 1 forks source link

ITWR_DementorObsessionBook_MIS #339

Closed Kor-Angar closed 3 years ago

Kor-Angar commented 3 years ago

это что такое? просто книга вставляется в мир? :-)

// B_ENTER_NEWWORLD_Kapitel_5
//****************************************************
    var int EnterNW_Kapitel5;
    var int Pal_Schiffswache_Exchange_onetime;
    var int Rosi_FleeFromSekob_Kap5;
FUNC VOID B_ENTER_NEWWORLD_Kapitel_5 ()
{

        Wld_InsertNpc       (DMT_DementorAmbientSpeaker, "FP_STAND_DEMENTOR_KDF_21");
        Wld_InsertItem      (ITWR_DementorObsessionBook_MIS , "FP_ITEM_FARM1_01");      
        Wld_InsertNpc       (DMT_DementorAmbient, "FP_STAND_DEMENTOR_KDF_29");
Kor-Angar commented 3 years ago

пытаюсь найти в коде где книга вставляется фернандо :-) а найти не могу. не подскажешь где это происходит? :-)

dosinabox commented 3 years ago

пытаюсь найти в коде где книга вставляется фернандо :-) а найти не могу. не подскажешь где это происходит? :-)

В B_NpcObsessedByDMT

это что такое? просто книга вставляется в мир? :-)

Ну да. Это в каменном круге с ритуалом с Вино. Для наемника/ОнД там вставляется посох Малета.

Kor-Angar commented 3 years ago

а почему фернандо особенный? :-) на это есть какие то причины или про него просто забыли?

Kor-Angar commented 3 years ago

Ну да. Это в каменном круге с ритуалом с Вино. Для наемника/ОнД там вставляется посох Малета.

незнал.. а в чём смысл этого действия? :-)

dosinabox commented 3 years ago

а в чём смысл этого действия? :-)

Наверное, Вино мог убежать / упасть со скалы. Рискованно ему книгу оставлять)

на это есть какие то причины или про него просто забыли?

Наверное, просто забыли.

Kor-Angar commented 3 years ago

Наверное, Вино мог убежать / упасть со скалы. Рискованно ему книгу оставлять)

но это ведь уже 5 глава ;-)

dosinabox commented 3 years ago

Тогда не представляю) Стимулирование игрока к исследованию местности?

Kor-Angar commented 3 years ago

можно чуть чуть порядок навести и тогда возможно станет понятнее :-) задействоваться имеющиеся

var int vino_isalive_kap3;
var int malak_isalive_kap3;

и добавить такие же для одержимых.

добавить проверки в списки одержимых в use_dementorobsessionbook и письме пирокара

            if  (VINO_ISALIVE_KAP3 == TRUE)
            {
                Doc_PrintLine(ndocid,1,"           ВИНО");
            }
            else
            {
                Doc_PrintLine(ndocid,1,"");
            };

            if  (AGON_isalive_kap3 == TRUE)
            {
                Doc_PrintLine(ndocid,1,"           АГОН");
            }
            else    if  (FERNANDO_isalive_kap3 == TRUE)
            {
                Doc_PrintLine(ndocid,1,"           ФЕРНАНДО");
            }
            else
            {
                Doc_PrintLine(ndocid,1,"");
            };

            Doc_PrintLine(ndocid,1,"");

            if  (malak_isalive_kap3 == TRUE)
            {
                Doc_PrintLine(ndocid,1,"           МАЛАК");
            }
            else
            {
                Doc_PrintLine(ndocid,1,"");
            };

            Doc_PrintLine(ndocid,1,"");
            if (bromor_isalive_kap3 == TRUE)
            {
                Doc_PrintLine(ndocid,1,"БРОМОР");
            }
            else
            {
                Doc_PrintLine(ndocid,1,"");
            };
Kor-Angar commented 3 years ago
if  (AGON_isalive_kap3 == TRUE)
            {
                Doc_PrintLine(ndocid,1,"           АГОН");
            }

это я у себя решил развить историю Агона :-) историю успеха :-D https://www.youtube.com/watch?v=vPNnbo2sQko

Kor-Angar commented 3 years ago

Стимулирование игрока к исследованию местности?

может быть она должна была вставляться в случае смерти Вино в 3 главе?

Kor-Angar commented 3 years ago

добавить проверки в списки одержимых в use_dementorobsessionbook и письме пирокара

20210304194256_1

Kor-Angar commented 3 years ago

а в use_pyrokarsobsessionlist наверное можно и так :-)

        if  (NPCOBSESSEDBYDMT_FERNANDO == TRUE)
        {
            Doc_PrintLine(ndocid,1,"           (+) ФЕРНАНДО"); // Фернандо прошел "экзорци́зм"
        }
        else    if  (FERNANDO_isalive_kap3 == TRUE)
        {
            Doc_PrintLine(ndocid,1,"           ФЕРНАНДО");  // Фернандо жив в 3 главе
        }
        else
        {
            Doc_PrintLine(ndocid,1,""); // Фернандо при старте 3 главы был мёртв
        };
dosinabox commented 3 years ago

Плохо с этими проверками) Если в Минентале наступает глава 4, то невозможно проверить жив ли Рэндольф в Хоринисе. Если в Хоринисе наступает глава 5, то невозможно проверить жив ли Брутус в Минентале. И их имена не появятся в книге без посещения нужного мира.

Kor-Angar commented 3 years ago

так есть же b_npc_isalivecheck.d

dosinabox commented 3 years ago

Это для удаления персонажей в одной локации и создании их клонов в другой перед началом новой главы. Не очень подходит, потому что в случае с одержимыми они не будут удаляться и их можно будет убить до начала главы, а их имена всё равно появятся в книге.

dosinabox commented 3 years ago

Ну, и такой проверки перед пятой главой нет.

Kor-Angar commented 3 years ago

можно убить. это нужно сразу после церемонии телепортироваться не к проходу в миненталь, а бежать от таверны к Рандольфу с целью убить его :-) этот вариант лучше чем тот что сейчас, хуже чем есть он не делает. вероятность с Рандольфом и Брутосом низкая.

Конечно можно прям заморочиться и и в конце главы сделать проверку в b_npc_isalivecheck убрать их инстанцию из мира, а при заходе в мир делать проверку и вставлять инстанцию заново в таком случае это будет не 99%, а все 100% :-)

Kor-Angar commented 3 years ago

хотя и это тоже избыточно. вот в минентале наступила 4 глава. Рэндольфа в письме нет. вот герой в 4 главе зашёл в Хориносе, проверили ли жив Рендольф, если жив создали ему книжку, сменил расписание и "добавили" в список.

if(ENTERNW_KAPITEL4 == FALSE)
    {

    ...
        if(hero.guild == GIL_KDF)
        {

        ...

            if(Npc_IsDead(randolph) == FALSE)
            {
                CreateInvItems(randolph,itwr_dementorobsessionbook_mis,1);
                b_startotherroutine(randolph,"Obsessed");
                Randolph_isAlive_Kap4 = TRUE;
            };

лирическое отступление: я вообще в рамках ЛОРу игры понимал это так: что когда ГГ приносит Пирокару Альманах, Пирокар должен прочитать его узнать новые имена и обновить список. или несознательный герой если открыл Альманах и увидел в нём новые имена должен обновить список.

Kor-Angar commented 3 years ago

Пираньи забыли Рендольфу и расписание новое сделать на период одержимости? в ENTERNW_KAPITEL4 есть, а в файле инстанции rtn_Obsessed_942 нет :-(

судя по репликам в 4 главе при игре за мага он должен был уйти в очередной запой :-)

func void DIA_Randolph_Heilung_Info ()
{
    AI_Output           (other,self,"DIA_Randolph_Heilung_15_00");  //Спиртное ударило тебе в голову, ха?
    AI_Output           (self,other,"DIA_Randolph_Heilung_06_01");  //Я больше капли в рот не возьму. Только ни в этой жизни. Ты можешь мне поверить, парень.
    //AI_Output         (other, self, "DIA_Randolph_Heilung_15_00"); //Das Saufen ist dir zu Kopf gestiegen, was?
    //AI_Output         (self, other, "DIA_Randolph_Heilung_06_01"); //Ich trink nie wieder einen Tropfen. Nicht in diesem Leben. Da kannst du dich drauf verlassen, Mann.
    B_NpcClearObsessionByDMT (self);
};
// Kor.Angar: Рендольф в 4 главе ушёл в очередной запой и через этот недуг Ищущие его обратили
FUNC VOID Rtn_Obsessed_942 ()
{   
    TA_Stand_Drinking   (08,00,22,00,"NW_FARM2_FIELD_03_B");    
    TA_Stand_Drinking   (22,00,08,00,"NW_FARM2_FIELD_03_B");
};

если делать правки, то на забыть сделать выход из запоя :-)

func void dia_randolph_perm_info()
{
    if(hero.guild == GIL_KDF)
    {
        b_startotherroutine(randolph,"Start");
        b_npcobsessedbydmt(self);
    }

Я у себя попробовал, вроде получилось https://www.youtube.com/watch?v=zVW1CcAUBnA но что бы в моей голове это поместилось, пришлось вынести в одну инстанцию и "приход" и "отходняк" :-)

///////////////////////////////////////////////////////////////////////
//  Info Heilung
///////////////////////////////////////////////////////////////////////
instance DIA_Randolph_Heilung       (C_INFO)
{
    npc      =  BAU_942_Randolph;
    nr       =  55;
    condition    =  DIA_Randolph_Heilung_Condition;
    //information    =  DIA_Randolph_Heilung_Info;
    permanent    =  TRUE;
    description  =  "Спиртное ударило тебе в голову, ха?";
    //description=  "Das Saufen ist dir zu Kopf gestiegen, was?";
};

func int DIA_Randolph_Heilung_Condition ()
{
    if  (KAPITEL >= 4) 
    &&  (NPCOBSESSEDBYDMT_RANDOLPH == FALSE)
    &&  (hero.guild == GIL_KDF)
    &&  Npc_IsInState(self,zs_talk)
    {
        DIA_Randolph_Heilung.important = TRUE;
        DIA_Randolph_Heilung.information = DIA_Randolph_Obsessed_Info;
        return TRUE;
    };

    if (NpcObsessedByDMT_Randolph == TRUE) // у Рандольфа был приход :-)
    && (NpcObsessedByDMT == FALSE)
    //&& (hero.guild == GIL_KDF)
    {
        DIA_Randolph_Heilung.important = false;
        DIA_Randolph_Heilung.information = DIA_Randolph_Heilung_Info;
        return TRUE;
    };
};
func void DIA_Randolph_Obsessed_Info ()
{
    b_startotherroutine(randolph,"Start");
    b_npcobsessedbydmt(self);
};

func void DIA_Randolph_Heilung_Info ()
{
    AI_Output           (other,self,"DIA_Randolph_Heilung_15_00");  //Спиртное ударило тебе в голову, ха?
    AI_Output           (self,other,"DIA_Randolph_Heilung_06_01");  //Я больше капли в рот не возьму. Только ни в этой жизни. Ты можешь мне поверить, парень.
    //AI_Output         (other, self, "DIA_Randolph_Heilung_15_00"); //Das Saufen ist dir zu Kopf gestiegen, was?
    //AI_Output         (self, other, "DIA_Randolph_Heilung_06_01"); //Ich trink nie wieder einen Tropfen. Nicht in diesem Leben. Da kannst du dich drauf verlassen, Mann.
    B_NpcClearObsessionByDMT (self);
};
Kor-Angar commented 3 years ago

кстати одержимые почему то в классике не убивают героя.. в НВ так же?

Kor-Angar commented 3 years ago

и выход из одержимости было бы здорово сделать через AI_StartState https://github.com/Kor-Angar/SolGothic_2_Classic/commit/3bb226beff1c7691563e495ca5a77e59eca745f9

    {
        b_npcclearobsessionbydmt(medium);
    };
    AI_StartState   (self, dia_vino_kap3_exit_info,1,"");  // общий выход для всех одержимых
};
dosinabox commented 3 years ago

кстати одержимые почему то в классике не убивают героя.. в НВ так же?

Это как? Магия не убивает?

Kor-Angar commented 3 years ago

ищушие убивают. я про одержимых :-)

Kor-Angar commented 3 years ago

одержимый нападет на егроя с целью убить, избивает его, но не добивает. шманает труп, потом герой встаёт. потом не знаю что происходит :-)

Kor-Angar commented 3 years ago

а вот это про что? :-) DIA_Bromor_Obsession_GotMoney

Kor-Angar commented 3 years ago

попробую списки одержимых потестить. посмотри может что подскажешь :-) https://github.com/Kor-Angar/SolGothic_2_Classic/commit/6c25fa37d5d87e374f97de905ddfc85d5c329d61#diff-df37a5d705be74f4a59af0728b7ae98e320953ccd0c51444277d2964e0df9ad2

dosinabox commented 3 years ago

404, открой доступ

Kor-Angar commented 3 years ago

вроде открыл

dosinabox commented 3 years ago

не вижу, где эти переменные у тебя назначаются в TRUE:

var int Agon_isAlive_Kap3;      // одержимые    Chapter 3
var int Fernando_isAlive_Kap3;  // одержимые    Chapter 3
var int Bromor_isAlive_Kap3;    // одержимые    Chapter 3
var int Engrom_isAlive_Kap4;    // одержимые    Chapter 4
var int Randolph_isAlive_Kap4;  // одержимые    Chapter 4
var int Sekob_isAlive_Kap5;     // одержимые    Chapter 5
var int Brutus_isAlive_Kap5;    // одержимые    Chapter 5
Kor-Angar commented 3 years ago

в _Enter_NewWorld.d https://github.com/Kor-Angar/SolGothic_2_Classic/blob/main/PrjGOTHIC/Story/B_Story/B_Enter_NewWorld.d#L655

https://github.com/Kor-Angar/SolGothic_2_Classic/blob/130b24e6730e33b5ba5fbeb017c405094f2ba50d/PrjGOTHIC/Story/B_Story/B_Enter_NewWorld.d#L119

https://github.com/Kor-Angar/SolGothic_2_Classic/blob/130b24e6730e33b5ba5fbeb017c405094f2ba50d/PrjGOTHIC/Story/B_Story/B_Enter_NewWorld.d#L126

https://github.com/Kor-Angar/SolGothic_2_Classic/blob/130b24e6730e33b5ba5fbeb017c405094f2ba50d/PrjGOTHIC/Story/B_Story/B_Enter_NewWorld.d#L260

https://github.com/Kor-Angar/SolGothic_2_Classic/blob/130b24e6730e33b5ba5fbeb017c405094f2ba50d/PrjGOTHIC/Story/B_Story/B_Enter_NewWorld.d#L537

https://github.com/Kor-Angar/SolGothic_2_Classic/blob/130b24e6730e33b5ba5fbeb017c405094f2ba50d/PrjGOTHIC/Story/B_Story/B_Enter_NewWorld.d#L655

Kor-Angar commented 3 years ago

Engrom и Brutus в B_Enter_OldWorld https://github.com/Kor-Angar/SolGothic_2_Classic/commit/6e37f9b55fe335857ce198d31fbf0080a33d810f

dosinabox commented 3 years ago

а вот это про что? :-) DIA_Bromor_Obsession_GotMoney

не используется и не назначается ни в классике, ни в аддоне

Kor-Angar commented 3 years ago

похоже на единовременную финансовую выплату от одержимого бромора. может в ранних версиях планировалась что-то от одержимости за что Бромор давал финансовое вознаграждение :-)

dosinabox commented 3 years ago
if(AlmanachCounter <= 5)
{
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_04");  //Это хорошо. Боюсь, впрочем, что это далеко не все. Продолжай поиски.
}
else if(AlmanachCounter <= 8)
{
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_05");  //Многие из них уже найдены. Но я не думаю, что мы изъяли их все.
}
else
{
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_06");  //Ты уже принес целую кучу этих вражеских книг.
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_07");  //Я буду удивлен, если тебе удастся найти еще.
};
dosinabox commented 3 years ago

Получается, что чтобы услышать последние две реплики Пирокара, нужно принести ему книгу из круга камней из пятой главы? Так-то одержимых и книг у них 8 (?).

Kor-Angar commented 3 years ago

выходит что так. всего же книг 10?

Kor-Angar commented 3 years ago

а первую книгу же Пирокару тут отдаём? DIA_Pyrokar_BUCHDERBESSENEN она же не считается в AlmanachCounter ?

dosinabox commented 3 years ago

а первую книгу же Пирокару тут отдаём? DIA_Pyrokar_BUCHDERBESSENEN она же не считается в AlmanachCounter ?

Отдаем, взамен получаем магическое письмо. Считается.

dosinabox commented 3 years ago

всего же книг 10?

1) у Энгрома 2) у Брутуса 3) у Малака 4) у Вино 5) у Бромора 6) у Фернандо 7) у Рэндольфа 8) у Секоба 9) в круге камней 10) у Марио на Ирдорате

Kor-Angar commented 3 years ago

Отдаем, взамен получаем магическое письмо. Считается.

а где она считается? https://github.com/Kor-Angar/G2_NotR_MDK/blob/fb531d932179a6f3476ca44f52fc52c38cbffe38/PrjGOTHIC/Story/Dialoge/DIA_KDF_500_Pyrokar.d#L1679

Kor-Angar commented 3 years ago

а вот вижу добавили

    if(hero.guild == GIL_KDF)
    {
        AlmanachCounter += 1;
        AI_Output(self,other,"DIA_Pyrokar_BUCHDERBESSENEN_11_04");  //Я полагаю, что она не единственная. Иди и найди еще эти книги проклятия.
        AI_Output(self,other,"DIA_Pyrokar_BUCHDERBESSENEN_11_05");  //Я подозреваю, что это инструмент Ищущих.
        AI_Output(self,other,"DIA_Pyrokar_BUCHDERBESSENEN_11_06");  //Они используют его, чтобы контролировать потерянные души своих жертв.
        AI_Output(self,other,"DIA_Pyrokar_BUCHDERBESSENEN_11_07");  //Они, очевидно, записывают имена тех, кем они планируют овладеть, в эти книги.
        AI_Output(self,other,"DIA_Pyrokar_BUCHDERBESSENEN_11_08");  //Послушай. Я дам тебе это магическое письмо. Оно покажет тебе имена, записанные в этих книгах.
        CreateInvItems(self,ItWr_PyrokarsObsessionList,1);
        B_GiveInvItems(self,other,ItWr_PyrokarsObsessionList,1);
        AI_Output(self,other,"DIA_Pyrokar_BUCHDERBESSENEN_11_09");  //Найди этих жертв и принеси мне их книги. Я избавлюсь от них.
        if(!Npc_IsDead(Karras))
        {
            AI_Output(self,other,"DIA_Pyrokar_BUCHDERBESSENEN_11_10");  //Но сначала ты должен показать хотя бы одну из них Каррасу. Может, это поможет ему в его исследованиях.
        };
        AI_Output(self,other,"DIA_Pyrokar_BUCHDERBESSENEN_11_11");  //И не сделай ошибку, попытавшись уничтожить их самостоятельно. Ты еще не готов выдержать их силу.
        B_LogEntry(TOPIC_DEMENTOREN,"Пирокар хочет, чтобы альманах Одержимых не принес вреда. Он дал мне список всех, кого Ищущие планируют сделать одержимыми. В этом списке Пирокара позднее могут появиться новые имена.");
    };
Kor-Angar commented 3 years ago
B_LogEntry (TOPIC_DEMENTOREN,"Пирокар хочет, чтобы альманах Одержимых не принес вреда. Он дал мне список всех, кого Ищущие планируют сделать одержимыми. В этом списке Пирокара позднее могут появиться новые имена.");
B_LogEntry (TOPIC_DEMENTOREN,"Pyrokar will die Almanachs der Besessenen unschädlich machen. Dazu gab er mir eine Liste derer, die die Suchenden zu übernehmen planen. Auf Pyrokars Liste sollen später vielleicht noch mehr Namen zu lesen sein."); 
Kor-Angar commented 3 years ago

акции вставляется так же в НПС. если НПС мертв акции не вставляются. при этом квест сдаётся если даже Кантар был убит. так как кол-во акций динамическое.

тут так же надо сделать. уйти от статической проверки и прийти к динамической.

if(AlmanachCounter <= 5)
{
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_04");  //Это хорошо. Боюсь, впрочем, что это далеко не все. Продолжай поиски.
}
else if(AlmanachCounter <= 8)
{
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_05");  //Многие из них уже найдены. Но я не думаю, что мы изъяли их все.
}
else
{
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_06");  //Ты уже принес целую кучу этих вражеских книг.
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_07");  //Я буду удивлен, если тебе удастся найти еще.
};

как то так

// n = кол-во Альманахов вставленных в мир.
if  (Kapitel == 5)
&&  (AlmanachCounter == n)
{
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_06");  //Ты уже принес целую кучу этих вражеских книг.
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_07");  //Я буду удивлен, если тебе удастся найти еще.
}
else if (Kapitel == 5)
&&  (AlmanachCounter == n-1)
{
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_05");  //Многие из них уже найдены. Но я не думаю, что мы изъяли их все.
}
else
{
    AI_Output(self,other,"DIA_Pyrokar_AlmanachBringen_11_04");  //Это хорошо. Боюсь, впрочем, что это далеко не все. Продолжай поиски.
};

где n это кол-во Альманахов вставленных в мир.

Kor-Angar commented 3 years ago

после этой фразе "Многие из них уже найдены. Но я не думаю, что мы изъяли их все." можно сделать запись в дневник , что Пирокар считает что остались ещё Альманахи, что бы игрок который прокликивает диалоги увидел в дневники что есть ещё книжки. в таком случае наяривание в "магическое письмо пирокара" резко повысится :-)

было бы честнее последнюю книгу вставлять в Ищущего. так хотя бы шанс был бы её найти. вот кстати в пещере там где командир орков в 5 главе есть группа ищущих. суровые ребята и прям возле города ;-)

Kor-Angar commented 3 years ago

попробую потестить. посмотри пожалуйста корректно ли я счётчик прикрутил AlmanachCounterCreateInv https://github.com/Kor-Angar/SolGothic_2_Classic/commit/e55ed5edd01a99625aea1c9aa885932f3531d4d0

dosinabox commented 3 years ago

а вот вижу добавили

А если не добавлять, то последние две реплики никак не услышать и получается, что в оригиналах классики и аддона они не используются?

Kor-Angar commented 3 years ago

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

Kor-Angar commented 3 years ago

было бы честнее последнюю книгу вставлять в Ищущего. так хотя бы шанс был бы её найти. вот кстати в пещере там где командир орков в 5 главе есть группа ищущих. суровые ребята и прям возле города ;-)

попробую вставать хотя бы в труп. альманах будет там же, но труп станет заметнее и это будет более соответствовать ЛОРу игры https://github.com/Kor-Angar/SolGothic_2_Classic/commit/b5cddcbac1696613dcd98b6127f5886e053bb597

dosinabox commented 3 years ago

А почему существующий нпц, а не новый? Если его можно убить до пятой главы, то появление альманаха уже не будет гарантировнным - в отличие от оригинала. Можно Трокара вставлять) А потом Бартоку рассказать про него. Или просто существующего и неиспользуемого ополченца (mil_302_torwache или mil_303_torwache).

Kor-Angar commented 3 years ago

можно. но я сделал для пробы пера так сказать. а в целом хочется сначала перебрать имеющихся живых типа:

Мент взяточник с верхнего квартала, если мертв Мика, если мертв Охранник (MIL_325_MILIZ). если мёртв то бессмертный ополченца с ворот..

Можно Трокара вставлять) А потом Бартоку рассказать про него.

это недоделанный диалог про пропавшего охотника?