aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-06-05 01:19:25 +0200
committerShauren <shauren.trinity@gmail.com>2016-06-05 01:19:25 +0200
commit6ce84d9401a630958d3aec11e69c1382c56d6bf9 (patch)
tree5227fb8b18e6ac48a8b727725a8587a77cc76b47
parentdd1533b315bda37e1d43ebe0fb8bde87381c6e66 (diff)
Core/PacketIO: Fixed sending SMSG_SPELL_EXECUTE_LOG
-rw-r--r--src/server/game/Spells/Spell.cpp54
-rw-r--r--src/server/game/Spells/Spell.h1
2 files changed, 15 insertions, 40 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index aa02dfa3f63..31bcfc39980 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -616,7 +616,6 @@ m_spellValue(new SpellValue(caster->GetMap()->GetDifficultyID(), m_spellInfo)),
&& !m_spellInfo->IsPassive() && !m_spellInfo->IsPositive();
CleanupTargetList();
- CleanupExecuteLogList();
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
m_destTargets[i] = SpellDestination(*m_caster);
@@ -645,7 +644,6 @@ Spell::~Spell()
ASSERT(m_caster->ToPlayer()->m_spellModTakingSpell != this);
delete m_spellValue;
- CleanupExecuteLogList();
}
void Spell::InitExplicitTargets(SpellCastTargets const& targets)
@@ -4178,45 +4176,33 @@ void Spell::UpdateSpellCastDataAmmo(WorldPackets::Spells::SpellAmmo& ammo)
void Spell::SendSpellExecuteLog()
{
WorldPackets::CombatLog::SpellExecuteLog spellExecuteLog;
-
spellExecuteLog.Caster = m_caster->GetGUID();
spellExecuteLog.SpellID = m_spellInfo->Id;
- if (_powerDrainTargets->empty() && _extraAttacksTargets->empty() &&
- _durabilityDamageTargets->empty() && _genericVictimTargets->empty() &&
- _tradeSkillTargets->empty() && _feedPetTargets->empty())
- return;
-
for (SpellEffectInfo const* effect : GetEffects())
{
- WorldPackets::CombatLog::SpellExecuteLog::SpellLogEffect spellLogEffect;
if (!effect)
continue;
- spellLogEffect.Effect = effect->Effect;
-
- for (SpellLogEffectPowerDrainParams const& powerDrainParam : _powerDrainTargets[effect->EffectIndex])
- spellLogEffect.PowerDrainTargets.push_back(powerDrainParam);
-
- for (SpellLogEffectExtraAttacksParams const& extraAttacksTarget : _extraAttacksTargets[effect->EffectIndex])
- spellLogEffect.ExtraAttacksTargets.push_back(extraAttacksTarget);
-
- for (SpellLogEffectDurabilityDamageParams const& durabilityDamageTarget : _durabilityDamageTargets[effect->EffectIndex])
- spellLogEffect.DurabilityDamageTargets.push_back(durabilityDamageTarget);
-
- for (SpellLogEffectGenericVictimParams const& genericVictimTarget : _genericVictimTargets[effect->EffectIndex])
- spellLogEffect.GenericVictimTargets.push_back(genericVictimTarget);
-
- for (SpellLogEffectTradeSkillItemParams const& tradeSkillTarget : _tradeSkillTargets[effect->EffectIndex])
- spellLogEffect.TradeSkillTargets.push_back(tradeSkillTarget);
+ if (_powerDrainTargets[effect->EffectIndex].empty() && _extraAttacksTargets[effect->EffectIndex].empty() &&
+ _durabilityDamageTargets[effect->EffectIndex].empty() && _genericVictimTargets[effect->EffectIndex].empty() &&
+ _tradeSkillTargets[effect->EffectIndex].empty() && _feedPetTargets[effect->EffectIndex].empty())
+ continue;
- for (SpellLogEffectFeedPetParams const& feedPetTarget : _feedPetTargets[effect->EffectIndex])
- spellLogEffect.FeedPetTargets.push_back(feedPetTarget);
+ spellExecuteLog.Effects.emplace_back();
- spellExecuteLog.Effects.push_back(spellLogEffect);
+ WorldPackets::CombatLog::SpellExecuteLog::SpellLogEffect& spellLogEffect = spellExecuteLog.Effects.back();
+ spellLogEffect.Effect = effect->Effect;
+ spellLogEffect.PowerDrainTargets = std::move(_powerDrainTargets[effect->EffectIndex]);
+ spellLogEffect.ExtraAttacksTargets = std::move(_extraAttacksTargets[effect->EffectIndex]);
+ spellLogEffect.DurabilityDamageTargets = std::move(_durabilityDamageTargets[effect->EffectIndex]);
+ spellLogEffect.GenericVictimTargets = std::move(_genericVictimTargets[effect->EffectIndex]);
+ spellLogEffect.TradeSkillTargets = std::move(_tradeSkillTargets[effect->EffectIndex]);
+ spellLogEffect.FeedPetTargets = std::move(_feedPetTargets[effect->EffectIndex]);
}
- m_caster->SendCombatLogMessage(&spellExecuteLog);
+ if (!spellExecuteLog.Effects.empty())
+ m_caster->SendCombatLogMessage(&spellExecuteLog);
}
void Spell::ExecuteLogEffectTakeTargetPower(uint8 effIndex, Unit* target, uint32 powerType, uint32 points, float amplitude)
@@ -4309,16 +4295,6 @@ void Spell::ExecuteLogEffectResurrect(uint8 effect, Unit* target)
_genericVictimTargets[effect].push_back(spellLogEffectGenericVictimParams);
}
-void Spell::CleanupExecuteLogList()
-{
- _durabilityDamageTargets->clear();
- _extraAttacksTargets->clear();
- _feedPetTargets->clear();
- _genericVictimTargets->clear();
- _powerDrainTargets->clear();
- _tradeSkillTargets->clear();
-}
-
void Spell::SendInterrupted(uint8 result)
{
WorldPackets::Spells::SpellFailure failurePacket;
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 192ed942ce0..f08aa39b4c4 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -539,7 +539,6 @@ class TC_GAME_API Spell
void ExecuteLogEffectSummonObject(uint8 effIndex, WorldObject* obj);
void ExecuteLogEffectUnsummonObject(uint8 effIndex, WorldObject* obj);
void ExecuteLogEffectResurrect(uint8 effIndex, Unit* target);
- void CleanupExecuteLogList();
void SendInterrupted(uint8 result);
void SendChannelUpdate(uint32 time);
void SendChannelStart(uint32 duration);