diff --git a/zone/mob.cpp b/zone/mob.cpp index ae036398a..91fe108ac 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -3829,7 +3829,7 @@ int32 Mob::GetVulnerability(Mob* caster, uint32 spell_id, uint32 ticsremaining) if((IsValidSpell(buffs[i].spellid) && IsEffectInSpell(buffs[i].spellid, SE_FcSpellVulnerability))){ - int32 focus = caster->CalcFocusEffect(focusSpellVulnerability, buffs[i].spellid, spell_id); + int32 focus = caster->CalcFocusEffect(focusSpellVulnerability, buffs[i].spellid, spell_id, true); if (!focus) continue; @@ -3847,6 +3847,8 @@ int32 Mob::GetVulnerability(Mob* caster, uint32 spell_id, uint32 ticsremaining) } } + tmp_focus = caster->CalcFocusEffect(focusSpellVulnerability, buffs[tmp_focus].spellid, spell_id); + if (tmp_focus < -99) tmp_focus = -99; diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index ccb412860..7cddf0057 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -5078,8 +5078,18 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_FcSpellVulnerability: - if (type == focusSpellVulnerability) - value = focus_spell.base[i]; + if (type == focusSpellVulnerability) { + if (best_focus) { + if (focus_spell.base2[i] != 0) + value = focus_spell.base2[i]; + else + value = focus_spell.base[i]; + } else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { + value = focus_spell.base[i]; + } else { + value = zone->random.Int(focus_spell.base[i], focus_spell.base2[i]); + } + } break; case SE_FcTwincast: