Fixed Drain Soul and Shadowburn Soul Shard on target death. Closes issue 1058.

--HG--
branch : trunk
This commit is contained in:
Xanadu
2010-03-15 02:59:21 +01:00
parent 1845a9588d
commit 8cc3d2ad7f
2 changed files with 12 additions and 8 deletions
+6 -6
View File
@@ -5988,13 +5988,12 @@ void AuraEffect::HandleChannelDeathItem(AuraApplication const * aurApp, uint8 mo
{
Unit * caster = GetCaster();
if(!caster || caster->GetTypeId() != TYPEID_PLAYER)// || m_removeMode!=AURA_REMOVE_BY_DEATH)
if(!caster || caster->GetTypeId() != TYPEID_PLAYER)
return;
//we cannot check removemode = death
//talent will remove the caster's aura->interrupt channel->remove victim aura
if(target->GetHealth() > 0)
if(target->getDeathState() != JUST_DIED)
return;
// Item amount
if (GetAmount() <= 0)
return;
@@ -6002,11 +6001,12 @@ void AuraEffect::HandleChannelDeathItem(AuraApplication const * aurApp, uint8 mo
if(GetSpellProto()->EffectItemType[m_effIndex] == 0)
return;
// Soul Shard only from non-grey units
// Soul Shard only from units that grant XP or honor
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())) )
return;
//Adding items
uint32 noSpaceForCount = 0;
uint32 count = m_amount;
+6 -2
View File
@@ -11976,6 +11976,11 @@ void Unit::SetHover(bool on)
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)
{
CombatStop();
@@ -12012,13 +12017,12 @@ void Unit::setDeathState(DeathState s)
else if (s == JUST_ALIVED)
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();
// Reset display id on resurection - needed by corpse explosion to cleanup after display change
SetDisplayId(GetNativeDisplayId());
}
m_deathState = s;
}
/*########################################