Fixed Drain Soul and Shadowburn Soul Shard on target death. Closes issue 1058.
--HG-- branch : trunk
This commit is contained in:
@@ -5988,13 +5988,12 @@ void AuraEffect::HandleChannelDeathItem(AuraApplication const * aurApp, uint8 mo
|
|||||||
{
|
{
|
||||||
Unit * caster = GetCaster();
|
Unit * caster = GetCaster();
|
||||||
|
|
||||||
if(!caster || caster->GetTypeId() != TYPEID_PLAYER)// || m_removeMode!=AURA_REMOVE_BY_DEATH)
|
if(!caster || caster->GetTypeId() != TYPEID_PLAYER)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//we cannot check removemode = death
|
if(target->getDeathState() != JUST_DIED)
|
||||||
//talent will remove the caster's aura->interrupt channel->remove victim aura
|
|
||||||
if(target->GetHealth() > 0)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Item amount
|
// Item amount
|
||||||
if (GetAmount() <= 0)
|
if (GetAmount() <= 0)
|
||||||
return;
|
return;
|
||||||
@@ -6002,11 +6001,12 @@ void AuraEffect::HandleChannelDeathItem(AuraApplication const * aurApp, uint8 mo
|
|||||||
if(GetSpellProto()->EffectItemType[m_effIndex] == 0)
|
if(GetSpellProto()->EffectItemType[m_effIndex] == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Soul Shard only from non-grey units
|
// Soul Shard only from units that grant XP or honor
|
||||||
if( GetSpellProto()->EffectItemType[m_effIndex] == 6265 &&
|
if( GetSpellProto()->EffectItemType[m_effIndex] == 6265 &&
|
||||||
(target->getLevel() <= Trinity::XP::GetGrayLevel(caster->getLevel()) ||
|
(!caster->ToPlayer()->isHonorOrXPTarget(target) ||
|
||||||
target->GetTypeId() == TYPEID_UNIT && !target->ToCreature()->isTappedBy(caster->ToPlayer())) )
|
target->GetTypeId() == TYPEID_UNIT && !target->ToCreature()->isTappedBy(caster->ToPlayer())) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//Adding items
|
//Adding items
|
||||||
uint32 noSpaceForCount = 0;
|
uint32 noSpaceForCount = 0;
|
||||||
uint32 count = m_amount;
|
uint32 count = m_amount;
|
||||||
|
|||||||
+6
-2
@@ -11976,6 +11976,11 @@ void Unit::SetHover(bool on)
|
|||||||
|
|
||||||
void Unit::setDeathState(DeathState s)
|
void Unit::setDeathState(DeathState s)
|
||||||
{
|
{
|
||||||
|
// death state needs to be updated before RemoveAllAurasOnDeath() calls HandleChannelDeathItem(..) so that
|
||||||
|
// it can be used to check creation of death items (such as soul shards).
|
||||||
|
DeathState oldDeathState = m_deathState;
|
||||||
|
m_deathState = s;
|
||||||
|
|
||||||
if (s != ALIVE && s != JUST_ALIVED)
|
if (s != ALIVE && s != JUST_ALIVED)
|
||||||
{
|
{
|
||||||
CombatStop();
|
CombatStop();
|
||||||
@@ -12012,13 +12017,12 @@ void Unit::setDeathState(DeathState s)
|
|||||||
else if (s == JUST_ALIVED)
|
else if (s == JUST_ALIVED)
|
||||||
RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); // clear skinnable for creature and player (at battleground)
|
RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); // clear skinnable for creature and player (at battleground)
|
||||||
|
|
||||||
if (m_deathState != ALIVE && s == ALIVE)
|
if (oldDeathState != ALIVE && s == ALIVE)
|
||||||
{
|
{
|
||||||
//_ApplyAllAuraMods();
|
//_ApplyAllAuraMods();
|
||||||
// Reset display id on resurection - needed by corpse explosion to cleanup after display change
|
// Reset display id on resurection - needed by corpse explosion to cleanup after display change
|
||||||
SetDisplayId(GetNativeDisplayId());
|
SetDisplayId(GetNativeDisplayId());
|
||||||
}
|
}
|
||||||
m_deathState = s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*########################################
|
/*########################################
|
||||||
|
|||||||
Reference in New Issue
Block a user