SE_IllusionPersistence affects self only

This commit is contained in:
Michael Cook (mackal) 2015-05-23 17:45:51 -04:00
parent a46b1ac18b
commit 70048eb6e1
3 changed files with 7 additions and 6 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);