diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 64607c7f4..7a0c0d21f 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -7168,7 +7168,7 @@ void Aura::PeriodicTick() // only from players // FIXME: need use SpellDamageBonus instead? - if (IS_PLAYER_GUID(m_caster_guid)) + if (pCaster->GetTypeId() == TYPEID_PLAYER) pdamage -= m_target->GetSpellDamageReduction(pdamage); m_target->CalculateAbsorbAndResist(pCaster, GetSpellSchoolMask(GetSpellProto()), DOT, pdamage, &absorb, &resist, !(GetSpellProto()->AttributesEx2 & SPELL_ATTR_EX2_CANT_REFLECTED)); @@ -7192,6 +7192,19 @@ void Aura::PeriodicTick() pCaster->ProcDamageAndSpell(m_target, procAttacker, procVictim, PROC_EX_NORMAL_HIT, pdamage, BASE_ATTACK, GetSpellProto()); pCaster->DealDamage(m_target, pdamage, &cleanDamage, DOT, GetSpellSchoolMask(GetSpellProto()), GetSpellProto(), true); + + // Drain Soul (chance soul shard) + if (pCaster->GetTypeId() == TYPEID_PLAYER && m_spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellProto->SpellFamilyFlags & UI64LIT(0x0000000000004000)) + { + // Only from non-grey units + if (roll_chance_i(10) && // 1-2 from drain with final and without glyph, 0-1 from damage + m_target->getLevel() > MaNGOS::XP::GetGrayLevel(pCaster->getLevel()) && + (m_target->GetTypeId() != TYPEID_UNIT || ((Player*)pCaster)->isAllowedToLoot((Creature*)m_target))) + { + pCaster->CastSpell(pCaster, 43836, true, NULL, this); + } + } + break; } case SPELL_AURA_PERIODIC_LEECH: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ff8fbf761..9161d2d7b 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "9962" + #define REVISION_NR "9963" #endif // __REVISION_NR_H__