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
108 if (auraData.ContentTuning)
109 data << *auraData.ContentTuning;
110
111 if (auraData.CastUnit)
112 data << *auraData.CastUnit;
113
114 if (auraData.CastItem)
115 data << *auraData.CastItem;
116
117 if (auraData.Duration)
118 data << uint32(*auraData.Duration);
119
120 if (auraData.Remaining)
121 data << uint32(*auraData.Remaining);
122
123 if (auraData.TimeMod)
124 data << float(*auraData.TimeMod);
125
126 if (!auraData.Points.empty())
127 data.append(auraData.Points.data(), auraData.Points.size());
128
129 if (!auraData.EstimatedPoints.empty())
130 data.append(auraData.EstimatedPoints.data(), auraData.EstimatedPoints.size());
131
132 return data;
133}
134
136{
137 data << uint16(aura.Slot);
138 data << OptionalInit(aura.AuraData);
139 data.FlushBits();
140
141 if (aura.AuraData)
142 data << *aura.AuraData;
143
144 return data;
145}
146
148{
149 _worldPacket << Bits<1>(UpdateAll);
150 _worldPacket << BitsSize<9>(Auras);
151 for (AuraInfo const& aura : Auras)
152 _worldPacket << aura;
153
155
156 return &_worldPacket;
157}
158
160{
161 buffer >> location.Transport;
162 buffer >> location.Location;
163
164 return buffer;
165}
166
168{
169 buffer >> targetData.Flags;
170 buffer >> targetData.Unit;
171 buffer >> targetData.Item;
172 buffer >> targetData.HousingGUID;
173
174 buffer >> Bits<1>(targetData.HousingIsResident);
175 buffer >> OptionalInit(targetData.SrcLocation);
176 buffer >> OptionalInit(targetData.DstLocation);
177 buffer >> OptionalInit(targetData.Orientation);
178 buffer >> OptionalInit(targetData.MapID);
179 buffer >> SizedString::BitsSize<7>(targetData.Name);
180
181 if (targetData.SrcLocation)
182 buffer >> *targetData.SrcLocation;
183
184 if (targetData.DstLocation)
185 buffer >> *targetData.DstLocation;
186
187 if (targetData.Orientation)
188 buffer >> *targetData.Orientation;
189
190 if (targetData.MapID)
191 buffer >> *targetData.MapID;
192
193 buffer >> SizedString::Data(targetData.Name);
194
195 return buffer;
196}
197
199{
200 buffer >> trajectory.Pitch;
201 buffer >> trajectory.Speed;
202
203 return buffer;
204}
205
207{
208 data >> optionalReagent.Slot;
209 data >> optionalReagent.Quantity;
210 data >> optionalReagent.Reagent;
211 data >> OptionalInit(optionalReagent.Source);
212 if (optionalReagent.Source)
213 data >> *optionalReagent.Source;
214
215 return data;
216}
217
219{
220 data >> extraCurrencyCost.CurrencyID;
221 data >> extraCurrencyCost.Count;
222
223 return data;
224}
225
227{
228 buffer >> request.CastID;
229 buffer >> request.SendCastFlags;
230 buffer >> request.Misc[0];
231 buffer >> request.Misc[1];
232 buffer >> request.Misc[2];
233 buffer >> request.SpellID;
234 buffer >> request.Visual;
235 buffer >> request.MissileTrajectory;
236 buffer >> request.CraftingNPC;
237 buffer >> Size<uint32>(request.ExtraCurrencyCosts);
238 buffer >> Size<uint32>(request.CraftingReagents);
239 buffer >> Size<uint32>(request.RemovedReagents);
240 buffer >> request.CraftingCastFlags;
241
242 for (SpellExtraCurrencyCost& optionalCurrency : request.ExtraCurrencyCosts)
243 buffer >> optionalCurrency;
244
245 buffer >> request.Target;
246
247 buffer.ResetBitPos();
248 buffer >> OptionalInit(request.MoveUpdate);
249 buffer >> BitsSize<2>(request.Weight);
250 buffer >> OptionalInit(request.CraftingOrderID);
251
252 for (SpellCraftingReagent& optionalReagent : request.CraftingReagents)
253 buffer >> optionalReagent;
254
255 if (request.CraftingOrderID)
256 buffer >> *request.CraftingOrderID;
257
258 for (SpellCraftingReagent& optionalReagent : request.RemovedReagents)
259 buffer >> optionalReagent;
260
261 if (request.MoveUpdate)
262 buffer >> *request.MoveUpdate;
263
264 for (SpellWeight& weight : request.Weight)
265 {
266 buffer.ResetBitPos();
267 buffer >> Bits<2>(weight.Type);
268 buffer >> weight.ID;
269 buffer >> weight.Quantity;
270 }
271
272 return buffer;
273}
274
276{
278}
279
281{
284}
285
293
301
302ByteBuffer& operator<<(ByteBuffer& data, TargetLocation const& targetLocation)
303{
304 data << targetLocation.Transport;
305 data << targetLocation.Location;
306
307 return data;
308}
309
310ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData)
311{
312 data << uint32(spellTargetData.Flags);
313 data << spellTargetData.Unit;
314 data << spellTargetData.Item;
315 data << spellTargetData.HousingGUID;
316
317 data << Bits<1>(spellTargetData.HousingIsResident);
318 data << OptionalInit(spellTargetData.SrcLocation);
319 data << OptionalInit(spellTargetData.DstLocation);
320 data << OptionalInit(spellTargetData.Orientation);
321 data << OptionalInit(spellTargetData.MapID);
322 data << SizedString::BitsSize<7>(spellTargetData.Name);
323 data.FlushBits();
324
325 if (spellTargetData.SrcLocation)
326 data << *spellTargetData.SrcLocation;
327
328 if (spellTargetData.DstLocation)
329 data << *spellTargetData.DstLocation;
330
331 if (spellTargetData.Orientation)
332 data << float(*spellTargetData.Orientation);
333
334 if (spellTargetData.MapID)
335 data << int32(*spellTargetData.MapID);
336
337 data << SizedString::Data(spellTargetData.Name);
338
339 return data;
340}
341
342ByteBuffer& operator<<(ByteBuffer& data, SpellMissStatus const& spellMissStatus)
343{
344 data << uint8(spellMissStatus.Reason);
345 if (spellMissStatus.Reason == SPELL_MISS_REFLECT)
346 data << uint8(spellMissStatus.ReflectStatus);
347
348 return data;
349}
350
351ByteBuffer& operator<<(ByteBuffer& data, SpellHitStatus const& spellHitStatus)
352{
353 data << uint8(spellHitStatus.Reason);
354 return data;
355}
356
357ByteBuffer& operator<<(ByteBuffer& data, SpellPowerData const& spellPowerData)
358{
359 data << int8(spellPowerData.Type);
360 data << int32(spellPowerData.Cost);
361 return data;
362}
363
364ByteBuffer& operator<<(ByteBuffer& data, RuneData const& runeData)
365{
366 data << uint8(runeData.Start);
367 data << uint8(runeData.Count);
368 data << Size<uint32>(runeData.Cooldowns);
369 if (!runeData.Cooldowns.empty())
370 data.append(runeData.Cooldowns.data(), runeData.Cooldowns.size());
371
372 return data;
373}
374
376{
377 data << uint32(missileTrajectory.TravelTime);
378 data << float(missileTrajectory.Pitch);
379
380 return data;
381}
382
384{
385 data << int32(immunities.School);
386 data << int32(immunities.Value);
387
388 return data;
389}
390
392{
393 data << int32(spellPred.Points);
394 data << uint32(spellPred.Type);
395 data << spellPred.BeaconGUID;
396
397 return data;
398}
399
400ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData)
401{
402 data << spellCastData.CasterGUID;
403 data << spellCastData.CasterUnit;
404 data << spellCastData.CastID;
405 data << spellCastData.OriginalCastID;
406 data << int32(spellCastData.SpellID);
407 data << spellCastData.Visual;
408 data << uint32(spellCastData.CastFlags);
409 data << uint32(spellCastData.CastFlagsEx);
410 data << uint32(spellCastData.CastFlagsEx2);
411 data << uint32(spellCastData.CastTime);
412 data << spellCastData.MissileTrajectory;
413 data << int32(spellCastData.AmmoDisplayID);
414 data << uint8(spellCastData.DestLocSpellCastIndex);
415 data << spellCastData.Immunities;
416 data << spellCastData.Predict;
417 data << BitsSize<16>(spellCastData.HitTargets);
418 data << BitsSize<16>(spellCastData.MissTargets);
419 data << BitsSize<16>(spellCastData.HitStatus);
420 data << BitsSize<16>(spellCastData.MissStatus);
421 data << BitsSize<9>(spellCastData.RemainingPower);
422 data << OptionalInit(spellCastData.RemainingRunes);
423 data << BitsSize<16>(spellCastData.TargetPoints);
424 data.FlushBits();
425
426 data << spellCastData.Target;
427
428 for (ObjectGuid const& hitTarget : spellCastData.HitTargets)
429 data << hitTarget;
430
431 for (ObjectGuid const& missTarget : spellCastData.MissTargets)
432 data << missTarget;
433
434 for (SpellHitStatus const& hitStatus : spellCastData.HitStatus)
435 data << hitStatus;
436
437 for (SpellMissStatus const& missStatus : spellCastData.MissStatus)
438 data << missStatus;
439
440 for (SpellPowerData const& power : spellCastData.RemainingPower)
441 data << power;
442
443 if (spellCastData.RemainingRunes)
444 data << *spellCastData.RemainingRunes;
445
446 for (TargetLocation const& targetLoc : spellCastData.TargetPoints)
447 data << targetLoc;
448
449 return data;
450}
451
453{
455
456 return &_worldPacket;
457}
458
460{
461 *this << Cast;
462
464 FlushBits();
465
466 WriteLogData();
467
468 return &_worldPacket;
469}
470
471ByteBuffer& operator<<(ByteBuffer& data, LearnedSpellInfo const& learnedSpellInfo)
472{
473 data << int32(learnedSpellInfo.SpellID);
474 data << Bits<1>(learnedSpellInfo.Favorite);
475 data << OptionalInit(learnedSpellInfo.EquipableSpellInvSlot);
476 data << OptionalInit(learnedSpellInfo.Superceded);
477 data << OptionalInit(learnedSpellInfo.TraitDefinitionID);
478 data.FlushBits();
479
480 if (learnedSpellInfo.EquipableSpellInvSlot)
481 data << int32(*learnedSpellInfo.EquipableSpellInvSlot);
482
483 if (learnedSpellInfo.Superceded)
484 data << int32(*learnedSpellInfo.Superceded);
485
486 if (learnedSpellInfo.TraitDefinitionID)
487 data << int32(*learnedSpellInfo.TraitDefinitionID);
488
489 return data;
490}
491
493{
494 _worldPacket << Size<uint32>(ClientLearnedSpellData);
496 _worldPacket << Bits<1>(SuppressMessaging);
497 _worldPacket << Bits<1>(TraitGrantedByAura);
499
500 for (LearnedSpellInfo const& spell : ClientLearnedSpellData)
501 _worldPacket << spell;
502
503 return &_worldPacket;
504}
505
507{
508 _worldPacket << Size<uint32>(ClientLearnedSpellData);
509
510 for (LearnedSpellInfo const& spell : ClientLearnedSpellData)
511 _worldPacket << spell;
512
513 return &_worldPacket;
514}
515
527
539
552
563
564ByteBuffer& operator<<(ByteBuffer& data, SpellModifierData const& spellModifierData)
565{
566 data << float(spellModifierData.ModifierValue);
567 data << uint8(spellModifierData.ClassIndex);
568
569 return data;
570}
571
572ByteBuffer& operator<<(ByteBuffer& data, SpellModifier const& spellModifier)
573{
574 data << uint8(spellModifier.ModIndex);
575 data << Size<uint32>(spellModifier.ModifierData);
576 for (SpellModifierData const& modData : spellModifier.ModifierData)
577 data << modData;
578
579 return data;
580}
581
583{
584 _worldPacket << Size<uint32>(Modifiers);
585 for (SpellModifier const& spellMod : Modifiers)
586 _worldPacket << spellMod;
587
588 return &_worldPacket;
589}
590
592{
593 _worldPacket << Size<uint32>(SpellID);
594 for (uint32 spellId : SpellID)
595 _worldPacket << uint32(spellId);
596
597 _worldPacket << Bits<1>(SuppressMessaging);
598 _worldPacket << Bits<1>(TraitGrantedByAura);
600
601 return &_worldPacket;
602}
603
605{
607 _worldPacket << Bits<1>(IsPet);
609
610 return &_worldPacket;
611}
612
614{
615 _worldPacket << Size<uint32>(SpellID);
616 if (!SpellID.empty())
617 _worldPacket.append(SpellID.data(), SpellID.size());
618
619 _worldPacket << Bits<1>(IsPet);
621
622 return &_worldPacket;
623}
624
626{
628 _worldPacket << Bits<1>(ClearOnHold);
629 _worldPacket << Bits<1>(IsPet);
631
632 return &_worldPacket;
633}
634
636{
639 _worldPacket << Bits<1>(IsPet);
640 _worldPacket << Bits<1>(SkipCategory);
642
643 return &_worldPacket;
644}
645
647{
649 _worldPacket << float(ModChange);
650 _worldPacket << float(ModRate);
651
652 return &_worldPacket;
653}
654
656{
657 data << uint32(cooldown.SrecID);
658 data << uint32(cooldown.ForcedCooldown);
659 data << float(cooldown.ModRate);
660
661 return data;
662}
663
665{
668 _worldPacket << Size<uint32>(SpellCooldowns);
669 for (SpellCooldownStruct const& cooldown : SpellCooldowns)
670 _worldPacket << cooldown;
671
672 return &_worldPacket;
673}
674
676{
677 data << uint32(historyEntry.SpellID);
678 data << uint32(historyEntry.ItemID);
679 data << uint32(historyEntry.Category);
680 data << int32(historyEntry.RecoveryTime);
681 data << int32(historyEntry.CategoryRecoveryTime);
682 data << float(historyEntry.ModRate);
683 data << OptionalInit(historyEntry.RecoveryTimeStartOffset);
684 data << OptionalInit(historyEntry.CategoryRecoveryTimeStartOffset);
685 data << Bits<1>(historyEntry.OnHold);
686 data.FlushBits();
687
688 if (historyEntry.RecoveryTimeStartOffset)
689 data << uint32(*historyEntry.RecoveryTimeStartOffset);
690
691 if (historyEntry.CategoryRecoveryTimeStartOffset)
692 data << uint32(*historyEntry.CategoryRecoveryTimeStartOffset);
693
694 return data;
695}
696
698{
699 _worldPacket << Size<uint32>(Entries);
700 for (SpellHistoryEntry const& historyEntry : Entries)
701 _worldPacket << historyEntry;
702
703 return &_worldPacket;
704}
705
707{
708 _worldPacket << Bits<1>(IsPet);
710
711 return &_worldPacket;
712}
713
715{
717 _worldPacket << Bits<1>(IsPet);
719
720 return &_worldPacket;
721}
722
724{
728 _worldPacket << float(ChargeModRate);
729 _worldPacket << Bits<1>(IsPet);
731
732 return &_worldPacket;
733}
734
736{
738 _worldPacket << float(ModChange);
739 _worldPacket << float(ModRate);
740 _worldPacket << Bits<1>(Snapshot);
742
743 return &_worldPacket;
744}
745
747{
748 data << uint32(chargeEntry.Category);
749 data << uint32(chargeEntry.NextRecoveryTime);
750 data << float(chargeEntry.ChargeModRate);
751 data << uint8(chargeEntry.ConsumedCharges);
752
753 return data;
754}
755
757{
758 _worldPacket << Size<uint32>(Entries);
759 for (SpellChargeEntry const& chargeEntry : Entries)
760 _worldPacket << chargeEntry;
761
762 return &_worldPacket;
763}
764
766{
768
769 return &_worldPacket;
770}
771
778
786
788{
791 _worldPacket << Bits<1>(MountedVisual);
793
794 return &_worldPacket;
795}
796
813
832
834{
839 _worldPacket << Bits<1>(MountedVisual);
841
842 return &_worldPacket;
843}
844
852
854{
857}
858
860{
862 >> PackSlot;
863}
864
866{
867 data << int32(interruptImmunities.SchoolImmunities);
868 data << int32(interruptImmunities.Immunities);
869
870 return data;
871}
872
873ByteBuffer& operator<<(ByteBuffer& data, SpellTargetedHealPrediction const& targetedHealPrediction)
874{
875 data << targetedHealPrediction.TargetGUID;
876 data << targetedHealPrediction.Predict;
877
878 return data;
879}
880
899
908
910{
913 _worldPacket << Size<uint32>(Targets);
919 _worldPacket << Size<uint32>(StageDurations);
920
921 for (ObjectGuid const& target : Targets)
922 _worldPacket << target;
923
925 _worldPacket << stageDuration;
926
930
933
934 if (HealPrediction)
936
937 return &_worldPacket;
938}
939
941{
945 _worldPacket << Size<uint32>(StageDurations);
948
950 _worldPacket << stageDuration;
951
952 return &_worldPacket;
953}
954
959
964
969
978
980{
985 _worldPacket << SizedString::BitsSize<11>(Name);
986 _worldPacket << Bits<1>(UseTimer);
987 _worldPacket << Bits<1>(Sickness);
989
991
992 return &_worldPacket;
993}
994
999
1001{
1003}
1004
1009
1014
1016
1018{
1024 _worldPacket << Size<uint32>(Customizations);
1026 _worldPacket << Size<uint32>(ItemDisplayID);
1029
1030 for (Character::ChrCustomizationChoice const& customization : Customizations)
1031 _worldPacket << customization;
1032
1033 for (int32 itemDisplayId : ItemDisplayID)
1034 _worldPacket << int32(itemDisplayId);
1035
1036 return &_worldPacket;
1037}
1038
1047
1053
1055{
1057
1058 return &_worldPacket;
1059}
1060
1062{
1064
1065 return &_worldPacket;
1066}
1067
1075
1084
1101
1108
1110{
1113
1114 return &_worldPacket;
1115}
1116
1118{
1122 _worldPacket << Size<uint32>(FailedSpells);
1123 if (!FailedSpells.empty())
1125
1126 return &_worldPacket;
1127}
1128
1136
1138{
1140
1141 return &_worldPacket;
1142}
1143
1145{
1148 _worldPacket << Bits<1>(Result);
1150
1151 return &_worldPacket;
1152}
1153
1155{
1158 _worldPacket << Bits<1>(Reverse);
1160
1161 return &_worldPacket;
1162}
1163
1165{
1167 _worldPacket >> Bits<1>(IsFavorite);
1168}
1169
1174}
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:1847
Spells
Definition PlayerAI.cpp:32
Gender
@ SPELL_MISS_REFLECT
Targets
void reserve(size_t ressize)
Definition ByteBuffer.h:578
void append(T value)
Definition ByteBuffer.h:130
void ResetBitPos()
Definition ByteBuffer.h:152
void FlushBits()
Definition ByteBuffer.h:141
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 TODO: port commit from 3....
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
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 TODO: port commit from 3....
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 TODO: port commit from 3....
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 TODO: port commit from 3....
WorldPacket const * Write() override
ObjectGuid FailedBy
Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT TODO: port commit from 3....
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
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
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