aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-08-28 23:59:17 +0200
committerShauren <shauren.trinity@gmail.com>2020-08-28 23:59:17 +0200
commitbf7efe3ca040f2dcd965e382ff863f0a924af23f (patch)
tree836cbb478c34b3e035a28453a3311bb53d0cd8ac
parentb928955185f62194307b36cbd136f32bf4517959 (diff)
Core/PacketIO: Fixed structure of "fake" SMSG_SPELL_GO sent when loading pets from db
Closes #25354
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp16
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h6
-rw-r--r--src/server/game/Spells/Spell.cpp3
3 files changed, 13 insertions, 12 deletions
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 272f1bdf099..6de742f9353 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -31,6 +31,7 @@
#include "SpellAuras.h"
#include "SpellHistory.h"
#include "SpellMgr.h"
+#include "SpellPackets.h"
#include "Unit.h"
#include "Util.h"
#include "WorldPacket.h"
@@ -338,14 +339,13 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
/// @todo pets should be summoned from real cast instead of just faking it?
if (petInfo->CreatedBySpellId)
{
- WorldPacket data(SMSG_SPELL_GO, (8+8+4+4+2));
- data << owner->GetPackGUID();
- data << owner->GetPackGUID();
- data << uint8(0);
- data << uint32(petInfo->CreatedBySpellId);
- data << uint32(256); // CAST_FLAG_UNKNOWN3
- data << uint32(0);
- owner->SendMessageToSet(&data, true);
+ WorldPackets::Spells::SpellGo spellGo;
+ spellGo.Cast.CasterGUID = owner->GetGUID();
+ spellGo.Cast.CasterUnit = owner->GetGUID();
+ spellGo.Cast.SpellID = petInfo->CreatedBySpellId;
+ spellGo.Cast.CastFlags = CAST_FLAG_UNKNOWN_9;
+ spellGo.Cast.CastTime = GameTime::GetGameTimeMS();
+ owner->SendMessageToSet(spellGo.Write(), true);
}
owner->SetMinion(this, true);
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index 1968274df79..764187a4b1e 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -163,7 +163,11 @@ namespace WorldPackets
class SpellGo final : public ServerPacket
{
public:
- SpellGo() : ServerPacket(SMSG_SPELL_GO) { }
+ SpellGo() : ServerPacket(SMSG_SPELL_GO)
+ {
+ Cast.HitTargets.emplace();
+ Cast.MissStatus.emplace();
+ }
WorldPacket const* Write() override;
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 11e24e6e8b1..34ccb63632e 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -4431,9 +4431,6 @@ void Spell::UpdateSpellCastDataAmmo(WorldPackets::Spells::SpellAmmo& ammo)
/// Writes miss and hit targets for a SMSG_SPELL_GO packet
void Spell::UpdateSpellCastDataTargets(WorldPackets::Spells::SpellCastData& data)
{
- data.HitTargets.emplace();
- data.MissStatus.emplace();
-
// This function also fill data for channeled spells:
// m_needAliveTargetMask req for stop channelig if one target die
for (TargetInfo& targetInfo : m_UniqueTargetInfo)