Core/PacketIO: Exclude DamageDealt/DamageTaken script hook results from damage sent in SMSG_SPELL_NON_MELEE_DAMAGE_LOG

This commit is contained in:
Shauren
2015-08-10 17:46:31 +02:00
parent f85ac27912
commit f0e7ef1f9f
8 changed files with 18 additions and 17 deletions
+10 -8
View File
@@ -1081,29 +1081,29 @@ void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 dama
damageInfo->damage = damage;
}
uint32 Unit::DealSpellDamage(SpellNonMeleeDamage const* damageInfo, bool durabilityLoss)
void Unit::DealSpellDamage(SpellNonMeleeDamage const* damageInfo, bool durabilityLoss)
{
if (!damageInfo)
return 0;
return;
Unit* victim = damageInfo->target;
if (!victim)
return 0;
return;
if (!victim->IsAlive() || victim->HasUnitState(UNIT_STATE_IN_FLIGHT) || (victim->GetTypeId() == TYPEID_UNIT && victim->ToCreature()->IsInEvadeMode()))
return 0;
return;
SpellInfo const* spellProto = sSpellMgr->GetSpellInfo(damageInfo->SpellID);
if (!spellProto)
{
TC_LOG_DEBUG("entities.unit", "Unit::DealSpellDamage has wrong damageInfo->SpellID: %u", damageInfo->SpellID);
return 0;
return;
}
// Call default DealDamage
CleanDamage cleanDamage(damageInfo->cleanDamage, damageInfo->absorb, BASE_ATTACK, MELEE_HIT_NORMAL);
return DealDamage(victim, damageInfo->damage, &cleanDamage, SPELL_DIRECT_DAMAGE, SpellSchoolMask(damageInfo->schoolMask), spellProto, durabilityLoss);
DealDamage(victim, damageInfo->damage, &cleanDamage, SPELL_DIRECT_DAMAGE, SpellSchoolMask(damageInfo->schoolMask), spellProto, durabilityLoss);
}
/// @todo for melee need create structure as in
@@ -1785,7 +1785,8 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe
SpellNonMeleeDamage log(this, caster, (*itr)->GetSpellInfo()->Id, schoolMask);
CleanDamage cleanDamage = CleanDamage(splitDamage, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
log.damage = DealDamage(caster, splitDamage, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false);
DealDamage(caster, splitDamage, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false);
log.damage = splitDamage;
log.absorb = split_absorb;
SendSpellNonMeleeDamageLog(&log);
@@ -6116,7 +6117,8 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
uint32 procDmg = damage / 2;
SpellNonMeleeDamage log(pPet, pPet->GetVictim(), procSpell->Id, procSpell->GetSchoolMask());
log.damage = pPet->DealDamage(pPet->GetVictim(), procDmg, NULL, SPELL_DIRECT_DAMAGE, procSpell->GetSchoolMask(), procSpell, true);
log.damage = procDmg;
pPet->DealDamage(pPet->GetVictim(), procDmg, NULL, SPELL_DIRECT_DAMAGE, procSpell->GetSchoolMask(), procSpell, true);
pPet->SendSpellNonMeleeDamageLog(&log);
break;
}
+1 -1
View File
@@ -1516,7 +1516,7 @@ class Unit : public WorldObject
void HandleProcExtraAttackFor(Unit* victim);
void CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 damage, SpellInfo const* spellInfo, WeaponAttackType attackType = BASE_ATTACK, bool crit = false);
uint32 DealSpellDamage(SpellNonMeleeDamage const* damageInfo, bool durabilityLoss);
void DealSpellDamage(SpellNonMeleeDamage const* damageInfo, bool durabilityLoss);
// player or player's pet resilience (-1%)
uint32 GetDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_RESILIENCE_PLAYER_DAMAGE_TAKEN, 1.0f, 100.0f, damage); }
@@ -6200,7 +6200,6 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
caster->getHostileRefManager().threatAssist(caster, gain * 0.5f, GetSpellInfo());
}
log.damage = new_damage;
caster->SendSpellNonMeleeDamageLog(&log);
}
@@ -6488,7 +6487,7 @@ void AuraEffect::HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) con
caster->ProcDamageAndSpell(damageInfo.target, procAttacker, procVictim, procEx, damageInfo.damage, BASE_ATTACK, spellProto);
damageInfo.damage = caster->DealSpellDamage(&damageInfo, true);
caster->DealSpellDamage(&damageInfo, true);
caster->SendSpellNonMeleeDamageLog(&damageInfo);
}
@@ -6533,7 +6532,7 @@ void AuraEffect::HandleProcTriggerDamageAuraProc(AuraApplication* aurApp, ProcEv
target->CalculateSpellDamageTaken(&damageInfo, damage, GetSpellInfo());
target->DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb);
TC_LOG_DEBUG("spells", "AuraEffect::HandleProcTriggerDamageAuraProc: Triggering %u spell damage from aura %u proc", damage, GetId());
damageInfo.damage = target->DealSpellDamage(&damageInfo, true);
target->DealSpellDamage(&damageInfo, true);
target->SendSpellNonMeleeDamageLog(&damageInfo);
}
+1 -1
View File
@@ -2431,7 +2431,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
m_damage = damageInfo.damage;
damageInfo.damage = caster->DealSpellDamage(&damageInfo, true);
caster->DealSpellDamage(&damageInfo, true);
// Send log damage message to client
caster->SendSpellNonMeleeDamageLog(&damageInfo);
+1 -1
View File
@@ -396,7 +396,7 @@ void Spell::EffectEnvironmentalDMG(SpellEffIndex /*effIndex*/)
log.absorb = absorb;
log.resist = resist;
if (unitTarget->GetTypeId() == TYPEID_PLAYER)
log.damage = unitTarget->ToPlayer()->EnvironmentalDamage(DAMAGE_FIRE, damage);
unitTarget->ToPlayer()->EnvironmentalDamage(DAMAGE_FIRE, damage);
m_caster->SendSpellNonMeleeDamageLog(&log);
}
+1 -1
View File
@@ -2308,7 +2308,7 @@ public:
SpellNonMeleeDamage damageInfo(handler->GetSession()->GetPlayer(), target, spellid, sSpellMgr->GetSpellInfo(spellid)->SchoolMask);
damageInfo.damage = damage;
handler->GetSession()->GetPlayer()->DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb);
damageInfo.damage = target->DealSpellDamage(&damageInfo, true);
target->DealSpellDamage(&damageInfo, true);
target->SendSpellNonMeleeDamageLog(&damageInfo);
return true;
}
@@ -1093,7 +1093,7 @@ class spell_sindragosa_s_fury : public SpellScriptLoader
SpellNonMeleeDamage damageInfo(GetCaster(), GetHitUnit(), GetSpellInfo()->Id, GetSpellInfo()->SchoolMask);
damageInfo.damage = damage;
damageInfo.damage = GetCaster()->DealSpellDamage(&damageInfo, false);
GetCaster()->DealSpellDamage(&damageInfo, false);
GetCaster()->SendSpellNonMeleeDamageLog(&damageInfo);
}
+1 -1
View File
@@ -796,7 +796,7 @@ class spell_warl_health_funnel : public SpellScriptLoader
SpellNonMeleeDamage damageInfo(caster, caster, GetSpellInfo()->Id, GetSpellInfo()->SchoolMask);
damageInfo.periodicLog = true;
damageInfo.damage = damage;
damageInfo.damage = caster->DealSpellDamage(&damageInfo, false);
caster->DealSpellDamage(&damageInfo, false);
caster->SendSpellNonMeleeDamageLog(&damageInfo);
}