W Story_Globals.d dodaj sobie nowe zmienne np:
Spoiler
var int Learned_STRENGTH;
var int Learned_DEXTERITY;
var int Learned_MANA;
var int Learned_1H;
var int Learned_2H;
var int Learned_BOW;
var int Learned_CROSSBOW;
Później w funkcji B_GetLearnCostAttribute zamień umiejętności na te nowe zmienne:
Spoiler
Przykładowo siła:
if(attribut == ATR_STRENGTH)
{
if(Learned_STRENGTH >= 150)
{
kosten = 5;
}
else if(Learned_STRENGTH >= 100)
{
kosten = 4;
}
else if(Learned_STRENGTH >= 50)
{
kosten = 3;
}
else if(Learned_STRENGTH >= 1)
{
kosten = 2;
}
else
{
kosten = 1;
};
};
Później w funkcji B_TeachAttributePoints:
Zamieniasz:
Spoiler
if(attrib == ATR_STRENGTH)
{
realAttribute = oth.attribute[ATR_STRENGTH];
}
na:
Spoiler
if(attrib == ATR_STRENGTH)
{
realAttribute = Learned_Strength;
}
I na końcu funkcji przed return true; dodajesz:
Spoiler
if (attrib == ATR_STRENGTH)
{
Learned_STRENGTH = Learned_STRENGTH + points;
};
I analogicznie dla zręczności i many.
Jeśli chodzi o walkę bronią to podobnie jak w przypadku atrybutów tylko w funkcji B_GetLearnCostTalent oraz B_TeachFightTalentPercent.
Spoiler
Przykładowo w funkcji B_TeachFightTalentPercent powinno to wyglądać tak, na przykładzie 1h:
if(talent == NPC_TALENT_1H)
{
realHitChance = Learned_1H;
}
i trochę niżej:
if(talent == NPC_TALENT_1H)
{
B_RaiseFightTalent(oth,NPC_TALENT_1H,percent);
Learned_1H = Learned_1H + percent;
if(oth.aivar[REAL_TALENT_1H] >= (oth.aivar[REAL_TALENT_2H] + 30))
{
B_RaiseFightTalent(oth,NPC_TALENT_2H,percent);
Learned_2H = Learned_2H + percent;
PrintScreen(PRINT_Learn1H_and_2H,-1,-1,FONT_Screen,2);
}
else
{
PrintScreen(PRINT_Learn1H,-1,-1,FONT_Screen,2);
};
return TRUE;
};
Działa to jak w g2, czyli dostajesz punkty władania 2H po nauczeniu władania 1H od pewnego poziomu, jeśli tego nie chcesz możesz to zmienić.
Później w dialogach możesz sobie też zmienić, aby nauczyciele nie brali pod uwagę całej ogólnej umiejętności w limicie nauczania, tylko samą wyuczoną:
Spoiler
Na przykładzie łuku u Niclasa:
func void DIA_Niclas_Teach_Info()
{
AI_Output(other,self,"DIA_Niclas_Teach_15_00"); //Pokaż mi proszę, jak się posługiwać łukiem.
if(Learned_BOW >= 60)
{
AI_Output(self,other,"DIA_Niclas_Teach_03_01"); //Nauczyłem cię już wszystkiego, co sam umiałem. Musisz sobie poszukać innego nauczyciela.
}
else
{
Info_ClearChoices(DIA_Niclas_Teach);
Info_AddChoice(DIA_Niclas_Teach,Dialog_Back,DIA_Niclas_Teach_Back);
Info_AddChoice(DIA_Niclas_Teach,B_BuildLearnString(PRINT_LearnBow1,B_GetLearnCostTalent(other,NPC_TALENT_BOW,1)),DIA_Niclas_Teach_BOW_1);
Info_AddChoice(DIA_Niclas_Teach,B_BuildLearnString(PRINT_LearnBow5,B_GetLearnCostTalent(other,NPC_TALENT_BOW,1) * 5),DIA_Niclas_Teach_BOW_5);
};
};
Mam nadzieję że niczego nie pominąłem xD
Z zablokowaniem przeskakiwania progów u nauczycieli jeszcze nie kombinowałem ale pewnie wystarczyło by przerobić samą funkcje B_GetLearnCostTalent i B_GetLearnCostAttribute.