TrinityCore
UpdateFields.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 "UpdateFields.h"
19#include "AreaTrigger.h"
20#include "ByteBuffer.h"
21#include "Corpse.h"
22#include "DynamicObject.h"
23#include "Player.h"
25
26// This file is automatically generated, DO NOT EDIT
27
28#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
29#pragma GCC diagnostic push
30#pragma GCC diagnostic ignored "-Wunused-parameter"
31#else
32#pragma warning(push)
33#pragma warning(disable: 4100)
34#endif
35
36namespace UF
37{
38void ObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
39{
40 data << int32(ViewerDependentValue<EntryIDTag>::GetValue(this, owner, receiver));
41 data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(this, owner, receiver));
42 data << float(Scale);
43}
44
45void ObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
46{
47 WriteUpdate(data, _changesMask, false, owner, receiver);
48}
49
50void ObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const
51{
52 data.WriteBits(changesMask.GetBlock(0), 4);
53
54 data.FlushBits();
55 if (changesMask[0])
56 {
57 if (changesMask[1])
58 {
59 data << int32(ViewerDependentValue<EntryIDTag>::GetValue(this, owner, receiver));
60 }
61 if (changesMask[2])
62 {
63 data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(this, owner, receiver));
64 }
65 if (changesMask[3])
66 {
67 data << float(Scale);
68 }
69 }
70}
71
73{
78}
79
80void ItemEnchantment::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
81{
82 data << int32(ID);
83 data << uint32(Duration);
84 data << int16(Charges);
85 data << uint16(Inactive);
86}
87
88void ItemEnchantment::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
89{
90 Mask changesMask = _changesMask;
91 if (ignoreChangesMask)
92 changesMask.SetAll();
93
94 data.WriteBits(changesMask.GetBlock(0), 5);
95
96 data.FlushBits();
97 if (changesMask[0])
98 {
99 if (changesMask[1])
100 {
101 data << int32(ID);
102 }
103 if (changesMask[2])
104 {
105 data << uint32(Duration);
106 }
107 if (changesMask[3])
108 {
109 data << int16(Charges);
110 }
111 if (changesMask[4])
112 {
113 data << uint16(Inactive);
114 }
115 }
116}
117
119{
125}
126
127void ItemMod::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
128{
129 data << int32(Value);
130 data << uint8(Type);
131}
132
133void ItemMod::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
134{
135 data << int32(Value);
136 data << uint8(Type);
137}
138
139bool ItemMod::operator==(ItemMod const& right) const
140{
141 return Value == right.Value
142 && Type == right.Type;
143}
144
145void ItemModList::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
146{
147 data.WriteBits(Values.size(), 6);
148 for (uint32 i = 0; i < Values.size(); ++i)
149 {
150 Values[i].WriteCreate(data, owner, receiver);
151 }
152 data.FlushBits();
153}
154
155void ItemModList::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
156{
157 Mask changesMask = _changesMask;
158 if (ignoreChangesMask)
159 changesMask.SetAll();
160
161 data.WriteBits(changesMask.GetBlock(0), 1);
162
163 if (changesMask[0])
164 {
165 if (!ignoreChangesMask)
166 Values.WriteUpdateMask(data, 6);
167 else
169 }
170 data.FlushBits();
171 if (changesMask[0])
172 {
173 for (uint32 i = 0; i < Values.size(); ++i)
174 {
175 if (Values.HasChanged(i) || ignoreChangesMask)
176 {
177 Values[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
178 }
179 }
180 }
181 data.FlushBits();
182}
183
185{
188}
189
190void ArtifactPower::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
191{
192 data << int16(ArtifactPowerID);
193 data << uint8(PurchasedRank);
195}
196
197void ArtifactPower::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
198{
199 data << int16(ArtifactPowerID);
200 data << uint8(PurchasedRank);
202}
203
205{
206 return ArtifactPowerID == right.ArtifactPowerID
207 && PurchasedRank == right.PurchasedRank
209}
210
211void SocketedGem::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
212{
213 data << int32(ItemID);
214 for (uint32 i = 0; i < 16; ++i)
215 {
216 data << uint16(BonusListIDs[i]);
217 }
218 data << uint8(Context);
219}
220
221void SocketedGem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
222{
223 Mask changesMask = _changesMask;
224 if (ignoreChangesMask)
225 changesMask.SetAll();
226
227 data.WriteBits(changesMask.GetBlocksMask(0), 1);
228 if (changesMask.GetBlock(0))
229 data.WriteBits(changesMask.GetBlock(0), 32);
230
231 data.FlushBits();
232 if (changesMask[0])
233 {
234 if (changesMask[1])
235 {
236 data << int32(ItemID);
237 }
238 if (changesMask[2])
239 {
240 data << uint8(Context);
241 }
242 }
243 if (changesMask[3])
244 {
245 for (uint32 i = 0; i < 16; ++i)
246 {
247 if (changesMask[4 + i])
248 {
249 data << uint16(BonusListIDs[i]);
250 }
251 }
252 }
253}
254
256{
261}
262
263void ItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
264{
265 data << Owner;
266 data << ContainedIn;
267 data << Creator;
268 data << GiftCreator;
269 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
270 {
271 data << uint32(StackCount);
272 data << uint32(Expiration);
273 for (uint32 i = 0; i < 5; ++i)
274 {
275 data << int32(SpellCharges[i]);
276 }
277 }
278 data << uint32(DynamicFlags);
279 for (uint32 i = 0; i < 13; ++i)
280 {
281 Enchantment[i].WriteCreate(data, owner, receiver);
282 }
283 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
284 {
285 data << uint32(Durability);
286 data << uint32(MaxDurability);
287 }
288 data << uint32(CreatePlayedTime);
289 data << int32(Context);
290 data << int64(CreateTime);
291 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
292 {
293 data << uint64(ArtifactXP);
294 data << uint8(ItemAppearanceModID);
295 }
296 data << uint32(ArtifactPowers.size());
297 data << uint32(Gems.size());
298 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
299 {
300 data << uint32(DynamicFlags2);
301 }
302 data << ItemBonusKey;
303 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
304 {
305 data << uint16(DEBUGItemLevel);
306 }
307 for (uint32 i = 0; i < ArtifactPowers.size(); ++i)
308 {
309 ArtifactPowers[i].WriteCreate(data, owner, receiver);
310 }
311 for (uint32 i = 0; i < Gems.size(); ++i)
312 {
313 Gems[i].WriteCreate(data, owner, receiver);
314 }
315 Modifiers->WriteCreate(data, owner, receiver);
316}
317
318void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
319{
320 Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
321 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
322 WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
323}
324
325void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
326{
327 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
328 allowedMaskForTarget |= { 0x07F58D80u, 0x00000000u };
329}
330
332{
333 Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
334 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
335 changesMask &= allowedMaskForTarget;
336}
337
338void ItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Item const* owner, Player const* receiver) const
339{
340 data.WriteBits(changesMask.GetBlocksMask(0), 2);
341 for (uint32 i = 0; i < 2; ++i)
342 if (changesMask.GetBlock(i))
343 data.WriteBits(changesMask.GetBlock(i), 32);
344
345 if (changesMask[0])
346 {
347 if (changesMask[1])
348 {
349 if (!ignoreNestedChangesMask)
351 else
353 }
354 if (changesMask[2])
355 {
356 if (!ignoreNestedChangesMask)
357 Gems.WriteUpdateMask(data);
358 else
360 }
361 }
362 data.FlushBits();
363 if (changesMask[0])
364 {
365 if (changesMask[1])
366 {
367 for (uint32 i = 0; i < ArtifactPowers.size(); ++i)
368 {
369 if (ArtifactPowers.HasChanged(i) || ignoreNestedChangesMask)
370 {
371 ArtifactPowers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
372 }
373 }
374 }
375 if (changesMask[2])
376 {
377 for (uint32 i = 0; i < Gems.size(); ++i)
378 {
379 if (Gems.HasChanged(i) || ignoreNestedChangesMask)
380 {
381 Gems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
382 }
383 }
384 }
385 if (changesMask[3])
386 {
387 data << Owner;
388 }
389 if (changesMask[4])
390 {
391 data << ContainedIn;
392 }
393 if (changesMask[5])
394 {
395 data << Creator;
396 }
397 if (changesMask[6])
398 {
399 data << GiftCreator;
400 }
401 if (changesMask[7])
402 {
403 data << uint32(StackCount);
404 }
405 if (changesMask[8])
406 {
407 data << uint32(Expiration);
408 }
409 if (changesMask[9])
410 {
411 data << uint32(DynamicFlags);
412 }
413 if (changesMask[10])
414 {
415 data << uint32(Durability);
416 }
417 if (changesMask[11])
418 {
419 data << uint32(MaxDurability);
420 }
421 if (changesMask[12])
422 {
423 data << uint32(CreatePlayedTime);
424 }
425 if (changesMask[13])
426 {
427 data << int32(Context);
428 }
429 if (changesMask[14])
430 {
431 data << int64(CreateTime);
432 }
433 if (changesMask[15])
434 {
435 data << uint64(ArtifactXP);
436 }
437 if (changesMask[16])
438 {
439 data << uint8(ItemAppearanceModID);
440 }
441 if (changesMask[18])
442 {
443 data << uint32(DynamicFlags2);
444 }
445 if (changesMask[19])
446 {
447 data << ItemBonusKey;
448 }
449 if (changesMask[20])
450 {
451 data << uint16(DEBUGItemLevel);
452 }
453 if (changesMask[17])
454 {
455 Modifiers->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
456 }
457 }
458 if (changesMask[21])
459 {
460 for (uint32 i = 0; i < 5; ++i)
461 {
462 if (changesMask[22 + i])
463 {
464 data << int32(SpellCharges[i]);
465 }
466 }
467 }
468 if (changesMask[27])
469 {
470 for (uint32 i = 0; i < 13; ++i)
471 {
472 if (changesMask[28 + i])
473 {
474 Enchantment[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
475 }
476 }
477 }
478}
479
481{
505}
506
507void ContainerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const
508{
509 for (uint32 i = 0; i < 36; ++i)
510 {
511 data << Slots[i];
512 }
513 data << uint32(NumSlots);
514}
515
516void ContainerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const
517{
518 WriteUpdate(data, _changesMask, false, owner, receiver);
519}
520
521void ContainerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Bag const* owner, Player const* receiver) const
522{
523 data.WriteBits(changesMask.GetBlocksMask(0), 2);
524 for (uint32 i = 0; i < 2; ++i)
525 if (changesMask.GetBlock(i))
526 data.WriteBits(changesMask.GetBlock(i), 32);
527
528 data.FlushBits();
529 if (changesMask[0])
530 {
531 if (changesMask[1])
532 {
533 data << uint32(NumSlots);
534 }
535 }
536 if (changesMask[2])
537 {
538 for (uint32 i = 0; i < 36; ++i)
539 {
540 if (changesMask[3 + i])
541 {
542 data << Slots[i];
543 }
544 }
545 }
546}
547
549{
553}
554
555void AzeriteEmpoweredItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const
556{
557 for (uint32 i = 0; i < 5; ++i)
558 {
559 data << int32(Selections[i]);
560 }
561}
562
563void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const
564{
565 WriteUpdate(data, _changesMask, false, owner, receiver);
566}
567
568void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteEmpoweredItem const* owner, Player const* receiver) const
569{
570 data.WriteBits(changesMask.GetBlocksMask(0), 1);
571 if (changesMask.GetBlock(0))
572 data.WriteBits(changesMask.GetBlock(0), 32);
573
574 data.FlushBits();
575 if (changesMask[0])
576 {
577 for (uint32 i = 0; i < 5; ++i)
578 {
579 if (changesMask[1 + i])
580 {
581 data << int32(Selections[i]);
582 }
583 }
584 }
585}
586
588{
591}
592
593void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const
594{
595 data << uint32(AzeriteEssenceID);
596 data << uint32(Rank);
597}
598
599void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const
600{
601 data << uint32(AzeriteEssenceID);
602 data << uint32(Rank);
603}
604
606{
607 return AzeriteEssenceID == right.AzeriteEssenceID
608 && Rank == right.Rank;
609}
610
611void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const
612{
613 for (uint32 i = 0; i < 4; ++i)
614 {
615 data << uint32(AzeriteEssenceID[i]);
616 }
617 data << uint32(SpecializationID);
618 data.WriteBit(Enabled);
619 data.FlushBits();
620}
621
622void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const
623{
624 Mask changesMask = _changesMask;
625 if (ignoreChangesMask)
626 changesMask.SetAll();
627
628 data.WriteBits(changesMask.GetBlocksMask(0), 1);
629 if (changesMask.GetBlock(0))
630 data.WriteBits(changesMask.GetBlock(0), 32);
631
632 if (changesMask[0])
633 {
634 if (changesMask[1])
635 {
636 data.WriteBit(Enabled);
637 }
638 }
639 data.FlushBits();
640 if (changesMask[0])
641 {
642 if (changesMask[2])
643 {
644 data << uint32(SpecializationID);
645 }
646 }
647 if (changesMask[3])
648 {
649 for (uint32 i = 0; i < 4; ++i)
650 {
651 if (changesMask[4 + i])
652 {
653 data << uint32(AzeriteEssenceID[i]);
654 }
655 }
656 }
657 data.FlushBits();
658}
659
661{
666}
667
668void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const
669{
670 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
671 {
672 data << uint64(Xp);
673 data << uint32(Level);
674 data << uint32(AuraLevel);
675 data << uint32(KnowledgeLevel);
676 data << int32(DEBUGknowledgeWeek);
677 }
678 data << uint32(UnlockedEssences.size());
679 data << uint32(SelectedEssences.size());
681 for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
682 {
683 UnlockedEssences[i].WriteCreate(data, owner, receiver);
684 }
685 for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
686 {
688 }
689 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
690 {
691 data.WriteBit(Enabled);
692 }
693 for (uint32 i = 0; i < SelectedEssences.size(); ++i)
694 {
695 SelectedEssences[i].WriteCreate(data, owner, receiver);
696 }
697 data.FlushBits();
698}
699
700void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const
701{
702 Mask allowedMaskForTarget({ 0x0000001Du });
703 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
704 WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
705}
706
707void AzeriteItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
708{
709 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
710 allowedMaskForTarget |= { 0x000003E2u };
711}
712
714{
715 Mask allowedMaskForTarget({ 0x0000001Du });
716 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
717 changesMask &= allowedMaskForTarget;
718}
719
720void AzeriteItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteItem const* owner, Player const* receiver) const
721{
722 data.WriteBits(changesMask.GetBlock(0), 10);
723
724 if (changesMask[0])
725 {
726 if (changesMask[1])
727 {
728 data.WriteBit(Enabled);
729 }
730 if (changesMask[2])
731 {
732 if (!ignoreNestedChangesMask)
734 else
736 }
737 if (changesMask[3])
738 {
739 if (!ignoreNestedChangesMask)
741 else
743 }
744 if (changesMask[4])
745 {
746 if (!ignoreNestedChangesMask)
748 else
750 }
751 }
752 data.FlushBits();
753 if (changesMask[0])
754 {
755 if (changesMask[2])
756 {
757 for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
758 {
759 if (UnlockedEssences.HasChanged(i) || ignoreNestedChangesMask)
760 {
761 UnlockedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
762 }
763 }
764 }
765 if (changesMask[4])
766 {
767 for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
768 {
769 if (UnlockedEssenceMilestones.HasChanged(i) || ignoreNestedChangesMask)
770 {
772 }
773 }
774 }
775 if (changesMask[3])
776 {
777 for (uint32 i = 0; i < SelectedEssences.size(); ++i)
778 {
779 if (SelectedEssences.HasChanged(i) || ignoreNestedChangesMask)
780 {
781 SelectedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
782 }
783 }
784 }
785 if (changesMask[5])
786 {
787 data << uint64(Xp);
788 }
789 if (changesMask[6])
790 {
791 data << uint32(Level);
792 }
793 if (changesMask[7])
794 {
795 data << uint32(AuraLevel);
796 }
797 if (changesMask[8])
798 {
799 data << uint32(KnowledgeLevel);
800 }
801 if (changesMask[9])
802 {
803 data << int32(DEBUGknowledgeWeek);
804 }
805 }
806 data.FlushBits();
807}
808
810{
821}
822
823void SpellCastVisual::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const
824{
825 data << int32(SpellXSpellVisualID);
826 data << int32(ScriptVisualID);
827}
828
829void SpellCastVisual::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const
830{
831 data << int32(SpellXSpellVisualID);
832 data << int32(ScriptVisualID);
833}
834
836{
838 && ScriptVisualID == right.ScriptVisualID;
839}
840
841void UnitChannel::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
842{
843 data << int32(SpellID);
844 SpellVisual.WriteCreate(data, owner, receiver);
845}
846
847void UnitChannel::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const
848{
849 data << int32(SpellID);
850 SpellVisual.WriteUpdate(data, ignoreChangesMask, owner, receiver);
851}
852
853bool UnitChannel::operator==(UnitChannel const& right) const
854{
855 return SpellID == right.SpellID
856 && SpellVisual == right.SpellVisual;
857}
858
859void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
860{
861 data << int32(ItemID);
865 data << uint16(ItemVisual);
866}
867
868void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const
869{
870 Mask changesMask = _changesMask;
871 if (ignoreChangesMask)
872 changesMask.SetAll();
873
874 data.WriteBits(changesMask.GetBlock(0), 6);
875
876 data.FlushBits();
877 if (changesMask[0])
878 {
879 if (changesMask[1])
880 {
881 data << int32(ItemID);
882 }
883 if (changesMask[2])
884 {
886 }
887 if (changesMask[3])
888 {
890 }
891 if (changesMask[4])
892 {
894 }
895 if (changesMask[5])
896 {
897 data << uint16(ItemVisual);
898 }
899 }
900}
901
903{
910}
911
912void PassiveSpellHistory::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
913{
914 data << int32(SpellID);
915 data << int32(AuraSpellID);
916}
917
918void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const
919{
920 data << int32(SpellID);
921 data << int32(AuraSpellID);
922}
923
925{
926 return SpellID == right.SpellID
927 && AuraSpellID == right.AuraSpellID;
928}
929
930void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
931{
932 data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
933 for (uint32 i = 0; i < 2; ++i)
934 {
935 data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver));
936 }
937 data << uint32(StateSpellVisualID);
938 data << uint32(StateAnimID);
939 data << uint32(StateAnimKitID);
940 data << uint32(StateWorldEffectIDs->size());
942 data << int32(SpellOverrideNameID);
943 for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i)
944 {
945 data << uint32((*StateWorldEffectIDs)[i]);
946 }
947 data << Charm;
948 data << Summon;
949 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
950 {
951 data << Critter;
952 }
953 data << CharmedBy;
954 data << SummonedBy;
955 data << CreatedBy;
956 data << DemonCreator;
958 data << Target;
960 data << uint64(BattlePetDBID);
961 ChannelData->WriteCreate(data, owner, receiver);
962 data << int8(SpellEmpowerStage);
964 data << uint8(Race);
965 data << uint8(ClassId);
966 data << uint8(PlayerClassId);
967 data << uint8(Sex);
968 data << uint8(DisplayPower);
970 data << int64(Health);
971 for (uint32 i = 0; i < 10; ++i)
972 {
973 data << int32(Power[i]);
974 data << int32(MaxPower[i]);
975 }
976 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::UnitAll))
977 {
978 for (uint32 i = 0; i < 10; ++i)
979 {
980 data << float(PowerRegenFlatModifier[i]);
981 data << float(PowerRegenInterruptedFlatModifier[i]);
982 }
983 }
984 data << int64(MaxHealth);
985 data << int32(Level);
986 data << int32(EffectiveLevel);
987 data << int32(ContentTuningID);
988 data << int32(ScalingLevelMin);
989 data << int32(ScalingLevelMax);
990 data << int32(ScalingLevelDelta);
991 data << int32(ScalingFactionGroup);
994 data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver));
995 for (uint32 i = 0; i < 3; ++i)
996 {
997 VirtualItems[i].WriteCreate(data, owner, receiver);
998 }
999 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
1000 data << uint32(Flags2);
1001 data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver));
1002 data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver));
1003 for (uint32 i = 0; i < 2; ++i)
1004 {
1005 data << uint32(AttackRoundBaseTime[i]);
1006 }
1007 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1008 {
1010 }
1011 data << float(BoundingRadius);
1012 data << float(CombatReach);
1013 data << float(DisplayScale);
1014 data << int32(CreatureFamily);
1015 data << int32(CreatureType);
1016 data << int32(NativeDisplayID);
1017 data << float(NativeXDisplayScale);
1018 data << int32(MountDisplayID);
1020 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
1021 {
1022 data << float(MinDamage);
1023 data << float(MaxDamage);
1024 data << float(MinOffHandDamage);
1025 data << float(MaxOffHandDamage);
1026 }
1027 data << uint8(StandState);
1028 data << uint8(PetTalentPoints);
1029 data << uint8(VisFlags);
1030 data << uint8(AnimTier);
1031 data << uint32(PetNumber);
1032 data << uint32(PetNameTimestamp);
1033 data << uint32(PetExperience);
1035 data << float(ModCastingSpeed);
1036 data << float(ModCastingSpeedNeg);
1037 data << float(ModSpellHaste);
1038 data << float(ModHaste);
1039 data << float(ModRangedHaste);
1040 data << float(ModHasteRegen);
1041 data << float(ModTimeRate);
1042 data << int32(CreatedBySpell);
1043 data << int32(EmoteState);
1044 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1045 {
1046 for (uint32 i = 0; i < 4; ++i)
1047 {
1048 data << int32(Stats[i]);
1049 data << int32(StatPosBuff[i]);
1050 data << int32(StatNegBuff[i]);
1051 data << int32(StatSupportBuff[i]);
1052 }
1053 }
1054 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
1055 {
1056 for (uint32 i = 0; i < 7; ++i)
1057 {
1058 data << int32(Resistances[i]);
1059 }
1060 }
1061 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1062 {
1063 for (uint32 i = 0; i < 7; ++i)
1064 {
1065 data << int32(BonusResistanceMods[i]);
1066 data << int32(ManaCostModifier[i]);
1067 }
1068 }
1069 data << int32(BaseMana);
1070 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1071 {
1072 data << int32(BaseHealth);
1073 }
1074 data << uint8(SheatheState);
1075 data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver));
1076 data << uint8(PetFlags);
1077 data << uint8(ShapeshiftForm);
1078 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1079 {
1080 data << int32(AttackPower);
1081 data << int32(AttackPowerModPos);
1082 data << int32(AttackPowerModNeg);
1083 data << float(AttackPowerMultiplier);
1085 data << int32(RangedAttackPower);
1088 data << float(RangedAttackPowerMultiplier);
1093 data << int32(SetAttackSpeedAura);
1094 data << float(Lifesteal);
1095 data << float(MinRangedDamage);
1096 data << float(MaxRangedDamage);
1097 data << float(ManaCostMultiplier);
1098 data << float(MaxHealthModifier);
1099 }
1100 data << float(HoverHeight);
1101 data << int32(MinItemLevelCutoff);
1102 data << int32(MinItemLevel);
1103 data << int32(MaxItemLevel);
1104 data << int32(AzeriteItemLevel);
1105 data << int32(WildBattlePetLevel);
1108 data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver));
1109 data << int32(ScaleDuration);
1110 data << int32(LooksLikeMountID);
1111 data << int32(LooksLikeCreatureID);
1112 data << int32(LookAtControllerID);
1113 data << int32(PerksVendorItemID);
1114 data << int32(TaxiNodesID);
1115 data << GuildGUID;
1116 data << uint32(PassiveSpells.size());
1117 data << uint32(WorldEffects.size());
1118 data << uint32(ChannelObjects.size());
1119 data << int32(FlightCapabilityID);
1120 data << float(GlideEventSpeedDivisor);
1121 data << uint32(SilencedSchoolMask);
1122 data << uint32(CurrentAreaID);
1123 data << NameplateAttachToGUID;
1124 for (uint32 i = 0; i < PassiveSpells.size(); ++i)
1125 {
1126 PassiveSpells[i].WriteCreate(data, owner, receiver);
1127 }
1128 for (uint32 i = 0; i < WorldEffects.size(); ++i)
1129 {
1130 data << int32(WorldEffects[i]);
1131 }
1132 for (uint32 i = 0; i < ChannelObjects.size(); ++i)
1133 {
1134 data << ChannelObjects[i];
1135 }
1136}
1137
1138void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
1139{
1140 Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFC01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u });
1141 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1142 WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
1143}
1144
1145void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
1146{
1147 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1148 allowedMaskForTarget |= { 0x00002000u, 0x3C010000u, 0xFFC20000u, 0x000003FEu, 0xFF800004u, 0xFFFC07FFu, 0x01FFFFFFu };
1149 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
1150 allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFF800004u, 0x000007FFu, 0x00000000u };
1151 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
1152 allowedMaskForTarget |= { 0x00000000u, 0x3C000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u };
1153}
1154
1156{
1157 Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFC01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u });
1158 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1159 changesMask &= allowedMaskForTarget;
1160}
1161
1162void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Unit const* owner, Player const* receiver) const
1163{
1164 data.WriteBits(changesMask.GetBlocksMask(0), 7);
1165 for (uint32 i = 0; i < 7; ++i)
1166 if (changesMask.GetBlock(i))
1167 data.WriteBits(changesMask.GetBlock(i), 32);
1168
1169 if (changesMask[0])
1170 {
1171 if (changesMask[1])
1172 {
1173 data.WriteBits(StateWorldEffectIDs->size(), 32);
1174 for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i)
1175 {
1176 data << uint32((*StateWorldEffectIDs)[i]);
1177 }
1178 }
1179 }
1180 data.FlushBits();
1181 if (changesMask[0])
1182 {
1183 if (changesMask[2])
1184 {
1185 if (!ignoreNestedChangesMask)
1187 else
1189 }
1190 if (changesMask[3])
1191 {
1192 if (!ignoreNestedChangesMask)
1194 else
1196 }
1197 if (changesMask[4])
1198 {
1199 if (!ignoreNestedChangesMask)
1201 else
1203 }
1204 }
1205 data.FlushBits();
1206 if (changesMask[0])
1207 {
1208 if (changesMask[2])
1209 {
1210 for (uint32 i = 0; i < PassiveSpells.size(); ++i)
1211 {
1212 if (PassiveSpells.HasChanged(i) || ignoreNestedChangesMask)
1213 {
1214 PassiveSpells[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
1215 }
1216 }
1217 }
1218 if (changesMask[3])
1219 {
1220 for (uint32 i = 0; i < WorldEffects.size(); ++i)
1221 {
1222 if (WorldEffects.HasChanged(i) || ignoreNestedChangesMask)
1223 {
1224 data << int32(WorldEffects[i]);
1225 }
1226 }
1227 }
1228 if (changesMask[4])
1229 {
1230 for (uint32 i = 0; i < ChannelObjects.size(); ++i)
1231 {
1232 if (ChannelObjects.HasChanged(i) || ignoreNestedChangesMask)
1233 {
1234 data << ChannelObjects[i];
1235 }
1236 }
1237 }
1238 if (changesMask[5])
1239 {
1240 data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
1241 }
1242 if (changesMask[6])
1243 {
1244 data << uint32(StateSpellVisualID);
1245 }
1246 if (changesMask[7])
1247 {
1248 data << uint32(StateAnimID);
1249 }
1250 if (changesMask[8])
1251 {
1252 data << uint32(StateAnimKitID);
1253 }
1254 if (changesMask[9])
1255 {
1257 }
1258 if (changesMask[10])
1259 {
1260 data << int32(SpellOverrideNameID);
1261 }
1262 if (changesMask[11])
1263 {
1264 data << Charm;
1265 }
1266 if (changesMask[12])
1267 {
1268 data << Summon;
1269 }
1270 if (changesMask[13])
1271 {
1272 data << Critter;
1273 }
1274 if (changesMask[14])
1275 {
1276 data << CharmedBy;
1277 }
1278 if (changesMask[15])
1279 {
1280 data << SummonedBy;
1281 }
1282 if (changesMask[16])
1283 {
1284 data << CreatedBy;
1285 }
1286 if (changesMask[17])
1287 {
1288 data << DemonCreator;
1289 }
1290 if (changesMask[18])
1291 {
1292 data << LookAtControllerTarget;
1293 }
1294 if (changesMask[19])
1295 {
1296 data << Target;
1297 }
1298 if (changesMask[20])
1299 {
1300 data << BattlePetCompanionGUID;
1301 }
1302 if (changesMask[21])
1303 {
1304 data << uint64(BattlePetDBID);
1305 }
1306 if (changesMask[22])
1307 {
1308 ChannelData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
1309 }
1310 if (changesMask[23])
1311 {
1312 data << int8(SpellEmpowerStage);
1313 }
1314 if (changesMask[24])
1315 {
1316 data << uint32(SummonedByHomeRealm);
1317 }
1318 if (changesMask[25])
1319 {
1320 data << uint8(Race);
1321 }
1322 if (changesMask[26])
1323 {
1324 data << uint8(ClassId);
1325 }
1326 if (changesMask[27])
1327 {
1328 data << uint8(PlayerClassId);
1329 }
1330 if (changesMask[28])
1331 {
1332 data << uint8(Sex);
1333 }
1334 if (changesMask[29])
1335 {
1336 data << uint8(DisplayPower);
1337 }
1338 if (changesMask[30])
1339 {
1341 }
1342 if (changesMask[31])
1343 {
1344 data << int64(Health);
1345 }
1346 }
1347 if (changesMask[32])
1348 {
1349 if (changesMask[33])
1350 {
1351 data << int64(MaxHealth);
1352 }
1353 if (changesMask[34])
1354 {
1355 data << int32(Level);
1356 }
1357 if (changesMask[35])
1358 {
1359 data << int32(EffectiveLevel);
1360 }
1361 if (changesMask[36])
1362 {
1363 data << int32(ContentTuningID);
1364 }
1365 if (changesMask[37])
1366 {
1367 data << int32(ScalingLevelMin);
1368 }
1369 if (changesMask[38])
1370 {
1371 data << int32(ScalingLevelMax);
1372 }
1373 if (changesMask[39])
1374 {
1375 data << int32(ScalingLevelDelta);
1376 }
1377 if (changesMask[40])
1378 {
1379 data << int32(ScalingFactionGroup);
1380 }
1381 if (changesMask[41])
1382 {
1384 }
1385 if (changesMask[42])
1386 {
1388 }
1389 if (changesMask[43])
1390 {
1391 data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver));
1392 }
1393 if (changesMask[44])
1394 {
1395 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
1396 }
1397 if (changesMask[45])
1398 {
1399 data << uint32(Flags2);
1400 }
1401 if (changesMask[46])
1402 {
1403 data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver));
1404 }
1405 if (changesMask[47])
1406 {
1407 data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver));
1408 }
1409 if (changesMask[48])
1410 {
1412 }
1413 if (changesMask[49])
1414 {
1415 data << float(BoundingRadius);
1416 }
1417 if (changesMask[50])
1418 {
1419 data << float(CombatReach);
1420 }
1421 if (changesMask[51])
1422 {
1423 data << float(DisplayScale);
1424 }
1425 if (changesMask[52])
1426 {
1427 data << int32(CreatureFamily);
1428 }
1429 if (changesMask[53])
1430 {
1431 data << int32(CreatureType);
1432 }
1433 if (changesMask[54])
1434 {
1435 data << int32(NativeDisplayID);
1436 }
1437 if (changesMask[55])
1438 {
1439 data << float(NativeXDisplayScale);
1440 }
1441 if (changesMask[56])
1442 {
1443 data << int32(MountDisplayID);
1444 }
1445 if (changesMask[57])
1446 {
1448 }
1449 if (changesMask[58])
1450 {
1451 data << float(MinDamage);
1452 }
1453 if (changesMask[59])
1454 {
1455 data << float(MaxDamage);
1456 }
1457 if (changesMask[60])
1458 {
1459 data << float(MinOffHandDamage);
1460 }
1461 if (changesMask[61])
1462 {
1463 data << float(MaxOffHandDamage);
1464 }
1465 if (changesMask[62])
1466 {
1467 data << uint8(StandState);
1468 }
1469 if (changesMask[63])
1470 {
1471 data << uint8(PetTalentPoints);
1472 }
1473 }
1474 if (changesMask[64])
1475 {
1476 if (changesMask[65])
1477 {
1478 data << uint8(VisFlags);
1479 }
1480 if (changesMask[66])
1481 {
1482 data << uint8(AnimTier);
1483 }
1484 if (changesMask[67])
1485 {
1486 data << uint32(PetNumber);
1487 }
1488 if (changesMask[68])
1489 {
1490 data << uint32(PetNameTimestamp);
1491 }
1492 if (changesMask[69])
1493 {
1494 data << uint32(PetExperience);
1495 }
1496 if (changesMask[70])
1497 {
1499 }
1500 if (changesMask[71])
1501 {
1502 data << float(ModCastingSpeed);
1503 }
1504 if (changesMask[72])
1505 {
1506 data << float(ModCastingSpeedNeg);
1507 }
1508 if (changesMask[73])
1509 {
1510 data << float(ModSpellHaste);
1511 }
1512 if (changesMask[74])
1513 {
1514 data << float(ModHaste);
1515 }
1516 if (changesMask[75])
1517 {
1518 data << float(ModRangedHaste);
1519 }
1520 if (changesMask[76])
1521 {
1522 data << float(ModHasteRegen);
1523 }
1524 if (changesMask[77])
1525 {
1526 data << float(ModTimeRate);
1527 }
1528 if (changesMask[78])
1529 {
1530 data << int32(CreatedBySpell);
1531 }
1532 if (changesMask[79])
1533 {
1534 data << int32(EmoteState);
1535 }
1536 if (changesMask[80])
1537 {
1538 data << int32(BaseMana);
1539 }
1540 if (changesMask[81])
1541 {
1542 data << int32(BaseHealth);
1543 }
1544 if (changesMask[82])
1545 {
1546 data << uint8(SheatheState);
1547 }
1548 if (changesMask[83])
1549 {
1550 data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver));
1551 }
1552 if (changesMask[84])
1553 {
1554 data << uint8(PetFlags);
1555 }
1556 if (changesMask[85])
1557 {
1558 data << uint8(ShapeshiftForm);
1559 }
1560 if (changesMask[86])
1561 {
1562 data << int32(AttackPower);
1563 }
1564 if (changesMask[87])
1565 {
1566 data << int32(AttackPowerModPos);
1567 }
1568 if (changesMask[88])
1569 {
1570 data << int32(AttackPowerModNeg);
1571 }
1572 if (changesMask[89])
1573 {
1574 data << float(AttackPowerMultiplier);
1575 }
1576 if (changesMask[90])
1577 {
1579 }
1580 if (changesMask[91])
1581 {
1582 data << int32(RangedAttackPower);
1583 }
1584 if (changesMask[92])
1585 {
1587 }
1588 if (changesMask[93])
1589 {
1591 }
1592 if (changesMask[94])
1593 {
1594 data << float(RangedAttackPowerMultiplier);
1595 }
1596 if (changesMask[95])
1597 {
1599 }
1600 }
1601 if (changesMask[96])
1602 {
1603 if (changesMask[97])
1604 {
1606 }
1607 if (changesMask[98])
1608 {
1610 }
1611 if (changesMask[99])
1612 {
1614 }
1615 if (changesMask[100])
1616 {
1617 data << int32(SetAttackSpeedAura);
1618 }
1619 if (changesMask[101])
1620 {
1621 data << float(Lifesteal);
1622 }
1623 if (changesMask[102])
1624 {
1625 data << float(MinRangedDamage);
1626 }
1627 if (changesMask[103])
1628 {
1629 data << float(MaxRangedDamage);
1630 }
1631 if (changesMask[104])
1632 {
1633 data << float(ManaCostMultiplier);
1634 }
1635 if (changesMask[105])
1636 {
1637 data << float(MaxHealthModifier);
1638 }
1639 if (changesMask[106])
1640 {
1641 data << float(HoverHeight);
1642 }
1643 if (changesMask[107])
1644 {
1645 data << int32(MinItemLevelCutoff);
1646 }
1647 if (changesMask[108])
1648 {
1649 data << int32(MinItemLevel);
1650 }
1651 if (changesMask[109])
1652 {
1653 data << int32(MaxItemLevel);
1654 }
1655 if (changesMask[110])
1656 {
1657 data << int32(AzeriteItemLevel);
1658 }
1659 if (changesMask[111])
1660 {
1661 data << int32(WildBattlePetLevel);
1662 }
1663 if (changesMask[112])
1664 {
1666 }
1667 if (changesMask[113])
1668 {
1670 }
1671 if (changesMask[114])
1672 {
1673 data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver));
1674 }
1675 if (changesMask[115])
1676 {
1677 data << int32(ScaleDuration);
1678 }
1679 if (changesMask[116])
1680 {
1681 data << int32(LooksLikeMountID);
1682 }
1683 if (changesMask[117])
1684 {
1685 data << int32(LooksLikeCreatureID);
1686 }
1687 if (changesMask[118])
1688 {
1689 data << int32(LookAtControllerID);
1690 }
1691 if (changesMask[119])
1692 {
1693 data << int32(PerksVendorItemID);
1694 }
1695 if (changesMask[120])
1696 {
1697 data << int32(TaxiNodesID);
1698 }
1699 if (changesMask[121])
1700 {
1701 data << GuildGUID;
1702 }
1703 if (changesMask[122])
1704 {
1705 data << int32(FlightCapabilityID);
1706 }
1707 if (changesMask[123])
1708 {
1709 data << float(GlideEventSpeedDivisor);
1710 }
1711 if (changesMask[124])
1712 {
1713 data << uint32(SilencedSchoolMask);
1714 }
1715 if (changesMask[125])
1716 {
1717 data << uint32(CurrentAreaID);
1718 }
1719 if (changesMask[126])
1720 {
1721 data << NameplateAttachToGUID;
1722 }
1723 }
1724 if (changesMask[127])
1725 {
1726 for (uint32 i = 0; i < 2; ++i)
1727 {
1728 if (changesMask[128 + i])
1729 {
1730 data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver));
1731 }
1732 }
1733 }
1734 if (changesMask[130])
1735 {
1736 for (uint32 i = 0; i < 10; ++i)
1737 {
1738 if (changesMask[131 + i])
1739 {
1740 data << int32(Power[i]);
1741 }
1742 if (changesMask[141 + i])
1743 {
1744 data << int32(MaxPower[i]);
1745 }
1746 if (changesMask[151 + i])
1747 {
1748 data << float(PowerRegenFlatModifier[i]);
1749 }
1750 if (changesMask[161 + i])
1751 {
1752 data << float(PowerRegenInterruptedFlatModifier[i]);
1753 }
1754 }
1755 }
1756 if (changesMask[171])
1757 {
1758 for (uint32 i = 0; i < 3; ++i)
1759 {
1760 if (changesMask[172 + i])
1761 {
1762 VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
1763 }
1764 }
1765 }
1766 if (changesMask[175])
1767 {
1768 for (uint32 i = 0; i < 2; ++i)
1769 {
1770 if (changesMask[176 + i])
1771 {
1772 data << uint32(AttackRoundBaseTime[i]);
1773 }
1774 }
1775 }
1776 if (changesMask[178])
1777 {
1778 for (uint32 i = 0; i < 4; ++i)
1779 {
1780 if (changesMask[179 + i])
1781 {
1782 data << int32(Stats[i]);
1783 }
1784 if (changesMask[183 + i])
1785 {
1786 data << int32(StatPosBuff[i]);
1787 }
1788 if (changesMask[187 + i])
1789 {
1790 data << int32(StatNegBuff[i]);
1791 }
1792 if (changesMask[191 + i])
1793 {
1794 data << int32(StatSupportBuff[i]);
1795 }
1796 }
1797 }
1798 if (changesMask[195])
1799 {
1800 for (uint32 i = 0; i < 7; ++i)
1801 {
1802 if (changesMask[196 + i])
1803 {
1804 data << int32(Resistances[i]);
1805 }
1806 if (changesMask[203 + i])
1807 {
1808 data << int32(BonusResistanceMods[i]);
1809 }
1810 if (changesMask[210 + i])
1811 {
1812 data << int32(ManaCostModifier[i]);
1813 }
1814 }
1815 }
1816}
1817
1819{
1958}
1959
1960void ChrCustomizationChoice::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const
1961{
1964}
1965
1966void ChrCustomizationChoice::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const
1967{
1970}
1971
1973{
1976}
1977
1978void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
1979{
1980 data << int64(EndTime);
1981 data << int32(QuestID);
1982 data << uint32(StateFlags);
1983 data << uint32(ObjectiveFlags);
1984 for (uint32 i = 0; i < 24; ++i)
1985 {
1986 data << int16(ObjectiveProgress[i]);
1987 }
1988}
1989
1990void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
1991{
1992 Mask changesMask = _changesMask;
1993 if (ignoreChangesMask)
1994 changesMask.SetAll();
1995
1996 data.WriteBits(changesMask.GetBlocksMask(0), 1);
1997 if (changesMask.GetBlock(0))
1998 data.WriteBits(changesMask.GetBlock(0), 32);
1999
2000 data.FlushBits();
2001 if (changesMask[0])
2002 {
2003 if (changesMask[1])
2004 {
2005 data << int64(EndTime);
2006 }
2007 if (changesMask[2])
2008 {
2009 data << int32(QuestID);
2010 }
2011 if (changesMask[3])
2012 {
2013 data << uint32(StateFlags);
2014 }
2015 if (changesMask[4])
2016 {
2017 data << uint32(ObjectiveFlags);
2018 }
2019 }
2020 if (changesMask[5])
2021 {
2022 for (uint32 i = 0; i < 24; ++i)
2023 {
2024 if (changesMask[6 + i])
2025 {
2026 data << int16(ObjectiveProgress[i]);
2027 }
2028 }
2029 }
2030}
2031
2033{
2040}
2041
2042void ArenaCooldown::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2043{
2044 data << int32(SpellID);
2045 data << int32(Charges);
2046 data << uint32(Flags);
2047 data << uint32(StartTime);
2048 data << uint32(EndTime);
2049 data << uint32(NextChargeTime);
2050 data << uint8(MaxCharges);
2051}
2052
2053void ArenaCooldown::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2054{
2055 Mask changesMask = _changesMask;
2056 if (ignoreChangesMask)
2057 changesMask.SetAll();
2058
2059 data.WriteBits(changesMask.GetBlock(0), 8);
2060
2061 data.FlushBits();
2062 if (changesMask[0])
2063 {
2064 if (changesMask[1])
2065 {
2066 data << int32(SpellID);
2067 }
2068 if (changesMask[2])
2069 {
2070 data << int32(Charges);
2071 }
2072 if (changesMask[3])
2073 {
2074 data << uint32(Flags);
2075 }
2076 if (changesMask[4])
2077 {
2078 data << uint32(StartTime);
2079 }
2080 if (changesMask[5])
2081 {
2082 data << uint32(EndTime);
2083 }
2084 if (changesMask[6])
2085 {
2086 data << uint32(NextChargeTime);
2087 }
2088 if (changesMask[7])
2089 {
2090 data << uint8(MaxCharges);
2091 }
2092 }
2093}
2094
2096{
2105}
2106
2107void CTROptions::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2108{
2110 data << uint32(Field_4);
2111 data << uint32(ExpansionLevelMask);
2112}
2113
2114void CTROptions::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2115{
2117 data << uint32(Field_4);
2118 data << uint32(ExpansionLevelMask);
2119}
2120
2121bool CTROptions::operator==(CTROptions const& right) const
2122{
2124 && Field_4 == right.Field_4
2126}
2127
2128void DeclinedNames::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2129{
2130 for (uint32 i = 0; i < 5; ++i)
2131 {
2132 data.WriteBits(Name[i].size(), 10);
2133 }
2134 data.FlushBits();
2135 for (uint32 i = 0; i < 5; ++i)
2136 {
2137 data.WriteString(Name[i]);
2138 }
2139 data.FlushBits();
2140}
2141
2142void DeclinedNames::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2143{
2144 Mask changesMask = _changesMask;
2145 if (ignoreChangesMask)
2146 changesMask.SetAll();
2147
2148 data.WriteBits(changesMask.GetBlocksMask(0), 1);
2149 if (changesMask.GetBlock(0))
2150 data.WriteBits(changesMask.GetBlock(0), 32);
2151
2152 data.FlushBits();
2153 if (changesMask[0])
2154 {
2155 for (uint32 i = 0; i < 5; ++i)
2156 {
2157 if (changesMask[1 + i])
2158 {
2159 data.WriteBits(Name[i].size(), 10);
2160 }
2161 }
2162 }
2163 data.FlushBits();
2164 if (changesMask[0])
2165 {
2166 for (uint32 i = 0; i < 5; ++i)
2167 {
2168 if (changesMask[1 + i])
2169 {
2170 data.WriteString(Name[i]);
2171 }
2172 }
2173 }
2174 data.FlushBits();
2175}
2176
2178{
2181}
2182
2183void CustomTabardInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2184{
2185 data << int32(EmblemStyle);
2186 data << int32(EmblemColor);
2187 data << int32(BorderStyle);
2188 data << int32(BorderColor);
2189 data << int32(BackgroundColor);
2190}
2191
2192void CustomTabardInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2193{
2194 Mask changesMask = _changesMask;
2195 if (ignoreChangesMask)
2196 changesMask.SetAll();
2197
2198 data.WriteBits(changesMask.GetBlock(0), 6);
2199
2200 data.FlushBits();
2201 if (changesMask[0])
2202 {
2203 if (changesMask[1])
2204 {
2205 data << int32(EmblemStyle);
2206 }
2207 if (changesMask[2])
2208 {
2209 data << int32(EmblemColor);
2210 }
2211 if (changesMask[3])
2212 {
2213 data << int32(BorderStyle);
2214 }
2215 if (changesMask[4])
2216 {
2217 data << int32(BorderColor);
2218 }
2219 if (changesMask[5])
2220 {
2221 data << int32(BackgroundColor);
2222 }
2223 }
2224}
2225
2227{
2234}
2235
2236void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
2237{
2238 data << DuelArbiter;
2239 data << WowAccount;
2240 data << BnetAccount;
2241 data << uint64(GuildClubMemberID);
2242 data << LootTargetGUID;
2243 data << uint32(PlayerFlags);
2244 data << uint32(PlayerFlagsEx);
2245 data << uint32(GuildRankID);
2246 data << uint32(GuildDeleteDate);
2247 data << int32(GuildLevel);
2248 data << uint32(Customizations.size());
2249 data << uint32(QaCustomizations.size());
2250 for (uint32 i = 0; i < 2; ++i)
2251 {
2252 data << uint8(PartyType[i]);
2253 }
2254 data << uint8(NativeSex);
2255 data << uint8(Inebriation);
2256 data << uint8(PvpTitle);
2257 data << uint8(ArenaFaction);
2258 data << uint32(DuelTeam);
2259 data << int32(GuildTimeStamp);
2260 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2261 {
2262 for (uint32 i = 0; i < 175; ++i)
2263 {
2264 QuestLog[i].WriteCreate(data, owner, receiver);
2265 }
2266 data << uint32(QuestSessionQuestLog.size());
2267 }
2268 for (uint32 i = 0; i < 19; ++i)
2269 {
2270 VisibleItems[i].WriteCreate(data, owner, receiver);
2271 }
2272 data << int32(PlayerTitle);
2273 data << int32(FakeInebriation);
2274 data << uint32(VirtualPlayerRealm);
2275 data << uint32(CurrentSpecID);
2276 data << int32(TaxiMountAnimKitID);
2277 for (uint32 i = 0; i < 6; ++i)
2278 {
2279 data << float(AvgItemLevel[i]);
2280 }
2282 data << int32(HonorLevel);
2283 data << int64(LogoutTime);
2284 data << uint32(ArenaCooldowns.size());
2285 data << int32(Field_B0);
2286 data << int32(Field_B4);
2288 CtrOptions->WriteCreate(data, owner, receiver);
2289 data << int32(CovenantID);
2290 data << int32(SoulbindID);
2292 for (uint32 i = 0; i < 19; ++i)
2293 {
2294 data << uint32(Field_3120[i]);
2295 }
2296 PersonalTabard->WriteCreate(data, owner, receiver);
2297 for (uint32 i = 0; i < Customizations.size(); ++i)
2298 {
2299 Customizations[i].WriteCreate(data, owner, receiver);
2300 }
2301 for (uint32 i = 0; i < QaCustomizations.size(); ++i)
2302 {
2303 QaCustomizations[i].WriteCreate(data, owner, receiver);
2304 }
2305 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2306 {
2307 for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
2308 {
2309 QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
2310 }
2311 }
2312 for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
2313 {
2314 ArenaCooldowns[i].WriteCreate(data, owner, receiver);
2315 }
2316 for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
2317 {
2318 data << int32(VisualItemReplacements[i]);
2319 }
2320 data.FlushBits();
2321 data.WriteBits(Name->size(), 6);
2322 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2323 {
2325 }
2326 data.WriteBit(HasLevelLink);
2327 data.WriteBits(DeclinedNames.has_value(), 1);
2328 data << DungeonScore;
2329 data.WriteString(Name);
2330 if (DeclinedNames.has_value())
2331 {
2332 DeclinedNames->WriteCreate(data, owner, receiver);
2333 }
2334 data.FlushBits();
2335}
2336
2337void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
2338{
2339 Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu });
2340 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2341 WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
2342}
2343
2344void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
2345{
2346 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2347 allowedMaskForTarget |= { 0x00000022u, 0xFFFFC000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x3FFFFFFFu, 0x00000000u, 0x00000000u };
2348}
2349
2351{
2352 Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu });
2353 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2354 changesMask &= allowedMaskForTarget;
2355}
2356
2357void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const
2358{
2359 data.WriteBits(changesMask.GetBlocksMask(0), 9);
2360 for (uint32 i = 0; i < 9; ++i)
2361 if (changesMask.GetBlock(i))
2362 data.WriteBits(changesMask.GetBlock(i), 32);
2363
2364 bool noQuestLogChangesMask = data.WriteBit(IsQuestLogChangesMaskSkipped());
2365 if (changesMask[0])
2366 {
2367 if (changesMask[1])
2368 {
2370 }
2371 if (changesMask[2])
2372 {
2373 data.WriteBit(HasLevelLink);
2374 }
2375 if (changesMask[3])
2376 {
2377 if (!ignoreNestedChangesMask)
2379 else
2381 }
2382 if (changesMask[4])
2383 {
2384 if (!ignoreNestedChangesMask)
2386 else
2388 }
2389 if (changesMask[5])
2390 {
2391 if (!ignoreNestedChangesMask)
2393 else
2395 }
2396 if (changesMask[6])
2397 {
2398 if (!ignoreNestedChangesMask)
2400 else
2402 }
2403 if (changesMask[7])
2404 {
2405 if (!ignoreNestedChangesMask)
2407 else
2409 }
2410 }
2411 data.FlushBits();
2412 if (changesMask[0])
2413 {
2414 if (changesMask[3])
2415 {
2416 for (uint32 i = 0; i < Customizations.size(); ++i)
2417 {
2418 if (Customizations.HasChanged(i) || ignoreNestedChangesMask)
2419 {
2420 Customizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2421 }
2422 }
2423 }
2424 if (changesMask[4])
2425 {
2426 for (uint32 i = 0; i < QaCustomizations.size(); ++i)
2427 {
2428 if (QaCustomizations.HasChanged(i) || ignoreNestedChangesMask)
2429 {
2430 QaCustomizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2431 }
2432 }
2433 }
2434 if (changesMask[5])
2435 {
2436 for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
2437 {
2438 if (QuestSessionQuestLog.HasChanged(i) || ignoreNestedChangesMask)
2439 {
2440 if (noQuestLogChangesMask)
2441 QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
2442 else
2443 QuestSessionQuestLog[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2444 }
2445 }
2446 }
2447 if (changesMask[6])
2448 {
2449 for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
2450 {
2451 if (ArenaCooldowns.HasChanged(i) || ignoreNestedChangesMask)
2452 {
2453 ArenaCooldowns[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2454 }
2455 }
2456 }
2457 if (changesMask[7])
2458 {
2459 for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
2460 {
2461 if (VisualItemReplacements.HasChanged(i) || ignoreNestedChangesMask)
2462 {
2463 data << int32(VisualItemReplacements[i]);
2464 }
2465 }
2466 }
2467 if (changesMask[8])
2468 {
2469 data << DuelArbiter;
2470 }
2471 if (changesMask[9])
2472 {
2473 data << WowAccount;
2474 }
2475 if (changesMask[10])
2476 {
2477 data << BnetAccount;
2478 }
2479 if (changesMask[11])
2480 {
2481 data << uint64(GuildClubMemberID);
2482 }
2483 if (changesMask[12])
2484 {
2485 data << LootTargetGUID;
2486 }
2487 if (changesMask[13])
2488 {
2489 data << uint32(PlayerFlags);
2490 }
2491 if (changesMask[14])
2492 {
2493 data << uint32(PlayerFlagsEx);
2494 }
2495 if (changesMask[15])
2496 {
2497 data << uint32(GuildRankID);
2498 }
2499 if (changesMask[16])
2500 {
2501 data << uint32(GuildDeleteDate);
2502 }
2503 if (changesMask[17])
2504 {
2505 data << int32(GuildLevel);
2506 }
2507 if (changesMask[18])
2508 {
2509 data << uint8(NativeSex);
2510 }
2511 if (changesMask[19])
2512 {
2513 data << uint8(Inebriation);
2514 }
2515 if (changesMask[20])
2516 {
2517 data << uint8(PvpTitle);
2518 }
2519 if (changesMask[21])
2520 {
2521 data << uint8(ArenaFaction);
2522 }
2523 if (changesMask[22])
2524 {
2525 data << uint32(DuelTeam);
2526 }
2527 if (changesMask[23])
2528 {
2529 data << int32(GuildTimeStamp);
2530 }
2531 if (changesMask[24])
2532 {
2533 data << int32(PlayerTitle);
2534 }
2535 if (changesMask[25])
2536 {
2537 data << int32(FakeInebriation);
2538 }
2539 if (changesMask[26])
2540 {
2541 data << uint32(VirtualPlayerRealm);
2542 }
2543 if (changesMask[27])
2544 {
2545 data << uint32(CurrentSpecID);
2546 }
2547 if (changesMask[28])
2548 {
2549 data << int32(TaxiMountAnimKitID);
2550 }
2551 if (changesMask[29])
2552 {
2554 }
2555 if (changesMask[30])
2556 {
2557 data << int32(HonorLevel);
2558 }
2559 if (changesMask[31])
2560 {
2561 data << int64(LogoutTime);
2562 }
2563 }
2564 if (changesMask[32])
2565 {
2566 if (changesMask[34])
2567 {
2568 data << int32(Field_B0);
2569 }
2570 if (changesMask[35])
2571 {
2572 data << int32(Field_B4);
2573 }
2574 if (changesMask[36])
2575 {
2577 }
2578 if (changesMask[37])
2579 {
2580 CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2581 }
2582 if (changesMask[38])
2583 {
2584 data << int32(CovenantID);
2585 }
2586 if (changesMask[39])
2587 {
2588 data << int32(SoulbindID);
2589 }
2590 if (changesMask[42])
2591 {
2592 PersonalTabard->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2593 }
2594 if (changesMask[33])
2595 {
2596 data.WriteBits(Name->size(), 32);
2597 }
2598 data.WriteBits(DeclinedNames.has_value(), 1);
2599 data.FlushBits();
2600 if (changesMask[40])
2601 {
2602 data << DungeonScore;
2603 }
2604 if (changesMask[33])
2605 {
2606 data.WriteString(Name);
2607 }
2608 if (changesMask[41])
2609 {
2610 if (DeclinedNames.has_value())
2611 {
2612 DeclinedNames->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2613 }
2614 }
2615 }
2616 if (changesMask[43])
2617 {
2618 for (uint32 i = 0; i < 2; ++i)
2619 {
2620 if (changesMask[44 + i])
2621 {
2622 data << uint8(PartyType[i]);
2623 }
2624 }
2625 }
2626 if (changesMask[46])
2627 {
2628 for (uint32 i = 0; i < 175; ++i)
2629 {
2630 if (changesMask[47 + i])
2631 {
2632 if (noQuestLogChangesMask)
2633 QuestLog[i].WriteCreate(data, owner, receiver);
2634 else
2635 QuestLog[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2636 }
2637 }
2638 }
2639 if (changesMask[222])
2640 {
2641 for (uint32 i = 0; i < 19; ++i)
2642 {
2643 if (changesMask[223 + i])
2644 {
2645 VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2646 }
2647 }
2648 }
2649 if (changesMask[242])
2650 {
2651 for (uint32 i = 0; i < 6; ++i)
2652 {
2653 if (changesMask[243 + i])
2654 {
2655 data << float(AvgItemLevel[i]);
2656 }
2657 }
2658 }
2659 if (changesMask[249])
2660 {
2661 for (uint32 i = 0; i < 19; ++i)
2662 {
2663 if (changesMask[250 + i])
2664 {
2665 data << uint32(Field_3120[i]);
2666 }
2667 }
2668 }
2669 data.FlushBits();
2670}
2671
2673{
2721}
2722
2723void SkillInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2724{
2725 for (uint32 i = 0; i < 256; ++i)
2726 {
2727 data << uint16(SkillLineID[i]);
2728 data << uint16(SkillStep[i]);
2729 data << uint16(SkillRank[i]);
2730 data << uint16(SkillStartingRank[i]);
2731 data << uint16(SkillMaxRank[i]);
2732 data << int16(SkillTempBonus[i]);
2733 data << uint16(SkillPermBonus[i]);
2734 }
2735}
2736
2737void SkillInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2738{
2739 Mask changesMask = _changesMask;
2740 if (ignoreChangesMask)
2741 changesMask.SetAll();
2742
2743 for (uint32 i = 0; i < 1; ++i)
2744 data << uint32(changesMask.GetBlocksMask(i));
2745 data.WriteBits(changesMask.GetBlocksMask(1), 25);
2746 for (uint32 i = 0; i < 57; ++i)
2747 if (changesMask.GetBlock(i))
2748 data.WriteBits(changesMask.GetBlock(i), 32);
2749
2750 data.FlushBits();
2751 if (changesMask[0])
2752 {
2753 for (uint32 i = 0; i < 256; ++i)
2754 {
2755 if (changesMask[1 + i])
2756 {
2757 data << uint16(SkillLineID[i]);
2758 }
2759 if (changesMask[257 + i])
2760 {
2761 data << uint16(SkillStep[i]);
2762 }
2763 if (changesMask[513 + i])
2764 {
2765 data << uint16(SkillRank[i]);
2766 }
2767 if (changesMask[769 + i])
2768 {
2769 data << uint16(SkillStartingRank[i]);
2770 }
2771 if (changesMask[1025 + i])
2772 {
2773 data << uint16(SkillMaxRank[i]);
2774 }
2775 if (changesMask[1281 + i])
2776 {
2777 data << int16(SkillTempBonus[i]);
2778 }
2779 if (changesMask[1537 + i])
2780 {
2781 data << uint16(SkillPermBonus[i]);
2782 }
2783 }
2784 }
2785}
2786
2788{
2797}
2798
2799void RestInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2800{
2801 data << uint32(Threshold);
2802 data << uint8(StateID);
2803}
2804
2805void RestInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2806{
2807 Mask changesMask = _changesMask;
2808 if (ignoreChangesMask)
2809 changesMask.SetAll();
2810
2811 data.WriteBits(changesMask.GetBlock(0), 3);
2812
2813 data.FlushBits();
2814 if (changesMask[0])
2815 {
2816 if (changesMask[1])
2817 {
2818 data << uint32(Threshold);
2819 }
2820 if (changesMask[2])
2821 {
2822 data << uint8(StateID);
2823 }
2824 }
2825}
2826
2828{
2832}
2833
2834void PVPInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2835{
2836 data << int8(Bracket);
2837 data << int32(PvpRatingID);
2838 data << uint32(WeeklyPlayed);
2839 data << uint32(WeeklyWon);
2840 data << uint32(SeasonPlayed);
2841 data << uint32(SeasonWon);
2842 data << uint32(Rating);
2843 data << uint32(WeeklyBestRating);
2844 data << uint32(SeasonBestRating);
2845 data << uint32(PvpTierID);
2847 data << uint32(Field_28);
2848 data << uint32(Field_2C);
2849 data << uint32(WeeklyRoundsPlayed);
2850 data << uint32(WeeklyRoundsWon);
2851 data << uint32(SeasonRoundsPlayed);
2852 data << uint32(SeasonRoundsWon);
2853 data.WriteBit(Disqualified);
2854 data.FlushBits();
2855}
2856
2857void PVPInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2858{
2859 Mask changesMask = _changesMask;
2860 if (ignoreChangesMask)
2861 changesMask.SetAll();
2862
2863 data.WriteBits(changesMask.GetBlock(0), 19);
2864
2865 if (changesMask[0])
2866 {
2867 if (changesMask[1])
2868 {
2869 data.WriteBit(Disqualified);
2870 }
2871 }
2872 data.FlushBits();
2873 if (changesMask[0])
2874 {
2875 if (changesMask[2])
2876 {
2877 data << int8(Bracket);
2878 }
2879 if (changesMask[3])
2880 {
2881 data << int32(PvpRatingID);
2882 }
2883 if (changesMask[4])
2884 {
2885 data << uint32(WeeklyPlayed);
2886 }
2887 if (changesMask[5])
2888 {
2889 data << uint32(WeeklyWon);
2890 }
2891 if (changesMask[6])
2892 {
2893 data << uint32(SeasonPlayed);
2894 }
2895 if (changesMask[7])
2896 {
2897 data << uint32(SeasonWon);
2898 }
2899 if (changesMask[8])
2900 {
2901 data << uint32(Rating);
2902 }
2903 if (changesMask[9])
2904 {
2905 data << uint32(WeeklyBestRating);
2906 }
2907 if (changesMask[10])
2908 {
2909 data << uint32(SeasonBestRating);
2910 }
2911 if (changesMask[11])
2912 {
2913 data << uint32(PvpTierID);
2914 }
2915 if (changesMask[12])
2916 {
2918 }
2919 if (changesMask[13])
2920 {
2921 data << uint32(Field_28);
2922 }
2923 if (changesMask[14])
2924 {
2925 data << uint32(Field_2C);
2926 }
2927 if (changesMask[15])
2928 {
2929 data << uint32(WeeklyRoundsPlayed);
2930 }
2931 if (changesMask[16])
2932 {
2933 data << uint32(WeeklyRoundsWon);
2934 }
2935 if (changesMask[17])
2936 {
2937 data << uint32(SeasonRoundsPlayed);
2938 }
2939 if (changesMask[18])
2940 {
2941 data << uint32(SeasonRoundsWon);
2942 }
2943 }
2944 data.FlushBits();
2945}
2946
2948{
2968}
2969
2970void CharacterRestriction::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2971{
2972 data << int32(Field_0);
2973 data << int32(Field_4);
2974 data << int32(Field_8);
2975 data.WriteBits(Type, 5);
2976 data.FlushBits();
2977}
2978
2979void CharacterRestriction::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2980{
2981 data << int32(Field_0);
2982 data << int32(Field_4);
2983 data << int32(Field_8);
2984 data.WriteBits(Type, 5);
2985 data.FlushBits();
2986}
2987
2989{
2990 return Field_0 == right.Field_0
2991 && Field_4 == right.Field_4
2992 && Field_8 == right.Field_8
2993 && Type == right.Type;
2994}
2995
2996void SpellPctModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2997{
2998 data << int32(ModIndex);
2999 data << float(ModifierValue);
3000 data << int32(LabelID);
3001}
3002
3003void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3004{
3005 data << int32(ModIndex);
3006 data << float(ModifierValue);
3007 data << int32(LabelID);
3008}
3009
3011{
3012 return ModIndex == right.ModIndex
3013 && ModifierValue == right.ModifierValue
3014 && LabelID == right.LabelID;
3015}
3016
3017void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3018{
3019 data << int32(ModIndex);
3020 data << int32(ModifierValue);
3021 data << int32(LabelID);
3022}
3023
3024void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3025{
3026 data << int32(ModIndex);
3027 data << int32(ModifierValue);
3028 data << int32(LabelID);
3029}
3030
3032{
3033 return ModIndex == right.ModIndex
3034 && ModifierValue == right.ModifierValue
3035 && LabelID == right.LabelID;
3036}
3037
3038void CompletedProject::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3039{
3040 data << uint32(ProjectID);
3041 data << int64(FirstCompleted);
3042 data << uint32(CompletionCount);
3043}
3044
3045void CompletedProject::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3046{
3047 Mask changesMask = _changesMask;
3048 if (ignoreChangesMask)
3049 changesMask.SetAll();
3050
3051 data.WriteBits(changesMask.GetBlock(0), 4);
3052
3053 data.FlushBits();
3054 if (changesMask[0])
3055 {
3056 if (changesMask[1])
3057 {
3058 data << uint32(ProjectID);
3059 }
3060 if (changesMask[2])
3061 {
3062 data << int64(FirstCompleted);
3063 }
3064 if (changesMask[3])
3065 {
3066 data << uint32(CompletionCount);
3067 }
3068 }
3069}
3070
3072{
3077}
3078
3079void ResearchHistory::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3080{
3081 data << uint32(CompletedProjects.size());
3082 for (uint32 i = 0; i < CompletedProjects.size(); ++i)
3083 {
3084 CompletedProjects[i].WriteCreate(data, owner, receiver);
3085 }
3086}
3087
3088void ResearchHistory::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3089{
3090 Mask changesMask = _changesMask;
3091 if (ignoreChangesMask)
3092 changesMask.SetAll();
3093
3094 data.WriteBits(changesMask.GetBlock(0), 2);
3095
3096 if (changesMask[0])
3097 {
3098 if (changesMask[1])
3099 {
3100 if (!ignoreChangesMask)
3102 else
3104 }
3105 }
3106 data.FlushBits();
3107 if (changesMask[0])
3108 {
3109 if (changesMask[1])
3110 {
3111 for (uint32 i = 0; i < CompletedProjects.size(); ++i)
3112 {
3113 if (CompletedProjects.HasChanged(i) || ignoreChangesMask)
3114 {
3115 CompletedProjects[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
3116 }
3117 }
3118 }
3119 }
3120}
3121
3123{
3126}
3127
3128void MawPower::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3129{
3130 data << int32(Field_0);
3131 data << int32(Field_4);
3132 data << int32(Field_8);
3133}
3134
3135void MawPower::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3136{
3137 data << int32(Field_0);
3138 data << int32(Field_4);
3139 data << int32(Field_8);
3140}
3141
3142bool MawPower::operator==(MawPower const& right) const
3143{
3144 return Field_0 == right.Field_0
3145 && Field_4 == right.Field_4
3146 && Field_8 == right.Field_8;
3147}
3148
3149void MultiFloorExplore::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3150{
3151 data << uint32(WorldMapOverlayIDs.size());
3152 for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i)
3153 {
3154 data << int32(WorldMapOverlayIDs[i]);
3155 }
3156}
3157
3158void MultiFloorExplore::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3159{
3160 data << uint32(WorldMapOverlayIDs.size());
3161 for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i)
3162 {
3163 data << int32(WorldMapOverlayIDs[i]);
3164 }
3165 data.FlushBits();
3166}
3167
3169{
3170 return WorldMapOverlayIDs == right.WorldMapOverlayIDs;
3171}
3172
3173void RecipeProgressionInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3174{
3176 data << uint16(Experience);
3177}
3178
3179void RecipeProgressionInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3180{
3182 data << uint16(Experience);
3183}
3184
3186{
3188 && Experience == right.Experience;
3189}
3190
3191void ActivePlayerUnk901::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3192{
3193 data << Field_0;
3194 data << int32(Field_10);
3195}
3196
3197void ActivePlayerUnk901::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3198{
3199 Mask changesMask = _changesMask;
3200 if (ignoreChangesMask)
3201 changesMask.SetAll();
3202
3203 data.WriteBits(changesMask.GetBlock(0), 3);
3204
3205 data.FlushBits();
3206 if (changesMask[0])
3207 {
3208 if (changesMask[1])
3209 {
3210 data << Field_0;
3211 }
3212 if (changesMask[2])
3213 {
3214 data << int32(Field_10);
3215 }
3216 }
3217}
3218
3220{
3224}
3225
3226void QuestSession::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3227{
3228 data << Owner;
3229 for (uint32 i = 0; i < 950; ++i)
3230 {
3231 data << uint64(QuestCompleted[i]);
3232 }
3233}
3234
3235void QuestSession::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3236{
3237 Mask changesMask = _changesMask;
3238 if (ignoreChangesMask)
3239 changesMask.SetAll();
3240
3241 data.WriteBits(changesMask.GetBlocksMask(0), 30);
3242 for (uint32 i = 0; i < 30; ++i)
3243 if (changesMask.GetBlock(i))
3244 data.WriteBits(changesMask.GetBlock(i), 32);
3245
3246 data.FlushBits();
3247 if (changesMask[0])
3248 {
3249 if (changesMask[1])
3250 {
3251 data << Owner;
3252 }
3253 }
3254 if (changesMask[2])
3255 {
3256 for (uint32 i = 0; i < 950; ++i)
3257 {
3258 if (changesMask[3 + i])
3259 {
3260 data << uint64(QuestCompleted[i]);
3261 }
3262 }
3263 }
3264}
3265
3267{
3271}
3272
3273void ReplayedQuest::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3274{
3275 data << int32(QuestID);
3276 data << uint32(ReplayTime);
3277}
3278
3279void ReplayedQuest::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3280{
3281 Mask changesMask = _changesMask;
3282 if (ignoreChangesMask)
3283 changesMask.SetAll();
3284
3285 data.WriteBits(changesMask.GetBlock(0), 3);
3286
3287 data.FlushBits();
3288 if (changesMask[0])
3289 {
3290 if (changesMask[1])
3291 {
3292 data << int32(QuestID);
3293 }
3294 if (changesMask[2])
3295 {
3296 data << uint32(ReplayTime);
3297 }
3298 }
3299}
3300
3302{
3306}
3307
3308void TraitEntry::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3309{
3310 data << int32(TraitNodeID);
3311 data << int32(TraitNodeEntryID);
3312 data << int32(Rank);
3313 data << int32(GrantedRanks);
3314}
3315
3316void TraitEntry::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3317{
3318 data << int32(TraitNodeID);
3319 data << int32(TraitNodeEntryID);
3320 data << int32(Rank);
3321 data << int32(GrantedRanks);
3322}
3323
3324bool TraitEntry::operator==(TraitEntry const& right) const
3325{
3326 return TraitNodeID == right.TraitNodeID
3328 && Rank == right.Rank
3329 && GrantedRanks == right.GrantedRanks;
3330}
3331
3332void TraitConfig::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3333{
3334 data << int32(ID);
3335 data << int32(Type);
3336 data << uint32(Entries.size());
3337 if (Type == 2)
3338 {
3339 data << int32(SkillLineID);
3340 }
3341 if (Type == 1)
3342 {
3343 data << int32(ChrSpecializationID);
3344 data << int32(CombatConfigFlags);
3345 data << int32(LocalIdentifier);
3346 }
3347 if (Type == 3)
3348 {
3349 data << int32(TraitSystemID);
3350 }
3351 for (uint32 i = 0; i < Entries.size(); ++i)
3352 {
3353 Entries[i].WriteCreate(data, owner, receiver);
3354 }
3355 data.WriteBits(Name->size(), 9);
3356 data.WriteString(Name);
3357 data.FlushBits();
3358}
3359
3360void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3361{
3362 Mask changesMask = _changesMask;
3363 if (ignoreChangesMask)
3364 changesMask.SetAll();
3365
3366 data.WriteBits(changesMask.GetBlock(0), 12);
3367
3368 if (changesMask[0])
3369 {
3370 if (changesMask[1])
3371 {
3372 if (!ignoreChangesMask)
3373 Entries.WriteUpdateMask(data);
3374 else
3376 }
3377 }
3378 data.FlushBits();
3379 if (changesMask[0])
3380 {
3381 if (changesMask[1])
3382 {
3383 for (uint32 i = 0; i < Entries.size(); ++i)
3384 {
3385 if (Entries.HasChanged(i) || ignoreChangesMask)
3386 {
3387 Entries[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
3388 }
3389 }
3390 }
3391 if (changesMask[2])
3392 {
3393 data << int32(ID);
3394 }
3395 }
3396 if (changesMask[4])
3397 {
3398 if (changesMask[5])
3399 {
3400 data << int32(Type);
3401 }
3402 if (changesMask[6])
3403 {
3404 if (Type == 2)
3405 {
3406 data << int32(SkillLineID);
3407 }
3408 }
3409 if (changesMask[7])
3410 {
3411 if (Type == 1)
3412 {
3413 data << int32(ChrSpecializationID);
3414 }
3415 }
3416 }
3417 if (changesMask[8])
3418 {
3419 if (changesMask[9])
3420 {
3421 if (Type == 1)
3422 {
3423 data << int32(CombatConfigFlags);
3424 }
3425 }
3426 if (changesMask[10])
3427 {
3428 if (Type == 1)
3429 {
3430 data << int32(LocalIdentifier);
3431 }
3432 }
3433 if (changesMask[11])
3434 {
3435 if (Type == 3)
3436 {
3437 data << int32(TraitSystemID);
3438 }
3439 }
3440 }
3441 if (changesMask[0])
3442 {
3443 if (changesMask[3])
3444 {
3445 data.WriteBits(Name->size(), 9);
3446 data.WriteString(Name);
3447 }
3448 }
3449 data.FlushBits();
3450}
3451
3453{
3464}
3465
3466void CraftingOrderItem::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3467{
3468 data << uint64(Field_0);
3469 data << ItemGUID;
3470 data << OwnerGUID;
3471 data << int32(ItemID);
3472 data << uint32(Quantity);
3473 data << int32(ReagentQuality);
3475 data.FlushBits();
3477 {
3478 data << uint8(DataSlotIndex);
3479 }
3480}
3481
3482void CraftingOrderItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3483{
3484 Mask changesMask = _changesMask;
3485 if (ignoreChangesMask)
3486 changesMask.SetAll();
3487
3488 data.WriteBits(changesMask.GetBlock(0), 7);
3489
3490 data.FlushBits();
3491 if (changesMask[0])
3492 {
3493 data << uint64(Field_0);
3494 }
3495 if (changesMask[1])
3496 {
3497 data << ItemGUID;
3498 }
3499 if (changesMask[2])
3500 {
3501 data << OwnerGUID;
3502 }
3503 if (changesMask[3])
3504 {
3505 data << int32(ItemID);
3506 }
3507 if (changesMask[4])
3508 {
3509 data << uint32(Quantity);
3510 }
3511 if (changesMask[5])
3512 {
3513 data << int32(ReagentQuality);
3514 }
3516 data.FlushBits();
3517 if (changesMask[6])
3518 {
3520 {
3521 data << uint8(DataSlotIndex);
3522 }
3523 }
3524}
3525
3527{
3536}
3537
3538void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3539{
3540 data << int32(Field_0);
3541 data << uint64(OrderID);
3542 data << int32(SkillLineAbilityID);
3543 data << uint8(OrderState);
3544 data << uint8(OrderType);
3545 data << uint8(MinQuality);
3546 data << int64(ExpirationTime);
3547 data << int64(ClaimEndTime);
3548 data << int64(TipAmount);
3549 data << int64(ConsortiumCut);
3550 data << uint32(Flags);
3551 data << CustomerGUID;
3552 data << CustomerAccountGUID;
3553 data << CrafterGUID;
3554 data << PersonalCrafterGUID;
3555 data << uint32(Reagents.size());
3556 data.WriteBits(CustomerNotes->size(), 10);
3557 data.WriteBits(OutputItem.has_value(), 1);
3559 data.FlushBits();
3560 for (uint32 i = 0; i < Reagents.size(); ++i)
3561 {
3562 Reagents[i].WriteCreate(data, owner, receiver);
3563 }
3565 if (OutputItem.has_value())
3566 {
3567 OutputItem->WriteCreate(data, owner, receiver);
3568 }
3570 {
3571 data << OutputItemData;
3572 }
3573 data.FlushBits();
3574}
3575
3576void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3577{
3578 Mask changesMask = _changesMask;
3579 if (ignoreChangesMask)
3580 changesMask.SetAll();
3581
3582 data.WriteBits(changesMask.GetBlock(0), 24);
3583
3584 if (changesMask[0])
3585 {
3586 if (changesMask[1])
3587 {
3588 if (!ignoreChangesMask)
3590 else
3592 }
3593 }
3594 data.FlushBits();
3595 if (changesMask[0])
3596 {
3597 if (changesMask[1])
3598 {
3599 for (uint32 i = 0; i < Reagents.size(); ++i)
3600 {
3601 if (Reagents.HasChanged(i) || ignoreChangesMask)
3602 {
3603 Reagents[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
3604 }
3605 }
3606 }
3607 if (changesMask[2])
3608 {
3609 data << int32(Field_0);
3610 }
3611 if (changesMask[3])
3612 {
3613 data << uint64(OrderID);
3614 }
3615 if (changesMask[4])
3616 {
3617 data << int32(SkillLineAbilityID);
3618 }
3619 }
3620 if (changesMask[5])
3621 {
3622 if (changesMask[6])
3623 {
3624 data << uint8(OrderState);
3625 }
3626 if (changesMask[7])
3627 {
3628 data << uint8(OrderType);
3629 }
3630 if (changesMask[8])
3631 {
3632 data << uint8(MinQuality);
3633 }
3634 if (changesMask[9])
3635 {
3636 data << int64(ExpirationTime);
3637 }
3638 }
3639 if (changesMask[10])
3640 {
3641 if (changesMask[11])
3642 {
3643 data << int64(ClaimEndTime);
3644 }
3645 if (changesMask[12])
3646 {
3647 data << int64(TipAmount);
3648 }
3649 if (changesMask[13])
3650 {
3651 data << int64(ConsortiumCut);
3652 }
3653 if (changesMask[14])
3654 {
3655 data << uint32(Flags);
3656 }
3657 }
3658 if (changesMask[15])
3659 {
3660 if (changesMask[16])
3661 {
3662 data << CustomerGUID;
3663 }
3664 if (changesMask[17])
3665 {
3666 data << CustomerAccountGUID;
3667 }
3668 if (changesMask[18])
3669 {
3670 data << CrafterGUID;
3671 }
3672 if (changesMask[19])
3673 {
3674 data << PersonalCrafterGUID;
3675 }
3676 }
3677 if (changesMask[20])
3678 {
3679 if (changesMask[21])
3680 {
3681 data.WriteBits(CustomerNotes->size(), 10);
3683 }
3684 data.WriteBits(OutputItem.has_value(), 1);
3686 data.FlushBits();
3687 if (changesMask[22])
3688 {
3689 if (OutputItem.has_value())
3690 {
3691 OutputItem->WriteUpdate(data, ignoreChangesMask, owner, receiver);
3692 }
3693 }
3694 if (changesMask[23])
3695 {
3697 {
3698 data << OutputItemData;
3699 }
3700 }
3701 }
3702 data.FlushBits();
3703}
3704
3706{
3727}
3728
3729void CraftingOrder::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3730{
3731 Data->WriteCreate(data, owner, receiver);
3733 data.WriteBits(Enchantments.size(), 4);
3734 data.WriteBits(Gems.size(), 2);
3735 data.FlushBits();
3737 {
3738 data << RecraftItemInfo;
3739 }
3740 for (uint32 i = 0; i < Enchantments.size(); ++i)
3741 {
3742 data << Enchantments[i];
3743 }
3744 for (uint32 i = 0; i < Gems.size(); ++i)
3745 {
3746 data << Gems[i];
3747 }
3748 data.FlushBits();
3749}
3750
3751void CraftingOrder::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3752{
3753 Mask changesMask = _changesMask;
3754 if (ignoreChangesMask)
3755 changesMask.SetAll();
3756
3757 data.WriteBits(changesMask.GetBlock(0), 4);
3758
3759 if (changesMask[0])
3760 {
3761 if (!ignoreChangesMask)
3763 else
3765 }
3766 if (changesMask[1])
3767 {
3768 if (!ignoreChangesMask)
3769 Gems.WriteUpdateMask(data, 2);
3770 else
3772 }
3773 data.FlushBits();
3774 if (changesMask[0])
3775 {
3776 for (uint32 i = 0; i < Enchantments.size(); ++i)
3777 {
3778 if (Enchantments.HasChanged(i) || ignoreChangesMask)
3779 {
3780 data << Enchantments[i];
3781 }
3782 }
3783 }
3784 if (changesMask[1])
3785 {
3786 for (uint32 i = 0; i < Gems.size(); ++i)
3787 {
3788 if (Gems.HasChanged(i) || ignoreChangesMask)
3789 {
3790 data << Gems[i];
3791 }
3792 }
3793 }
3794 if (changesMask[2])
3795 {
3796 Data->WriteUpdate(data, ignoreChangesMask, owner, receiver);
3797 }
3799 data.FlushBits();
3800 if (changesMask[3])
3801 {
3803 {
3804 data << RecraftItemInfo;
3805 }
3806 }
3807 data.FlushBits();
3808}
3809
3811{
3817}
3818
3819void PersonalCraftingOrderCount::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3820{
3821 data << int32(ProfessionID);
3822 data << uint32(Count);
3823}
3824
3825void PersonalCraftingOrderCount::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3826{
3827 Mask changesMask = _changesMask;
3828 if (ignoreChangesMask)
3829 changesMask.SetAll();
3830
3831 data.WriteBits(changesMask.GetBlock(0), 2);
3832
3833 data.FlushBits();
3834 if (changesMask[0])
3835 {
3836 data << int32(ProfessionID);
3837 }
3838 if (changesMask[1])
3839 {
3840 data << uint32(Count);
3841 }
3842}
3843
3845{
3849}
3850
3851void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3852{
3853 data << int32(SpellCategoryID);
3854 data << int32(ModCooldown);
3855}
3856
3857void CategoryCooldownMod::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3858{
3859 data << int32(SpellCategoryID);
3860 data << int32(ModCooldown);
3861}
3862
3864{
3865 return SpellCategoryID == right.SpellCategoryID
3866 && ModCooldown == right.ModCooldown;
3867}
3868
3869void WeeklySpellUse::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3870{
3871 data << int32(SpellCategoryID);
3872 data << uint8(Uses);
3873}
3874
3875void WeeklySpellUse::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3876{
3877 data << int32(SpellCategoryID);
3878 data << uint8(Uses);
3879}
3880
3882{
3883 return SpellCategoryID == right.SpellCategoryID
3884 && Uses == right.Uses;
3885}
3886
3887void StablePetInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3888{
3889 data << uint32(PetSlot);
3890 data << uint32(PetNumber);
3891 data << uint32(CreatureID);
3892 data << uint32(DisplayID);
3893 data << uint32(ExperienceLevel);
3894 data << uint8(PetFlags);
3895 data.WriteBits(Name->size(), 8);
3896 data.WriteString(Name);
3897 data.FlushBits();
3898}
3899
3900void StablePetInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3901{
3902 Mask changesMask = _changesMask;
3903 if (ignoreChangesMask)
3904 changesMask.SetAll();
3905
3906 data.WriteBits(changesMask.GetBlock(0), 8);
3907
3908 data.FlushBits();
3909 if (changesMask[0])
3910 {
3911 if (changesMask[1])
3912 {
3913 data << uint32(PetSlot);
3914 }
3915 if (changesMask[2])
3916 {
3917 data << uint32(PetNumber);
3918 }
3919 if (changesMask[3])
3920 {
3921 data << uint32(CreatureID);
3922 }
3923 if (changesMask[4])
3924 {
3925 data << uint32(DisplayID);
3926 }
3927 if (changesMask[5])
3928 {
3929 data << uint32(ExperienceLevel);
3930 }
3931 if (changesMask[7])
3932 {
3933 data << uint8(PetFlags);
3934 }
3935 if (changesMask[6])
3936 {
3937 data.WriteBits(Name->size(), 8);
3938 data.WriteString(Name);
3939 }
3940 }
3941 data.FlushBits();
3942}
3943
3945{
3954}
3955
3956void StableInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3957{
3958 data << uint32(Pets.size());
3959 data << StableMaster;
3960 for (uint32 i = 0; i < Pets.size(); ++i)
3961 {
3962 Pets[i].WriteCreate(data, owner, receiver);
3963 }
3964}
3965
3966void StableInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3967{
3968 Mask changesMask = _changesMask;
3969 if (ignoreChangesMask)
3970 changesMask.SetAll();
3971
3972 data.WriteBits(changesMask.GetBlock(0), 3);
3973
3974 if (changesMask[0])
3975 {
3976 if (changesMask[1])
3977 {
3978 if (!ignoreChangesMask)
3979 Pets.WriteUpdateMask(data);
3980 else
3982 }
3983 }
3984 data.FlushBits();
3985 if (changesMask[0])
3986 {
3987 if (changesMask[1])
3988 {
3989 for (uint32 i = 0; i < Pets.size(); ++i)
3990 {
3991 if (Pets.HasChanged(i) || ignoreChangesMask)
3992 {
3993 Pets[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
3994 }
3995 }
3996 }
3997 if (changesMask[2])
3998 {
3999 data << StableMaster;
4000 }
4001 }
4002}
4003
4005{
4009}
4010
4011void CollectableSourceTrackedData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4012{
4013 data << int32(TargetType);
4014 data << int32(TargetID);
4016}
4017
4018void CollectableSourceTrackedData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4019{
4020 Mask changesMask = _changesMask;
4021 if (ignoreChangesMask)
4022 changesMask.SetAll();
4023
4024 data.WriteBits(changesMask.GetBlock(0), 4);
4025
4026 data.FlushBits();
4027 if (changesMask[0])
4028 {
4029 if (changesMask[1])
4030 {
4031 data << int32(TargetType);
4032 }
4033 if (changesMask[2])
4034 {
4035 data << int32(TargetID);
4036 }
4037 if (changesMask[3])
4038 {
4040 }
4041 }
4042}
4043
4045{
4050}
4051
4052void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4053{
4054 data << int16(ResearchProjectID);
4055}
4056
4057void Research::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4058{
4059 data << int16(ResearchProjectID);
4060}
4061
4062bool Research::operator==(Research const& right) const
4063{
4064 return ResearchProjectID == right.ResearchProjectID;
4065}
4066
4067void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
4068{
4069 for (uint32 i = 0; i < 227; ++i)
4070 {
4071 data << InvSlots[i];
4072 }
4073 data << FarsightObject;
4074 data << SummonedBattlePetGUID;
4075 data << uint32(KnownTitles.size());
4076 data << uint64(Coinage);
4077 data << int32(XP);
4078 data << int32(NextLevelXP);
4079 data << int32(TrialXP);
4080 Skill->WriteCreate(data, owner, receiver);
4081 data << int32(CharacterPoints);
4082 data << int32(MaxTalentTiers);
4083 data << uint32(TrackCreatureMask);
4084 data << float(MainhandExpertise);
4085 data << float(OffhandExpertise);
4086 data << float(RangedExpertise);
4087 data << float(CombatRatingExpertise);
4088 data << float(BlockPercentage);
4089 data << float(DodgePercentage);
4090 data << float(DodgePercentageFromAttribute);
4091 data << float(ParryPercentage);
4092 data << float(ParryPercentageFromAttribute);
4093 data << float(CritPercentage);
4094 data << float(RangedCritPercentage);
4095 data << float(OffhandCritPercentage);
4096 data << float(SpellCritPercentage);
4097 data << int32(ShieldBlock);
4098 data << float(ShieldBlockCritPercentage);
4099 data << float(Mastery);
4100 data << float(Speed);
4101 data << float(Avoidance);
4102 data << float(Sturdiness);
4103 data << int32(Versatility);
4104 data << float(VersatilityBonus);
4105 data << float(PvpPowerDamage);
4106 data << float(PvpPowerHealing);
4107 for (uint32 i = 0; i < 8; ++i)
4108 {
4109 data << uint32(DataFlags[i].size());
4110 for (uint32 j = 0; j < DataFlags[i].size(); ++j)
4111 {
4112 data << uint64(DataFlags[i][j]);
4113 }
4114 }
4115 for (uint32 i = 0; i < 2; ++i)
4116 {
4117 RestInfo[i].WriteCreate(data, owner, receiver);
4118 }
4119 for (uint32 i = 0; i < 7; ++i)
4120 {
4121 data << int32(ModDamageDonePos[i]);
4122 data << int32(ModDamageDoneNeg[i]);
4123 data << float(ModDamageDonePercent[i]);
4124 data << float(ModHealingDonePercent[i]);
4125 }
4126 data << int32(ModHealingDonePos);
4127 data << float(ModHealingPercent);
4128 data << float(ModPeriodicHealingDonePercent);
4129 for (uint32 i = 0; i < 3; ++i)
4130 {
4131 data << float(WeaponDmgMultipliers[i]);
4132 data << float(WeaponAtkSpeedMultipliers[i]);
4133 }
4134 data << float(ModSpellPowerPercent);
4135 data << float(ModResiliencePercent);
4136 data << float(OverrideSpellPowerByAPPercent);
4137 data << float(OverrideAPBySpellPowerPercent);
4138 data << int32(ModTargetResistance);
4140 data << uint32(LocalFlags);
4141 data << uint8(GrantableLevels);
4142 data << uint8(MultiActionBars);
4143 data << uint8(LifetimeMaxRank);
4144 data << uint8(NumRespecs);
4145 data << uint32(PvpMedals);
4146 for (uint32 i = 0; i < 12; ++i)
4147 {
4148 data << uint32(BuybackPrice[i]);
4149 data << int64(BuybackTimestamp[i]);
4150 }
4151 data << uint16(TodayHonorableKills);
4154 data << int32(WatchedFactionIndex);
4155 for (uint32 i = 0; i < 32; ++i)
4156 {
4157 data << int32(CombatRatings[i]);
4158 }
4159 data << uint32(PvpInfo.size());
4160 data << int32(MaxLevel);
4163 for (uint32 i = 0; i < 4; ++i)
4164 {
4165 data << uint32(NoReagentCostMask[i]);
4166 }
4167 data << int32(PetSpellPower);
4168 for (uint32 i = 0; i < 2; ++i)
4169 {
4170 data << int32(ProfessionSkillLine[i]);
4171 }
4172 data << float(UiHitModifier);
4173 data << float(UiSpellHitModifier);
4174 data << int32(HomeRealmTimeOffset);
4175 data << float(ModPetHaste);
4176 data << int8(JailersTowerLevelMax);
4177 data << int8(JailersTowerLevel);
4178 data << uint8(LocalRegenFlags);
4179 data << uint8(AuraVision);
4180 data << uint8(NumBackpackSlots);
4181 data << int32(OverrideSpellsID);
4182 data << uint16(LootSpecID);
4183 data << uint32(OverrideZonePVPType);
4184 for (uint32 i = 0; i < 5; ++i)
4185 {
4186 data << uint32(BagSlotFlags[i]);
4187 }
4188 for (uint32 i = 0; i < 7; ++i)
4189 {
4190 data << uint32(BankBagSlotFlags[i]);
4191 }
4192 for (uint32 i = 0; i < 950; ++i)
4193 {
4194 data << uint64(QuestCompleted[i]);
4195 }
4196 data << int32(Honor);
4197 data << int32(HonorNextLevel);
4198 data << int32(PerksProgramCurrency);
4199 data << uint8(NumBankSlots);
4200 for (uint32 i = 0; i < 1; ++i)
4201 {
4202 data << uint32(ResearchSites[i].size());
4203 data << uint32(ResearchSiteProgress[i].size());
4204 data << uint32(Research[i].size());
4205 for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
4206 {
4207 data << uint16(ResearchSites[i][j]);
4208 }
4209 for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
4210 {
4211 data << uint32(ResearchSiteProgress[i][j]);
4212 }
4213 for (uint32 j = 0; j < Research[i].size(); ++j)
4214 {
4215 Research[i][j].WriteCreate(data, owner, receiver);
4216 }
4217 }
4218 data << uint32(DailyQuestsCompleted.size());
4220 data << uint32(Heirlooms.size());
4221 data << uint32(HeirloomFlags.size());
4222 data << uint32(Toys.size());
4223 data << uint32(ToyFlags.size());
4224 data << uint32(Transmog.size());
4225 data << uint32(ConditionalTransmog.size());
4226 data << uint32(SelfResSpells.size());
4227 data << uint32(RuneforgePowers.size());
4228 data << uint32(TransmogIllusions.size());
4230 data << uint32(SpellPctModByLabel.size());
4231 data << uint32(SpellFlatModByLabel.size());
4232 data << uint32(MawPowers.size());
4234 data << uint32(RecipeProgression.size());
4235 data << uint32(ReplayedQuests.size());
4236 data << uint32(TaskQuests.size());
4237 data << uint32(DisabledSpells.size());
4239 data << int32(TransportServerTime);
4242 data << uint32(TraitConfigs.size());
4244 data << uint32(CraftingOrders.size());
4246 data << uint32(CategoryCooldownMods.size());
4247 data << uint32(WeeklySpellUses.size());
4248 for (uint32 i = 0; i < 17; ++i)
4249 {
4250 data << float(ItemUpgradeHighWatermark[i]);
4251 }
4254 data << float(ItemUpgradeHighFingerWatermark);
4256 data << float(ItemUpgradeHighTrinketWatermark);
4260 for (uint32 i = 0; i < KnownTitles.size(); ++i)
4261 {
4262 data << uint64(KnownTitles[i]);
4263 }
4264 for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
4265 {
4266 data << int32(DailyQuestsCompleted[i]);
4267 }
4268 for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
4269 {
4271 }
4272 for (uint32 i = 0; i < Heirlooms.size(); ++i)
4273 {
4274 data << int32(Heirlooms[i]);
4275 }
4276 for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
4277 {
4278 data << uint32(HeirloomFlags[i]);
4279 }
4280 for (uint32 i = 0; i < Toys.size(); ++i)
4281 {
4282 data << int32(Toys[i]);
4283 }
4284 for (uint32 i = 0; i < ToyFlags.size(); ++i)
4285 {
4286 data << uint32(ToyFlags[i]);
4287 }
4288 for (uint32 i = 0; i < Transmog.size(); ++i)
4289 {
4290 data << uint32(Transmog[i]);
4291 }
4292 for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
4293 {
4294 data << int32(ConditionalTransmog[i]);
4295 }
4296 for (uint32 i = 0; i < SelfResSpells.size(); ++i)
4297 {
4298 data << int32(SelfResSpells[i]);
4299 }
4300 for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
4301 {
4302 data << uint32(RuneforgePowers[i]);
4303 }
4304 for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
4305 {
4306 data << uint32(TransmogIllusions[i]);
4307 }
4308 for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
4309 {
4310 SpellPctModByLabel[i].WriteCreate(data, owner, receiver);
4311 }
4312 for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
4313 {
4314 SpellFlatModByLabel[i].WriteCreate(data, owner, receiver);
4315 }
4316 for (uint32 i = 0; i < MawPowers.size(); ++i)
4317 {
4318 MawPowers[i].WriteCreate(data, owner, receiver);
4319 }
4320 for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
4321 {
4322 MultiFloorExploration[i].WriteCreate(data, owner, receiver);
4323 }
4324 for (uint32 i = 0; i < RecipeProgression.size(); ++i)
4325 {
4326 RecipeProgression[i].WriteCreate(data, owner, receiver);
4327 }
4328 for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
4329 {
4330 ReplayedQuests[i].WriteCreate(data, owner, receiver);
4331 }
4332 for (uint32 i = 0; i < TaskQuests.size(); ++i)
4333 {
4334 TaskQuests[i].WriteCreate(data, owner, receiver);
4335 }
4336 for (uint32 i = 0; i < DisabledSpells.size(); ++i)
4337 {
4338 data << int32(DisabledSpells[i]);
4339 }
4340 for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
4341 {
4342 PersonalCraftingOrderCounts[i].WriteCreate(data, owner, receiver);
4343 }
4344 for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
4345 {
4346 CategoryCooldownMods[i].WriteCreate(data, owner, receiver);
4347 }
4348 for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
4349 {
4350 WeeklySpellUses[i].WriteCreate(data, owner, receiver);
4351 }
4352 for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
4353 {
4354 TrackedCollectableSources[i].WriteCreate(data, owner, receiver);
4355 }
4356 data.FlushBits();
4363 data.WriteBits(QuestSession.has_value(), 1);
4364 data.WriteBits(PetStable.has_value(), 1);
4365 data.FlushBits();
4366 ResearchHistory->WriteCreate(data, owner, receiver);
4367 if (QuestSession.has_value())
4368 {
4369 QuestSession->WriteCreate(data, owner, receiver);
4370 }
4371 data << FrozenPerksVendorItem;
4372 Field_1410->WriteCreate(data, owner, receiver);
4373 data << DungeonScore;
4374 for (uint32 i = 0; i < PvpInfo.size(); ++i)
4375 {
4376 PvpInfo[i].WriteCreate(data, owner, receiver);
4377 }
4378 for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
4379 {
4380 CharacterRestrictions[i].WriteCreate(data, owner, receiver);
4381 }
4382 for (uint32 i = 0; i < TraitConfigs.size(); ++i)
4383 {
4384 TraitConfigs[i].WriteCreate(data, owner, receiver);
4385 }
4386 for (uint32 i = 0; i < CraftingOrders.size(); ++i)
4387 {
4388 CraftingOrders[i].WriteCreate(data, owner, receiver);
4389 }
4390 if (PetStable.has_value())
4391 {
4392 PetStable->WriteCreate(data, owner, receiver);
4393 }
4394 data.FlushBits();
4395}
4396
4397void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
4398{
4399 WriteUpdate(data, _changesMask, false, owner, receiver);
4400}
4401
4402void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const
4403{
4404 for (uint32 i = 0; i < 1; ++i)
4405 data << uint32(changesMask.GetBlocksMask(i));
4406 data.WriteBits(changesMask.GetBlocksMask(1), 14);
4407 for (uint32 i = 0; i < 46; ++i)
4408 if (changesMask.GetBlock(i))
4409 data.WriteBits(changesMask.GetBlock(i), 32);
4410
4411 if (changesMask[0])
4412 {
4413 if (changesMask[1])
4414 {
4416 }
4417 if (changesMask[2])
4418 {
4420 }
4421 if (changesMask[3])
4422 {
4424 }
4425 if (changesMask[4])
4426 {
4428 }
4429 if (changesMask[5])
4430 {
4432 }
4433 if (changesMask[6])
4434 {
4436 }
4437 if (changesMask[7])
4438 {
4439 if (!ignoreNestedChangesMask)
4441 else
4443 }
4444 }
4445 if (changesMask[36])
4446 {
4447 for (uint32 i = 0; i < 8; ++i)
4448 {
4449 if (changesMask[37])
4450 {
4451 if (!ignoreNestedChangesMask)
4452 DataFlags[i].WriteUpdateMask(data);
4453 else
4455 }
4456 }
4457 }
4458 if (changesMask[36])
4459 {
4460 for (uint32 i = 0; i < 8; ++i)
4461 {
4462 if (changesMask[37])
4463 {
4464 for (uint32 j = 0; j < DataFlags[i].size(); ++j)
4465 {
4466 if (DataFlags[i].HasChanged(j) || ignoreNestedChangesMask)
4467 {
4468 data << uint64(DataFlags[i][j]);
4469 }
4470 }
4471 }
4472 }
4473 }
4474 if (changesMask[0])
4475 {
4476 if (changesMask[8])
4477 {
4478 if (!ignoreNestedChangesMask)
4480 else
4482 }
4483 }
4484 if (changesMask[38])
4485 {
4486 for (uint32 i = 0; i < 1; ++i)
4487 {
4488 if (changesMask[39])
4489 {
4490 if (!ignoreNestedChangesMask)
4491 ResearchSites[i].WriteUpdateMask(data);
4492 else
4494 }
4495 }
4496 }
4497 if (changesMask[40])
4498 {
4499 for (uint32 i = 0; i < 1; ++i)
4500 {
4501 if (changesMask[41])
4502 {
4503 if (!ignoreNestedChangesMask)
4504 ResearchSiteProgress[i].WriteUpdateMask(data);
4505 else
4507 }
4508 }
4509 }
4510 if (changesMask[42])
4511 {
4512 for (uint32 i = 0; i < 1; ++i)
4513 {
4514 if (changesMask[43])
4515 {
4516 if (!ignoreNestedChangesMask)
4517 Research[i].WriteUpdateMask(data);
4518 else
4520 }
4521 }
4522 }
4523 if (changesMask[38])
4524 {
4525 for (uint32 i = 0; i < 1; ++i)
4526 {
4527 if (changesMask[39])
4528 {
4529 for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
4530 {
4531 if (ResearchSites[i].HasChanged(j) || ignoreNestedChangesMask)
4532 {
4533 data << uint16(ResearchSites[i][j]);
4534 }
4535 }
4536 }
4537 }
4538 }
4539 if (changesMask[40])
4540 {
4541 for (uint32 i = 0; i < 1; ++i)
4542 {
4543 if (changesMask[41])
4544 {
4545 for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
4546 {
4547 if (ResearchSiteProgress[i].HasChanged(j) || ignoreNestedChangesMask)
4548 {
4549 data << uint32(ResearchSiteProgress[i][j]);
4550 }
4551 }
4552 }
4553 }
4554 }
4555 if (changesMask[42])
4556 {
4557 for (uint32 i = 0; i < 1; ++i)
4558 {
4559 if (changesMask[43])
4560 {
4561 for (uint32 j = 0; j < Research[i].size(); ++j)
4562 {
4563 if (Research[i].HasChanged(j) || ignoreNestedChangesMask)
4564 {
4565 Research[i][j].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4566 }
4567 }
4568 }
4569 }
4570 }
4571 data.FlushBits();
4572 if (changesMask[0])
4573 {
4574 if (changesMask[9])
4575 {
4576 if (!ignoreNestedChangesMask)
4578 else
4580 }
4581 if (changesMask[10])
4582 {
4583 if (!ignoreNestedChangesMask)
4585 else
4587 }
4588 if (changesMask[11])
4589 {
4590 if (!ignoreNestedChangesMask)
4592 else
4594 }
4595 if (changesMask[12])
4596 {
4597 if (!ignoreNestedChangesMask)
4599 else
4601 }
4602 if (changesMask[13])
4603 {
4604 if (!ignoreNestedChangesMask)
4605 Toys.WriteUpdateMask(data);
4606 else
4608 }
4609 if (changesMask[14])
4610 {
4611 if (!ignoreNestedChangesMask)
4612 ToyFlags.WriteUpdateMask(data);
4613 else
4615 }
4616 if (changesMask[15])
4617 {
4618 if (!ignoreNestedChangesMask)
4620 else
4622 }
4623 if (changesMask[16])
4624 {
4625 if (!ignoreNestedChangesMask)
4627 else
4629 }
4630 if (changesMask[17])
4631 {
4632 if (!ignoreNestedChangesMask)
4634 else
4636 }
4637 if (changesMask[18])
4638 {
4639 if (!ignoreNestedChangesMask)
4641 else
4643 }
4644 if (changesMask[19])
4645 {
4646 if (!ignoreNestedChangesMask)
4648 else
4650 }
4651 if (changesMask[20])
4652 {
4653 if (!ignoreNestedChangesMask)
4655 else
4657 }
4658 if (changesMask[21])
4659 {
4660 if (!ignoreNestedChangesMask)
4661 SpellPctModByLabel.WriteUpdateMask(data);
4662 else
4664 }
4665 if (changesMask[22])
4666 {
4667 if (!ignoreNestedChangesMask)
4668 SpellFlatModByLabel.WriteUpdateMask(data);
4669 else
4671 }
4672 if (changesMask[23])
4673 {
4674 if (!ignoreNestedChangesMask)
4676 else
4678 }
4679 if (changesMask[24])
4680 {
4681 if (!ignoreNestedChangesMask)
4683 else
4685 }
4686 if (changesMask[25])
4687 {
4688 if (!ignoreNestedChangesMask)
4690 else
4692 }
4693 if (changesMask[26])
4694 {
4695 if (!ignoreNestedChangesMask)
4697 else
4699 }
4700 if (changesMask[27])
4701 {
4702 if (!ignoreNestedChangesMask)
4704 else
4706 }
4707 if (changesMask[28])
4708 {
4709 if (!ignoreNestedChangesMask)
4711 else
4713 }
4714 if (changesMask[29])
4715 {
4716 if (!ignoreNestedChangesMask)
4718 else
4720 }
4721 if (changesMask[30])
4722 {
4723 if (!ignoreNestedChangesMask)
4725 else
4727 }
4728 if (changesMask[31])
4729 {
4730 if (!ignoreNestedChangesMask)
4732 else
4734 }
4735 }
4736 if (changesMask[32])
4737 {
4738 if (changesMask[33])
4739 {
4740 if (!ignoreNestedChangesMask)
4742 else
4744 }
4745 if (changesMask[34])
4746 {
4747 if (!ignoreNestedChangesMask)
4749 else
4751 }
4752 if (changesMask[35])
4753 {
4754 if (!ignoreNestedChangesMask)
4756 else
4758 }
4759 }
4760 data.FlushBits();
4761 if (changesMask[0])
4762 {
4763 if (changesMask[7])
4764 {
4765 for (uint32 i = 0; i < KnownTitles.size(); ++i)
4766 {
4767 if (KnownTitles.HasChanged(i) || ignoreNestedChangesMask)
4768 {
4769 data << uint64(KnownTitles[i]);
4770 }
4771 }
4772 }
4773 if (changesMask[9])
4774 {
4775 for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
4776 {
4777 if (DailyQuestsCompleted.HasChanged(i) || ignoreNestedChangesMask)
4778 {
4779 data << int32(DailyQuestsCompleted[i]);
4780 }
4781 }
4782 }
4783 if (changesMask[10])
4784 {
4785 for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
4786 {
4787 if (AvailableQuestLineXQuestIDs.HasChanged(i) || ignoreNestedChangesMask)
4788 {
4790 }
4791 }
4792 }
4793 if (changesMask[11])
4794 {
4795 for (uint32 i = 0; i < Heirlooms.size(); ++i)
4796 {
4797 if (Heirlooms.HasChanged(i) || ignoreNestedChangesMask)
4798 {
4799 data << int32(Heirlooms[i]);
4800 }
4801 }
4802 }
4803 if (changesMask[12])
4804 {
4805 for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
4806 {
4807 if (HeirloomFlags.HasChanged(i) || ignoreNestedChangesMask)
4808 {
4809 data << uint32(HeirloomFlags[i]);
4810 }
4811 }
4812 }
4813 if (changesMask[13])
4814 {
4815 for (uint32 i = 0; i < Toys.size(); ++i)
4816 {
4817 if (Toys.HasChanged(i) || ignoreNestedChangesMask)
4818 {
4819 data << int32(Toys[i]);
4820 }
4821 }
4822 }
4823 if (changesMask[14])
4824 {
4825 for (uint32 i = 0; i < ToyFlags.size(); ++i)
4826 {
4827 if (ToyFlags.HasChanged(i) || ignoreNestedChangesMask)
4828 {
4829 data << uint32(ToyFlags[i]);
4830 }
4831 }
4832 }
4833 if (changesMask[15])
4834 {
4835 for (uint32 i = 0; i < Transmog.size(); ++i)
4836 {
4837 if (Transmog.HasChanged(i) || ignoreNestedChangesMask)
4838 {
4839 data << uint32(Transmog[i]);
4840 }
4841 }
4842 }
4843 if (changesMask[16])
4844 {
4845 for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
4846 {
4847 if (ConditionalTransmog.HasChanged(i) || ignoreNestedChangesMask)
4848 {
4849 data << int32(ConditionalTransmog[i]);
4850 }
4851 }
4852 }
4853 if (changesMask[17])
4854 {
4855 for (uint32 i = 0; i < SelfResSpells.size(); ++i)
4856 {
4857 if (SelfResSpells.HasChanged(i) || ignoreNestedChangesMask)
4858 {
4859 data << int32(SelfResSpells[i]);
4860 }
4861 }
4862 }
4863 if (changesMask[18])
4864 {
4865 for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
4866 {
4867 if (RuneforgePowers.HasChanged(i) || ignoreNestedChangesMask)
4868 {
4869 data << uint32(RuneforgePowers[i]);
4870 }
4871 }
4872 }
4873 if (changesMask[19])
4874 {
4875 for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
4876 {
4877 if (TransmogIllusions.HasChanged(i) || ignoreNestedChangesMask)
4878 {
4879 data << uint32(TransmogIllusions[i]);
4880 }
4881 }
4882 }
4883 if (changesMask[21])
4884 {
4885 for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
4886 {
4887 if (SpellPctModByLabel.HasChanged(i) || ignoreNestedChangesMask)
4888 {
4889 SpellPctModByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4890 }
4891 }
4892 }
4893 if (changesMask[22])
4894 {
4895 for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
4896 {
4897 if (SpellFlatModByLabel.HasChanged(i) || ignoreNestedChangesMask)
4898 {
4899 SpellFlatModByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4900 }
4901 }
4902 }
4903 if (changesMask[23])
4904 {
4905 for (uint32 i = 0; i < MawPowers.size(); ++i)
4906 {
4907 if (MawPowers.HasChanged(i) || ignoreNestedChangesMask)
4908 {
4909 MawPowers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4910 }
4911 }
4912 }
4913 if (changesMask[24])
4914 {
4915 for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
4916 {
4917 if (MultiFloorExploration.HasChanged(i) || ignoreNestedChangesMask)
4918 {
4919 MultiFloorExploration[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4920 }
4921 }
4922 }
4923 if (changesMask[25])
4924 {
4925 for (uint32 i = 0; i < RecipeProgression.size(); ++i)
4926 {
4927 if (RecipeProgression.HasChanged(i) || ignoreNestedChangesMask)
4928 {
4929 RecipeProgression[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4930 }
4931 }
4932 }
4933 if (changesMask[26])
4934 {
4935 for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
4936 {
4937 if (ReplayedQuests.HasChanged(i) || ignoreNestedChangesMask)
4938 {
4939 ReplayedQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4940 }
4941 }
4942 }
4943 if (changesMask[27])
4944 {
4945 for (uint32 i = 0; i < TaskQuests.size(); ++i)
4946 {
4947 if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask)
4948 {
4949 TaskQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4950 }
4951 }
4952 }
4953 if (changesMask[28])
4954 {
4955 for (uint32 i = 0; i < DisabledSpells.size(); ++i)
4956 {
4957 if (DisabledSpells.HasChanged(i) || ignoreNestedChangesMask)
4958 {
4959 data << int32(DisabledSpells[i]);
4960 }
4961 }
4962 }
4963 if (changesMask[31])
4964 {
4965 for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
4966 {
4967 if (PersonalCraftingOrderCounts.HasChanged(i) || ignoreNestedChangesMask)
4968 {
4969 PersonalCraftingOrderCounts[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4970 }
4971 }
4972 }
4973 }
4974 if (changesMask[32])
4975 {
4976 if (changesMask[33])
4977 {
4978 for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
4979 {
4980 if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask)
4981 {
4982 CategoryCooldownMods[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4983 }
4984 }
4985 }
4986 if (changesMask[34])
4987 {
4988 for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
4989 {
4990 if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask)
4991 {
4992 WeeklySpellUses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
4993 }
4994 }
4995 }
4996 if (changesMask[35])
4997 {
4998 for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
4999 {
5000 if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask)
5001 {
5002 TrackedCollectableSources[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5003 }
5004 }
5005 }
5006 }
5007 if (changesMask[0])
5008 {
5009 if (changesMask[8])
5010 {
5011 for (uint32 i = 0; i < PvpInfo.size(); ++i)
5012 {
5013 if (PvpInfo.HasChanged(i) || ignoreNestedChangesMask)
5014 {
5015 PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5016 }
5017 }
5018 }
5019 if (changesMask[20])
5020 {
5021 for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
5022 {
5023 if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask)
5024 {
5025 CharacterRestrictions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5026 }
5027 }
5028 }
5029 if (changesMask[29])
5030 {
5031 for (uint32 i = 0; i < TraitConfigs.size(); ++i)
5032 {
5033 if (TraitConfigs.HasChanged(i) || ignoreNestedChangesMask)
5034 {
5035 TraitConfigs[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5036 }
5037 }
5038 }
5039 if (changesMask[30])
5040 {
5041 for (uint32 i = 0; i < CraftingOrders.size(); ++i)
5042 {
5043 if (CraftingOrders.HasChanged(i) || ignoreNestedChangesMask)
5044 {
5045 CraftingOrders[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5046 }
5047 }
5048 }
5049 }
5050 if (changesMask[32])
5051 {
5052 if (changesMask[44])
5053 {
5054 data << FarsightObject;
5055 }
5056 if (changesMask[45])
5057 {
5058 data << SummonedBattlePetGUID;
5059 }
5060 if (changesMask[46])
5061 {
5062 data << uint64(Coinage);
5063 }
5064 if (changesMask[47])
5065 {
5066 data << int32(XP);
5067 }
5068 if (changesMask[48])
5069 {
5070 data << int32(NextLevelXP);
5071 }
5072 if (changesMask[49])
5073 {
5074 data << int32(TrialXP);
5075 }
5076 if (changesMask[50])
5077 {
5078 Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5079 }
5080 if (changesMask[51])
5081 {
5082 data << int32(CharacterPoints);
5083 }
5084 if (changesMask[52])
5085 {
5086 data << int32(MaxTalentTiers);
5087 }
5088 if (changesMask[53])
5089 {
5090 data << uint32(TrackCreatureMask);
5091 }
5092 if (changesMask[54])
5093 {
5094 data << float(MainhandExpertise);
5095 }
5096 if (changesMask[55])
5097 {
5098 data << float(OffhandExpertise);
5099 }
5100 if (changesMask[56])
5101 {
5102 data << float(RangedExpertise);
5103 }
5104 if (changesMask[57])
5105 {
5106 data << float(CombatRatingExpertise);
5107 }
5108 if (changesMask[58])
5109 {
5110 data << float(BlockPercentage);
5111 }
5112 if (changesMask[59])
5113 {
5114 data << float(DodgePercentage);
5115 }
5116 if (changesMask[60])
5117 {
5118 data << float(DodgePercentageFromAttribute);
5119 }
5120 if (changesMask[61])
5121 {
5122 data << float(ParryPercentage);
5123 }
5124 if (changesMask[62])
5125 {
5126 data << float(ParryPercentageFromAttribute);
5127 }
5128 if (changesMask[63])
5129 {
5130 data << float(CritPercentage);
5131 }
5132 if (changesMask[64])
5133 {
5134 data << float(RangedCritPercentage);
5135 }
5136 if (changesMask[65])
5137 {
5138 data << float(OffhandCritPercentage);
5139 }
5140 if (changesMask[66])
5141 {
5142 data << float(SpellCritPercentage);
5143 }
5144 if (changesMask[67])
5145 {
5146 data << int32(ShieldBlock);
5147 }
5148 if (changesMask[68])
5149 {
5150 data << float(ShieldBlockCritPercentage);
5151 }
5152 if (changesMask[69])
5153 {
5154 data << float(Mastery);
5155 }
5156 if (changesMask[70])
5157 {
5158 data << float(Speed);
5159 }
5160 if (changesMask[71])
5161 {
5162 data << float(Avoidance);
5163 }
5164 }
5165 if (changesMask[72])
5166 {
5167 if (changesMask[73])
5168 {
5169 data << float(Sturdiness);
5170 }
5171 if (changesMask[74])
5172 {
5173 data << int32(Versatility);
5174 }
5175 if (changesMask[75])
5176 {
5177 data << float(VersatilityBonus);
5178 }
5179 if (changesMask[76])
5180 {
5181 data << float(PvpPowerDamage);
5182 }
5183 if (changesMask[77])
5184 {
5185 data << float(PvpPowerHealing);
5186 }
5187 if (changesMask[78])
5188 {
5189 data << int32(ModHealingDonePos);
5190 }
5191 if (changesMask[79])
5192 {
5193 data << float(ModHealingPercent);
5194 }
5195 if (changesMask[80])
5196 {
5197 data << float(ModPeriodicHealingDonePercent);
5198 }
5199 if (changesMask[81])
5200 {
5201 data << float(ModSpellPowerPercent);
5202 }
5203 if (changesMask[82])
5204 {
5205 data << float(ModResiliencePercent);
5206 }
5207 if (changesMask[83])
5208 {
5209 data << float(OverrideSpellPowerByAPPercent);
5210 }
5211 if (changesMask[84])
5212 {
5213 data << float(OverrideAPBySpellPowerPercent);
5214 }
5215 if (changesMask[85])
5216 {
5217 data << int32(ModTargetResistance);
5218 }
5219 if (changesMask[86])
5220 {
5222 }
5223 if (changesMask[87])
5224 {
5225 data << uint32(LocalFlags);
5226 }
5227 if (changesMask[88])
5228 {
5229 data << uint8(GrantableLevels);
5230 }
5231 if (changesMask[89])
5232 {
5233 data << uint8(MultiActionBars);
5234 }
5235 if (changesMask[90])
5236 {
5237 data << uint8(LifetimeMaxRank);
5238 }
5239 if (changesMask[91])
5240 {
5241 data << uint8(NumRespecs);
5242 }
5243 if (changesMask[92])
5244 {
5245 data << uint32(PvpMedals);
5246 }
5247 if (changesMask[93])
5248 {
5249 data << uint16(TodayHonorableKills);
5250 }
5251 if (changesMask[94])
5252 {
5254 }
5255 if (changesMask[95])
5256 {
5258 }
5259 if (changesMask[96])
5260 {
5261 data << int32(WatchedFactionIndex);
5262 }
5263 if (changesMask[97])
5264 {
5265 data << int32(MaxLevel);
5266 }
5267 if (changesMask[98])
5268 {
5270 }
5271 if (changesMask[99])
5272 {
5274 }
5275 if (changesMask[100])
5276 {
5277 data << int32(PetSpellPower);
5278 }
5279 if (changesMask[101])
5280 {
5281 data << float(UiHitModifier);
5282 }
5283 if (changesMask[102])
5284 {
5285 data << float(UiSpellHitModifier);
5286 }
5287 if (changesMask[103])
5288 {
5289 data << int32(HomeRealmTimeOffset);
5290 }
5291 }
5292 if (changesMask[104])
5293 {
5294 if (changesMask[105])
5295 {
5296 data << float(ModPetHaste);
5297 }
5298 if (changesMask[106])
5299 {
5300 data << int8(JailersTowerLevelMax);
5301 }
5302 if (changesMask[107])
5303 {
5304 data << int8(JailersTowerLevel);
5305 }
5306 if (changesMask[108])
5307 {
5308 data << uint8(LocalRegenFlags);
5309 }
5310 if (changesMask[109])
5311 {
5312 data << uint8(AuraVision);
5313 }
5314 if (changesMask[110])
5315 {
5316 data << uint8(NumBackpackSlots);
5317 }
5318 if (changesMask[111])
5319 {
5320 data << int32(OverrideSpellsID);
5321 }
5322 if (changesMask[112])
5323 {
5324 data << uint16(LootSpecID);
5325 }
5326 if (changesMask[113])
5327 {
5328 data << uint32(OverrideZonePVPType);
5329 }
5330 if (changesMask[114])
5331 {
5332 data << int32(Honor);
5333 }
5334 if (changesMask[115])
5335 {
5336 data << int32(HonorNextLevel);
5337 }
5338 if (changesMask[116])
5339 {
5340 data << int32(PerksProgramCurrency);
5341 }
5342 if (changesMask[117])
5343 {
5344 data << uint8(NumBankSlots);
5345 }
5346 if (changesMask[122])
5347 {
5349 }
5350 if (changesMask[123])
5351 {
5352 data << int32(TransportServerTime);
5353 }
5354 if (changesMask[124])
5355 {
5357 }
5358 if (changesMask[125])
5359 {
5361 }
5362 if (changesMask[127])
5363 {
5365 }
5366 if (changesMask[128])
5367 {
5369 }
5370 if (changesMask[129])
5371 {
5373 }
5374 if (changesMask[130])
5375 {
5376 data << float(ItemUpgradeHighFingerWatermark);
5377 }
5378 if (changesMask[131])
5379 {
5381 }
5382 if (changesMask[132])
5383 {
5384 data << float(ItemUpgradeHighTrinketWatermark);
5385 }
5386 if (changesMask[133])
5387 {
5389 }
5390 if (changesMask[135])
5391 {
5393 }
5394 data.WriteBits(QuestSession.has_value(), 1);
5395 data.WriteBits(PetStable.has_value(), 1);
5396 }
5397 data.FlushBits();
5398 if (changesMask[104])
5399 {
5400 if (changesMask[118])
5401 {
5402 ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5403 }
5404 if (changesMask[120])
5405 {
5406 if (QuestSession.has_value())
5407 {
5408 QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5409 }
5410 }
5411 if (changesMask[119])
5412 {
5413 data << FrozenPerksVendorItem;
5414 }
5415 if (changesMask[121])
5416 {
5417 Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5418 }
5419 if (changesMask[126])
5420 {
5421 data << DungeonScore;
5422 }
5423 if (changesMask[134])
5424 {
5425 if (PetStable.has_value())
5426 {
5427 PetStable->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5428 }
5429 }
5430 }
5431 if (changesMask[136])
5432 {
5433 for (uint32 i = 0; i < 227; ++i)
5434 {
5435 if (changesMask[137 + i])
5436 {
5437 data << InvSlots[i];
5438 }
5439 }
5440 }
5441 if (changesMask[364])
5442 {
5443 for (uint32 i = 0; i < 2; ++i)
5444 {
5445 if (changesMask[365 + i])
5446 {
5447 RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5448 }
5449 }
5450 }
5451 if (changesMask[367])
5452 {
5453 for (uint32 i = 0; i < 7; ++i)
5454 {
5455 if (changesMask[368 + i])
5456 {
5457 data << int32(ModDamageDonePos[i]);
5458 }
5459 if (changesMask[375 + i])
5460 {
5461 data << int32(ModDamageDoneNeg[i]);
5462 }
5463 if (changesMask[382 + i])
5464 {
5465 data << float(ModDamageDonePercent[i]);
5466 }
5467 if (changesMask[389 + i])
5468 {
5469 data << float(ModHealingDonePercent[i]);
5470 }
5471 }
5472 }
5473 if (changesMask[396])
5474 {
5475 for (uint32 i = 0; i < 3; ++i)
5476 {
5477 if (changesMask[397 + i])
5478 {
5479 data << float(WeaponDmgMultipliers[i]);
5480 }
5481 if (changesMask[400 + i])
5482 {
5483 data << float(WeaponAtkSpeedMultipliers[i]);
5484 }
5485 }
5486 }
5487 if (changesMask[403])
5488 {
5489 for (uint32 i = 0; i < 12; ++i)
5490 {
5491 if (changesMask[404 + i])
5492 {
5493 data << uint32(BuybackPrice[i]);
5494 }
5495 if (changesMask[416 + i])
5496 {
5497 data << int64(BuybackTimestamp[i]);
5498 }
5499 }
5500 }
5501 if (changesMask[428])
5502 {
5503 for (uint32 i = 0; i < 32; ++i)
5504 {
5505 if (changesMask[429 + i])
5506 {
5507 data << int32(CombatRatings[i]);
5508 }
5509 }
5510 }
5511 if (changesMask[461])
5512 {
5513 for (uint32 i = 0; i < 4; ++i)
5514 {
5515 if (changesMask[462 + i])
5516 {
5517 data << uint32(NoReagentCostMask[i]);
5518 }
5519 }
5520 }
5521 if (changesMask[466])
5522 {
5523 for (uint32 i = 0; i < 2; ++i)
5524 {
5525 if (changesMask[467 + i])
5526 {
5527 data << int32(ProfessionSkillLine[i]);
5528 }
5529 }
5530 }
5531 if (changesMask[469])
5532 {
5533 for (uint32 i = 0; i < 5; ++i)
5534 {
5535 if (changesMask[470 + i])
5536 {
5537 data << uint32(BagSlotFlags[i]);
5538 }
5539 }
5540 }
5541 if (changesMask[475])
5542 {
5543 for (uint32 i = 0; i < 7; ++i)
5544 {
5545 if (changesMask[476 + i])
5546 {
5547 data << uint32(BankBagSlotFlags[i]);
5548 }
5549 }
5550 }
5551 if (changesMask[483])
5552 {
5553 for (uint32 i = 0; i < 950; ++i)
5554 {
5555 if (changesMask[484 + i])
5556 {
5557 data << uint64(QuestCompleted[i]);
5558 }
5559 }
5560 }
5561 if (changesMask[1434])
5562 {
5563 for (uint32 i = 0; i < 17; ++i)
5564 {
5565 if (changesMask[1435 + i])
5566 {
5567 data << float(ItemUpgradeHighWatermark[i]);
5568 }
5569 }
5570 }
5571 data.FlushBits();
5572}
5573
5575{
5722}
5723
5724void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const
5725{
5726 data << int32(DisplayID);
5727 data << uint32(SpellVisualID);
5728 data << uint32(StateSpellVisualID);
5731 data << uint32(StateWorldEffectIDs->size());
5733 for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i)
5734 {
5735 data << uint32((*StateWorldEffectIDs)[i]);
5736 }
5737 data << CreatedBy;
5738 data << GuildGUID;
5739 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
5740 data << float(ParentRotation->x);
5741 data << float(ParentRotation->y);
5742 data << float(ParentRotation->z);
5743 data << float(ParentRotation->w);
5744 data << int32(FactionTemplate);
5745 data << int8(ViewerDependentValue<StateTag>::GetValue(this, owner, receiver));
5746 data << int8(TypeID);
5747 data << uint8(PercentHealth);
5748 data << uint32(ArtKit);
5749 data << uint32(EnableDoodadSets.size());
5750 data << uint32(CustomParam);
5751 data << int32(Level);
5752 data << uint32(AnimGroupInstance);
5753 data << uint32(UiWidgetItemID);
5754 data << uint32(UiWidgetItemQuality);
5756 data << uint32(WorldEffects.size());
5757 for (uint32 i = 0; i < EnableDoodadSets.size(); ++i)
5758 {
5759 data << int32(EnableDoodadSets[i]);
5760 }
5761 for (uint32 i = 0; i < WorldEffects.size(); ++i)
5762 {
5763 data << int32(WorldEffects[i]);
5764 }
5765}
5766
5767void GameObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const
5768{
5769 WriteUpdate(data, _changesMask, false, owner, receiver);
5770}
5771
5772void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, GameObject const* owner, Player const* receiver) const
5773{
5774 data.WriteBits(changesMask.GetBlock(0), 25);
5775
5776 if (changesMask[0])
5777 {
5778 if (changesMask[1])
5779 {
5780 data.WriteBits(StateWorldEffectIDs->size(), 32);
5781 for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i)
5782 {
5783 data << uint32((*StateWorldEffectIDs)[i]);
5784 }
5785 }
5786 }
5787 data.FlushBits();
5788 if (changesMask[0])
5789 {
5790 if (changesMask[2])
5791 {
5792 if (!ignoreNestedChangesMask)
5794 else
5796 }
5797 if (changesMask[3])
5798 {
5799 if (!ignoreNestedChangesMask)
5801 else
5803 }
5804 }
5805 data.FlushBits();
5806 if (changesMask[0])
5807 {
5808 if (changesMask[2])
5809 {
5810 for (uint32 i = 0; i < EnableDoodadSets.size(); ++i)
5811 {
5812 if (EnableDoodadSets.HasChanged(i) || ignoreNestedChangesMask)
5813 {
5814 data << int32(EnableDoodadSets[i]);
5815 }
5816 }
5817 }
5818 if (changesMask[3])
5819 {
5820 for (uint32 i = 0; i < WorldEffects.size(); ++i)
5821 {
5822 if (WorldEffects.HasChanged(i) || ignoreNestedChangesMask)
5823 {
5824 data << int32(WorldEffects[i]);
5825 }
5826 }
5827 }
5828 if (changesMask[4])
5829 {
5830 data << int32(DisplayID);
5831 }
5832 if (changesMask[5])
5833 {
5834 data << uint32(SpellVisualID);
5835 }
5836 if (changesMask[6])
5837 {
5838 data << uint32(StateSpellVisualID);
5839 }
5840 if (changesMask[7])
5841 {
5843 }
5844 if (changesMask[8])
5845 {
5847 }
5848 if (changesMask[9])
5849 {
5851 }
5852 if (changesMask[10])
5853 {
5854 data << CreatedBy;
5855 }
5856 if (changesMask[11])
5857 {
5858 data << GuildGUID;
5859 }
5860 if (changesMask[12])
5861 {
5862 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
5863 }
5864 if (changesMask[13])
5865 {
5866 data << float(ParentRotation->x);
5867 data << float(ParentRotation->y);
5868 data << float(ParentRotation->z);
5869 data << float(ParentRotation->w);
5870 }
5871 if (changesMask[14])
5872 {
5873 data << int32(FactionTemplate);
5874 }
5875 if (changesMask[15])
5876 {
5877 data << int8(ViewerDependentValue<StateTag>::GetValue(this, owner, receiver));
5878 }
5879 if (changesMask[16])
5880 {
5881 data << int8(TypeID);
5882 }
5883 if (changesMask[17])
5884 {
5885 data << uint8(PercentHealth);
5886 }
5887 if (changesMask[18])
5888 {
5889 data << uint32(ArtKit);
5890 }
5891 if (changesMask[19])
5892 {
5893 data << uint32(CustomParam);
5894 }
5895 if (changesMask[20])
5896 {
5897 data << int32(Level);
5898 }
5899 if (changesMask[21])
5900 {
5901 data << uint32(AnimGroupInstance);
5902 }
5903 if (changesMask[22])
5904 {
5905 data << uint32(UiWidgetItemID);
5906 }
5907 if (changesMask[23])
5908 {
5909 data << uint32(UiWidgetItemQuality);
5910 }
5911 if (changesMask[24])
5912 {
5914 }
5915 }
5916}
5917
5919{
5945}
5946
5947void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const
5948{
5949 data << Caster;
5950 data << uint8(Type);
5951 SpellVisual->WriteCreate(data, owner, receiver);
5952 data << int32(SpellID);
5953 data << float(Radius);
5954 data << uint32(CastTime);
5955}
5956
5957void DynamicObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const
5958{
5959 WriteUpdate(data, _changesMask, false, owner, receiver);
5960}
5961
5962void DynamicObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, DynamicObject const* owner, Player const* receiver) const
5963{
5964 data.WriteBits(changesMask.GetBlock(0), 7);
5965
5966 data.FlushBits();
5967 if (changesMask[0])
5968 {
5969 if (changesMask[1])
5970 {
5971 data << Caster;
5972 }
5973 if (changesMask[2])
5974 {
5975 data << uint8(Type);
5976 }
5977 if (changesMask[3])
5978 {
5979 SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5980 }
5981 if (changesMask[4])
5982 {
5983 data << int32(SpellID);
5984 }
5985 if (changesMask[5])
5986 {
5987 data << float(Radius);
5988 }
5989 if (changesMask[6])
5990 {
5991 data << uint32(CastTime);
5992 }
5993 }
5994}
5995
5997{
6005}
6006
6007void CorpseData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const
6008{
6009 data << uint32(DynamicFlags);
6010 data << Owner;
6011 data << PartyGUID;
6012 data << GuildGUID;
6013 data << uint32(DisplayID);
6014 for (uint32 i = 0; i < 19; ++i)
6015 {
6016 data << uint32(Items[i]);
6017 }
6018 data << uint8(RaceID);
6019 data << uint8(Sex);
6020 data << uint8(Class);
6021 data << uint32(Customizations.size());
6022 data << uint32(Flags);
6023 data << int32(FactionTemplate);
6025 for (uint32 i = 0; i < Customizations.size(); ++i)
6026 {
6027 Customizations[i].WriteCreate(data, owner, receiver);
6028 }
6029}
6030
6031void CorpseData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const
6032{
6033 WriteUpdate(data, _changesMask, false, owner, receiver);
6034}
6035
6036void CorpseData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Corpse const* owner, Player const* receiver) const
6037{
6038 data.WriteBits(changesMask.GetBlocksMask(0), 2);
6039 for (uint32 i = 0; i < 2; ++i)
6040 if (changesMask.GetBlock(i))
6041 data.WriteBits(changesMask.GetBlock(i), 32);
6042
6043 if (changesMask[0])
6044 {
6045 if (changesMask[1])
6046 {
6047 if (!ignoreNestedChangesMask)
6049 else
6051 }
6052 }
6053 data.FlushBits();
6054 if (changesMask[0])
6055 {
6056 if (changesMask[1])
6057 {
6058 for (uint32 i = 0; i < Customizations.size(); ++i)
6059 {
6060 if (Customizations.HasChanged(i) || ignoreNestedChangesMask)
6061 {
6062 Customizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6063 }
6064 }
6065 }
6066 if (changesMask[2])
6067 {
6068 data << uint32(DynamicFlags);
6069 }
6070 if (changesMask[3])
6071 {
6072 data << Owner;
6073 }
6074 if (changesMask[4])
6075 {
6076 data << PartyGUID;
6077 }
6078 if (changesMask[5])
6079 {
6080 data << GuildGUID;
6081 }
6082 if (changesMask[6])
6083 {
6084 data << uint32(DisplayID);
6085 }
6086 if (changesMask[7])
6087 {
6088 data << uint8(RaceID);
6089 }
6090 if (changesMask[8])
6091 {
6092 data << uint8(Sex);
6093 }
6094 if (changesMask[9])
6095 {
6096 data << uint8(Class);
6097 }
6098 if (changesMask[10])
6099 {
6100 data << uint32(Flags);
6101 }
6102 if (changesMask[11])
6103 {
6104 data << int32(FactionTemplate);
6105 }
6106 if (changesMask[12])
6107 {
6109 }
6110 }
6111 if (changesMask[13])
6112 {
6113 for (uint32 i = 0; i < 19; ++i)
6114 {
6115 if (changesMask[14 + i])
6116 {
6117 data << uint32(Items[i]);
6118 }
6119 }
6120 }
6121}
6122
6124{
6139}
6140
6141void ScaleCurve::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
6142{
6143 data << uint32(StartTimeOffset);
6144 for (uint32 i = 0; i < 2; ++i)
6145 {
6146 data << Points[i];
6147 }
6148 data << uint32(ParameterCurve);
6150 data.FlushBits();
6151}
6152
6153void ScaleCurve::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
6154{
6155 Mask changesMask = _changesMask;
6156 if (ignoreChangesMask)
6157 changesMask.SetAll();
6158
6159 data.WriteBits(changesMask.GetBlock(0), 7);
6160
6161 if (changesMask[0])
6162 {
6163 if (changesMask[1])
6164 {
6166 }
6167 }
6168 data.FlushBits();
6169 if (changesMask[0])
6170 {
6171 if (changesMask[2])
6172 {
6173 data << uint32(StartTimeOffset);
6174 }
6175 if (changesMask[3])
6176 {
6177 data << uint32(ParameterCurve);
6178 }
6179 }
6180 if (changesMask[4])
6181 {
6182 for (uint32 i = 0; i < 2; ++i)
6183 {
6184 if (changesMask[5 + i])
6185 {
6186 data << Points[i];
6187 }
6188 }
6189 }
6190 data.FlushBits();
6191}
6192
6194{
6200}
6201
6202void VisualAnim::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
6203{
6204 data << uint32(AnimationDataID);
6205 data << uint32(AnimKitID);
6206 data << uint32(AnimProgress);
6207 data.WriteBit(Field_C);
6208 data.FlushBits();
6209}
6210
6211void VisualAnim::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
6212{
6213 Mask changesMask = _changesMask;
6214 if (ignoreChangesMask)
6215 changesMask.SetAll();
6216
6217 data.WriteBits(changesMask.GetBlock(0), 5);
6218
6219 if (changesMask[0])
6220 {
6221 if (changesMask[1])
6222 {
6223 data.WriteBit(Field_C);
6224 }
6225 }
6226 data.FlushBits();
6227 if (changesMask[0])
6228 {
6229 if (changesMask[2])
6230 {
6231 data << uint32(AnimationDataID);
6232 }
6233 if (changesMask[3])
6234 {
6235 data << uint32(AnimKitID);
6236 }
6237 if (changesMask[4])
6238 {
6239 data << uint32(AnimProgress);
6240 }
6241 }
6242 data.FlushBits();
6243}
6244
6246{
6252}
6253
6254void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
6255{
6256 OverrideScaleCurve->WriteCreate(data, owner, receiver);
6257 data << Caster;
6258 data << uint32(Duration);
6259 data << uint32(TimeToTarget);
6260 data << uint32(TimeToTargetScale);
6262 data << uint32(TimeToTargetPos);
6263 data << int32(SpellID);
6264 data << int32(SpellForVisuals);
6265 SpellVisual->WriteCreate(data, owner, receiver);
6266 data << float(BoundsRadius2D);
6267 data << uint32(DecalPropertiesID);
6268 data << CreatingEffectGUID;
6269 data << uint32(NumUnitsInside);
6270 data << uint32(NumPlayersInside);
6271 data << OrbitPathTarget;
6272 data << RollPitchYaw;
6273 data << int32(PositionalSoundKitID);
6274 ExtraScaleCurve->WriteCreate(data, owner, receiver);
6275 data.FlushBits();
6277 data.WriteBit(Field_261);
6278 OverrideMoveCurveX->WriteCreate(data, owner, receiver);
6279 OverrideMoveCurveY->WriteCreate(data, owner, receiver);
6280 OverrideMoveCurveZ->WriteCreate(data, owner, receiver);
6281 VisualAnim->WriteCreate(data, owner, receiver);
6282 data.FlushBits();
6283}
6284
6285void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
6286{
6287 WriteUpdate(data, _changesMask, false, owner, receiver);
6288}
6289
6290void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const
6291{
6292 data.WriteBits(changesMask.GetBlock(0), 26);
6293
6294 if (changesMask[0])
6295 {
6296 if (changesMask[1])
6297 {
6299 }
6300 if (changesMask[2])
6301 {
6302 data.WriteBit(Field_261);
6303 }
6304 }
6305 data.FlushBits();
6306 if (changesMask[0])
6307 {
6308 if (changesMask[3])
6309 {
6310 OverrideScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6311 }
6312 if (changesMask[8])
6313 {
6314 data << Caster;
6315 }
6316 if (changesMask[9])
6317 {
6318 data << uint32(Duration);
6319 }
6320 if (changesMask[10])
6321 {
6322 data << uint32(TimeToTarget);
6323 }
6324 if (changesMask[11])
6325 {
6326 data << uint32(TimeToTargetScale);
6327 }
6328 if (changesMask[12])
6329 {
6331 }
6332 if (changesMask[13])
6333 {
6334 data << uint32(TimeToTargetPos);
6335 }
6336 if (changesMask[14])
6337 {
6338 data << int32(SpellID);
6339 }
6340 if (changesMask[15])
6341 {
6342 data << int32(SpellForVisuals);
6343 }
6344 if (changesMask[16])
6345 {
6346 SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6347 }
6348 if (changesMask[17])
6349 {
6350 data << float(BoundsRadius2D);
6351 }
6352 if (changesMask[18])
6353 {
6354 data << uint32(DecalPropertiesID);
6355 }
6356 if (changesMask[19])
6357 {
6358 data << CreatingEffectGUID;
6359 }
6360 if (changesMask[20])
6361 {
6362 data << uint32(NumUnitsInside);
6363 }
6364 if (changesMask[21])
6365 {
6366 data << uint32(NumPlayersInside);
6367 }
6368 if (changesMask[22])
6369 {
6370 data << OrbitPathTarget;
6371 }
6372 if (changesMask[23])
6373 {
6374 data << RollPitchYaw;
6375 }
6376 if (changesMask[24])
6377 {
6378 data << int32(PositionalSoundKitID);
6379 }
6380 if (changesMask[4])
6381 {
6382 ExtraScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6383 }
6384 if (changesMask[5])
6385 {
6386 OverrideMoveCurveX->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6387 }
6388 if (changesMask[6])
6389 {
6390 OverrideMoveCurveY->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6391 }
6392 if (changesMask[7])
6393 {
6394 OverrideMoveCurveZ->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6395 }
6396 if (changesMask[25])
6397 {
6398 VisualAnim->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6399 }
6400 }
6401 data.FlushBits();
6402}
6403
6405{
6432}
6433
6434void SceneObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
6435{
6436 data << int32(ScriptPackageID);
6437 data << uint32(RndSeedVal);
6438 data << CreatedBy;
6439 data << uint32(SceneType);
6440}
6441
6442void SceneObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
6443{
6444 WriteUpdate(data, _changesMask, false, owner, receiver);
6445}
6446
6447void SceneObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const
6448{
6449 data.WriteBits(changesMask.GetBlock(0), 5);
6450
6451 data.FlushBits();
6452 if (changesMask[0])
6453 {
6454 if (changesMask[1])
6455 {
6456 data << int32(ScriptPackageID);
6457 }
6458 if (changesMask[2])
6459 {
6460 data << uint32(RndSeedVal);
6461 }
6462 if (changesMask[3])
6463 {
6464 data << CreatedBy;
6465 }
6466 if (changesMask[4])
6467 {
6468 data << uint32(SceneType);
6469 }
6470 }
6471}
6472
6474{
6480}
6481
6482void ConversationLine::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
6483{
6484 data << int32(ConversationLineID);
6485 data << int32(BroadcastTextID);
6486 data << uint32(ViewerDependentValue<StartTimeTag>::GetValue(this, owner, receiver));
6487 data << int32(UiCameraID);
6488 data << uint8(ActorIndex);
6489 data << uint8(Flags);
6490 data << uint8(ChatType);
6491}
6492
6493void ConversationLine::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const
6494{
6495 data << int32(ConversationLineID);
6496 data << int32(BroadcastTextID);
6497 data << uint32(ViewerDependentValue<StartTimeTag>::GetValue(this, owner, receiver));
6498 data << int32(UiCameraID);
6499 data << uint8(ActorIndex);
6500 data << uint8(Flags);
6501 data << uint8(ChatType);
6502}
6503
6505{
6508 && StartTime == right.StartTime
6509 && UiCameraID == right.UiCameraID
6510 && ActorIndex == right.ActorIndex
6511 && Flags == right.Flags
6512 && ChatType == right.ChatType;
6513}
6514
6515void ConversationActor::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
6516{
6517 data << uint32(CreatureID);
6519 data << ActorGUID;
6520 data << int32(Id);
6521 data.WriteBits(Type, 1);
6522 data.WriteBits(NoActorObject, 1);
6523 data.FlushBits();
6524}
6525
6526void ConversationActor::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const
6527{
6528 data << uint32(CreatureID);
6530 data << ActorGUID;
6531 data << int32(Id);
6532 data.WriteBits(Type, 1);
6533 data.WriteBits(NoActorObject, 1);
6534 data.FlushBits();
6535}
6536
6538{
6539 return CreatureID == right.CreatureID
6541 && ActorGUID == right.ActorGUID
6542 && Id == right.Id
6543 && Type == right.Type
6544 && NoActorObject == right.NoActorObject;
6545}
6546
6547void ConversationData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
6548{
6549 data << uint32(Lines->size());
6550 data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, owner, receiver));
6551 data << uint32(Progress);
6552 for (uint32 i = 0; i < Lines->size(); ++i)
6553 {
6554 (*Lines)[i].WriteCreate(data, owner, receiver);
6555 }
6557 data << uint32(Actors.size());
6558 data << uint32(Flags);
6559 for (uint32 i = 0; i < Actors.size(); ++i)
6560 {
6561 Actors[i].WriteCreate(data, owner, receiver);
6562 }
6563 data.FlushBits();
6564}
6565
6566void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
6567{
6568 WriteUpdate(data, _changesMask, false, owner, receiver);
6569}
6570
6571void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Conversation const* owner, Player const* receiver) const
6572{
6573 data.WriteBits(changesMask.GetBlock(0), 7);
6574
6575 if (changesMask[0])
6576 {
6577 if (changesMask[1])
6578 {
6580 }
6581 if (changesMask[2])
6582 {
6583 data.WriteBits(Lines->size(), 32);
6584 for (uint32 i = 0; i < Lines->size(); ++i)
6585 {
6586 (*Lines)[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6587 }
6588 }
6589 }
6590 data.FlushBits();
6591 if (changesMask[0])
6592 {
6593 if (changesMask[3])
6594 {
6595 if (!ignoreNestedChangesMask)
6596 Actors.WriteUpdateMask(data);
6597 else
6599 }
6600 }
6601 data.FlushBits();
6602 if (changesMask[0])
6603 {
6604 if (changesMask[3])
6605 {
6606 for (uint32 i = 0; i < Actors.size(); ++i)
6607 {
6608 if (Actors.HasChanged(i) || ignoreNestedChangesMask)
6609 {
6610 Actors[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6611 }
6612 }
6613 }
6614 if (changesMask[4])
6615 {
6616 data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, owner, receiver));
6617 }
6618 if (changesMask[5])
6619 {
6620 data << uint32(Progress);
6621 }
6622 if (changesMask[6])
6623 {
6624 data << uint32(Flags);
6625 }
6626 }
6627 data.FlushBits();
6628}
6629
6631{
6639}
6640
6641}
6642
6643#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
6644#pragma GCC diagnostic pop
6645#else
6646#pragma warning(pop)
6647#endif
ToyFlags
Definition: CollectionMgr.h:61
uint8_t uint8
Definition: Define.h:144
int64_t int64
Definition: Define.h:137
int16_t int16
Definition: Define.h:139
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
TypeID
Definition: ObjectGuid.h:34
ChatType
Definition: ObjectMgr.h:140
PlayerFlags
Definition: Player.h:427
PlayerFlagsEx
Definition: Player.h:465
SceneType
Definition: SceneObject.h:27
CreatureFamily
CreatureType
Stats
ShapeshiftForm
AnimTier
Definition: UnitDefines.h:69
Definition: Bag.h:27
void WriteString(std::string const &str)
Definition: ByteBuffer.h:500
bool WriteBit(bool bit)
Definition: ByteBuffer.h:175
void WriteBits(std::size_t value, int32 bits)
Definition: ByteBuffer.h:203
void FlushBits()
Definition: ByteBuffer.h:155
Definition: Corpse.h:53
constexpr bool HasFlag(T flag) const
Definition: EnumFlag.h:106
Definition: Item.h:170
Definition: Object.h:150
bool HasChanged(uint32 index) const
Definition: UpdateField.h:879
void WriteUpdateMask(ByteBuffer &data, int32 bitsForSize=32) const
Definition: UpdateField.h:884
std::size_t size() const
Definition: UpdateField.h:850
static void ClearChangesMask(UpdateField< T, BlockBit, Bit > &field)
Definition: UpdateField.h:609
UpdateMask< Bits > Mask
Definition: UpdateField.h:480
Definition: Unit.h:627
uint32 GetBlock(uint32 index) const
Definition: UpdateMask.h:53
uint32 GetBlocksMask(uint32 index) const
Definition: UpdateMask.h:48
void ResetAll()
Definition: UpdateMask.h:78
void SetAll()
Definition: UpdateMask.h:91
TargetType
Definition: hyjalAI.h:104
Definition: Object.h:109
constexpr std::size_t size()
Definition: UpdateField.h:796
void WriteCompleteDynamicFieldUpdateMask(std::size_t size, ByteBuffer &data, int32 bitsForSize=32)
Definition: UpdateField.cpp:43
UpdateField< uint32, 72, 87 > LocalFlags
Definition: UpdateFields.h:962
DynamicUpdateField< int32, 0, 17 > SelfResSpells
Definition: UpdateFields.h:901
DynamicUpdateField< uint64, 0, 7 > KnownTitles
Definition: UpdateFields.h:892
UpdateField< float, 32, 70 > Speed
Definition: UpdateFields.h:946
UpdateField< bool, 0, 3 > BankAutoSortDisabled
Definition: UpdateFields.h:884
UpdateField< float, 32, 56 > RangedExpertise
Definition: UpdateFields.h:932
UpdateField< int32, 32, 47 > XP
Definition: UpdateFields.h:923
UpdateField< float, 32, 61 > ParryPercentage
Definition: UpdateFields.h:937
DynamicUpdateField< UF::QuestLog, 0, 27 > TaskQuests
Definition: UpdateFields.h:910
UpdateField< int32, 32, 51 > CharacterPoints
Definition: UpdateFields.h:927
DynamicUpdateField< UF::CollectableSourceTrackedData, 32, 35 > TrackedCollectableSources
Definition: UpdateFields.h:915
DynamicUpdateField< int32, 0, 28 > DisabledSpells
Definition: UpdateFields.h:911
DynamicUpdateField< UF::WeeklySpellUse, 32, 34 > WeeklySpellUses
Definition: UpdateFields.h:914
UpdateField< uint8, 104, 108 > LocalRegenFlags
Definition: UpdateFields.h:982
UpdateField< float, 104, 132 > ItemUpgradeHighTrinketWatermark
UpdateField< float, 72, 101 > UiHitModifier
Definition: UpdateFields.h:976
UpdateField< bool, 0, 2 > BackpackSellJunkDisabled
Definition: UpdateFields.h:883
UpdateField< uint16, 104, 112 > LootSpecID
Definition: UpdateFields.h:986
UpdateFieldArray< uint64, 950, 483, 484 > QuestCompleted
DynamicUpdateField< UF::ReplayedQuest, 0, 26 > ReplayedQuests
Definition: UpdateFields.h:909
UpdateField< int32, 104, 111 > OverrideSpellsID
Definition: UpdateFields.h:985
DynamicUpdateField< UF::CategoryCooldownMod, 32, 33 > CategoryCooldownMods
Definition: UpdateFields.h:913
UpdateField< uint8, 104, 109 > AuraVision
Definition: UpdateFields.h:983
DynamicUpdateField< UF::PVPInfo, 0, 8 > PvpInfo
Definition: UpdateFields.h:916
DynamicUpdateField< int32, 0, 13 > Toys
Definition: UpdateFields.h:897
UpdateField< int32, 32, 48 > NextLevelXP
Definition: UpdateFields.h:924
UpdateField< uint8, 104, 117 > NumBankSlots
Definition: UpdateFields.h:991
UpdateFieldArray< int32, 32, 428, 429 > CombatRatings
DynamicUpdateField< uint32, 0, 19 > TransmogIllusions
Definition: UpdateFields.h:903
UpdateField< float, 32, 63 > CritPercentage
Definition: UpdateFields.h:939
UpdateField< float, 32, 64 > RangedCritPercentage
Definition: UpdateFields.h:940
UpdateField< WorldPackets::PerksProgram::PerksVendorItem, 104, 119 > FrozenPerksVendorItem
Definition: UpdateFields.h:993
UpdateField< float, 32, 54 > MainhandExpertise
Definition: UpdateFields.h:930
DynamicUpdateField< uint32, 0, 15 > Transmog
Definition: UpdateFields.h:899
UpdateField< UF::ActivePlayerUnk901, 104, 121 > Field_1410
Definition: UpdateFields.h:994
UpdateField< float, 32, 69 > Mastery
Definition: UpdateFields.h:945
UpdateField< int32, 32, 67 > ShieldBlock
Definition: UpdateFields.h:943
UpdateField< float, 72, 73 > Sturdiness
Definition: UpdateFields.h:948
UpdateField< float, 72, 79 > ModHealingPercent
Definition: UpdateFields.h:954
UpdateFieldArray< uint32, 7, 475, 476 > BankBagSlotFlags
UpdateField< uint16, 72, 94 > YesterdayHonorableKills
Definition: UpdateFields.h:969
UpdateField< int32, 32, 52 > MaxTalentTiers
Definition: UpdateFields.h:928
UpdateField< WorldPackets::MythicPlus::DungeonScoreData, 104, 126 > DungeonScore
UpdateField< float, 72, 82 > ModResiliencePercent
Definition: UpdateFields.h:957
UpdateField< float, 32, 62 > ParryPercentageFromAttribute
Definition: UpdateFields.h:938
UpdateField< int16, 104, 125 > DEBUGSoulbindConduitRank
Definition: UpdateFields.h:999
UpdateField< UF::SkillInfo, 32, 50 > Skill
Definition: UpdateFields.h:926
UpdateField< int32, 72, 78 > ModHealingDonePos
Definition: UpdateFields.h:953
UpdateField< int32, 104, 116 > PerksProgramCurrency
Definition: UpdateFields.h:990
UpdateField< bool, 0, 6 > HasPerksProgramPendingReward
Definition: UpdateFields.h:887
DynamicUpdateField< UF::PersonalCraftingOrderCount, 0, 31 > PersonalCraftingOrderCounts
Definition: UpdateFields.h:912
UpdateField< uint32, 32, 53 > TrackCreatureMask
Definition: UpdateFields.h:929
UpdateField< uint32, 72, 92 > PvpMedals
Definition: UpdateFields.h:967
DynamicUpdateField< UF::CraftingOrder, 0, 30 > CraftingOrders
Definition: UpdateFields.h:919
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Player const *owner, Player const *receiver) const
UpdateField< float, 32, 59 > DodgePercentage
Definition: UpdateFields.h:935
UpdateFieldArray< float, 3, 396, 400 > WeaponAtkSpeedMultipliers
UpdateField< int32, 104, 123 > TransportServerTime
Definition: UpdateFields.h:997
UpdateField< uint64, 104, 133 > LootHistoryInstanceID
UpdateField< int32, 72, 74 > Versatility
Definition: UpdateFields.h:949
UpdateField< uint8, 72, 88 > GrantableLevels
Definition: UpdateFields.h:963
UpdateField< int8, 104, 106 > JailersTowerLevelMax
Definition: UpdateFields.h:980
UpdateFieldArray< float, 3, 396, 397 > WeaponDmgMultipliers
UpdateField< ObjectGuid, 32, 44 > FarsightObject
Definition: UpdateFields.h:920
UpdateField< int32, 32, 49 > TrialXP
Definition: UpdateFields.h:925
UpdateFieldArray< float, 7, 367, 382 > ModDamageDonePercent
UpdateField< int32, 104, 115 > HonorNextLevel
Definition: UpdateFields.h:989
DynamicUpdateField< UF::CharacterRestriction, 0, 20 > CharacterRestrictions
Definition: UpdateFields.h:917
UpdateField< uint32, 104, 113 > OverrideZonePVPType
Definition: UpdateFields.h:987
UpdateFieldArray< int32, 7, 367, 375 > ModDamageDoneNeg
UpdateField< float, 104, 105 > ModPetHaste
Definition: UpdateFields.h:979
UpdateFieldArray< float, 7, 367, 389 > ModHealingDonePercent
UpdateField< int32, 72, 85 > ModTargetResistance
Definition: UpdateFields.h:960
UpdateField< uint32, 72, 95 > LifetimeHonorableKills
Definition: UpdateFields.h:970
DynamicUpdateField< uint32, 0, 18 > RuneforgePowers
Definition: UpdateFields.h:902
UpdateField< int32, 72, 86 > ModTargetPhysicalResistance
Definition: UpdateFields.h:961
UpdateField< int32, 72, 100 > PetSpellPower
Definition: UpdateFields.h:975
UpdateField< bool, 0, 4 > SortBagsRightToLeft
Definition: UpdateFields.h:885
DynamicUpdateField< uint32, 0, 12 > HeirloomFlags
Definition: UpdateFields.h:896
UpdateField< float, 72, 83 > OverrideSpellPowerByAPPercent
Definition: UpdateFields.h:958
UpdateField< uint16, 72, 93 > TodayHonorableKills
Definition: UpdateFields.h:968
UpdateField< float, 32, 60 > DodgePercentageFromAttribute
Definition: UpdateFields.h:936
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Player const *owner, Player const *receiver) const
UpdateField< int32, 72, 99 > MaxCreatureScalingLevel
Definition: UpdateFields.h:974
DynamicUpdateField< UF::TraitConfig, 0, 29 > TraitConfigs
Definition: UpdateFields.h:918
UpdateFieldArray< int32, 7, 367, 368 > ModDamageDonePos
UpdateField< int32, 72, 97 > MaxLevel
Definition: UpdateFields.h:972
UpdateField< float, 32, 55 > OffhandExpertise
Definition: UpdateFields.h:931
UpdateFieldArray< DynamicUpdateFieldBase< uint32 >, 1, 40, 41 > ResearchSiteProgress
Definition: UpdateFields.h:890
UpdateField< uint8, 104, 135 > RequiredMountCapabilityFlags
UpdateFieldArray< int32, 2, 466, 467 > ProfessionSkillLine
UpdateField< int32, 72, 96 > WatchedFactionIndex
Definition: UpdateFields.h:971
UpdateField< float, 72, 75 > VersatilityBonus
Definition: UpdateFields.h:950
UpdateField< float, 72, 102 > UiSpellHitModifier
Definition: UpdateFields.h:977
UpdateFieldArray< uint32, 12, 403, 404 > BuybackPrice
UpdateField< uint8, 104, 110 > NumBackpackSlots
Definition: UpdateFields.h:984
UpdateFieldArray< ObjectGuid, 227, 136, 137 > InvSlots
UpdateField< bool, 0, 1 > BackpackAutoSortDisabled
Definition: UpdateFields.h:882
UpdateFieldArray< int64, 12, 403, 416 > BuybackTimestamp
UpdateFieldArray< DynamicUpdateFieldBase< uint16 >, 1, 38, 39 > ResearchSites
Definition: UpdateFields.h:889
UpdateField< uint8, 72, 89 > MultiActionBars
Definition: UpdateFields.h:964
UpdateField< float, 104, 130 > ItemUpgradeHighFingerWatermark
UpdateField< int32, 104, 122 > UiChromieTimeExpansionID
Definition: UpdateFields.h:996
DynamicUpdateField< int32, 0, 10 > AvailableQuestLineXQuestIDs
Definition: UpdateFields.h:894
UpdateField< int32, 104, 128 > ItemUpgradeHighOnehandWeaponItemID
UpdateField< float, 72, 80 > ModPeriodicHealingDonePercent
Definition: UpdateFields.h:955
UpdateFieldArray< uint32, 5, 469, 470 > BagSlotFlags
UpdateField< float, 32, 66 > SpellCritPercentage
Definition: UpdateFields.h:942
UpdateField< uint64, 32, 46 > Coinage
Definition: UpdateFields.h:922
UpdateField< float, 32, 58 > BlockPercentage
Definition: UpdateFields.h:934
DynamicUpdateField< int32, 0, 16 > ConditionalTransmog
Definition: UpdateFields.h:900
UpdateField< int8, 104, 107 > JailersTowerLevel
Definition: UpdateFields.h:981
DynamicUpdateField< UF::MultiFloorExplore, 0, 24 > MultiFloorExploration
Definition: UpdateFields.h:907
DynamicUpdateField< UF::MawPower, 0, 23 > MawPowers
Definition: UpdateFields.h:906
UpdateField< uint8, 72, 90 > LifetimeMaxRank
Definition: UpdateFields.h:965
DynamicUpdateField< UF::RecipeProgressionInfo, 0, 25 > RecipeProgression
Definition: UpdateFields.h:908
UpdateField< float, 32, 71 > Avoidance
Definition: UpdateFields.h:947
DynamicUpdateField< int32, 0, 11 > Heirlooms
Definition: UpdateFields.h:895
UpdateField< int32, 104, 131 > ItemUpgradeHighTrinketItemID
UpdateField< float, 72, 81 > ModSpellPowerPercent
Definition: UpdateFields.h:956
UpdateField< float, 72, 76 > PvpPowerDamage
Definition: UpdateFields.h:951
UpdateField< int32, 72, 98 > ScalingPlayerLevelDelta
Definition: UpdateFields.h:973
UpdateFieldArray< uint32, 4, 461, 462 > NoReagentCostMask
UpdateField< bool, 0, 5 > InsertItemsLeftToRight
Definition: UpdateFields.h:886
UpdateFieldArray< float, 17, 1434, 1435 > ItemUpgradeHighWatermark
UpdateField< float, 72, 77 > PvpPowerHealing
Definition: UpdateFields.h:952
UpdateField< int32, 72, 103 > HomeRealmTimeOffset
Definition: UpdateFields.h:978
UpdateField< float, 32, 57 > CombatRatingExpertise
Definition: UpdateFields.h:933
UpdateField< float, 32, 68 > ShieldBlockCritPercentage
Definition: UpdateFields.h:944
UpdateField< uint32, 104, 127 > ActiveCombatTraitConfigID
UpdateFieldArray< DynamicUpdateFieldBase< uint64 >, 8, 36, 37 > DataFlags
Definition: UpdateFields.h:888
DynamicUpdateField< int32, 0, 9 > DailyQuestsCompleted
Definition: UpdateFields.h:893
UpdateField< float, 32, 65 > OffhandCritPercentage
Definition: UpdateFields.h:941
UpdateField< uint32, 104, 124 > WeeklyRewardsPeriodSinceOrigin
Definition: UpdateFields.h:998
UpdateField< int32, 104, 129 > ItemUpgradeHighFingerItemID
UpdateField< float, 72, 84 > OverrideAPBySpellPowerPercent
Definition: UpdateFields.h:959
UpdateField< int32, 104, 114 > Honor
Definition: UpdateFields.h:988
UpdateField< uint8, 72, 91 > NumRespecs
Definition: UpdateFields.h:966
UpdateField< ObjectGuid, 32, 45 > SummonedBattlePetGUID
Definition: UpdateFields.h:921
UpdateField< ObjectGuid, 0, 1 > Field_0
Definition: UpdateFields.h:690
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 2 > Field_10
Definition: UpdateFields.h:691
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< UF::ScaleCurve, 0, 3 > OverrideScaleCurve
UpdateField< UF::ScaleCurve, 0, 7 > OverrideMoveCurveZ
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AreaTrigger const *owner, Player const *receiver) const
UpdateField< uint32, 0, 12 > TimeToTargetExtraScale
UpdateField< ObjectGuid, 0, 22 > OrbitPathTarget
UpdateField< ObjectGuid, 0, 8 > Caster
UpdateField< UF::SpellCastVisual, 0, 16 > SpellVisual
UpdateField< TaggedPosition< Position::XYZ >, 0, 23 > RollPitchYaw
UpdateField< bool, 0, 1 > HeightIgnoresScale
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AreaTrigger const *owner, Player const *receiver) const
UpdateField< float, 0, 17 > BoundsRadius2D
UpdateField< int32, 0, 24 > PositionalSoundKitID
UpdateField< uint32, 0, 13 > TimeToTargetPos
UpdateField< uint32, 0, 11 > TimeToTargetScale
UpdateField< UF::ScaleCurve, 0, 6 > OverrideMoveCurveY
UpdateField< int32, 0, 15 > SpellForVisuals
UpdateField< bool, 0, 2 > Field_261
UpdateField< uint32, 0, 18 > DecalPropertiesID
UpdateField< uint32, 0, 21 > NumPlayersInside
UpdateField< UF::ScaleCurve, 0, 5 > OverrideMoveCurveX
UpdateField< int32, 0, 14 > SpellID
UpdateField< uint32, 0, 10 > TimeToTarget
UpdateField< ObjectGuid, 0, 19 > CreatingEffectGUID
UpdateField< uint32, 0, 9 > Duration
UpdateField< uint32, 0, 20 > NumUnitsInside
UpdateField< UF::ScaleCurve, 0, 4 > ExtraScaleCurve
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 3 > Flags
Definition: UpdateFields.h:444
UpdateField< uint32, 0, 4 > StartTime
Definition: UpdateFields.h:445
UpdateField< int32, 0, 2 > Charges
Definition: UpdateFields.h:443
UpdateField< uint8, 0, 7 > MaxCharges
Definition: UpdateFields.h:448
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 5 > EndTime
Definition: UpdateFields.h:446
UpdateField< uint32, 0, 6 > NextChargeTime
Definition: UpdateFields.h:447
UpdateField< int32, 0, 1 > SpellID
Definition: UpdateFields.h:442
bool operator==(ArtifactPower const &right) const
uint8 CurrentRankWithBonus
Definition: UpdateFields.h:99
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AzeriteEmpoweredItem const *owner, Player const *receiver) const
UpdateFieldArray< int32, 5, 0, 1 > Selections
Definition: UpdateFields.h:164
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AzeriteEmpoweredItem const *owner, Player const *receiver) const
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< uint32, 0, 8 > KnowledgeLevel
Definition: UpdateFields.h:203
UpdateField< uint64, 0, 5 > Xp
Definition: UpdateFields.h:200
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AzeriteItem const *owner, Player const *receiver) const
DynamicUpdateField< UF::SelectedAzeriteEssences, 0, 3 > SelectedEssences
Definition: UpdateFields.h:199
UpdateField< uint32, 0, 7 > AuraLevel
Definition: UpdateFields.h:202
DynamicUpdateField< UF::UnlockedAzeriteEssence, 0, 2 > UnlockedEssences
Definition: UpdateFields.h:197
DynamicUpdateField< uint32, 0, 4 > UnlockedEssenceMilestones
Definition: UpdateFields.h:198
UpdateField< bool, 0, 1 > Enabled
Definition: UpdateFields.h:196
UpdateField< uint32, 0, 6 > Level
Definition: UpdateFields.h:201
UpdateField< int32, 0, 9 > DEBUGknowledgeWeek
Definition: UpdateFields.h:204
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AzeriteItem const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
int32 ContentTuningConditionMask
Definition: UpdateFields.h:457
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(CTROptions const &right) const
uint32 ExpansionLevelMask
Definition: UpdateFields.h:459
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(CategoryCooldownMod const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
bool operator==(CharacterRestriction const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Object const *owner, Player const *receiver) const
bool operator==(ChrCustomizationChoice const &right) const
void WriteCreate(ByteBuffer &data, Object const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 3 > CollectableSourceInfoID
Definition: UpdateFields.h:863
UpdateField< int32, 0, 2 > TargetID
Definition: UpdateFields.h:862
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 1 > ProjectID
Definition: UpdateFields.h:637
UpdateField< int64, 0, 2 > FirstCompleted
Definition: UpdateFields.h:638
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 3 > CompletionCount
Definition: UpdateFields.h:639
UpdateFieldArray< ObjectGuid, 36, 2, 3 > Slots
Definition: UpdateFields.h:154
UpdateField< uint32, 0, 1 > NumSlots
Definition: UpdateFields.h:153
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Bag const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Bag const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Conversation const *owner, Player const *receiver) const
bool operator==(ConversationActor const &right) const
void WriteCreate(ByteBuffer &data, Conversation const *owner, Player const *receiver) const
UpdateField< uint32, 0, 6 > Flags
UpdateField< bool, 0, 1 > DontPlayBroadcastTextSounds
DynamicUpdateField< UF::ConversationActor, 0, 3 > Actors
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Conversation const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Conversation const *owner, Player const *receiver) const
UpdateField< std::vector< UF::ConversationLine >, 0, 2 > Lines
UpdateField< uint32, 0, 5 > Progress
UpdateField< int32, 0, 4 > LastLineEndTime
void WriteCreate(ByteBuffer &data, Conversation const *owner, Player const *receiver) const
bool operator==(ConversationLine const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Conversation const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Corpse const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Corpse const *owner, Player const *receiver) const
UpdateField< uint32, 0, 6 > DisplayID
UpdateField< uint32, 0, 12 > StateSpellVisualKitID
UpdateField< uint8, 0, 7 > RaceID
UpdateField< uint8, 0, 9 > Class
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 1 > Customizations
UpdateField< uint32, 0, 10 > Flags
UpdateField< ObjectGuid, 0, 4 > PartyGUID
UpdateField< ObjectGuid, 0, 3 > Owner
UpdateField< uint8, 0, 8 > Sex
UpdateField< int32, 0, 11 > FactionTemplate
UpdateField< uint32, 0, 2 > DynamicFlags
UpdateField< ObjectGuid, 0, 5 > GuildGUID
OptionalUpdateField< WorldPackets::Item::ItemInstance, 20, 23 > OutputItemData
Definition: UpdateFields.h:783
UpdateField< int64, 10, 12 > TipAmount
Definition: UpdateFields.h:774
UpdateField< ObjectGuid, 15, 19 > PersonalCrafterGUID
Definition: UpdateFields.h:780
UpdateField< int64, 10, 11 > ClaimEndTime
Definition: UpdateFields.h:773
UpdateField< uint8, 5, 7 > OrderType
Definition: UpdateFields.h:770
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 2 > Field_0
Definition: UpdateFields.h:766
UpdateField< ObjectGuid, 15, 16 > CustomerGUID
Definition: UpdateFields.h:777
UpdateField< int64, 10, 13 > ConsortiumCut
Definition: UpdateFields.h:775
UpdateField< int64, 5, 9 > ExpirationTime
Definition: UpdateFields.h:772
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint32, 10, 14 > Flags
Definition: UpdateFields.h:776
UpdateField< int32, 0, 4 > SkillLineAbilityID
Definition: UpdateFields.h:768
UpdateField< uint64, 0, 3 > OrderID
Definition: UpdateFields.h:767
UpdateField< ObjectGuid, 15, 17 > CustomerAccountGUID
Definition: UpdateFields.h:778
UpdateField< uint8, 5, 8 > MinQuality
Definition: UpdateFields.h:771
UpdateField< uint8, 5, 6 > OrderState
Definition: UpdateFields.h:769
DynamicUpdateField< UF::CraftingOrderItem, 0, 1 > Reagents
Definition: UpdateFields.h:765
UpdateField< ObjectGuid, 15, 18 > CrafterGUID
Definition: UpdateFields.h:779
UpdateField< std::string, 20, 21 > CustomerNotes
Definition: UpdateFields.h:781
OptionalUpdateField< UF::CraftingOrderItem, 20, 22 > OutputItem
Definition: UpdateFields.h:782
UpdateField< uint32, -1, 4 > Quantity
Definition: UpdateFields.h:754
UpdateField< int32, -1, 5 > ReagentQuality
Definition: UpdateFields.h:755
UpdateField< int32, -1, 3 > ItemID
Definition: UpdateFields.h:753
UpdateField< ObjectGuid, -1, 2 > OwnerGUID
Definition: UpdateFields.h:752
UpdateField< uint64, -1, 0 > Field_0
Definition: UpdateFields.h:750
UpdateField< ObjectGuid, -1, 1 > ItemGUID
Definition: UpdateFields.h:751
OptionalUpdateField< uint8, -1, 6 > DataSlotIndex
Definition: UpdateFields.h:756
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
DynamicUpdateField< WorldPackets::Item::ItemGemData, -1, 1 > Gems
Definition: UpdateFields.h:793
OptionalUpdateField< WorldPackets::Item::ItemInstance, -1, 3 > RecraftItemInfo
Definition: UpdateFields.h:795
DynamicUpdateField< WorldPackets::Item::ItemEnchantData, -1, 0 > Enchantments
Definition: UpdateFields.h:792
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 5 > BackgroundColor
Definition: UpdateFields.h:482
UpdateField< int32, 0, 2 > EmblemColor
Definition: UpdateFields.h:479
UpdateField< int32, 0, 3 > BorderStyle
Definition: UpdateFields.h:480
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 4 > BorderColor
Definition: UpdateFields.h:481
UpdateField< int32, 0, 1 > EmblemStyle
Definition: UpdateFields.h:478
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateFieldArray< std::string, 5, 0, 1 > Name
Definition: UpdateFields.h:469
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 1 > Caster
UpdateField< uint8, 0, 2 > Type
UpdateField< uint32, 0, 6 > CastTime
UpdateField< float, 0, 5 > Radius
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, DynamicObject const *owner, Player const *receiver) const
UpdateField< UF::SpellCastVisual, 0, 3 > SpellVisual
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, DynamicObject const *owner, Player const *receiver) const
UpdateField< int32, 0, 4 > SpellID
UpdateField< int32, 0, 4 > DisplayID
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, GameObject const *owner, Player const *receiver) const
UpdateField< uint32, 0, 12 > Flags
UpdateField< QuaternionData, 0, 13 > ParentRotation
UpdateField< ObjectGuid, 0, 10 > CreatedBy
UpdateField< uint32, 0, 7 > SpawnTrackingStateAnimID
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, GameObject const *owner, Player const *receiver) const
UpdateField< uint32, 0, 18 > ArtKit
UpdateField< uint32, 0, 5 > SpellVisualID
UpdateField< ObjectGuid, 0, 11 > GuildGUID
UpdateField< uint32, 0, 22 > UiWidgetItemID
UpdateField< uint32, 0, 24 > UiWidgetItemUnknown1000
DynamicUpdateField< int32, 0, 3 > WorldEffects
UpdateField< std::vector< uint32 >, 0, 1 > StateWorldEffectIDs
UpdateField< uint32, 0, 19 > CustomParam
UpdateField< int32, 0, 20 > Level
UpdateField< uint8, 0, 17 > PercentHealth
UpdateField< uint32, 0, 9 > StateWorldEffectsQuestObjectiveID
UpdateField< uint32, 0, 6 > StateSpellVisualID
UpdateField< uint32, 0, 8 > SpawnTrackingStateAnimKitID
UpdateField< uint32, 0, 23 > UiWidgetItemQuality
UpdateField< uint32, 0, 21 > AnimGroupInstance
DynamicUpdateField< int32, 0, 2 > EnableDoodadSets
UpdateField< int8, 0, 15 > State
UpdateField< int32, 0, 14 > FactionTemplate
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Item const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 6 > GiftCreator
Definition: UpdateFields.h:125
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateFieldArray< UF::ItemEnchantment, 13, 27, 28 > Enchantment
Definition: UpdateFields.h:141
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void ClearChangesMask()
UpdateField< uint32, 0, 18 > DynamicFlags2
Definition: UpdateFields.h:137
UpdateField< UF::ItemModList, 0, 17 > Modifiers
Definition: UpdateFields.h:136
UpdateField< ObjectGuid, 0, 5 > Creator
Definition: UpdateFields.h:124
DynamicUpdateField< UF::SocketedGem, 0, 2 > Gems
Definition: UpdateFields.h:121
UpdateField< uint32, 0, 10 > Durability
Definition: UpdateFields.h:129
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Item const *owner, Player const *receiver) const
UpdateField< WorldPackets::Item::ItemBonusKey, 0, 19 > ItemBonusKey
Definition: UpdateFields.h:138
UpdateField< uint32, 0, 11 > MaxDurability
Definition: UpdateFields.h:130
UpdateField< uint32, 0, 9 > DynamicFlags
Definition: UpdateFields.h:128
UpdateFieldArray< int32, 5, 21, 22 > SpellCharges
Definition: UpdateFields.h:140
UpdateField< int64, 0, 14 > CreateTime
Definition: UpdateFields.h:133
UpdateField< uint8, 0, 16 > ItemAppearanceModID
Definition: UpdateFields.h:135
UpdateField< uint64, 0, 15 > ArtifactXP
Definition: UpdateFields.h:134
UpdateField< ObjectGuid, 0, 3 > Owner
Definition: UpdateFields.h:122
UpdateField< uint32, 0, 8 > Expiration
Definition: UpdateFields.h:127
UpdateField< ObjectGuid, 0, 4 > ContainedIn
Definition: UpdateFields.h:123
UpdateField< uint32, 0, 7 > StackCount
Definition: UpdateFields.h:126
UpdateField< uint16, 0, 20 > DEBUGItemLevel
Definition: UpdateFields.h:139
UpdateField< uint32, 0, 12 > CreatePlayedTime
Definition: UpdateFields.h:131
DynamicUpdateField< UF::ArtifactPower, 0, 1 > ArtifactPowers
Definition: UpdateFields.h:120
UpdateField< int32, 0, 13 > Context
Definition: UpdateFields.h:132
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
UpdateField< int16, 0, 3 > Charges
Definition: UpdateFields.h:67
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
UpdateField< int32, 0, 1 > ID
Definition: UpdateFields.h:65
UpdateField< uint16, 0, 4 > Inactive
Definition: UpdateFields.h:68
UpdateField< uint32, 0, 2 > Duration
Definition: UpdateFields.h:66
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
DynamicUpdateField< UF::ItemMod, -1, 0 > Values
Definition: UpdateFields.h:88
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
bool operator==(ItemMod const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
bool operator==(MawPower const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
std::vector< int32 > WorldMapOverlayIDs
Definition: UpdateFields.h:669
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(MultiFloorExplore const &right) const
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Object const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Object const *owner, Player const *receiver) const
UpdateField< uint32, 0, 2 > DynamicFlags
Definition: UpdateFields.h:53
void ClearChangesMask()
UpdateField< int32, 0, 1 > EntryID
Definition: UpdateFields.h:51
UpdateField< float, 0, 3 > Scale
Definition: UpdateFields.h:55
UpdateField< int8, 0, 2 > Bracket
Definition: UpdateFields.h:575
UpdateField< uint32, 0, 15 > WeeklyRoundsPlayed
Definition: UpdateFields.h:588
UpdateField< bool, 0, 1 > Disqualified
Definition: UpdateFields.h:574
UpdateField< uint32, 0, 11 > PvpTierID
Definition: UpdateFields.h:584
void ClearChangesMask()
UpdateField< uint32, 0, 8 > Rating
Definition: UpdateFields.h:581
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 18 > SeasonRoundsWon
Definition: UpdateFields.h:591
UpdateField< uint32, 0, 5 > WeeklyWon
Definition: UpdateFields.h:578
UpdateField< uint32, 0, 16 > WeeklyRoundsWon
Definition: UpdateFields.h:589
UpdateField< uint32, 0, 17 > SeasonRoundsPlayed
Definition: UpdateFields.h:590
UpdateField< uint32, 0, 7 > SeasonWon
Definition: UpdateFields.h:580
UpdateField< uint32, 0, 4 > WeeklyPlayed
Definition: UpdateFields.h:577
UpdateField< uint32, 0, 12 > WeeklyBestWinPvpTierID
Definition: UpdateFields.h:585
UpdateField< int32, 0, 3 > PvpRatingID
Definition: UpdateFields.h:576
UpdateField< uint32, 0, 10 > SeasonBestRating
Definition: UpdateFields.h:583
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 9 > WeeklyBestRating
Definition: UpdateFields.h:582
UpdateField< uint32, 0, 13 > Field_28
Definition: UpdateFields.h:586
UpdateField< uint32, 0, 14 > Field_2C
Definition: UpdateFields.h:587
UpdateField< uint32, 0, 6 > SeasonPlayed
Definition: UpdateFields.h:579
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Unit const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Unit const *owner, Player const *receiver) const
bool operator==(PassiveSpellHistory const &right) const
UpdateField< int32, -1, 0 > ProfessionID
Definition: UpdateFields.h:804
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, -1, 1 > Count
Definition: UpdateFields.h:805
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint8, 0, 19 > Inebriation
Definition: UpdateFields.h:509
UpdateFieldArray< uint8, 2, 43, 44 > PartyType
Definition: UpdateFields.h:532
UpdateField< uint32, 0, 26 > VirtualPlayerRealm
Definition: UpdateFields.h:516
UpdateField< WorldPackets::MythicPlus::DungeonScoreSummary, 32, 40 > DungeonScore
Definition: UpdateFields.h:529
UpdateField< int32, 0, 30 > HonorLevel
Definition: UpdateFields.h:520
UpdateFieldArray< UF::VisibleItem, 19, 222, 223 > VisibleItems
Definition: UpdateFields.h:534
UpdateField< int32, 32, 38 > CovenantID
Definition: UpdateFields.h:527
UpdateField< bool, 0, 2 > HasLevelLink
Definition: UpdateFields.h:492
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< std::string, 32, 33 > Name
Definition: UpdateFields.h:522
UpdateFieldArray< float, 6, 242, 243 > AvgItemLevel
Definition: UpdateFields.h:535
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Player const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 12 > LootTargetGUID
Definition: UpdateFields.h:502
UpdateField< int32, 32, 35 > Field_B4
Definition: UpdateFields.h:524
UpdateField< UF::CustomTabardInfo, 32, 42 > PersonalTabard
Definition: UpdateFields.h:531
UpdateField< ObjectGuid, 0, 9 > WowAccount
Definition: UpdateFields.h:499
DynamicUpdateField< UF::ArenaCooldown, 0, 6 > ArenaCooldowns
Definition: UpdateFields.h:496
UpdateField< uint32, 0, 22 > DuelTeam
Definition: UpdateFields.h:512
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 3 > Customizations
Definition: UpdateFields.h:493
UpdateField< int32, 32, 34 > Field_B0
Definition: UpdateFields.h:523
DynamicUpdateField< UF::QuestLog, 0, 5 > QuestSessionQuestLog
Definition: UpdateFields.h:495
UpdateField< uint8, 0, 20 > PvpTitle
Definition: UpdateFields.h:510
UpdateField< uint8, 0, 18 > NativeSex
Definition: UpdateFields.h:508
UpdateField< int32, 0, 28 > TaxiMountAnimKitID
Definition: UpdateFields.h:518
UpdateField< int32, 32, 36 > CurrentBattlePetSpeciesID
Definition: UpdateFields.h:525
UpdateField< uint32, 0, 16 > GuildDeleteDate
Definition: UpdateFields.h:506
UpdateField< uint8, 0, 29 > CurrentBattlePetBreedQuality
Definition: UpdateFields.h:519
UpdateField< int64, 0, 31 > LogoutTime
Definition: UpdateFields.h:521
UpdateField< uint8, 0, 21 > ArenaFaction
Definition: UpdateFields.h:511
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 24 > PlayerTitle
Definition: UpdateFields.h:514
UpdateFieldArray< uint32, 19, 249, 250 > Field_3120
Definition: UpdateFields.h:536
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 4 > QaCustomizations
Definition: UpdateFields.h:494
UpdateField< int32, 0, 23 > GuildTimeStamp
Definition: UpdateFields.h:513
UpdateField< ObjectGuid, 0, 8 > DuelArbiter
Definition: UpdateFields.h:498
UpdateField< uint32, 0, 15 > GuildRankID
Definition: UpdateFields.h:505
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< bool, 0, 1 > HasQuestSession
Definition: UpdateFields.h:491
UpdateField< int32, 0, 25 > FakeInebriation
Definition: UpdateFields.h:515
UpdateField< uint32, 0, 27 > CurrentSpecID
Definition: UpdateFields.h:517
UpdateField< int32, 0, 17 > GuildLevel
Definition: UpdateFields.h:507
bool IsQuestLogChangesMaskSkipped() const
Definition: UpdateFields.h:544
UpdateField< int32, 32, 39 > SoulbindID
Definition: UpdateFields.h:528
DynamicUpdateField< int32, 0, 7 > VisualItemReplacements
Definition: UpdateFields.h:497
UpdateField< UF::CTROptions, 32, 37 > CtrOptions
Definition: UpdateFields.h:526
UpdateField< uint64, 0, 11 > GuildClubMemberID
Definition: UpdateFields.h:501
UpdateField< ObjectGuid, 0, 10 > BnetAccount
Definition: UpdateFields.h:500
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 2 > QuestID
Definition: UpdateFields.h:430
UpdateField< uint32, 0, 3 > StateFlags
Definition: UpdateFields.h:431
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateFieldArray< int16, 24, 5, 6 > ObjectiveProgress
Definition: UpdateFields.h:433
void ClearChangesMask()
UpdateField< uint32, 0, 4 > ObjectiveFlags
Definition: UpdateFields.h:432
UpdateField< int64, 0, 1 > EndTime
Definition: UpdateFields.h:429
UpdateFieldArray< uint64, 950, 2, 3 > QuestCompleted
Definition: UpdateFields.h:701
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 1 > Owner
Definition: UpdateFields.h:700
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
bool operator==(RecipeProgressionInfo const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 2 > ReplayTime
Definition: UpdateFields.h:711
UpdateField< int32, 0, 1 > QuestID
Definition: UpdateFields.h:710
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
DynamicUpdateField< UF::CompletedProject, 0, 1 > CompletedProjects
Definition: UpdateFields.h:648
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
int16 ResearchProjectID
Definition: UpdateFields.h:872
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(Research const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void ClearChangesMask()
UpdateField< uint32, 0, 1 > Threshold
Definition: UpdateFields.h:564
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint8, 0, 2 > StateID
Definition: UpdateFields.h:565
UpdateField< uint32, 0, 3 > ParameterCurve
UpdateField< uint32, 0, 2 > StartTimeOffset
void WriteCreate(ByteBuffer &data, AreaTrigger const *owner, Player const *receiver) const
UpdateField< bool, 0, 1 > OverrideActive
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, AreaTrigger const *owner, Player const *receiver) const
UpdateField< int32, 0, 1 > ScriptPackageID
UpdateField< ObjectGuid, 0, 3 > CreatedBy
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Object const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Object const *owner, Player const *receiver) const
UpdateField< uint32, 0, 2 > RndSeedVal
UpdateFieldArray< uint32, 4, 3, 4 > AzeriteEssenceID
Definition: UpdateFields.h:187
UpdateField< bool, 0, 1 > Enabled
Definition: UpdateFields.h:185
UpdateField< uint32, 0, 2 > SpecializationID
Definition: UpdateFields.h:186
void WriteCreate(ByteBuffer &data, AzeriteItem const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, AzeriteItem const *owner, Player const *receiver) const
UpdateFieldArray< uint16, 256, 0, 1537 > SkillPermBonus
Definition: UpdateFields.h:555
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateFieldArray< uint16, 256, 0, 769 > SkillStartingRank
Definition: UpdateFields.h:552
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateFieldArray< uint16, 256, 0, 257 > SkillStep
Definition: UpdateFields.h:550
UpdateFieldArray< uint16, 256, 0, 1025 > SkillMaxRank
Definition: UpdateFields.h:553
void ClearChangesMask()
UpdateFieldArray< int16, 256, 0, 1281 > SkillTempBonus
Definition: UpdateFields.h:554
UpdateFieldArray< uint16, 256, 0, 513 > SkillRank
Definition: UpdateFields.h:551
UpdateFieldArray< uint16, 256, 0, 1 > SkillLineID
Definition: UpdateFields.h:549
UpdateFieldArray< uint16, 16, 3, 4 > BonusListIDs
Definition: UpdateFields.h:111
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
UpdateField< uint8, 0, 2 > Context
Definition: UpdateFields.h:110
UpdateField< int32, 0, 1 > ItemID
Definition: UpdateFields.h:109
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
bool operator==(SpellCastVisual const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Object const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Object const *owner, Player const *receiver) const
bool operator==(SpellFlatModByLabel const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
bool operator==(SpellPctModByLabel const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 2 > StableMaster
Definition: UpdateFields.h:852
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
DynamicUpdateField< UF::StablePetInfo, 0, 1 > Pets
Definition: UpdateFields.h:851
UpdateField< uint32, 0, 5 > ExperienceLevel
Definition: UpdateFields.h:840
UpdateField< uint32, 0, 2 > PetNumber
Definition: UpdateFields.h:837
UpdateField< uint32, 0, 1 > PetSlot
Definition: UpdateFields.h:836
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< std::string, 0, 6 > Name
Definition: UpdateFields.h:841
UpdateField< uint8, 0, 7 > PetFlags
Definition: UpdateFields.h:842
UpdateField< uint32, 0, 4 > DisplayID
Definition: UpdateFields.h:839
UpdateField< uint32, 0, 3 > CreatureID
Definition: UpdateFields.h:838
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, 4, 7 > ChrSpecializationID
Definition: UpdateFields.h:738
UpdateField< int32, 4, 6 > SkillLineID
Definition: UpdateFields.h:737
UpdateField< int32, 4, 5 > Type
Definition: UpdateFields.h:736
UpdateField< int32, 8, 9 > CombatConfigFlags
Definition: UpdateFields.h:739
UpdateField< std::string, 0, 3 > Name
Definition: UpdateFields.h:735
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int32, 8, 10 > LocalIdentifier
Definition: UpdateFields.h:740
UpdateField< int32, 0, 2 > ID
Definition: UpdateFields.h:734
UpdateField< int32, 8, 11 > TraitSystemID
Definition: UpdateFields.h:741
int32 TraitNodeEntryID
Definition: UpdateFields.h:721
bool operator==(TraitEntry const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Unit const *owner, Player const *receiver) const
bool operator==(UnitChannel const &right) const
UF::SpellCastVisual SpellVisual
Definition: UpdateFields.h:228
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Unit const *owner, Player const *receiver) const
UpdateField< int32, 64, 93 > RangedAttackPowerModNeg
Definition: UpdateFields.h:358
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Unit const *owner, Player const *receiver) const
UpdateField< uint32, 96, 124 > SilencedSchoolMask
Definition: UpdateFields.h:389
UpdateField< int32, 96, 115 > ScaleDuration
Definition: UpdateFields.h:380
UpdateField< uint32, 64, 67 > PetNumber
Definition: UpdateFields.h:331
UpdateField< uint64, 0, 21 > BattlePetDBID
Definition: UpdateFields.h:283
UpdateFieldArray< int32, 4, 178, 191 > StatSupportBuff
Definition: UpdateFields.h:403
UpdateField< int32, 32, 39 > ScalingLevelDelta
Definition: UpdateFields.h:300
UpdateField< ObjectGuid, 0, 12 > Summon
Definition: UpdateFields.h:274
UpdateField< float, 32, 50 > CombatReach
Definition: UpdateFields.h:315
UpdateField< uint8, 64, 65 > VisFlags
Definition: UpdateFields.h:329
UpdateField< uint32, 96, 125 > CurrentAreaID
Definition: UpdateFields.h:390
UpdateField< int32, 64, 79 > EmoteState
Definition: UpdateFields.h:343
UpdateField< uint8, 64, 82 > SheatheState
Definition: UpdateFields.h:346
UpdateField< int8, 0, 23 > SpellEmpowerStage
Definition: UpdateFields.h:285
UpdateField< float, 64, 72 > ModCastingSpeedNeg
Definition: UpdateFields.h:336
UpdateField< uint8, 32, 62 > StandState
Definition: UpdateFields.h:327
UpdateField< int32, 32, 40 > ScalingFactionGroup
Definition: UpdateFields.h:301
UpdateField< float, 32, 55 > NativeXDisplayScale
Definition: UpdateFields.h:320
UpdateField< float, 64, 73 > ModSpellHaste
Definition: UpdateFields.h:337
UpdateField< int32, 0, 10 > SpellOverrideNameID
Definition: UpdateFields.h:272
UpdateField< uint32, 0, 6 > StateSpellVisualID
Definition: UpdateFields.h:268
UpdateField< int32, 96, 97 > MainHandWeaponAttackPower
Definition: UpdateFields.h:361
UpdateFieldArray< float, 10, 130, 161 > PowerRegenInterruptedFlatModifier
Definition: UpdateFields.h:397
UpdateField< int64, 32, 33 > MaxHealth
Definition: UpdateFields.h:294
UpdateField< int32, 32, 38 > ScalingLevelMax
Definition: UpdateFields.h:299
UpdateField< int32, 64, 80 > BaseMana
Definition: UpdateFields.h:344
UpdateField< float, 96, 101 > Lifesteal
Definition: UpdateFields.h:365
UpdateFieldArray< int32, 7, 195, 196 > Resistances
Definition: UpdateFields.h:404
UpdateField< int32, 96, 99 > RangedWeaponAttackPower
Definition: UpdateFields.h:363
UpdateField< uint8, 0, 28 > Sex
Definition: UpdateFields.h:290
UpdateField< float, 96, 104 > ManaCostMultiplier
Definition: UpdateFields.h:368
UpdateField< float, 96, 102 > MinRangedDamage
Definition: UpdateFields.h:366
UpdateField< uint32, 0, 24 > SummonedByHomeRealm
Definition: UpdateFields.h:286
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< int32, 32, 35 > EffectiveLevel
Definition: UpdateFields.h:296
UpdateField< float, 64, 71 > ModCastingSpeed
Definition: UpdateFields.h:335
UpdateField< int32, 96, 107 > MinItemLevelCutoff
Definition: UpdateFields.h:371
UpdateField< int32, 96, 114 > InteractSpellID
Definition: UpdateFields.h:378
UpdateField< uint8, 0, 27 > PlayerClassId
Definition: UpdateFields.h:289
UpdateField< float, 96, 105 > MaxHealthModifier
Definition: UpdateFields.h:369
UpdateField< int32, 96, 119 > PerksVendorItemID
Definition: UpdateFields.h:384
UpdateFieldArray< uint32, 2, 127, 128 > NpcFlags
Definition: UpdateFields.h:392
UpdateField< int32, 0, 5 > DisplayID
Definition: UpdateFields.h:266
UpdateField< int32, 64, 88 > AttackPowerModNeg
Definition: UpdateFields.h:353
UpdateField< ObjectGuid, 0, 14 > CharmedBy
Definition: UpdateFields.h:276
UpdateField< uint32, 0, 8 > StateAnimKitID
Definition: UpdateFields.h:270
UpdateField< ObjectGuid, 0, 18 > LookAtControllerTarget
Definition: UpdateFields.h:280
DynamicUpdateField< ObjectGuid, 0, 4 > ChannelObjects
Definition: UpdateFields.h:265
UpdateField< std::vector< uint32 >, 0, 1 > StateWorldEffectIDs
Definition: UpdateFields.h:262
DynamicUpdateField< int32, 0, 3 > WorldEffects
Definition: UpdateFields.h:264
UpdateField< uint32, 0, 7 > StateAnimID
Definition: UpdateFields.h:269
UpdateField< uint32, 64, 69 > PetExperience
Definition: UpdateFields.h:333
UpdateField< uint32, 32, 45 > Flags2
Definition: UpdateFields.h:308
UpdateField< int32, 96, 112 > BattlePetCompanionExperience
Definition: UpdateFields.h:376
UpdateField< float, 64, 74 > ModHaste
Definition: UpdateFields.h:338
UpdateField< int32, 64, 91 > RangedAttackPower
Definition: UpdateFields.h:356
UpdateField< uint32, 64, 68 > PetNameTimestamp
Definition: UpdateFields.h:332
DynamicUpdateField< UF::PassiveSpellHistory, 0, 2 > PassiveSpells
Definition: UpdateFields.h:263
UpdateField< float, 32, 51 > DisplayScale
Definition: UpdateFields.h:316
UpdateField< int32, 32, 34 > Level
Definition: UpdateFields.h:295
UpdateField< int32, 96, 98 > OffHandWeaponAttackPower
Definition: UpdateFields.h:362
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Unit const *owner, Player const *receiver) const
UpdateField< uint32, 96, 113 > BattlePetCompanionNameTimestamp
Definition: UpdateFields.h:377
UpdateField< int32, 96, 118 > LookAtControllerID
Definition: UpdateFields.h:383
UpdateField< uint8, 0, 29 > DisplayPower
Definition: UpdateFields.h:291
UpdateField< float, 64, 89 > AttackPowerMultiplier
Definition: UpdateFields.h:354
UpdateField< int32, 96, 122 > FlightCapabilityID
Definition: UpdateFields.h:387
UpdateField< int32, 64, 81 > BaseHealth
Definition: UpdateFields.h:345
UpdateField< uint32, 0, 30 > OverrideDisplayPowerID
Definition: UpdateFields.h:292
UpdateField< int32, 96, 116 > LooksLikeMountID
Definition: UpdateFields.h:381
UpdateField< ObjectGuid, 0, 13 > Critter
Definition: UpdateFields.h:275
UpdateFieldArray< int32, 4, 178, 187 > StatNegBuff
Definition: UpdateFields.h:402
UpdateField< ObjectGuid, 0, 11 > Charm
Definition: UpdateFields.h:273
UpdateField< uint32, 0, 9 > StateWorldEffectsQuestObjectiveID
Definition: UpdateFields.h:271
UpdateFieldArray< int32, 4, 178, 183 > StatPosBuff
Definition: UpdateFields.h:401
UpdateField< int32, 96, 108 > MinItemLevel
Definition: UpdateFields.h:372
UpdateField< uint8, 64, 84 > PetFlags
Definition: UpdateFields.h:349
UpdateField< int32, 32, 41 > ScalingHealthItemLevelCurveID
Definition: UpdateFields.h:302
UpdateField< int32, 32, 57 > CosmeticMountDisplayID
Definition: UpdateFields.h:322
UpdateField< int32, 64, 90 > AttackPowerModSupport
Definition: UpdateFields.h:355
UpdateField< int32, 64, 87 > AttackPowerModPos
Definition: UpdateFields.h:352
UpdateField< float, 32, 60 > MinOffHandDamage
Definition: UpdateFields.h:325
UpdateField< int32, 32, 56 > MountDisplayID
Definition: UpdateFields.h:321
UpdateField< float, 64, 94 > RangedAttackPowerMultiplier
Definition: UpdateFields.h:359
UpdateField< uint32, 32, 46 > Flags3
Definition: UpdateFields.h:309
UpdateField< ObjectGuid, 96, 121 > GuildGUID
Definition: UpdateFields.h:386
UpdateField< int32, 32, 42 > ScalingDamageItemLevelCurveID
Definition: UpdateFields.h:303
UpdateField< uint8, 64, 83 > PvpFlags
Definition: UpdateFields.h:347
UpdateField< ObjectGuid, 0, 16 > CreatedBy
Definition: UpdateFields.h:278
UpdateField< int32, 64, 86 > AttackPower
Definition: UpdateFields.h:351
UpdateField< float, 32, 59 > MaxDamage
Definition: UpdateFields.h:324
UpdateField< UF::UnitChannel, 0, 22 > ChannelData
Definition: UpdateFields.h:284
UpdateField< float, 32, 61 > MaxOffHandDamage
Definition: UpdateFields.h:326
UpdateField< float, 32, 49 > BoundingRadius
Definition: UpdateFields.h:314
UpdateField< int32, 96, 100 > SetAttackSpeedAura
Definition: UpdateFields.h:364
UpdateField< uint32, 32, 44 > Flags
Definition: UpdateFields.h:306
UpdateField< float, 32, 58 > MinDamage
Definition: UpdateFields.h:323
UpdateFieldArray< uint32, 2, 175, 176 > AttackRoundBaseTime
Definition: UpdateFields.h:399
UpdateFieldArray< int32, 7, 195, 203 > BonusResistanceMods
Definition: UpdateFields.h:405
UpdateField< ObjectGuid, 0, 19 > Target
Definition: UpdateFields.h:281
UpdateField< int32, 64, 78 > CreatedBySpell
Definition: UpdateFields.h:342
void ClearChangesMask()
UpdateField< uint32, 32, 47 > AuraState
Definition: UpdateFields.h:311
UpdateField< int32, 32, 37 > ScalingLevelMin
Definition: UpdateFields.h:298
UpdateField< int32, 96, 111 > WildBattlePetLevel
Definition: UpdateFields.h:375
UpdateField< float, 64, 77 > ModTimeRate
Definition: UpdateFields.h:341
UpdateField< ObjectGuid, 0, 20 > BattlePetCompanionGUID
Definition: UpdateFields.h:282
UpdateField< int32, 96, 117 > LooksLikeCreatureID
Definition: UpdateFields.h:382
UpdateField< uint8, 0, 25 > Race
Definition: UpdateFields.h:287
UpdateField< uint8, 32, 63 > PetTalentPoints
Definition: UpdateFields.h:328
UpdateField< float, 96, 123 > GlideEventSpeedDivisor
Definition: UpdateFields.h:388
UpdateField< float, 64, 75 > ModRangedHaste
Definition: UpdateFields.h:339
UpdateField< float, 64, 76 > ModHasteRegen
Definition: UpdateFields.h:340
UpdateFieldArray< int32, 10, 130, 131 > Power
Definition: UpdateFields.h:394
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< int32, 96, 120 > TaxiNodesID
Definition: UpdateFields.h:385
UpdateField< int32, 32, 54 > NativeDisplayID
Definition: UpdateFields.h:319
UpdateFieldArray< UF::VisibleItem, 3, 171, 172 > VirtualItems
Definition: UpdateFields.h:398
UpdateField< float, 96, 103 > MaxRangedDamage
Definition: UpdateFields.h:367
UpdateFieldArray< float, 10, 130, 151 > PowerRegenFlatModifier
Definition: UpdateFields.h:396
UpdateField< int32, 32, 36 > ContentTuningID
Definition: UpdateFields.h:297
UpdateField< uint8, 0, 26 > ClassId
Definition: UpdateFields.h:288
UpdateField< ObjectGuid, 0, 15 > SummonedBy
Definition: UpdateFields.h:277
UpdateField< int64, 0, 31 > Health
Definition: UpdateFields.h:293
UpdateFieldArray< int32, 10, 130, 141 > MaxPower
Definition: UpdateFields.h:395
UpdateField< int32, 32, 43 > FactionTemplate
Definition: UpdateFields.h:304
UpdateField< int32, 64, 95 > RangedAttackPowerModSupport
Definition: UpdateFields.h:360
UpdateField< float, 96, 106 > HoverHeight
Definition: UpdateFields.h:370
UpdateField< int32, 96, 110 > AzeriteItemLevel
Definition: UpdateFields.h:374
UpdateField< int32, 96, 109 > MaxItemLevel
Definition: UpdateFields.h:373
UpdateFieldArray< int32, 7, 195, 210 > ManaCostModifier
Definition: UpdateFields.h:406
UpdateField< uint32, 64, 70 > PetNextLevelExperience
Definition: UpdateFields.h:334
UpdateField< uint32, 32, 48 > RangedAttackRoundBaseTime
Definition: UpdateFields.h:313
UpdateField< ObjectGuid, 96, 126 > NameplateAttachToGUID
Definition: UpdateFields.h:391
UpdateField< ObjectGuid, 0, 17 > DemonCreator
Definition: UpdateFields.h:279
UpdateField< int32, 64, 92 > RangedAttackPowerModPos
Definition: UpdateFields.h:357
void WriteCreate(ByteBuffer &data, AzeriteItem const *owner, Player const *receiver) const
bool operator==(UnlockedAzeriteEssence const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, AzeriteItem const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Unit const *owner, Player const *receiver) const
UpdateField< uint16, 0, 4 > ItemAppearanceModID
Definition: UpdateFields.h:241
UpdateField< int32, 0, 2 > SecondaryItemModifiedAppearanceID
Definition: UpdateFields.h:239
UpdateField< uint16, 0, 5 > ItemVisual
Definition: UpdateFields.h:242
UpdateField< int32, 0, 3 > ConditionalItemAppearanceID
Definition: UpdateFields.h:240
UpdateField< int32, 0, 1 > ItemID
Definition: UpdateFields.h:238
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Unit const *owner, Player const *receiver) const
UpdateField< uint32, 0, 3 > AnimKitID
UpdateField< uint32, 0, 4 > AnimProgress
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, AreaTrigger const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, AreaTrigger const *owner, Player const *receiver) const
UpdateField< bool, 0, 1 > Field_C
UpdateField< uint32, 0, 2 > AnimationDataID
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(WeeklySpellUse const &right) const