aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-08-28 18:30:45 +0200
committerShauren <shauren.trinity@gmail.com>2021-08-28 18:30:45 +0200
commitbc2c76a5b8b4a6e5c1d6e65d367c700e4ef1cbf2 (patch)
treef4b880d4f805a448a09875333db3610e807727ad /src/server/game/Server
parentb9647bdecc08e63041bbf0d845d5c5b81705e180 (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.cpp64
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.h14
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