Есть вопрос: В готике 2НВ при загрузке игры (новой или сохраненной) Все НПС без исключения (будь то мастера оружия (60-100%) или профи (30-59%)) дерутся как новички (0-29%)!!! И из-за этого я не могу модостроировать!
Что Делать???
З.Ы. Если ранее писали дайте ссылку! Заранее спасибо!
func void B_AddFightSkill(var C_Npc slf,var int talent,var int percent)
{
if(talent == NPC_TALENT_1H)
{
slf.HitChance[NPC_TALENT_1H] = slf.HitChance[NPC_TALENT_1H] + percent;
if(slf.HitChance[NPC_TALENT_1H] >= 0)
{
Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
[COLOR="Red"]Mdl_RemoveOverlayMds(self,"humans_1hST1.MDS");
Mdl_RemoveOverlayMds(self,"humans_1hST2.MDS");[/COLOR]
};
if(slf.HitChance[NPC_TALENT_1H] >= 30)
{
Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
[COLOR="red"]Mdl_ApplyOverlayMds(self,"humans_1hST1.mds");[/COLOR]
};
if(slf.HitChance[NPC_TALENT_1H] >= 60)
{
Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
[COLOR="red"]Mdl_ApplyOverlayMds(self,"humans_1hST2.mds");[/COLOR]
};
};
if(talent == NPC_TALENT_2H)
{
slf.HitChance[NPC_TALENT_2H] = slf.HitChance[NPC_TALENT_2H] + percent;
if(slf.HitChance[NPC_TALENT_2H] >= 0)
{
Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
[COLOR="red"]Mdl_RemoveOverlayMds(self,"humans_2hST1.MDS");
Mdl_RemoveOverlayMds(self,"humans_2hST2.MDS");[/COLOR]
};
if(slf.HitChance[NPC_TALENT_2H] >= 30)
{
Npc_SetTalentSkill(slf,NPC_TALENT_2H,1);
[COLOR="red"]Mdl_ApplyOverlayMds(self,"humans_2hST1.mds");[/COLOR]
};
if(slf.HitChance[NPC_TALENT_2H] >= 60)
{
Npc_SetTalentSkill(slf,NPC_TALENT_2H,2);
[COLOR="red"]Mdl_ApplyOverlayMds(self,"humans_2hST2.mds");[/COLOR]
};
};
if(talent == NPC_TALENT_BOW)
{
slf.HitChance[NPC_TALENT_BOW] = slf.HitChance[NPC_TALENT_BOW] + percent;
if(slf.HitChance[NPC_TALENT_BOW] >= 0)
{
Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0);
[COLOR="red"]Mdl_RemoveOverlayMds(self,"humans_bowT1.MDS");
Mdl_RemoveOverlayMds(self,"humans_bowT2.MDS");[/COLOR]
};
if(slf.HitChance[NPC_TALENT_BOW] >= 30)
{
Npc_SetTalentSkill(slf,NPC_TALENT_BOW,1);
[COLOR="red"]Mdl_ApplyOverlayMds(self,"humans_bowT1.mds");[/COLOR]
};
if(slf.HitChance[NPC_TALENT_BOW] >= 60)
{
Npc_SetTalentSkill(slf,NPC_TALENT_BOW,2);
[COLOR="red"]Mdl_ApplyOverlayMds(self,"humans_bowT2.mds");[/COLOR]
};
};
if(talent == NPC_TALENT_CROSSBOW)
{
slf.HitChance[NPC_TALENT_CROSSBOW] = slf.HitChance[NPC_TALENT_CROSSBOW] + percent;
if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 0)
{
Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0);
[COLOR="red"]Mdl_RemoveOverlayMds(self,"humans_cbowT1.MDS");
Mdl_RemoveOverlayMds(self,"humans_cbowT2.MDS");[/COLOR]
};
if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 30)
{
Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,1);
[COLOR="red"]Mdl_ApplyOverlayMds(self,"humans_cbowT1.mds");[/COLOR]
};
if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 60)
{
Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,2);
[COLOR="red"]Mdl_ApplyOverlayMds(self,"humans_cbowT2.mds");[/COLOR]
};
};
};
if(talent == NPC_TALENT_1H)
{
slf.HitChance[NPC_TALENT_1H] = slf.HitChance[NPC_TALENT_1H] + percent;
[B]if(slf.HitChance[NPC_TALENT_1H] >= 0)[/B]
{
Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
<...>
if(talent == NPC_TALENT_2H)
{
slf.HitChance[NPC_TALENT_2H] = slf.HitChance[NPC_TALENT_2H] + percent;
[B]if(slf.HitChance[NPC_TALENT_[COLOR="Red"]1H[/COLOR]] >= 0)[/B]
{
Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
<...>
if(talent == NPC_TALENT_BOW)
{
slf.HitChance[NPC_TALENT_BOW] = slf.HitChance[NPC_TALENT_BOW] + percent;
[B]if(slf.HitChance[NPC_TALENT_BOW] >= 0)[/B]
{
Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0);
<...>
if(talent == NPC_TALENT_CROSSBOW)
{
slf.HitChance[NPC_TALENT_CROSSBOW] = slf.HitChance[NPC_TALENT_CROSSBOW] + percent;
[B]if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 0)[/B]
{
Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0);
[B]if(slf.HitChance[NPC_TALENT_1H] [COLOR="Green"]< 30[/COLOR])
[/B]<...>
[B]if(slf.HitChance[NPC_TALENT_2H] [COLOR="Green"]< 30[/COLOR])[/B]
<...>
[B]if(slf.HitChance[NPC_TALENT_BOW] [COLOR="Green"]< 30[/COLOR])[/B]
<...>
[B]if(slf.HitChance[NPC_TALENT_CROSSBOW] [COLOR="Green"]< 30[/COLOR])[/B]
ты прав, это косяк, но некритичный. А вот накладывать насильно оверлей - это нормальный вполне вариант.if(slf.HitChance[NPC_TALENT_1H] >= 0)
{
Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
10 < 30 - TRUE
10 < 60 - TRUE!
10 < 90 - TRUE!!!
func void B_AddFightSkill(var C_Npc slf,var int talent,var int percent)
{
if(talent == NPC_TALENT_1H)
{
slf.HitChance[NPC_TALENT_1H] = slf.HitChance[NPC_TALENT_1H] + percent;
if(slf.HitChance[NPC_TALENT_1H] >= 60)
{
Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
}
else if(slf.HitChance[NPC_TALENT_1H] >= 30)
{
Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
}
else
{
Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
};
};
if(talent == NPC_TALENT_2H)
{
slf.HitChance[NPC_TALENT_2H] = slf.HitChance[NPC_TALENT_2H] + percent;
if(slf.HitChance[NPC_TALENT_2H] >= 60)
{
Npc_SetTalentSkill(slf,NPC_TALENT_2H,2);
}
else if(slf.HitChance[NPC_TALENT_2H] >= 30)
{
Npc_SetTalentSkill(slf,NPC_TALENT_2H,1);
}
else
{
Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
};
};
if(talent == NPC_TALENT_BOW)
{
slf.HitChance[NPC_TALENT_BOW] = slf.HitChance[NPC_TALENT_BOW] + percent;
if(slf.HitChance[NPC_TALENT_BOW] >= 60)
{
Npc_SetTalentSkill(slf,NPC_TALENT_BOW,2);
}
else if(slf.HitChance[NPC_TALENT_BOW] >= 30)
{
Npc_SetTalentSkill(slf,NPC_TALENT_BOW,1);
}
else
{
Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0);
};
};
if(talent == NPC_TALENT_CROSSBOW)
{
slf.HitChance[NPC_TALENT_CROSSBOW] = slf.HitChance[NPC_TALENT_CROSSBOW] + percent;
if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 60)
{
Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,2);
}
else if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 30)
{
Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,1);
}
else
{
Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0);
};
};
};
Ну ты сразу так не расписывал, вот я и предположил, что ты везде хочешь поставить "<" вместо ">=" . И зачем собственно дальнейшие извращения, если оригинальный вариант (не считая одного бага) верный? Чтобы просто отличалось?Разве? По моему, если у ГГ начальный HitChance = 10%, то должно быть так:
10 < 30 - TRUE, TalentSkill = 0
10 >= 30 - FALSE
10 >= 60 - FALSE
Потому что код оригинального варианта работает неэффективно - при шансе попадания >= 60 значение TalentSkill задаётся трижды (0, 1, 2).Myxomop написал(а):И зачем собственно дальнейшие извращения, если оригинальный вариант (не считая одного бага) верный? Чтобы просто отличалось?
Вот именно. Так что предложенный Myxomopом вариант с наложением оверлея в функции B_AddFightSkill() выглядит более предпочтительно.redleha написал(а):А ещё, можно насильно накладывать оверлей в скрипте самого непися. Желательно последней строкой. Но это много добавлений.