diff --git a/zone/effects.cpp b/zone/effects.cpp index 0f9dcfca1..493de9fa7 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -413,10 +413,6 @@ int32 Client::GetActSpellCost(uint16 spell_id, int32 cost) int32 Mob::GetActSpellDuration(uint16 spell_id, int32 duration) { - if ((aabonuses.IllusionPersistence || spellbonuses.IllusionPersistence || itembonuses.IllusionPersistence) && - IsEffectInSpell(spell_id, SE_Illusion)) - return 10000; // ~16h - if (spells[spell_id].not_extendable) return duration; diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 59b154835..5fcee64cb 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -1441,8 +1441,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial) for(int x = EmuConstants::MATERIAL_BEGIN; x <= EmuConstants::MATERIAL_TINT_END; x++) SendWearChange(x); - if(caster && (caster->spellbonuses.IllusionPersistence || caster->aabonuses.IllusionPersistence - || caster->itembonuses.IllusionPersistence)) + if (caster == this && + (spellbonuses.IllusionPersistence || aabonuses.IllusionPersistence || + itembonuses.IllusionPersistence)) buffs[buffslot].persistant_buff = 1; else buffs[buffslot].persistant_buff = 0; diff --git a/zone/spells.cpp b/zone/spells.cpp index d0f60ea47..d8699d068 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -2624,6 +2624,10 @@ int Mob::CalcBuffDuration(Mob *caster, Mob *target, uint16 spell_id, int32 caste castlevel = caster_level_override; int res = CalcBuffDuration_formula(castlevel, formula, duration); + if (caster == target && (target->aabonuses.IllusionPersistence || target->spellbonuses.IllusionPersistence || + target->itembonuses.IllusionPersistence) && + IsEffectInSpell(spell_id, SE_Illusion)) + res = 10000; // ~16h override res = mod_buff_duration(res, caster, target, spell_id);