dosinabox / g2nr_unofficial_update

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

Отшельник и язык зодчих #484

Closed dosinabox closed 1 year ago

dosinabox commented 1 year ago

Отшельник в Яркендаре обучает языку зодчих только один раз (на один уровень), а его реплика DIA_Addon_Eremit_Add_04_29 недоступна:

var int Eremit_Teach_Once;

instance DIA_Addon_Eremit_Teach(C_Info)
{
    npc = NONE_ADDON_115_Eremit;
    nr = 3;
    condition = DIA_Addon_Eremit_Teach_Condition;
    information = DIA_Addon_Eremit_Teach_Info;
    permanent = TRUE;
    description = "Насчет каменных табличек...";
};

func int DIA_Addon_Eremit_Teach_Condition()
{
    if(Npc_KnowsInfo(other,DIA_Addon_Eremit_SeekTafeln) && (Eremit_Teach_Once == FALSE) && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] == FALSE))
    {
        return TRUE;
    };
};

func void DIA_Addon_Eremit_Teach_Info()
{
    AI_Output(other,self,"DIA_Addon_Eremit_Add_15_03"); //Насчет каменных табличек...
    AI_Output(self,other,"DIA_Addon_Eremit_Add_04_25"); //Ты хочешь, чтобы я научил тебя их читать?
    if(MIS_Eremit_Klamotten != LOG_SUCCESS)
    {
        AI_Output(self,other,"DIA_Addon_Eremit_Add_04_26"); //(быстро) Но свои я тебе не отдам! Сам ищи себе таблички!
    };
    Info_ClearChoices(DIA_Addon_Eremit_Teach);
    Info_AddChoice(DIA_Addon_Eremit_Teach,Dialog_Back,DIA_Addon_Eremit_Teach_No);
    if(PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == FALSE)
    {
        Info_AddChoice(DIA_Addon_Eremit_Teach,B_BuildLearnString(NAME_ADDON_LEARNLANGUAGE_1,B_GetLearnCostTalent(other,NPC_TALENT_FOREIGNLANGUAGE,LANGUAGE_1)),DIA_Addon_Eremit_Teach_Yes);
    }
    else if((PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == FALSE) && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == TRUE))
    {
        Info_AddChoice(DIA_Addon_Eremit_Teach,B_BuildLearnString(NAME_ADDON_LEARNLANGUAGE_2,B_GetLearnCostTalent(other,NPC_TALENT_FOREIGNLANGUAGE,LANGUAGE_2)),DIA_Addon_Eremit_Teach_Yes);
    }
    else if((PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] == FALSE) && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == TRUE) && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == TRUE))
    {
        Info_AddChoice(DIA_Addon_Eremit_Teach,B_BuildLearnString(NAME_ADDON_LEARNLANGUAGE_3,B_GetLearnCostTalent(other,NPC_TALENT_FOREIGNLANGUAGE,LANGUAGE_3)),DIA_Addon_Eremit_Teach_Yes);
    };
};

func void B_Addon_Eremit_TeachLanguage()
{
    AI_Output(self,other,"DIA_Addon_Eremit_Add_04_27"); //Вообще это все довольно просто. 'G' читается как 'O', 'T' - как 'Х', а 'I' - как 'Ц'.
    AI_Output(self,other,"DIA_Addon_Eremit_Add_04_28"); //Если ты это понял, то и все остальное поймешь довольно быстро...
    Eremit_Teach_Once = TRUE;
};

func void DIA_Addon_Eremit_Teach_No()
{
    Info_ClearChoices(DIA_Addon_Eremit_Teach);
};

func void DIA_Addon_Eremit_Teach_Yes()
{
    if(PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] == TRUE)
    {
        AI_Output(self,other,"DIA_Addon_Eremit_Add_04_29"); //Не думаю, что могу еще чему-то тебя научить.
        Eremit_Teach_Once = TRUE;
    }
    else if(PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == TRUE)
    {
        if(B_TeachPlayerTalentForeignLanguage(self,other,LANGUAGE_3))
        {
            B_Addon_Eremit_TeachLanguage();
        };
    }
    else if(PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == TRUE)
    {
        if(B_TeachPlayerTalentForeignLanguage(self,other,LANGUAGE_2))
        {
            B_Addon_Eremit_TeachLanguage();
        };
    }
    else if(B_TeachPlayerTalentForeignLanguage(self,other,LANGUAGE_1))
    {
        B_Addon_Eremit_TeachLanguage();
    };
};

Нужно ли что-то с этим делать?

Kor-Angar commented 1 year ago

То что он учит один раз это норм.  Раньше был баг при котором он учил только какому то определённому языку. Данный баг был исправлен. Соответственно сейчас нужно сравнить текущий  код с mdk что бы понять какие были правки. Может быть в mdk есть какие примечание которые прольют свет. Неуверн что отшельник может учить третьему уровню по Лору. Это из области ощущений. Запости код из mdk плиз. Та леприка должна быть доступна если герой уже все знает и просит отшельника обучить его.  То есть в кондишион инстанции проверки на уровень языка быть не должно вообще.

dosinabox commented 1 year ago

Раньше был баг при котором он учил только какому то определённому языку. Данный баг был исправлен.

Баг именно в этом - отшельник обучает только одному языку. Если у ГГ изучен первый уровень, то обучает только второму, и так далее. В MDK код такой же:

var int Eremit_Teach_Once;
// --------------------------------------------------------
instance DIA_Addon_Eremit_Teach (C_INFO)
{
    npc         = NONE_ADDON_115_Eremit;
    nr          = 3;
    condition   = DIA_Addon_Eremit_Teach_Condition;
    information = DIA_Addon_Eremit_Teach_Info;
    permanent   = TRUE;
    description = "Wegen der Steintafeln...";
};
func int DIA_Addon_Eremit_Teach_Condition ()
{
    if (Npc_KnowsInfo (other, DIA_Addon_Eremit_SeekTafeln))
    && (Eremit_Teach_Once == FALSE)
    && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] == FALSE)
    {
        return TRUE;
    };
};
func void DIA_Addon_Eremit_Teach_Info ()
{
    AI_Output (other, self, "DIA_Addon_Eremit_Add_15_03"); //Wegen der Steintafeln...
    AI_Output (self, other, "DIA_Addon_Eremit_Add_04_25"); //Soll ich dir beibringen, sie zu lesen?
    if (MIS_Eremit_Klamotten != LOG_SUCCESS)
    {
        AI_Output (self, other, "DIA_Addon_Eremit_Add_04_26"); //(hastig) Aber meine bekommst du nicht! Du mußt dir deine eigenen suchen!
    };

    Info_ClearChoices (DIA_Addon_Eremit_Teach);
    Info_AddChoice (DIA_Addon_Eremit_Teach, DIALOG_BACK, DIA_Addon_Eremit_Teach_No);

    if (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == FALSE)
    {
        Info_AddChoice (DIA_Addon_Eremit_Teach,B_BuildLearnString (NAME_ADDON_LEARNLANGUAGE_1 , B_GetLearnCostTalent (other, NPC_TALENT_FOREIGNLANGUAGE, LANGUAGE_1)),DIA_Addon_Eremit_Teach_Yes);
    }   
    else if (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == FALSE)
    && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == TRUE)
    {
        Info_AddChoice (DIA_Addon_Eremit_Teach,B_BuildLearnString (NAME_ADDON_LEARNLANGUAGE_2 , B_GetLearnCostTalent (other, NPC_TALENT_FOREIGNLANGUAGE, LANGUAGE_2)),DIA_Addon_Eremit_Teach_Yes);
    }   
    else if (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] == FALSE)
    && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == TRUE)
    && (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == TRUE)
    {
        Info_AddChoice (DIA_Addon_Eremit_Teach,B_BuildLearnString (NAME_ADDON_LEARNLANGUAGE_3 , B_GetLearnCostTalent (other, NPC_TALENT_FOREIGNLANGUAGE, LANGUAGE_3)),DIA_Addon_Eremit_Teach_Yes);
    };
};

// ---------------------------------------------------------------
    func void B_Addon_Eremit_TeachLanguage()
    {   
        AI_Output (self, other, "DIA_Addon_Eremit_Add_04_27"); //Also, es es ganz einfach. Ein G ist ein O, ein T ist ein H ind ein I ist ein C. 
        AI_Output (self, other, "DIA_Addon_Eremit_Add_04_28"); //Wenn du das mal kapiert hast, ist der Rest eigentlich logisch...

        /*

        if (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == TRUE)
        {
            PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] = TRUE;
        }
        else if (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == TRUE)
        {
            PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] = TRUE;
        }
        else
        {
            PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] = TRUE;
        };

        */  

        Eremit_Teach_Once = TRUE;
    };
// ---------------------------------------------------------------
func void DIA_Addon_Eremit_Teach_No()
{
    Info_ClearChoices (DIA_Addon_Eremit_Teach);
};

func void DIA_Addon_Eremit_Teach_Yes()
{
    if (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] == TRUE)
    {
        AI_Output (self, other, "DIA_Addon_Eremit_Add_04_29"); //Ich glaube nicht, daß ich dir noch was darüber beibringen kann...
        Eremit_Teach_Once = TRUE;
    }
    else if (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == TRUE)
    {
        if (B_TeachPlayerTalentForeignLanguage (self, other, LANGUAGE_3))
        {
            B_Addon_Eremit_TeachLanguage();
        };
    }
    else if (PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == TRUE)
    {
        if (B_TeachPlayerTalentForeignLanguage (self, other, LANGUAGE_2))
        {
            B_Addon_Eremit_TeachLanguage();
        };
    }
    else //Keine Language
    {
        if (B_TeachPlayerTalentForeignLanguage (self, other, LANGUAGE_1))
        {
            B_Addon_Eremit_TeachLanguage();
        };
    };
};
dosinabox commented 1 year ago

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

dosinabox commented 1 year ago

Мой причесанный код. Как и раньше, отшельник обучает только один раз, но сразу сообщает что больше учить нечему, и сразу отказывается от обучения, если ГГ уже знает все три уровня:

var int Eremit_Teach_Once;

func void B_Eremit_NoMoreTeach()
{
    AI_Output(self,other,"DIA_Addon_Eremit_Add_04_29"); //Не думаю, что могу еще чему-то тебя научить.
    Eremit_Teach_Once = TRUE;
};

func void B_Eremit_TeachLanguage()
{
    AI_Output(self,other,"DIA_Addon_Eremit_Add_04_27"); //Вообще это все довольно просто. 'G' читается как 'O', 'T' - как 'Х', а 'I' - как 'Ц'.
    AI_Output(self,other,"DIA_Addon_Eremit_Add_04_28"); //Если ты это понял, то и все остальное поймешь довольно быстро...
    B_Eremit_NoMoreTeach();
    Info_ClearChoices(DIA_Addon_Eremit_Teach);
};

instance DIA_Addon_Eremit_Teach(C_Info)
{
    npc = NONE_ADDON_115_Eremit;
    nr = 3;
    condition = DIA_Addon_Eremit_Teach_Condition;
    information = DIA_Addon_Eremit_Teach_Info;
    permanent = TRUE;
    description = "Насчет каменных табличек...";
};

func int DIA_Addon_Eremit_Teach_Condition()
{
    if(Npc_KnowsInfo(other,DIA_Addon_Eremit_SeekTafeln) && (Eremit_Teach_Once == FALSE))
    {
        return TRUE;
    };
};

func void DIA_Addon_Eremit_Teach_Info()
{
    AI_Output(other,self,"DIA_Addon_Eremit_Add_15_03"); //Насчет каменных табличек...
    AI_Output(self,other,"DIA_Addon_Eremit_Add_04_25"); //Ты хочешь, чтобы я научил тебя их читать?
    if(PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] == TRUE)
    {
        B_Eremit_NoMoreTeach();
    }
    else
    {
        if(MIS_Eremit_Klamotten != LOG_SUCCESS)
        {
            AI_Output(self,other,"DIA_Addon_Eremit_Add_04_26"); //(быстро) Но свои я тебе не отдам! Сам ищи себе таблички!
        };
        Info_ClearChoices(DIA_Addon_Eremit_Teach);
        Info_AddChoice(DIA_Addon_Eremit_Teach,Dialog_Back,DIA_Eremit_Teach_BACK);
        if(PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] == FALSE)
        {
            Info_AddChoice(DIA_Addon_Eremit_Teach,B_BuildLearnString(NAME_ADDON_LEARNLANGUAGE_1,B_GetLearnCostTalent(other,NPC_TALENT_FOREIGNLANGUAGE,LANGUAGE_1)),DIA_Eremit_Teach_LANGUAGE_1);
        }
        else if(PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] == FALSE)
        {
            Info_AddChoice(DIA_Addon_Eremit_Teach,B_BuildLearnString(NAME_ADDON_LEARNLANGUAGE_2,B_GetLearnCostTalent(other,NPC_TALENT_FOREIGNLANGUAGE,LANGUAGE_2)),DIA_Eremit_Teach_LANGUAGE_2);
        }
        else
        {
            Info_AddChoice(DIA_Addon_Eremit_Teach,B_BuildLearnString(NAME_ADDON_LEARNLANGUAGE_3,B_GetLearnCostTalent(other,NPC_TALENT_FOREIGNLANGUAGE,LANGUAGE_3)),DIA_Eremit_Teach_LANGUAGE_3);
        };
    };
};

func void DIA_Eremit_Teach_BACK()
{
    Info_ClearChoices(DIA_Addon_Eremit_Teach);
};

func void DIA_Eremit_Teach_LANGUAGE_1()
{
    if(B_TeachPlayerTalentForeignLanguage(self,other,LANGUAGE_1))
    {
        B_Eremit_TeachLanguage();
    };
};

func void DIA_Eremit_Teach_LANGUAGE_2()
{
    if(B_TeachPlayerTalentForeignLanguage(self,other,LANGUAGE_2))
    {
        B_Eremit_TeachLanguage();
    };
};

func void DIA_Eremit_Teach_LANGUAGE_3()
{
    if(B_TeachPlayerTalentForeignLanguage(self,other,LANGUAGE_3))
    {
        B_Eremit_TeachLanguage();
    };
};
dosinabox commented 1 year ago

А на обучение всем трем уровням у него нет озвучки)

Kor-Angar commented 1 year ago

Ну да. Он уже учит один раз. В конце недели расшарю гугл таблицу. Пока связи нет :-(

dosinabox commented 1 year ago

Можно ещё добавлять запись в дневник:

if(Eremit_TeachPlayer == FALSE)
{
    Log_CreateTopic(TOPIC_OutTeacher,LOG_NOTE);
    B_LogEntry(TOPIC_OutTeacher,"Отшельник в Яркендаре может помочь мне с изучением языка зодчих.");
    Eremit_TeachPlayer = TRUE;
};
Kor-Angar commented 1 year ago

там надо смотреть при каких условиях добавлять. то есть это наверное надо ставить на "DIA_Eremit_Teach_BACK"

Kor-Angar commented 1 year ago

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