Fix some bard stacking issues (mainly AE DOT)

Please report if it breaks anything (shouldn't)
This commit is contained in:
Michael Cook (mackal) 2018-12-17 00:51:18 -05:00
parent bfe85a2f1b
commit bbbee6e6b2
3 changed files with 19 additions and 0 deletions

View File

@ -1122,6 +1122,20 @@ bool IsStackableDot(uint16 spell_id)
return IsEffectInSpell(spell_id, SE_CurrentHP) || IsEffectInSpell(spell_id, SE_GravityEffect); return IsEffectInSpell(spell_id, SE_CurrentHP) || IsEffectInSpell(spell_id, SE_GravityEffect);
} }
bool IsBardOnlyStackEffect(int effect)
{
switch(effect) {
case SE_CurrentMana:
case SE_ManaRegen_v2:
case SE_CurrentHP:
case SE_HealOverTime:
case SE_BardAEDot:
return true;
default:
return false;
}
}
bool IsCastWhileInvis(uint16 spell_id) bool IsCastWhileInvis(uint16 spell_id)
{ {
if (!IsValidSpell(spell_id)) if (!IsValidSpell(spell_id))

View File

@ -968,6 +968,7 @@ uint32 GetPartialMeleeRuneAmount(uint32 spell_id);
uint32 GetPartialMagicRuneAmount(uint32 spell_id); uint32 GetPartialMagicRuneAmount(uint32 spell_id);
bool NoDetrimentalSpellAggro(uint16 spell_id); bool NoDetrimentalSpellAggro(uint16 spell_id);
bool IsStackableDot(uint16 spell_id); bool IsStackableDot(uint16 spell_id);
bool IsBardOnlyStackEffect(int effect);
bool IsCastWhileInvis(uint16 spell_id); bool IsCastWhileInvis(uint16 spell_id);
bool IsEffectIgnoredInStacking(int spa); bool IsEffectIgnoredInStacking(int spa);

View File

@ -3021,6 +3021,10 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2,
if(effect1 != effect2) if(effect1 != effect2)
continue; continue;
if (IsBardOnlyStackEffect(effect1) && GetSpellLevel(spellid1, BARD) != 255 &&
GetSpellLevel(spellid2, BARD) != 255)
continue;
// big ol' list according to the client, wasn't that nice! // big ol' list according to the client, wasn't that nice!
if (IsEffectIgnoredInStacking(effect1)) if (IsEffectIgnoredInStacking(effect1))
continue; continue;