Witam, postanowiłem dzisiaj zrobić zacną funkcję buffowania potworków w grze. Wszystko cacy, działa jak powinno. Potem po malutkich poprawkach (zmiana wartości buffów) patrzę, a potworki nie zmieniają swoich statów. Przyzywam zatem ścierwojada, zabijam go, ma on staty jakie powinny być po buffie. Idę do zrespawnowanego ścierwojada z samego początku nowej gry, ma staty standardowe.
func void BuffMonster (var C_NPC monster, var int value)
{
if (value == 0)
{ value = (hero.level * (100+monster.level))/100; };
if (Npc_GetDistToNpc(hero, monster) < 2500)
{
if (hero.level > monster.level) && (monster.attribute[ATR_HITPOINTS] > 0)
{
monster.level = hero.level;// + monster.level;
monster.attribute[ATR_STRENGTH] += value;
monster.attribute[ATR_DEXTERITY] += value;
monster.attribute[ATR_HITPOINTS_MAX] += value*(hero.level/20);
monster.attribute[ATR_HITPOINTS] += value*(hero.level/20);
Print (inttostring(value));
if (((monster.protection[PROT_BLUNT] + monster.protection[PROT_EDGE] + monster.protection[PROT_POINT]
+ monster.protection[PROT_FIRE] + monster.protection[PROT_MAGIC] + monster.protection[PROT_FLY]) / 6) < 135)
{
monster.protection [PROT_BLUNT] += monster.level;
monster.protection [PROT_EDGE] += monster.level;
monster.protection [PROT_POINT] += monster.level;
monster.protection [PROT_FIRE] += monster.level;
monster.protection [PROT_FLY] += monster.level;
monster.protection [PROT_MAGIC] += monster.level;
};
};
};
};
Funkcja działa tak:
BuffMonster (Scavenger, 0);
Jeśli jest wartość "0", wartość wynosi (hero.level * (100+monster.level))/100, tak jak można zaobserwować w powyższym skrypcie. Co mogę zrobić, by to naprawić? Moim zdaniem skrypt powinien działać poprawnie, lecz nie działa.
Funkcja jest odpalana co klatkę w fukncji func void Buff()
{ BuffMonster (Scavenger, 0); };
Startup:
FF_ApplyOnceExt (Buff, 0, -1);