diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-08-28 18:30:45 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-08-28 18:30:45 +0200 |
| commit | bc2c76a5b8b4a6e5c1d6e65d367c700e4ef1cbf2 (patch) | |
| tree | f4b880d4f805a448a09875333db3610e807727ad /src/server/game/Server | |
| parent | b9647bdecc08e63041bbf0d845d5c5b81705e180 (diff) | |
Core/Spells: Refactor building SMSG_SPELL_EXECUTE_LOG to not create 192 empty vectors on every spell cast
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/CombatLogPackets.cpp | 64 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/CombatLogPackets.h | 14 |
2 files changed, 39 insertions, 39 deletions
diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp index 7aafcfdd870..ce7254c2305 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.cpp +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -63,48 +63,60 @@ WorldPacket const* WorldPackets::CombatLog::SpellExecuteLog::Write() { *this << Caster; *this << int32(SpellID); - *this << uint32(Effects.size()); + *this << uint32(Effects->size()); - for (SpellLogEffect const& effect : Effects) + for (SpellLogEffect const& effect : *Effects) { *this << int32(effect.Effect); - *this << uint32(effect.PowerDrainTargets.size()); - *this << uint32(effect.ExtraAttacksTargets.size()); - *this << uint32(effect.DurabilityDamageTargets.size()); - *this << uint32(effect.GenericVictimTargets.size()); - *this << uint32(effect.TradeSkillTargets.size()); - *this << uint32(effect.FeedPetTargets.size()); + *this << uint32(effect.PowerDrainTargets ? effect.PowerDrainTargets->size() : 0); + *this << uint32(effect.ExtraAttacksTargets ? effect.ExtraAttacksTargets->size() : 0); + *this << uint32(effect.DurabilityDamageTargets ? effect.DurabilityDamageTargets->size() : 0); + *this << uint32(effect.GenericVictimTargets ? effect.GenericVictimTargets->size() : 0); + *this << uint32(effect.TradeSkillTargets ? effect.TradeSkillTargets->size() : 0); + *this << uint32(effect.FeedPetTargets ? effect.FeedPetTargets->size() : 0); - for (SpellLogEffectPowerDrainParams const& powerDrainTarget : effect.PowerDrainTargets) + if (effect.PowerDrainTargets) { - *this << powerDrainTarget.Victim; - *this << uint32(powerDrainTarget.Points); - *this << uint32(powerDrainTarget.PowerType); - *this << float(powerDrainTarget.Amplitude); + for (SpellLogEffectPowerDrainParams const& powerDrainTarget : *effect.PowerDrainTargets) + { + *this << powerDrainTarget.Victim; + *this << uint32(powerDrainTarget.Points); + *this << uint32(powerDrainTarget.PowerType); + *this << float(powerDrainTarget.Amplitude); + } } - for (SpellLogEffectExtraAttacksParams const& extraAttacksTarget : effect.ExtraAttacksTargets) + if (effect.ExtraAttacksTargets) { - *this << extraAttacksTarget.Victim; - *this << uint32(extraAttacksTarget.NumAttacks); + for (SpellLogEffectExtraAttacksParams const& extraAttacksTarget : *effect.ExtraAttacksTargets) + { + *this << extraAttacksTarget.Victim; + *this << uint32(extraAttacksTarget.NumAttacks); + } } - for (SpellLogEffectDurabilityDamageParams const& durabilityDamageTarget : effect.DurabilityDamageTargets) + if (effect.DurabilityDamageTargets) { - *this << durabilityDamageTarget.Victim; - *this << int32(durabilityDamageTarget.ItemID); - *this << int32(durabilityDamageTarget.Amount); + for (SpellLogEffectDurabilityDamageParams const& durabilityDamageTarget : *effect.DurabilityDamageTargets) + { + *this << durabilityDamageTarget.Victim; + *this << int32(durabilityDamageTarget.ItemID); + *this << int32(durabilityDamageTarget.Amount); + } } - for (SpellLogEffectGenericVictimParams const& genericVictimTarget : effect.GenericVictimTargets) - *this << genericVictimTarget.Victim; + if (effect.GenericVictimTargets) + for (SpellLogEffectGenericVictimParams const& genericVictimTarget : *effect.GenericVictimTargets) + *this << genericVictimTarget.Victim; - for (SpellLogEffectTradeSkillItemParams const& tradeSkillTarget : effect.TradeSkillTargets) - *this << int32(tradeSkillTarget.ItemID); + if (effect.TradeSkillTargets) + for (SpellLogEffectTradeSkillItemParams const& tradeSkillTarget : *effect.TradeSkillTargets) + *this << int32(tradeSkillTarget.ItemID); - for (SpellLogEffectFeedPetParams const& feedPetTarget : effect.FeedPetTargets) - *this << int32(feedPetTarget.ItemID); + if (effect.FeedPetTargets) + for (SpellLogEffectFeedPetParams const& feedPetTarget : *effect.FeedPetTargets) + *this << int32(feedPetTarget.ItemID); } WriteLogDataBit(); diff --git a/src/server/game/Server/Packets/CombatLogPackets.h b/src/server/game/Server/Packets/CombatLogPackets.h index bef250fa4d0..1da43fef7e1 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.h +++ b/src/server/game/Server/Packets/CombatLogPackets.h @@ -68,25 +68,13 @@ namespace WorldPackets class SpellExecuteLog final : public CombatLogServerPacket { public: - struct SpellLogEffect - { - int32 Effect = 0; - - std::vector<SpellLogEffectPowerDrainParams> PowerDrainTargets; - std::vector<SpellLogEffectExtraAttacksParams> ExtraAttacksTargets; - std::vector<SpellLogEffectDurabilityDamageParams> DurabilityDamageTargets; - std::vector<SpellLogEffectGenericVictimParams> GenericVictimTargets; - std::vector<SpellLogEffectTradeSkillItemParams> TradeSkillTargets; - std::vector<SpellLogEffectFeedPetParams> FeedPetTargets; - }; - SpellExecuteLog() : CombatLogServerPacket(SMSG_SPELL_EXECUTE_LOG, 16 + 4 + 4 + 1) { } WorldPacket const* Write() override; ObjectGuid Caster; int32 SpellID = 0; - std::vector<SpellLogEffect> Effects; + std::vector<SpellLogEffect> const* Effects = nullptr; }; class SpellHealLog final : public CombatLogServerPacket |
