Spoiler
spoko
Funkcja "prostująca"
func void Equip_ITAR_MIL_L()
{
if(Npc_IsPlayer(self))
{
MILArmor_Equipped = TRUE;
if(MIL01_Equipped == TRUE)
{
self.protection[PROT_EDGE] += BA_Bonus01;
self.protection[PROT_BLUNT] += BA_Bonus01;
self.protection[PROT_POINT] += BA_Bonus01;
self.protection[PROT_MAGIC] += BA_Bonus01;
self.protection[PROT_FIRE] += BA_Bonus01;
};
ATR_EDGEDEFENSE = self.protection[PROT_EDGE];
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,ATR_EDGEDEFENSE);
};
};
func void UnEquip_ITAR_MIL_L()
{
if(Npc_IsPlayer(self))
{
MILArmor_Equipped = FALSE;
if(MIL01_Equipped == TRUE)
{
self.protection[PROT_EDGE] -= BA_Bonus01;
self.protection[PROT_BLUNT] -= BA_Bonus01;
self.protection[PROT_POINT] -= BA_Bonus01;
self.protection[PROT_MAGIC] -= BA_Bonus01;
self.protection[PROT_FIRE] -= BA_Bonus01;
};
ATR_EDGEDEFENSE = self.protection[PROT_EDGE];
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,ATR_EDGEDEFENSE);
};
};
A tu ten bonus o którym pisałem.
Jest zadeklarowany w IT_Addon_Belts.d
const int BA_Bonus01 = 5;
Tak jest w oryginalnym L'hiverze, ten bonus jest stosowany nie tylko do pasów ale też do niektórych pancerzy z L'hivera. Wydało mi się dziwne że ta wartość wynosi 5, zamiast 0.
To co wkleiłeś wyżej to oryginalna gothicowa funkcja, występująca przy pasach i pancerzach. Jak ustawisz w niej bonus na 0 to nie dostaniesz 5 dodatkowej obrony, gdy założysz np. pas strażnika + zbroja strażnika. Funkcja odświeżająca wartość obrony to jest tylko to:
func void edge_def_update()
{
if(Npc_IsPlayer(self))
{
ATR_EDGEDEFENSE = self.protection[PROT_EDGE];
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,ATR_EDGEDEFENSE);
};
};
I to powinieneś wszędzie poustawiać w pancerzach/pasach/biżuterii:
on_equip = edge_def_update;
on_unequip = edge_def_update;
Po prostu do tych itemów, które już mają swoje funkcje on_equip oraz on_unequip dopisałem osobno te odświeżanie. Teraz jak o tym pomyślę to głupie, że przepisywałem całą funkcję od nowa bo też wystarczyłoby przecież tam powsadzać edge_def_update i by grało.
A i jeszcze coś. Nie zapomnij wsadzić tej funkcji odświeżającej także do init_global() w startupie bo inaczej po wczytaniu zapisu obrona nie będzie się wyświetlać. Chyba trzeba też było dodać coś takiego do instancji pc_hero żeby nie było problemów przy starcie nowej gry:
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,0);
ATR_EDGEDEFENSE = 0;
Co do tick tocka, to tak jasne, że można go tutaj wykorzystać i sam to nawet rozważałem, ale w końcu wybrałem tę metodę (opierającą się na samych skryptach) bo chciałem uniknąć ingerencji w lhiverowe zeny przy spolszczaniu moda (musiałbym dodawać te tick tocki przy każdej kolejnej wersji spolszczenia Lhivera). Jednak jak ktoś robi swojego moda to jak najbardziej pomysł godny rozważenia. No i tak jak Zucklov wspomniał jest jeszcze FF, który byłby najwygodniejszy, no ale kolega chciał uniknąć Ikarusa.