Closed dosinabox closed 1 year ago
То что он учит один раз это норм. Раньше был баг при котором он учил только какому то определённому языку. Данный баг был исправлен. Соответственно сейчас нужно сравнить текущий код с mdk что бы понять какие были правки. Может быть в mdk есть какие примечание которые прольют свет. Неуверн что отшельник может учить третьему уровню по Лору. Это из области ощущений. Запости код из mdk плиз. Та леприка должна быть доступна если герой уже все знает и просит отшельника обучить его. То есть в кондишион инстанции проверки на уровень языка быть не должно вообще.
Раньше был баг при котором он учил только какому то определённому языку. Данный баг был исправлен.
Баг именно в этом - отшельник обучает только одному языку. Если у ГГ изучен первый уровень, то обучает только второму, и так далее. В 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();
};
};
};
Добавь реплику DIA_Addon_Eremit_Add_04_29 в список неиспользуемых в гугл-таблице скрипт-патча, пожалуйста. Или открой доступ, я могу только комментировать.
Мой причесанный код. Как и раньше, отшельник обучает только один раз, но сразу сообщает что больше учить нечему, и сразу отказывается от обучения, если ГГ уже знает все три уровня:
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();
};
};
А на обучение всем трем уровням у него нет озвучки)
Ну да. Он уже учит один раз. В конце недели расшарю гугл таблицу. Пока связи нет :-(
Можно ещё добавлять запись в дневник:
if(Eremit_TeachPlayer == FALSE)
{
Log_CreateTopic(TOPIC_OutTeacher,LOG_NOTE);
B_LogEntry(TOPIC_OutTeacher,"Отшельник в Яркендаре может помочь мне с изучением языка зодчих.");
Eremit_TeachPlayer = TRUE;
};
там надо смотреть при каких условиях добавлять. то есть это наверное надо ставить на "DIA_Eremit_Teach_BACK"
так как он учить всего один раз. что бы игрок не запутался и не думал что у него баг.
Отшельник в Яркендаре обучает языку зодчих только один раз (на один уровень), а его реплика DIA_Addon_Eremit_Add_04_29 недоступна:
Нужно ли что-то с этим делать?