TrinityCore
Loading...
Searching...
No Matches
SpellPackets.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "SpellPackets.h"
19#include "CharacterPackets.h"
20#include "MovementPackets.h"
21#include "PacketOperators.h"
22
24{
30
36
41
47
49{
50 _worldPacket.reserve(1 + 4 * KnownSpells.size() + 4 * FavoriteSpells.size());
51
52 _worldPacket << Bits<1>(InitialLogin);
53 _worldPacket << Size<uint32>(KnownSpells);
54 _worldPacket << Size<uint32>(FavoriteSpells);
55
56 for (uint32 spellId : KnownSpells)
57 _worldPacket << uint32(spellId);
58
59 for (uint32 spellId : FavoriteSpells)
60 _worldPacket << uint32(spellId);
61
62 return &_worldPacket;
63}
64
72
78
80{
81 _worldPacket << Size<uint32>(Spells);
82 for (uint32 spellId : Spells)
83 _worldPacket << uint32(spellId);
84
85 return &_worldPacket;
86}
87
89{
90 data << auraData.CastID;
91 data << int32(auraData.SpellID);
92 data << auraData.Visual;
93 data << uint16(auraData.Flags);
94 data << uint32(auraData.ActiveFlags);
95 data << uint16(auraData.CastLevel);
96 data << uint8(auraData.Applications);
97 data << int32(auraData.ContentTuningID);
98 data << auraData.DstLocation;
99 data << OptionalInit(auraData.CastUnit);
100 data << OptionalInit(auraData.CastItem);
101 data << OptionalInit(auraData.Duration);
102 data << OptionalInit(auraData.Remaining);
103 data << OptionalInit(auraData.TimeMod);
104 data << BitsSize<6>(auraData.Points);
105 data << BitsSize<6>(auraData.EstimatedPoints);
106 data << OptionalInit(auraData.ContentTuning);
107 data.FlushBits();
108
109 if (auraData.CastUnit)
110 data << *auraData.CastUnit;
111
112 if (auraData.CastItem)
113 data << *auraData.CastItem;
114
115 if (auraData.Duration)
116 data << uint32(*auraData.Duration);
117
118 if (auraData.Remaining)
119 data << uint32(*auraData.Remaining);
120
121 if (auraData.TimeMod)
122 data << float(*auraData.TimeMod);
123
124 if (!auraData.Points.empty())
125 data.append(auraData.Points.data(), auraData.Points.size());
126
127 if (!auraData.EstimatedPoints.empty())
128 data.append(auraData.EstimatedPoints.data(), auraData.EstimatedPoints.size());
129
130 if (auraData.ContentTuning)
131 data << *auraData.ContentTuning;
132
133 return data;
134}
135
137{
138 data << uint16(aura.Slot);
139 data << OptionalInit(aura.AuraData);
140 data.FlushBits();
141
142 if (aura.AuraData)
143 data << *aura.AuraData;
144
145 return data;
146}
147
149{
150 _worldPacket << Bits<1>(UpdateAll);
151 _worldPacket << BitsSize<9>(Auras);
153
154 for (AuraInfo const& aura : Auras)
155 _worldPacket << aura;
156
157 return &_worldPacket;
158}
159
161{
162 buffer >> location.Transport;
163 buffer >> location.Location;
164
165 return buffer;
166}
167
169{
170 buffer >> targetData.Flags;
171 buffer >> targetData.Unit;
172 buffer >> targetData.Item;
173 buffer >> targetData.HousingGUID;
174
175 buffer >> Bits<1>(targetData.HousingIsResident);
176 buffer >> OptionalInit(targetData.SrcLocation);
177 buffer >> OptionalInit(targetData.DstLocation);
178 buffer >> OptionalInit(targetData.Orientation);
179 buffer >> OptionalInit(targetData.MapID);
180 buffer >> SizedString::BitsSize<7>(targetData.Name);
181
182 if (targetData.SrcLocation)
183 buffer >> *targetData.SrcLocation;
184
185 if (targetData.DstLocation)
186 buffer >> *targetData.DstLocation;
187
188 if (targetData.Orientation)
189 buffer >> *targetData.Orientation;
190
191 if (targetData.MapID)
192 buffer >> *targetData.MapID;
193
194 buffer >> SizedString::Data(targetData.Name);
195
196 return buffer;
197}
198
200{
201 buffer >> trajectory.Pitch;
202 buffer >> trajectory.Speed;
203
204 return buffer;
205}
206
208{
209 data.ResetBitPos();
210 data >> Bits<2>(weight.Type);
211 data >> weight.ID;
212 data >> weight.Quantity;
213
214 return data;
215}
216
218{
219 data >> optionalReagent.Slot;
220 data >> optionalReagent.Quantity;
221 data >> optionalReagent.Reagent;
222 data >> OptionalInit(optionalReagent.Source);
223 if (optionalReagent.Source)
224 data >> *optionalReagent.Source;
225
226 return data;
227}
228
230{
231 data >> extraCurrencyCost.CurrencyID;
232 data >> extraCurrencyCost.Count;
233
234 return data;
235}
236
238{
239 buffer >> request.CastID;
240 buffer >> request.SendCastFlags;
241 buffer >> request.Misc[0];
242 buffer >> request.Misc[1];
243 buffer >> request.Misc[2];
244 buffer >> request.SpellID;
245 buffer >> request.Visual;
246 buffer >> request.Target;
247 buffer >> request.MissileTrajectory;
248 buffer >> request.CraftingNPC;
249 buffer >> Size<uint32>(request.ExtraCurrencyCosts);
250 buffer >> Size<uint32>(request.CraftingReagents);
251 buffer >> Size<uint32>(request.RemovedReagents);
252 buffer >> request.CraftingCastFlags;
253
254 for (SpellExtraCurrencyCost& optionalCurrency : request.ExtraCurrencyCosts)
255 buffer >> optionalCurrency;
256
257 for (SpellCraftingReagent& optionalReagent : request.CraftingReagents)
258 buffer >> optionalReagent;
259
260 for (SpellCraftingReagent& optionalReagent : request.RemovedReagents)
261 buffer >> optionalReagent;
262
263 buffer.ResetBitPos();
264 buffer >> OptionalInit(request.ReceiveTime);
265 buffer >> OptionalInit(request.MoveUpdate);
266 buffer >> BitsSize<2>(request.Weight);
267 buffer >> OptionalInit(request.CraftingOrderID);
268
269 if (request.ReceiveTime)
270 buffer >> *request.ReceiveTime;
271
272 if (request.MoveUpdate)
273 buffer >> *request.MoveUpdate;
274
275 for (SpellWeight& weight : request.Weight)
276 buffer >> weight;
277
278 if (request.CraftingOrderID)
279 buffer >> *request.CraftingOrderID;
280
281 return buffer;
282}
283
285{
287}
288
290{
293}
294
302
310
311ByteBuffer& operator<<(ByteBuffer& data, TargetLocation const& targetLocation)
312{
313 data << targetLocation.Transport;
314 data << targetLocation.Location;
315
316 return data;
317}
318
319ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData)
320{
321 data << uint32(spellTargetData.Flags);
322 data << spellTargetData.Unit;
323 data << spellTargetData.Item;
324 data << spellTargetData.HousingGUID;
325
326 data << Bits<1>(spellTargetData.HousingIsResident);
327 data << OptionalInit(spellTargetData.SrcLocation);
328 data << OptionalInit(spellTargetData.DstLocation);
329 data << OptionalInit(spellTargetData.Orientation);
330 data << OptionalInit(spellTargetData.MapID);
331 data << SizedString::BitsSize<7>(spellTargetData.Name);
332 data.FlushBits();
333
334 if (spellTargetData.SrcLocation)
335 data << *spellTargetData.SrcLocation;
336
337 if (spellTargetData.DstLocation)
338 data << *spellTargetData.DstLocation;
339
340 if (spellTargetData.Orientation)
341 data << float(*spellTargetData.Orientation);
342
343 if (spellTargetData.MapID)
344 data << int32(*spellTargetData.MapID);
345
346 data << SizedString::Data(spellTargetData.Name);
347
348 return data;
349}
350
351ByteBuffer& operator<<(ByteBuffer& data, SpellMissStatus const& spellMissStatus)
352{
353 data << uint8(spellMissStatus.Reason);
354 if (spellMissStatus.Reason == SPELL_MISS_REFLECT)
355 data << uint8(spellMissStatus.ReflectStatus);
356
357 return data;
358}
359
360ByteBuffer& operator<<(ByteBuffer& data, SpellHitStatus const& spellHitStatus)
361{
362 data << uint8(spellHitStatus.Reason);
363 return data;
364}
365
366ByteBuffer& operator<<(ByteBuffer& data, SpellPowerData const& spellPowerData)
367{
368 data << int8(spellPowerData.Type);
369 data << int32(spellPowerData.Cost);
370 return data;
371}
372
373ByteBuffer& operator<<(ByteBuffer& data, RuneData const& runeData)
374{
375 data << uint8(runeData.Start);
376 data << uint8(runeData.Count);
377 data << Size<uint32>(runeData.Cooldowns);
378 if (!runeData.Cooldowns.empty())
379 data.append(runeData.Cooldowns.data(), runeData.Cooldowns.size());
380
381 return data;
382}
383
385{
386 data << uint32(missileTrajectory.TravelTime);
387 data << float(missileTrajectory.Pitch);
388
389 return data;
390}
391
393{
394 data << int32(immunities.School);
395 data << int32(immunities.Value);
396
397 return data;
398}
399
401{
402 data << int32(spellPred.Points);
403 data << uint32(spellPred.Type);
404 data << spellPred.BeaconGUID;
405
406 return data;
407}
408
409ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData)
410{
411 data << spellCastData.CasterGUID;
412 data << spellCastData.CasterUnit;
413 data << spellCastData.CastID;
414 data << spellCastData.OriginalCastID;
415 data << int32(spellCastData.SpellID);
416 data << spellCastData.Visual;
417 data << uint32(spellCastData.CastFlags);
418 data << uint32(spellCastData.CastFlagsEx);
419 data << uint32(spellCastData.CastFlagsEx2);
420 data << uint32(spellCastData.CastTime);
421 data << spellCastData.Target;
422 data << spellCastData.MissileTrajectory;
423 data << int32(spellCastData.AmmoDisplayID);
424 data << uint8(spellCastData.DestLocSpellCastIndex);
425 data << spellCastData.Immunities;
426 data << spellCastData.Predict;
427 data << BitsSize<16>(spellCastData.HitTargets);
428 data << BitsSize<16>(spellCastData.MissTargets);
429 data << BitsSize<16>(spellCastData.HitStatus);
430 data << BitsSize<16>(spellCastData.MissStatus);
431 data << BitsSize<9>(spellCastData.RemainingPower);
432 data << OptionalInit(spellCastData.RemainingRunes);
433 data << BitsSize<16>(spellCastData.TargetPoints);
434 data.FlushBits();
435
436 for (ObjectGuid const& hitTarget : spellCastData.HitTargets)
437 data << hitTarget;
438
439 for (ObjectGuid const& missTarget : spellCastData.MissTargets)
440 data << missTarget;
441
442 for (SpellHitStatus const& hitStatus : spellCastData.HitStatus)
443 data << hitStatus;
444
445 for (SpellMissStatus const& missStatus : spellCastData.MissStatus)
446 data << missStatus;
447
448 for (SpellPowerData const& power : spellCastData.RemainingPower)
449 data << power;
450
451 if (spellCastData.RemainingRunes)
452 data << *spellCastData.RemainingRunes;
453
454 for (TargetLocation const& targetLoc : spellCastData.TargetPoints)
455 data << targetLoc;
456
457 return data;
458}
459
461{
463
464 return &_worldPacket;
465}
466
468{
469 *this << Cast;
470
472 FlushBits();
473
474 WriteLogData();
475
476 return &_worldPacket;
477}
478
479ByteBuffer& operator<<(ByteBuffer& data, LearnedSpellInfo const& learnedSpellInfo)
480{
481 data << int32(learnedSpellInfo.SpellID);
482 data << Bits<1>(learnedSpellInfo.Favorite);
483 data << OptionalInit(learnedSpellInfo.EquipableSpellInvSlot);
484 data << OptionalInit(learnedSpellInfo.Superceded);
485 data << OptionalInit(learnedSpellInfo.TraitDefinitionID);
486 data.FlushBits();
487
488 if (learnedSpellInfo.EquipableSpellInvSlot)
489 data << int32(*learnedSpellInfo.EquipableSpellInvSlot);
490
491 if (learnedSpellInfo.Superceded)
492 data << int32(*learnedSpellInfo.Superceded);
493
494 if (learnedSpellInfo.TraitDefinitionID)
495 data << int32(*learnedSpellInfo.TraitDefinitionID);
496
497 return data;
498}
499
501{
502 _worldPacket << Size<uint32>(ClientLearnedSpellData);
505
506 for (LearnedSpellInfo const& spell : ClientLearnedSpellData)
507 _worldPacket << spell;
508
509 _worldPacket << Bits<1>(SuppressMessaging);
510 _worldPacket << Bits<1>(TraitGrantedByAura);
512
513 return &_worldPacket;
514}
515
517{
518 _worldPacket << Size<uint32>(ClientLearnedSpellData);
519
520 for (LearnedSpellInfo const& spell : ClientLearnedSpellData)
521 _worldPacket << spell;
522
523 return &_worldPacket;
524}
525
537
549
562
573
574ByteBuffer& operator<<(ByteBuffer& data, SpellModifierData const& spellModifierData)
575{
576 data << float(spellModifierData.ModifierValue);
577 data << uint8(spellModifierData.ClassIndex);
578
579 return data;
580}
581
582ByteBuffer& operator<<(ByteBuffer& data, SpellModifier const& spellModifier)
583{
584 data << uint8(spellModifier.ModIndex);
585 data << Size<uint32>(spellModifier.ModifierData);
586 for (SpellModifierData const& modData : spellModifier.ModifierData)
587 data << modData;
588
589 return data;
590}
591
593{
594 _worldPacket << Size<uint32>(Modifiers);
595 for (SpellModifier const& spellMod : Modifiers)
596 _worldPacket << spellMod;
597
598 return &_worldPacket;
599}
600
602{
603 _worldPacket << Size<uint32>(SpellID);
604 for (uint32 spellId : SpellID)
605 _worldPacket << uint32(spellId);
606
607 _worldPacket << Bits<1>(SuppressMessaging);
608 _worldPacket << Bits<1>(TraitGrantedByAura);
610
611 return &_worldPacket;
612}
613
615{
617 _worldPacket << Bits<1>(IsPet);
619
620 return &_worldPacket;
621}
622
624{
625 _worldPacket << Size<uint32>(SpellID);
626 if (!SpellID.empty())
627 _worldPacket.append(SpellID.data(), SpellID.size());
628
629 _worldPacket << Bits<1>(IsPet);
631
632 return &_worldPacket;
633}
634
636{
638 _worldPacket << Bits<1>(ClearOnHold);
639 _worldPacket << Bits<1>(IsPet);
641
642 return &_worldPacket;
643}
644
646{
649 _worldPacket << Bits<1>(IsPet);
650 _worldPacket << Bits<1>(SkipCategory);
652
653 return &_worldPacket;
654}
655
657{
659 _worldPacket << float(ModChange);
660 _worldPacket << float(ModRate);
661
662 return &_worldPacket;
663}
664
666{
667 data << uint32(cooldown.SrecID);
668 data << uint32(cooldown.ForcedCooldown);
669 data << float(cooldown.ModRate);
670
671 return data;
672}
673
675{
678 _worldPacket << Size<uint32>(SpellCooldowns);
679 for (SpellCooldownStruct const& cooldown : SpellCooldowns)
680 _worldPacket << cooldown;
681
682 return &_worldPacket;
683}
684
686{
687 data << uint32(historyEntry.SpellID);
688 data << uint32(historyEntry.ItemID);
689 data << uint32(historyEntry.Category);
690 data << int32(historyEntry.RecoveryTime);
691 data << int32(historyEntry.CategoryRecoveryTime);
692 data << float(historyEntry.ModRate);
693 data << OptionalInit(historyEntry.RecoveryTimeStartOffset);
694 data << OptionalInit(historyEntry.CategoryRecoveryTimeStartOffset);
695 data << Bits<1>(historyEntry.OnHold);
696 data.FlushBits();
697
698 if (historyEntry.RecoveryTimeStartOffset)
699 data << uint32(*historyEntry.RecoveryTimeStartOffset);
700
701 if (historyEntry.CategoryRecoveryTimeStartOffset)
702 data << uint32(*historyEntry.CategoryRecoveryTimeStartOffset);
703
704 return data;
705}
706
708{
709 _worldPacket << Size<uint32>(Entries);
710 for (SpellHistoryEntry const& historyEntry : Entries)
711 _worldPacket << historyEntry;
712
713 return &_worldPacket;
714}
715
717{
718 _worldPacket << Bits<1>(IsPet);
720
721 return &_worldPacket;
722}
723
725{
727 _worldPacket << Bits<1>(IsPet);
729
730 return &_worldPacket;
731}
732
734{
738 _worldPacket << float(ChargeModRate);
739 _worldPacket << Bits<1>(IsPet);
741
742 return &_worldPacket;
743}
744
746{
748 _worldPacket << float(ModChange);
749 _worldPacket << float(ModRate);
750 _worldPacket << Bits<1>(Snapshot);
752
753 return &_worldPacket;
754}
755
757{
758 data << uint32(chargeEntry.Category);
759 data << uint32(chargeEntry.NextRecoveryTime);
760 data << float(chargeEntry.ChargeModRate);
761 data << uint8(chargeEntry.ConsumedCharges);
762
763 return data;
764}
765
767{
768 _worldPacket << Size<uint32>(Entries);
769 for (SpellChargeEntry const& chargeEntry : Entries)
770 _worldPacket << chargeEntry;
771
772 return &_worldPacket;
773}
774
776{
778
779 return &_worldPacket;
780}
781
788
796
798{
801 _worldPacket << Bits<1>(MountedVisual);
803
804 return &_worldPacket;
805}
806
823
842
844{
849 _worldPacket << Bits<1>(MountedVisual);
851
852 return &_worldPacket;
853}
854
856{
860 _worldPacket << Bits<1>(Unknown_1210);
861
862 return &_worldPacket;
863}
864
866{
869}
870
872{
874 >> PackSlot;
875}
876
878{
879 data << int32(interruptImmunities.SchoolImmunities);
880 data << int32(interruptImmunities.Immunities);
881
882 return data;
883}
884
885ByteBuffer& operator<<(ByteBuffer& data, SpellTargetedHealPrediction const& targetedHealPrediction)
886{
887 data << targetedHealPrediction.TargetGUID;
888 data << targetedHealPrediction.Predict;
889
890 return data;
891}
892
911
920
922{
925 _worldPacket << Size<uint32>(Targets);
931 _worldPacket << Size<uint32>(StageDurations);
932
933 for (ObjectGuid const& target : Targets)
934 _worldPacket << target;
935
937 _worldPacket << stageDuration;
938
942
945
946 if (HealPrediction)
948
949 return &_worldPacket;
950}
951
953{
957 _worldPacket << Size<uint32>(StageDurations);
960
962 _worldPacket << stageDuration;
963
964 return &_worldPacket;
965}
966
971
976
981
990
992{
997 _worldPacket << SizedString::BitsSize<11>(Name);
998 _worldPacket << Bits<1>(UseTimer);
999 _worldPacket << Bits<1>(Sickness);
1001
1003
1004 return &_worldPacket;
1005}
1006
1008{
1010}
1011
1013{
1015}
1016
1022
1027
1029
1031{
1037 _worldPacket << Size<uint32>(Customizations);
1039 _worldPacket << Size<uint32>(ItemDisplayID);
1041 _worldPacket << float(DisplayScale);
1042
1043 for (Character::ChrCustomizationChoice const& customization : Customizations)
1044 _worldPacket << customization;
1045
1046 for (int32 itemDisplayId : ItemDisplayID)
1047 _worldPacket << int32(itemDisplayId);
1048
1049 return &_worldPacket;
1050}
1051
1060
1066
1068{
1070
1071 return &_worldPacket;
1072}
1073
1075{
1077
1078 return &_worldPacket;
1079}
1080
1088
1097
1114
1121
1123{
1126
1127 return &_worldPacket;
1128}
1129
1131{
1135 _worldPacket << Size<uint32>(FailedSpells);
1136 if (!FailedSpells.empty())
1138
1139 return &_worldPacket;
1140}
1141
1149
1151{
1153
1154 return &_worldPacket;
1155}
1156
1158{
1161 _worldPacket << Bits<1>(Result);
1163
1164 return &_worldPacket;
1165}
1166
1168{
1171 _worldPacket << Bits<1>(Reverse);
1173
1174 return &_worldPacket;
1175}
1176
1178{
1180 _worldPacket >> Bits<1>(IsFavorite);
1181}
1182
1187}
uint8_t uint8
Definition Define.h:156
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
@ SMSG_MIRROR_IMAGE_COMPONENTED_DATA
Definition Opcodes.h:1879
Spells
Definition PlayerAI.cpp:32
Gender
@ SPELL_MISS_REFLECT
Targets
void reserve(size_t ressize)
Definition ByteBuffer.h:590
void append(T value)
Definition ByteBuffer.h:131
void ResetBitPos()
Definition ByteBuffer.h:153
void FlushBits()
Definition ByteBuffer.h:142
WorldPacket _worldPacket
Definition Packet.h:43
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< AuraInfo > Auras
WorldPacket const * Write() override
WorldPacket const * Write() override
ObjectGuid FailedBy
Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT.
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
int32 MinActionBarSlot
Where to start pushing spells on action bar.
std::vector< LearnedSpellInfo > ClientLearnedSpellData
std::vector< UF::ChrCustomizationChoice > Customizations
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > CollisionPos
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > SourceRotation
TaggedPosition< Position::XYZ > TargetLocation
TaggedPosition< Position::XYZ > SourceLocation
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > TargetPosition
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< SpellChargeEntry > Entries
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< SpellHistoryEntry > Entries
WorldPacket const * Write() override
uint64 Action
two packed values (action and type)
WorldPacket const * Write() override
std::vector< SpellModifier > Modifiers
WorldPacket const * Write() override
Optional< SpellTargetedHealPrediction > HealPrediction
Optional< SpellChannelStartInterruptImmunities > InterruptImmunities
WorldPacket const * Write() override
ObjectGuid FailedBy
Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT.
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< SpellCooldownStruct > SpellCooldowns
WorldPacket const * Write() override
WorldPacket const * Write() override
Optional< SpellTargetedHealPrediction > HealPrediction
Duration< Milliseconds, uint32 > EmpowerDuration
Duration< Milliseconds, uint32 > MinHoldTime
std::vector< Duration< Milliseconds, uint32 > > StageDurations
std::vector< ObjectGuid > Targets
Optional< SpellChannelStartInterruptImmunities > InterruptImmunities
Duration< Milliseconds, uint32 > HoldAtMaxTime
WorldPacket const * Write() override
ObjectGuid FailedBy
Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT.
std::vector< Duration< Milliseconds, uint32 > > StageDurations
Duration< Milliseconds, int32 > TimeRemaining
WorldPacket const * Write() override
ObjectGuid FailedBy
Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT.
WorldPacket const * Write() override
ObjectGuid FailedBy
Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT.
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPackets::Duration< Milliseconds, int32 > Duration
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< LearnedSpellInfo > ClientLearnedSpellData
WorldPacket const * Write() override
std::array< uint64, NumActionButtons > ActionButtons
WorldPacket const * Write() override
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > ImpactPos
TaggedPosition< Position::XYZ > FirePos
DataWriter< Container > Data(Container const &value)
ByteBuffer & operator>>(ByteBuffer &data, SpellCastVisual &visual)
ByteBuffer & operator<<(ByteBuffer &data, SpellCastLogData const &spellCastLogData)
OptionalInitWriter< T > OptionalInit(Optional< T > const &value)
std::vector< float > EstimatedPoints
Optional< ObjectGuid > CastItem
TaggedPosition< Position::XYZ > DstLocation
Optional< ObjectGuid > CastUnit
Optional< ContentTuningParams > ContentTuning
Optional< AuraDataInfo > AuraData
std::vector< uint8 > Cooldowns
std::vector< ObjectGuid > HitTargets
Optional< RuneData > RemainingRunes
std::vector< TargetLocation > TargetPoints
std::vector< SpellMissStatus > MissStatus
MissileTrajectoryResult MissileTrajectory
std::vector< ObjectGuid > MissTargets
std::vector< SpellHitStatus > HitStatus
std::vector< SpellPowerData > RemainingPower
Optional< MovementInfo > MoveUpdate
Optional< Duration< Milliseconds, uint32 > > ReceiveTime
Array< SpellCraftingReagent, 6 > CraftingReagents
MissileTrajectoryRequest MissileTrajectory
Array< SpellCraftingReagent, 6 > RemovedReagents
std::vector< SpellWeight > Weight
Array< SpellExtraCurrencyCost, 5 > ExtraCurrencyCosts
Crafting::CraftingReagentBase Reagent
Optional< int32 > CategoryRecoveryTimeStartOffset
std::vector< SpellModifierData > ModifierData
Optional< TargetLocation > SrcLocation
Optional< TargetLocation > DstLocation
TaggedPosition< Position::XYZ > Location