TrinityCore
Loading...
Searching...
No Matches
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 "PacketOperators.h"
24#include "Player.h"
25#include "UpdateFieldImpl.h"
27
28// This file is automatically generated, DO NOT EDIT
29
30#if TRINITY_COMPILER_IS_GCC
31#pragma GCC diagnostic push
32#pragma GCC diagnostic ignored "-Wunused-parameter"
33#else
34#pragma warning(push)
35#pragma warning(disable: 4100)
36#endif
37
38namespace UF
39{
40void ObjectData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
41{
42 data << int32(ViewerDependentValue<EntryIDTag>::GetValue(this, receiver, owner));
43 data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(this, receiver, owner));
44 data << float(Scale);
45}
46
47void ObjectData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
48{
49 WriteUpdate(_changesMask, data, receiver, owner, false);
50}
51
52void ObjectData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
53{
54 data.WriteBits(changesMask.GetBlock(0), 4);
55
56 data.FlushBits();
57 if (changesMask[0])
58 {
59 if (changesMask[1])
60 {
61 data << int32(ViewerDependentValue<EntryIDTag>::GetValue(this, receiver, owner));
62 }
63 if (changesMask[2])
64 {
65 data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(this, receiver, owner));
66 }
67 if (changesMask[3])
68 {
69 data << float(Scale);
70 }
71 }
72}
73
81
82void ItemEnchantment::WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const
83{
84 data << int32(ID);
85 data << uint32(Duration);
86 data << int16(Charges);
87 data << uint16(Inactive);
88}
89
90void ItemEnchantment::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Item const* owner) const
91{
92 Mask changesMask = _changesMask;
93 if (ignoreChangesMask)
94 changesMask.SetAll();
95
96 data.WriteBits(changesMask.GetBlock(0), 5);
97
98 data.FlushBits();
99 if (changesMask[0])
100 {
101 if (changesMask[1])
102 {
103 data << int32(ID);
104 }
105 if (changesMask[2])
106 {
107 data << uint32(Duration);
108 }
109 if (changesMask[3])
110 {
111 data << int16(Charges);
112 }
113 if (changesMask[4])
114 {
115 data << uint16(Inactive);
116 }
117 }
118}
119
128
129void ItemMod::WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const
130{
131 data << uint8(Type);
132 data << int32(Value);
133}
134
135bool ItemMod::operator==(ItemMod const& right) const
136{
137 return Type == right.Type
138 && Value == right.Value;
139}
140
141void ItemModList::WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const
142{
143 data.WriteBits(Values.size(), 7);
144 data.FlushBits();
145 for (uint32 i = 0; i < Values.size(); ++i)
146 {
147 Values[i].WriteCreate(data, receiver, owner);
148 }
149}
150
151void ItemModList::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Item const* owner) const
152{
153 Mask changesMask = _changesMask;
154 if (ignoreChangesMask)
155 changesMask.SetAll();
156
157 data.WriteBits(changesMask.GetBlock(0), 1);
158
159 if (changesMask[0])
160 {
161 if (!ignoreChangesMask)
162 Values.WriteUpdateMask(data, 7);
163 else
165 }
166 data.FlushBits();
167 if (changesMask[0])
168 {
169 for (uint32 i = 0; i < Values.size(); ++i)
170 {
171 if (Values.HasChanged(i) || ignoreChangesMask)
172 {
173 Values[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
174 }
175 }
176 }
177}
178
184
185void ArtifactPower::WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const
186{
187 data << int16(ArtifactPowerID);
188 data << uint8(PurchasedRank);
190}
191
193{
194 return ArtifactPowerID == right.ArtifactPowerID
195 && PurchasedRank == right.PurchasedRank
197}
198
199void SocketedGem::WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const
200{
201 data << int32(ItemID);
202 for (uint32 i = 0; i < 16; ++i)
203 {
204 data << uint16(BonusListIDs[i]);
205 }
206 data << uint8(Context);
207}
208
209void SocketedGem::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Item const* owner) const
210{
211 Mask changesMask = _changesMask;
212 if (ignoreChangesMask)
213 changesMask.SetAll();
214
215 data.WriteBits(changesMask.GetBlocksMask(0), 1);
216 if (changesMask.GetBlock(0))
217 data.WriteBits(changesMask.GetBlock(0), 32);
218
219 data.FlushBits();
220 if (changesMask[0])
221 {
222 if (changesMask[1])
223 {
224 data << int32(ItemID);
225 }
226 if (changesMask[2])
227 {
228 data << uint8(Context);
229 }
230 }
231 if (changesMask[3])
232 {
233 for (uint32 i = 0; i < 16; ++i)
234 {
235 if (changesMask[4 + i])
236 {
237 data << uint16(BonusListIDs[i]);
238 }
239 }
240 }
241}
242
250
251void ItemData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Item const* owner) const
252{
253 data << *Owner;
254 data << *ContainedIn;
255 data << *Creator;
256 data << *GiftCreator;
257 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
258 {
259 data << uint32(StackCount);
260 data << uint32(Expiration);
261 for (uint32 i = 0; i < 5; ++i)
262 {
263 data << int32(SpellCharges[i]);
264 }
265 }
266 data << uint32(DynamicFlags);
267 for (uint32 i = 0; i < 13; ++i)
268 {
269 Enchantment[i].WriteCreate(data, receiver, owner);
270 }
271 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
272 {
273 data << uint32(Durability);
274 data << uint32(MaxDurability);
275 }
276 data << uint32(CreatePlayedTime);
277 data << uint8(Context);
278 data << int64(CreateTime);
279 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
280 {
281 data << uint64(ArtifactXP);
282 data << uint8(ItemAppearanceModID);
283 }
284 Modifiers->WriteCreate(data, receiver, owner);
285 data << uint32(ArtifactPowers.size());
286 data << uint32(Gems.size());
287 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
288 {
289 data << uint32(ZoneFlags);
290 }
291 data << *ItemBonusKey;
292 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
293 {
294 data << uint16(DEBUGItemLevel);
295 }
296 for (uint32 i = 0; i < ArtifactPowers.size(); ++i)
297 {
298 ArtifactPowers[i].WriteCreate(data, receiver, owner);
299 }
300 for (uint32 i = 0; i < Gems.size(); ++i)
301 {
302 Gems[i].WriteCreate(data, receiver, owner);
303 }
304}
305
306static constexpr void ItemDataAppendAllowedFieldsMaskForFlag(ItemData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
307{
308 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
309 allowedMaskForTarget |= std::array<uint32, 2>{ 0x07F58D80u, 0x00000000u };
310}
311
312void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
313{
314 ItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
315}
316
318{
319 Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
320 ItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
321 changesMask &= allowedMaskForTarget;
322}
323
324void ItemData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Item const* owner) const
325{
326 Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
327 ItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
328 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
329}
330
331void ItemData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Item const* owner, bool ignoreNestedChangesMask) const
332{
333 data.WriteBits(changesMask.GetBlocksMask(0), 2);
334 for (uint32 i = 0; i < 2; ++i)
335 if (changesMask.GetBlock(i))
336 data.WriteBits(changesMask.GetBlock(i), 32);
337
338 if (changesMask[0])
339 {
340 if (changesMask[1])
341 {
342 if (!ignoreNestedChangesMask)
344 else
346 }
347 if (changesMask[2])
348 {
349 if (!ignoreNestedChangesMask)
350 Gems.WriteUpdateMask(data);
351 else
353 }
354 }
355 data.FlushBits();
356 if (changesMask[0])
357 {
358 if (changesMask[1])
359 {
360 for (uint32 i = 0; i < ArtifactPowers.size(); ++i)
361 {
362 if (ArtifactPowers.HasChanged(i) || ignoreNestedChangesMask)
363 {
364 ArtifactPowers[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
365 }
366 }
367 }
368 if (changesMask[2])
369 {
370 for (uint32 i = 0; i < Gems.size(); ++i)
371 {
372 if (Gems.HasChanged(i) || ignoreNestedChangesMask)
373 {
374 Gems[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
375 }
376 }
377 }
378 if (changesMask[3])
379 {
380 data << *Owner;
381 }
382 if (changesMask[4])
383 {
384 data << *ContainedIn;
385 }
386 if (changesMask[5])
387 {
388 data << *Creator;
389 }
390 if (changesMask[6])
391 {
392 data << *GiftCreator;
393 }
394 if (changesMask[7])
395 {
396 data << uint32(StackCount);
397 }
398 if (changesMask[8])
399 {
400 data << uint32(Expiration);
401 }
402 if (changesMask[9])
403 {
404 data << uint32(DynamicFlags);
405 }
406 if (changesMask[10])
407 {
408 data << uint32(Durability);
409 }
410 if (changesMask[11])
411 {
412 data << uint32(MaxDurability);
413 }
414 if (changesMask[12])
415 {
416 data << uint32(CreatePlayedTime);
417 }
418 if (changesMask[13])
419 {
420 data << uint8(Context);
421 }
422 if (changesMask[14])
423 {
424 data << int64(CreateTime);
425 }
426 if (changesMask[15])
427 {
428 data << uint64(ArtifactXP);
429 }
430 if (changesMask[16])
431 {
432 data << uint8(ItemAppearanceModID);
433 }
434 if (changesMask[17])
435 {
436 Modifiers->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
437 }
438 if (changesMask[18])
439 {
440 data << uint32(ZoneFlags);
441 }
442 if (changesMask[19])
443 {
444 data << *ItemBonusKey;
445 }
446 if (changesMask[20])
447 {
448 data << uint16(DEBUGItemLevel);
449 }
450 }
451 if (changesMask[21])
452 {
453 for (uint32 i = 0; i < 5; ++i)
454 {
455 if (changesMask[22 + i])
456 {
457 data << int32(SpellCharges[i]);
458 }
459 }
460 }
461 if (changesMask[27])
462 {
463 for (uint32 i = 0; i < 13; ++i)
464 {
465 if (changesMask[28 + i])
466 {
467 Enchantment[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
468 }
469 }
470 }
471}
472
499
500void ContainerData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Bag const* owner) const
501{
502 for (uint32 i = 0; i < 98; ++i)
503 {
504 data << Slots[i];
505 }
506 data << uint32(NumSlots);
507}
508
509void ContainerData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Bag const* owner) const
510{
511 WriteUpdate(_changesMask, data, receiver, owner, false);
512}
513
514void ContainerData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Bag const* owner, bool ignoreNestedChangesMask) const
515{
516 data.WriteBits(changesMask.GetBlocksMask(0), 4);
517 for (uint32 i = 0; i < 4; ++i)
518 if (changesMask.GetBlock(i))
519 data.WriteBits(changesMask.GetBlock(i), 32);
520
521 data.FlushBits();
522 if (changesMask[0])
523 {
524 if (changesMask[1])
525 {
526 data << uint32(NumSlots);
527 }
528 }
529 if (changesMask[2])
530 {
531 for (uint32 i = 0; i < 98; ++i)
532 {
533 if (changesMask[3 + i])
534 {
535 data << Slots[i];
536 }
537 }
538 }
539}
540
547
548void AzeriteEmpoweredItemData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AzeriteEmpoweredItem const* owner) const
549{
550 for (uint32 i = 0; i < 5; ++i)
551 {
552 data << int32(Selections[i]);
553 }
554}
555
556void AzeriteEmpoweredItemData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AzeriteEmpoweredItem const* owner) const
557{
558 WriteUpdate(_changesMask, data, receiver, owner, false);
559}
560
561void AzeriteEmpoweredItemData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, AzeriteEmpoweredItem const* owner, bool ignoreNestedChangesMask) const
562{
563 data.WriteBits(changesMask.GetBlocksMask(0), 1);
564 if (changesMask.GetBlock(0))
565 data.WriteBits(changesMask.GetBlock(0), 32);
566
567 data.FlushBits();
568 if (changesMask[0])
569 {
570 for (uint32 i = 0; i < 5; ++i)
571 {
572 if (changesMask[1 + i])
573 {
574 data << int32(Selections[i]);
575 }
576 }
577 }
578}
579
585
586void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
587{
588 data << uint32(AzeriteEssenceID);
589 data << uint32(Rank);
590}
591
593{
594 return AzeriteEssenceID == right.AzeriteEssenceID
595 && Rank == right.Rank;
596}
597
598void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
599{
600 for (uint32 i = 0; i < 4; ++i)
601 {
602 data << uint32(AzeriteEssenceID[i]);
603 }
604 data << uint32(SpecializationID);
605 data.WriteBit(Enabled);
606 data.FlushBits();
607}
608
609void SelectedAzeriteEssences::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
610{
611 Mask changesMask = _changesMask;
612 if (ignoreChangesMask)
613 changesMask.SetAll();
614
615 data.WriteBits(changesMask.GetBlocksMask(0), 1);
616 if (changesMask.GetBlock(0))
617 data.WriteBits(changesMask.GetBlock(0), 32);
618
619 if (changesMask[0])
620 {
621 if (changesMask[1])
622 {
623 data.WriteBit(Enabled);
624 }
625 }
626 data.FlushBits();
627 if (changesMask[0])
628 {
629 if (changesMask[2])
630 {
631 data << uint32(SpecializationID);
632 }
633 }
634 if (changesMask[3])
635 {
636 for (uint32 i = 0; i < 4; ++i)
637 {
638 if (changesMask[4 + i])
639 {
640 data << uint32(AzeriteEssenceID[i]);
641 }
642 }
643 }
644}
645
653
654void AzeriteItemData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
655{
656 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
657 {
658 data << uint64(Xp);
659 data << uint32(Level);
660 data << uint32(AuraLevel);
661 data << uint32(KnowledgeLevel);
662 data << int32(DEBUGknowledgeWeek);
663 }
664 data << uint32(UnlockedEssences.size());
665 data << uint32(SelectedEssences.size());
667 for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
668 {
669 UnlockedEssences[i].WriteCreate(data, receiver, owner);
670 }
671 for (uint32 i = 0; i < SelectedEssences.size(); ++i)
672 {
673 SelectedEssences[i].WriteCreate(data, receiver, owner);
674 }
675 for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
676 {
678 }
679 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
680 {
681 data.WriteBit(Enabled);
682 }
683 data.FlushBits();
684}
685
686static constexpr void AzeriteItemDataAppendAllowedFieldsMaskForFlag(AzeriteItemData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
687{
688 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
689 allowedMaskForTarget |= std::array<uint32, 1>{ 0x000003E2u };
690}
691
692void AzeriteItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
693{
694 AzeriteItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
695}
696
698{
699 Mask allowedMaskForTarget({ 0x0000001Du });
700 AzeriteItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
701 changesMask &= allowedMaskForTarget;
702}
703
704void AzeriteItemData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
705{
706 Mask allowedMaskForTarget({ 0x0000001Du });
707 AzeriteItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
708 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
709}
710
711void AzeriteItemData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner, bool ignoreNestedChangesMask) const
712{
713 data.WriteBits(changesMask.GetBlock(0), 10);
714
715 if (changesMask[0])
716 {
717 if (changesMask[1])
718 {
719 data.WriteBit(Enabled);
720 }
721 if (changesMask[2])
722 {
723 if (!ignoreNestedChangesMask)
725 else
727 }
728 if (changesMask[3])
729 {
730 if (!ignoreNestedChangesMask)
732 else
734 }
735 if (changesMask[4])
736 {
737 if (!ignoreNestedChangesMask)
739 else
741 }
742 }
743 data.FlushBits();
744 if (changesMask[0])
745 {
746 if (changesMask[2])
747 {
748 for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
749 {
750 if (UnlockedEssences.HasChanged(i) || ignoreNestedChangesMask)
751 {
752 UnlockedEssences[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
753 }
754 }
755 }
756 if (changesMask[3])
757 {
758 for (uint32 i = 0; i < SelectedEssences.size(); ++i)
759 {
760 if (SelectedEssences.HasChanged(i) || ignoreNestedChangesMask)
761 {
762 SelectedEssences[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
763 }
764 }
765 }
766 if (changesMask[4])
767 {
768 for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
769 {
770 if (UnlockedEssenceMilestones.HasChanged(i) || ignoreNestedChangesMask)
771 {
773 }
774 }
775 }
776 if (changesMask[5])
777 {
778 data << uint64(Xp);
779 }
780 if (changesMask[6])
781 {
782 data << uint32(Level);
783 }
784 if (changesMask[7])
785 {
786 data << uint32(AuraLevel);
787 }
788 if (changesMask[8])
789 {
790 data << uint32(KnowledgeLevel);
791 }
792 if (changesMask[9])
793 {
794 data << int32(DEBUGknowledgeWeek);
795 }
796 }
797}
798
812
813void SpellCastVisual::WriteCreate(ByteBuffer& data, Player const* receiver, Object const* owner) const
814{
815 data << int32(SpellXSpellVisualID);
816 data << int32(ScriptVisualID);
817}
818
820{
822 && ScriptVisualID == right.ScriptVisualID;
823}
824
825void UnitChannel::WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const
826{
827 data << int32(SpellID);
828 SpellVisual.WriteCreate(data, receiver, owner);
829 data << uint32(StartTimeMs);
830 data << uint32(Duration);
831}
832
833bool UnitChannel::operator==(UnitChannel const& right) const
834{
835 return SpellID == right.SpellID
836 && SpellVisual == right.SpellVisual
837 && StartTimeMs == right.StartTimeMs
838 && Duration == right.Duration;
839}
840
841void VisibleItem::WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const
842{
843 data << int32(ItemID);
847 data << uint16(ItemVisual);
849 data << uint8(TransmogSlotOption);
850 data << uint8(SheatheCategory);
851 data.WriteBit(HasTransmog);
852 data.WriteBit(HasIllusion);
853 data.FlushBits();
854}
855
856void VisibleItem::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Unit const* owner) const
857{
858 Mask changesMask = _changesMask;
859 if (ignoreChangesMask)
860 changesMask.SetAll();
861
862 data.WriteBits(changesMask.GetBlock(0), 11);
863
864 if (changesMask[0])
865 {
866 if (changesMask[1])
867 {
868 data.WriteBit(HasTransmog);
869 }
870 if (changesMask[2])
871 {
872 data.WriteBit(HasIllusion);
873 }
874 }
875 data.FlushBits();
876 if (changesMask[0])
877 {
878 if (changesMask[3])
879 {
880 data << int32(ItemID);
881 }
882 if (changesMask[4])
883 {
885 }
886 if (changesMask[5])
887 {
889 }
890 if (changesMask[6])
891 {
893 }
894 if (changesMask[7])
895 {
896 data << uint16(ItemVisual);
897 }
898 if (changesMask[8])
899 {
901 }
902 if (changesMask[9])
903 {
904 data << uint8(TransmogSlotOption);
905 }
906 if (changesMask[10])
907 {
908 data << uint8(SheatheCategory);
909 }
910 }
911}
912
927
928void PassiveSpellHistory::WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const
929{
930 data << int32(SpellID);
931 data << int32(AuraSpellID);
932}
933
935{
936 return SpellID == right.SpellID
937 && AuraSpellID == right.AuraSpellID;
938}
939
940void UnitAssistActionData::WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const
941{
942 data << uint8(Type);
944 data.WriteBits(PlayerName->size(), 6);
945 data.FlushBits();
947}
948
949void UnitAssistActionData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Unit const* owner) const
950{
951 Mask changesMask = _changesMask;
952 if (ignoreChangesMask)
953 changesMask.SetAll();
954
955 data.WriteBits(changesMask.GetBlock(0), 4);
956
957 data.FlushBits();
958 if (changesMask[0])
959 {
960 if (changesMask[1])
961 {
962 data << uint8(Type);
963 }
964 if (changesMask[3])
965 {
967 }
968 if (changesMask[2])
969 {
970 data.WriteBits(PlayerName->size(), 6);
971 data.FlushBits();
973 }
974 }
975}
976
984
985void UnitData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Unit const* owner) const
986{
988
989 data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, receiver, owner));
990 data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, receiver, owner));
991 data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, receiver, owner));
993 data << uint32(ViewerDependentValue<StateAnimIDTag>::GetValue(this, receiver, owner));
994 data << uint32(ViewerDependentValue<StateAnimKitIDTag>::GetValue(this, receiver, owner));
995 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, receiver, owner);
996 data << uint32(stateWorldEffectIDs->size());
998 data << int32(SpellOverrideNameID);
999 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
1000 {
1001 data << uint32((*stateWorldEffectIDs)[i]);
1002 }
1003 data << *Charm;
1004 data << *Summon;
1005 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1006 {
1007 data << *Critter;
1008 }
1009 data << *CharmedBy;
1010 data << *SummonedBy;
1011 data << *CreatedBy;
1012 data << *DemonCreator;
1013 data << *LookAtControllerTarget;
1014 data << *Target;
1015 data << *BattlePetCompanionGUID;
1016 data << uint64(BattlePetDBID);
1018 data << *BattlePetDecorHouseGUID;
1019 ChannelData->WriteCreate(data, receiver, owner);
1020 data << int8(SpellEmpowerStage);
1021 data << uint32(SummonedByHomeRealm);
1022 data << uint8(Race);
1023 data << uint8(ClassId);
1024 data << uint8(PlayerClassId);
1025 data << uint8(Sex);
1026 data << uint8(CreatureType);
1027 data << uint8(DisplayPower);
1029 data << int64(Health);
1030 for (uint32 i = 0; i < 10; ++i)
1031 {
1032 data << int32(Power[i]);
1033 data << int32(MaxPower[i]);
1034 }
1035 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::UnitAll))
1036 {
1037 for (uint32 i = 0; i < 10; ++i)
1038 {
1039 data << float(PowerRegenFlatModifier[i]);
1040 data << float(PowerRegenInterruptedFlatModifier[i]);
1041 }
1042 }
1043 data << int64(MaxHealth);
1044 data << int32(Level);
1045 data << int32(EffectiveLevel);
1046 data << int32(ContentTuningID);
1047 data << int32(ScalingLevelMin);
1048 data << int32(ScalingLevelMax);
1049 data << int32(ScalingLevelDelta);
1050 data << uint8(ScalingFactionGroup);
1051 data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, receiver, owner));
1052 for (uint32 i = 0; i < 3; ++i)
1053 {
1054 VirtualItems[i].WriteCreate(data, receiver, owner);
1055 }
1056 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, receiver, owner));
1057 data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, receiver, owner));
1058 data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, receiver, owner));
1059 data << uint32(ViewerDependentValue<Flags4Tag>::GetValue(this, receiver, owner));
1060 data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, receiver, owner));
1061 for (uint32 i = 0; i < 2; ++i)
1062 {
1063 data << uint32(AttackRoundBaseTime[i]);
1064 }
1065 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1066 {
1068 }
1069 data << float(BoundingRadius);
1070 data << float(CombatReach);
1071 data << float(DisplayScale);
1072 data << int32(CreatureFamily);
1073 data << uint8(OverrideCreatureType);
1074 data << int32(NativeDisplayID);
1075 data << float(NativeXDisplayScale);
1076 data << int32(MountDisplayID);
1078 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
1079 {
1080 data << float(MinDamage);
1081 data << float(MaxDamage);
1082 data << float(MinOffHandDamage);
1083 data << float(MaxOffHandDamage);
1084 }
1085 data << uint8(StandState);
1086 data << uint8(PetTalentPoints);
1087 data << uint8(VisFlags);
1088 data << uint8(AnimTier);
1089 data << uint32(PetNumber);
1090 data << uint32(PetNameTimestamp);
1091 data << uint32(PetExperience);
1093 data << float(ModCastingSpeed);
1094 data << float(ModCastingSpeedNeg);
1095 data << float(ModSpellHaste);
1096 data << float(ModHaste);
1097 data << float(ModRangedHaste);
1098 data << float(ModHasteRegen);
1099 data << float(ModTimeRate);
1100 data << int32(CreatedBySpell);
1101 data << int32(EmoteState);
1102 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1103 {
1104 for (uint32 i = 0; i < 5; ++i)
1105 {
1106 data << int32(Stats[i]);
1107 data << int32(StatPosBuff[i]);
1108 data << int32(StatNegBuff[i]);
1109 data << int32(StatSupportBuff[i]);
1110 }
1111 }
1112 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
1113 {
1114 for (uint32 i = 0; i < 7; ++i)
1115 {
1116 data << int32(Resistances[i]);
1117 }
1118 }
1119 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1120 {
1121 for (uint32 i = 0; i < 7; ++i)
1122 {
1123 data << int32(BonusResistanceMods[i]);
1124 data << int32(ManaCostModifier[i]);
1125 }
1126 }
1127 data << int32(BaseMana);
1128 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1129 {
1130 data << int32(BaseHealth);
1131 }
1132 data << uint8(SheatheState);
1133 data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, receiver, owner));
1134 data << uint8(PetFlags);
1135 data << uint8(ShapeshiftForm);
1136 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1137 {
1138 data << int32(AttackPower);
1139 data << int32(AttackPowerModPos);
1140 data << int32(AttackPowerModNeg);
1141 data << float(AttackPowerMultiplier);
1143 data << int32(RangedAttackPower);
1146 data << float(RangedAttackPowerMultiplier);
1151 data << int32(SetAttackSpeedAura);
1152 data << float(Lifesteal);
1153 data << float(MinRangedDamage);
1154 data << float(MaxRangedDamage);
1155 data << float(ManaCostMultiplier);
1156 }
1157 data << float(MaxHealthModifier);
1158 data << float(HoverHeight);
1159 data << int32(MinItemLevelCutoff);
1160 data << int32(MinItemLevel);
1161 data << int32(MaxItemLevel);
1162 data << int32(AzeriteItemLevel);
1163 data << int32(WildBattlePetLevel);
1166 data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, receiver, owner));
1167 data << int32(ScaleDuration);
1168 data << int32(LooksLikeMountID);
1169 data << int32(LooksLikeCreatureID);
1170 data << int32(LookAtControllerID);
1171 data << int32(PerksVendorItemID);
1172 data << int32(TaxiNodesID);
1173 data << *GuildGUID;
1174 data << uint32(PassiveSpells.size());
1175 data << uint32(WorldEffects.size());
1176 data << uint32(ChannelObjects.size());
1177 data << int32(FlightCapabilityID);
1178 data << float(GlideEventSpeedDivisor);
1179 data << int32(DriveCapabilityID);
1182 data << uint32(SilencedSchoolMask);
1183 data << uint32(CurrentAreaID);
1184 data << float(NameplateDistanceMod);
1185 data << float(AutoAttackRangeMod);
1186 data << *NameplateAttachToGUID;
1187 for (uint32 i = 0; i < PassiveSpells.size(); ++i)
1188 {
1189 PassiveSpells[i].WriteCreate(data, receiver, owner);
1190 }
1191 for (uint32 i = 0; i < WorldEffects.size(); ++i)
1192 {
1193 data << int32(WorldEffects[i]);
1194 }
1195 for (uint32 i = 0; i < ChannelObjects.size(); ++i)
1196 {
1197 data << ChannelObjects[i];
1198 }
1199 data.WriteBit(Field_314);
1201 data.FlushBits();
1203 {
1204 AssistActionData->WriteCreate(data, receiver, owner);
1205 }
1206}
1207
1208static constexpr void UnitDataAppendAllowedFieldsMaskForFlag(UnitData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
1209{
1210 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1211 allowedMaskForTarget |= std::array<uint32, 8>{ 0x00010000u, 0x80200000u, 0xF840000Eu, 0x00003FFEu, 0x00000800u, 0xF80FFFFFu, 0xFFFFFFFFu, 0x0000003Fu };
1212 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
1213 allowedMaskForTarget |= std::array<uint32, 8>{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000800u, 0x000FFFFFu, 0x00000000u, 0x00000000u };
1214 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
1215 allowedMaskForTarget |= std::array<uint32, 8>{ 0x00000000u, 0x80000000u, 0x0000000Eu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00FF0000u, 0x00000000u };
1216}
1217
1218void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
1219{
1220 UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1221}
1222
1224{
1225 Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x7FDFFFFFu, 0x07BFFFF1u, 0xFFFFC001u, 0xFFFFFFFFu, 0x07F00000u, 0x00000000u, 0x00000000u });
1226 UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1227 changesMask &= allowedMaskForTarget;
1228}
1229
1230void UnitData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Unit const* owner) const
1231{
1232 Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x7FDFFFFFu, 0x07BFFFF1u, 0xFFFFC001u, 0xFFFFFFFFu, 0x07F00000u, 0x00000000u, 0x00000000u });
1233 UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1234 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
1235}
1236
1237void UnitData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Unit const* owner, bool ignoreNestedChangesMask) const
1238{
1239 data.WriteBits(changesMask.GetBlocksMask(0), 8);
1240 for (uint32 i = 0; i < 8; ++i)
1241 if (changesMask.GetBlock(i))
1242 data.WriteBits(changesMask.GetBlock(i), 32);
1243
1245
1246 if (changesMask[0])
1247 {
1248 if (changesMask[1])
1249 {
1250 data.WriteBit(Field_314);
1251 }
1252 if (changesMask[2])
1253 {
1254 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, receiver, owner);
1255 data.WriteBits(stateWorldEffectIDs->size(), 32);
1256 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
1257 {
1258 data << uint32((*stateWorldEffectIDs)[i]);
1259 }
1260 }
1261 }
1262 data.FlushBits();
1263 if (changesMask[0])
1264 {
1265 if (changesMask[3])
1266 {
1267 if (!ignoreNestedChangesMask)
1269 else
1271 }
1272 if (changesMask[4])
1273 {
1274 if (!ignoreNestedChangesMask)
1276 else
1278 }
1279 if (changesMask[5])
1280 {
1281 if (!ignoreNestedChangesMask)
1283 else
1285 }
1286 }
1287 data.FlushBits();
1288 if (changesMask[0])
1289 {
1290 if (changesMask[3])
1291 {
1292 for (uint32 i = 0; i < PassiveSpells.size(); ++i)
1293 {
1294 if (PassiveSpells.HasChanged(i) || ignoreNestedChangesMask)
1295 {
1296 PassiveSpells[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
1297 }
1298 }
1299 }
1300 if (changesMask[4])
1301 {
1302 for (uint32 i = 0; i < WorldEffects.size(); ++i)
1303 {
1304 if (WorldEffects.HasChanged(i) || ignoreNestedChangesMask)
1305 {
1306 data << int32(WorldEffects[i]);
1307 }
1308 }
1309 }
1310 if (changesMask[5])
1311 {
1312 for (uint32 i = 0; i < ChannelObjects.size(); ++i)
1313 {
1314 if (ChannelObjects.HasChanged(i) || ignoreNestedChangesMask)
1315 {
1316 data << ChannelObjects[i];
1317 }
1318 }
1319 }
1320 if (changesMask[6])
1321 {
1322 data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, receiver, owner));
1323 }
1324 if (changesMask[7])
1325 {
1326 data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, receiver, owner));
1327 }
1328 if (changesMask[8])
1329 {
1330 data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, receiver, owner));
1331 }
1332 if (changesMask[9])
1333 {
1334 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, receiver, owner));
1335 }
1336 if (changesMask[10])
1337 {
1338 data << uint32(ViewerDependentValue<StateAnimIDTag>::GetValue(this, receiver, owner));
1339 }
1340 if (changesMask[11])
1341 {
1342 data << uint32(ViewerDependentValue<StateAnimKitIDTag>::GetValue(this, receiver, owner));
1343 }
1344 if (changesMask[12])
1345 {
1347 }
1348 if (changesMask[13])
1349 {
1350 data << int32(SpellOverrideNameID);
1351 }
1352 if (changesMask[14])
1353 {
1354 data << *Charm;
1355 }
1356 if (changesMask[15])
1357 {
1358 data << *Summon;
1359 }
1360 if (changesMask[16])
1361 {
1362 data << *Critter;
1363 }
1364 if (changesMask[17])
1365 {
1366 data << *CharmedBy;
1367 }
1368 if (changesMask[18])
1369 {
1370 data << *SummonedBy;
1371 }
1372 if (changesMask[19])
1373 {
1374 data << *CreatedBy;
1375 }
1376 if (changesMask[20])
1377 {
1378 data << *DemonCreator;
1379 }
1380 if (changesMask[21])
1381 {
1382 data << *LookAtControllerTarget;
1383 }
1384 if (changesMask[22])
1385 {
1386 data << *Target;
1387 }
1388 if (changesMask[23])
1389 {
1390 data << *BattlePetCompanionGUID;
1391 }
1392 if (changesMask[24])
1393 {
1394 data << uint64(BattlePetDBID);
1395 }
1396 if (changesMask[25])
1397 {
1399 }
1400 if (changesMask[26])
1401 {
1402 data << *BattlePetDecorHouseGUID;
1403 }
1404 if (changesMask[27])
1405 {
1406 ChannelData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
1407 }
1408 if (changesMask[28])
1409 {
1410 data << int8(SpellEmpowerStage);
1411 }
1412 if (changesMask[29])
1413 {
1414 data << uint32(SummonedByHomeRealm);
1415 }
1416 if (changesMask[30])
1417 {
1418 data << uint8(Race);
1419 }
1420 if (changesMask[31])
1421 {
1422 data << uint8(ClassId);
1423 }
1424 }
1425 if (changesMask[32])
1426 {
1427 if (changesMask[33])
1428 {
1429 data << uint8(PlayerClassId);
1430 }
1431 if (changesMask[34])
1432 {
1433 data << uint8(Sex);
1434 }
1435 if (changesMask[35])
1436 {
1437 data << uint8(CreatureType);
1438 }
1439 if (changesMask[36])
1440 {
1441 data << uint8(DisplayPower);
1442 }
1443 if (changesMask[37])
1444 {
1446 }
1447 if (changesMask[38])
1448 {
1449 data << int64(Health);
1450 }
1451 if (changesMask[39])
1452 {
1453 data << int64(MaxHealth);
1454 }
1455 if (changesMask[40])
1456 {
1457 data << int32(Level);
1458 }
1459 if (changesMask[41])
1460 {
1461 data << int32(EffectiveLevel);
1462 }
1463 if (changesMask[42])
1464 {
1465 data << int32(ContentTuningID);
1466 }
1467 if (changesMask[43])
1468 {
1469 data << int32(ScalingLevelMin);
1470 }
1471 if (changesMask[44])
1472 {
1473 data << int32(ScalingLevelMax);
1474 }
1475 if (changesMask[45])
1476 {
1477 data << int32(ScalingLevelDelta);
1478 }
1479 if (changesMask[46])
1480 {
1481 data << uint8(ScalingFactionGroup);
1482 }
1483 if (changesMask[47])
1484 {
1485 data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, receiver, owner));
1486 }
1487 if (changesMask[48])
1488 {
1489 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, receiver, owner));
1490 }
1491 if (changesMask[49])
1492 {
1493 data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, receiver, owner));
1494 }
1495 if (changesMask[50])
1496 {
1497 data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, receiver, owner));
1498 }
1499 if (changesMask[51])
1500 {
1501 data << uint32(ViewerDependentValue<Flags4Tag>::GetValue(this, receiver, owner));
1502 }
1503 if (changesMask[52])
1504 {
1505 data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, receiver, owner));
1506 }
1507 if (changesMask[53])
1508 {
1510 }
1511 if (changesMask[54])
1512 {
1513 data << float(BoundingRadius);
1514 }
1515 if (changesMask[55])
1516 {
1517 data << float(CombatReach);
1518 }
1519 if (changesMask[56])
1520 {
1521 data << float(DisplayScale);
1522 }
1523 if (changesMask[57])
1524 {
1525 data << int32(CreatureFamily);
1526 }
1527 if (changesMask[58])
1528 {
1529 data << uint8(OverrideCreatureType);
1530 }
1531 if (changesMask[59])
1532 {
1533 data << int32(NativeDisplayID);
1534 }
1535 if (changesMask[60])
1536 {
1537 data << float(NativeXDisplayScale);
1538 }
1539 if (changesMask[61])
1540 {
1541 data << int32(MountDisplayID);
1542 }
1543 if (changesMask[62])
1544 {
1546 }
1547 if (changesMask[63])
1548 {
1549 data << float(MinDamage);
1550 }
1551 }
1552 if (changesMask[64])
1553 {
1554 if (changesMask[65])
1555 {
1556 data << float(MaxDamage);
1557 }
1558 if (changesMask[66])
1559 {
1560 data << float(MinOffHandDamage);
1561 }
1562 if (changesMask[67])
1563 {
1564 data << float(MaxOffHandDamage);
1565 }
1566 if (changesMask[68])
1567 {
1568 data << uint8(StandState);
1569 }
1570 if (changesMask[69])
1571 {
1572 data << uint8(PetTalentPoints);
1573 }
1574 if (changesMask[70])
1575 {
1576 data << uint8(VisFlags);
1577 }
1578 if (changesMask[71])
1579 {
1580 data << uint8(AnimTier);
1581 }
1582 if (changesMask[72])
1583 {
1584 data << uint32(PetNumber);
1585 }
1586 if (changesMask[73])
1587 {
1588 data << uint32(PetNameTimestamp);
1589 }
1590 if (changesMask[74])
1591 {
1592 data << uint32(PetExperience);
1593 }
1594 if (changesMask[75])
1595 {
1597 }
1598 if (changesMask[76])
1599 {
1600 data << float(ModCastingSpeed);
1601 }
1602 if (changesMask[77])
1603 {
1604 data << float(ModCastingSpeedNeg);
1605 }
1606 if (changesMask[78])
1607 {
1608 data << float(ModSpellHaste);
1609 }
1610 if (changesMask[79])
1611 {
1612 data << float(ModHaste);
1613 }
1614 if (changesMask[80])
1615 {
1616 data << float(ModRangedHaste);
1617 }
1618 if (changesMask[81])
1619 {
1620 data << float(ModHasteRegen);
1621 }
1622 if (changesMask[82])
1623 {
1624 data << float(ModTimeRate);
1625 }
1626 if (changesMask[83])
1627 {
1628 data << int32(CreatedBySpell);
1629 }
1630 if (changesMask[84])
1631 {
1632 data << int32(EmoteState);
1633 }
1634 if (changesMask[85])
1635 {
1636 data << int32(BaseMana);
1637 }
1638 if (changesMask[86])
1639 {
1640 data << int32(BaseHealth);
1641 }
1642 if (changesMask[87])
1643 {
1644 data << uint8(SheatheState);
1645 }
1646 if (changesMask[88])
1647 {
1648 data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, receiver, owner));
1649 }
1650 if (changesMask[89])
1651 {
1652 data << uint8(PetFlags);
1653 }
1654 if (changesMask[90])
1655 {
1656 data << uint8(ShapeshiftForm);
1657 }
1658 if (changesMask[91])
1659 {
1660 data << int32(AttackPower);
1661 }
1662 if (changesMask[92])
1663 {
1664 data << int32(AttackPowerModPos);
1665 }
1666 if (changesMask[93])
1667 {
1668 data << int32(AttackPowerModNeg);
1669 }
1670 if (changesMask[94])
1671 {
1672 data << float(AttackPowerMultiplier);
1673 }
1674 if (changesMask[95])
1675 {
1677 }
1678 }
1679 if (changesMask[96])
1680 {
1681 if (changesMask[97])
1682 {
1683 data << int32(RangedAttackPower);
1684 }
1685 if (changesMask[98])
1686 {
1688 }
1689 if (changesMask[99])
1690 {
1692 }
1693 if (changesMask[100])
1694 {
1695 data << float(RangedAttackPowerMultiplier);
1696 }
1697 if (changesMask[101])
1698 {
1700 }
1701 if (changesMask[102])
1702 {
1704 }
1705 if (changesMask[103])
1706 {
1708 }
1709 if (changesMask[104])
1710 {
1712 }
1713 if (changesMask[105])
1714 {
1715 data << int32(SetAttackSpeedAura);
1716 }
1717 if (changesMask[106])
1718 {
1719 data << float(Lifesteal);
1720 }
1721 if (changesMask[107])
1722 {
1723 data << float(MinRangedDamage);
1724 }
1725 if (changesMask[108])
1726 {
1727 data << float(MaxRangedDamage);
1728 }
1729 if (changesMask[109])
1730 {
1731 data << float(ManaCostMultiplier);
1732 }
1733 if (changesMask[110])
1734 {
1735 data << float(MaxHealthModifier);
1736 }
1737 if (changesMask[111])
1738 {
1739 data << float(HoverHeight);
1740 }
1741 if (changesMask[112])
1742 {
1743 data << int32(MinItemLevelCutoff);
1744 }
1745 if (changesMask[113])
1746 {
1747 data << int32(MinItemLevel);
1748 }
1749 if (changesMask[114])
1750 {
1751 data << int32(MaxItemLevel);
1752 }
1753 if (changesMask[115])
1754 {
1755 data << int32(AzeriteItemLevel);
1756 }
1757 if (changesMask[116])
1758 {
1759 data << int32(WildBattlePetLevel);
1760 }
1761 if (changesMask[117])
1762 {
1764 }
1765 if (changesMask[118])
1766 {
1768 }
1769 if (changesMask[119])
1770 {
1771 data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, receiver, owner));
1772 }
1773 if (changesMask[120])
1774 {
1775 data << int32(ScaleDuration);
1776 }
1777 if (changesMask[121])
1778 {
1779 data << int32(LooksLikeMountID);
1780 }
1781 if (changesMask[122])
1782 {
1783 data << int32(LooksLikeCreatureID);
1784 }
1785 if (changesMask[123])
1786 {
1787 data << int32(LookAtControllerID);
1788 }
1789 if (changesMask[124])
1790 {
1791 data << int32(PerksVendorItemID);
1792 }
1793 if (changesMask[125])
1794 {
1795 data << int32(TaxiNodesID);
1796 }
1797 if (changesMask[126])
1798 {
1799 data << *GuildGUID;
1800 }
1801 if (changesMask[127])
1802 {
1803 data << int32(FlightCapabilityID);
1804 }
1805 }
1806 if (changesMask[128])
1807 {
1808 if (changesMask[129])
1809 {
1810 data << float(GlideEventSpeedDivisor);
1811 }
1812 if (changesMask[130])
1813 {
1814 data << int32(DriveCapabilityID);
1815 }
1816 if (changesMask[131])
1817 {
1819 }
1820 if (changesMask[132])
1821 {
1823 }
1824 if (changesMask[133])
1825 {
1826 data << uint32(SilencedSchoolMask);
1827 }
1828 if (changesMask[134])
1829 {
1830 data << uint32(CurrentAreaID);
1831 }
1832 if (changesMask[135])
1833 {
1834 data << float(NameplateDistanceMod);
1835 }
1836 if (changesMask[136])
1837 {
1838 data << float(AutoAttackRangeMod);
1839 }
1840 if (changesMask[137])
1841 {
1842 data << *NameplateAttachToGUID;
1843 }
1845 }
1846 data.FlushBits();
1847 if (changesMask[128])
1848 {
1849 if (changesMask[138])
1850 {
1852 {
1853 AssistActionData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
1854 }
1855 }
1856 }
1857 if (changesMask[139])
1858 {
1859 for (uint32 i = 0; i < 10; ++i)
1860 {
1861 if (changesMask[140 + i])
1862 {
1863 data << int32(Power[i]);
1864 }
1865 if (changesMask[150 + i])
1866 {
1867 data << int32(MaxPower[i]);
1868 }
1869 if (changesMask[160 + i])
1870 {
1871 data << float(PowerRegenFlatModifier[i]);
1872 }
1873 if (changesMask[170 + i])
1874 {
1875 data << float(PowerRegenInterruptedFlatModifier[i]);
1876 }
1877 }
1878 }
1879 if (changesMask[180])
1880 {
1881 for (uint32 i = 0; i < 3; ++i)
1882 {
1883 if (changesMask[181 + i])
1884 {
1885 VirtualItems[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
1886 }
1887 }
1888 }
1889 if (changesMask[184])
1890 {
1891 for (uint32 i = 0; i < 2; ++i)
1892 {
1893 if (changesMask[185 + i])
1894 {
1895 data << uint32(AttackRoundBaseTime[i]);
1896 }
1897 }
1898 }
1899 if (changesMask[187])
1900 {
1901 for (uint32 i = 0; i < 5; ++i)
1902 {
1903 if (changesMask[188 + i])
1904 {
1905 data << int32(Stats[i]);
1906 }
1907 if (changesMask[193 + i])
1908 {
1909 data << int32(StatPosBuff[i]);
1910 }
1911 if (changesMask[198 + i])
1912 {
1913 data << int32(StatNegBuff[i]);
1914 }
1915 if (changesMask[203 + i])
1916 {
1917 data << int32(StatSupportBuff[i]);
1918 }
1919 }
1920 }
1921 if (changesMask[208])
1922 {
1923 for (uint32 i = 0; i < 7; ++i)
1924 {
1925 if (changesMask[209 + i])
1926 {
1927 data << int32(Resistances[i]);
1928 }
1929 if (changesMask[216 + i])
1930 {
1931 data << int32(BonusResistanceMods[i]);
1932 }
1933 if (changesMask[223 + i])
1934 {
1935 data << int32(ManaCostModifier[i]);
1936 }
1937 }
1938 }
1939}
1940
1942{
2091}
2092
2093void ChrCustomizationChoice::WriteCreate(ByteBuffer& data, Player const* receiver, Object const* owner) const
2094{
2097}
2098
2104
2105void QuestLog::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2106{
2107 data << int32(QuestID);
2108 data << uint16(StateFlags);
2109 for (uint32 i = 0; i < 24; ++i)
2110 {
2111 data << int16(ObjectiveProgress[i]);
2112 }
2113 data << int64(EndTime);
2114 data << uint32(ObjectiveFlags);
2116}
2117
2118void QuestLog::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2119{
2120 Mask changesMask = _changesMask;
2121 if (ignoreChangesMask)
2122 changesMask.SetAll();
2123
2124 data.WriteBits(changesMask.GetBlocksMask(0), 1);
2125 if (changesMask.GetBlock(0))
2126 data.WriteBits(changesMask.GetBlock(0), 32);
2127
2128 data.FlushBits();
2129 if (changesMask[0])
2130 {
2131 if (changesMask[1])
2132 {
2133 data << int32(QuestID);
2134 }
2135 if (changesMask[2])
2136 {
2137 data << uint16(StateFlags);
2138 }
2139 if (changesMask[3])
2140 {
2141 data << int64(EndTime);
2142 }
2143 if (changesMask[4])
2144 {
2145 data << uint32(ObjectiveFlags);
2146 }
2147 if (changesMask[5])
2148 {
2150 }
2151 }
2152 if (changesMask[6])
2153 {
2154 for (uint32 i = 0; i < 24; ++i)
2155 {
2156 if (changesMask[7 + i])
2157 {
2158 data << int16(ObjectiveProgress[i]);
2159 }
2160 }
2161 }
2162}
2163
2174
2175void ArenaCooldown::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2176{
2177 data << int32(SpellID);
2178 data << int32(Charges);
2179 data << uint32(Flags);
2180 data << uint32(StartTime);
2181 data << uint32(EndTime);
2182 data << uint32(NextChargeTime);
2183 data << uint8(MaxCharges);
2184}
2185
2186void ArenaCooldown::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2187{
2188 Mask changesMask = _changesMask;
2189 if (ignoreChangesMask)
2190 changesMask.SetAll();
2191
2192 data.WriteBits(changesMask.GetBlock(0), 8);
2193
2194 data.FlushBits();
2195 if (changesMask[0])
2196 {
2197 if (changesMask[1])
2198 {
2199 data << int32(SpellID);
2200 }
2201 if (changesMask[2])
2202 {
2203 data << int32(Charges);
2204 }
2205 if (changesMask[3])
2206 {
2207 data << uint32(Flags);
2208 }
2209 if (changesMask[4])
2210 {
2211 data << uint32(StartTime);
2212 }
2213 if (changesMask[5])
2214 {
2215 data << uint32(EndTime);
2216 }
2217 if (changesMask[6])
2218 {
2219 data << uint32(NextChargeTime);
2220 }
2221 if (changesMask[7])
2222 {
2223 data << uint8(MaxCharges);
2224 }
2225 }
2226}
2227
2239
2240void ZonePlayerForcedReaction::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2241{
2242 data << int32(FactionID);
2243 data << int32(Reaction);
2244}
2245
2246void ZonePlayerForcedReaction::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2247{
2248 Mask changesMask = _changesMask;
2249 if (ignoreChangesMask)
2250 changesMask.SetAll();
2251
2252 data.WriteBits(changesMask.GetBlock(0), 3);
2253
2254 data.FlushBits();
2255 if (changesMask[0])
2256 {
2257 if (changesMask[1])
2258 {
2259 data << int32(FactionID);
2260 }
2261 if (changesMask[2])
2262 {
2263 data << int32(Reaction);
2264 }
2265 }
2266}
2267
2274
2275void PetCreatureName::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2276{
2277 data << uint32(CreatureID);
2278 data.WriteBits(Name->size(), 8);
2279 data.FlushBits();
2281}
2282
2283void PetCreatureName::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2284{
2285 Mask changesMask = _changesMask;
2286 if (ignoreChangesMask)
2287 changesMask.SetAll();
2288
2289 data.WriteBits(changesMask.GetBlock(0), 3);
2290
2291 data.FlushBits();
2292 if (changesMask[0])
2293 {
2294 if (changesMask[1])
2295 {
2296 data << uint32(CreatureID);
2297 }
2298 if (changesMask[2])
2299 {
2300 data.WriteBits(Name->size(), 8);
2301 data.FlushBits();
2303 }
2304 }
2305}
2306
2313
2314void CTROptions::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2315{
2316 data << uint32(ConditionalFlags.size());
2317 data << uint8(FactionGroup);
2319 for (uint32 i = 0; i < ConditionalFlags.size(); ++i)
2320 {
2321 data << uint32(ConditionalFlags[i]);
2322 }
2323}
2324
2325bool CTROptions::operator==(CTROptions const& right) const
2326{
2327 return ConditionalFlags == right.ConditionalFlags
2328 && FactionGroup == right.FactionGroup
2330}
2331
2332void LeaverInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2333{
2334 data << BnetAccountGUID;
2335 data << float(LeaveScore);
2336 data << uint32(SeasonID);
2337 data << uint32(TotalLeaves);
2338 data << uint32(TotalSuccesses);
2339 data << int32(ConsecutiveSuccesses);
2340 data << int64(LastPenaltyTime);
2341 data << int64(LeaverExpirationTime);
2342 data << int32(Flags);
2343 data.WriteBit(IsLeaver);
2344 data.FlushBits();
2345}
2346
2347bool LeaverInfo::operator==(LeaverInfo const& right) const
2348{
2349 return IsLeaver == right.IsLeaver
2351 && LeaveScore == right.LeaveScore
2352 && SeasonID == right.SeasonID
2353 && TotalLeaves == right.TotalLeaves
2354 && TotalSuccesses == right.TotalSuccesses
2358 && Flags == right.Flags;
2359}
2360
2361void DeclinedNames::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2362{
2363 for (uint32 i = 0; i < 5; ++i)
2364 {
2365 data.WriteBits(Name[i].size(), 10);
2366 }
2367 for (uint32 i = 0; i < 5; ++i)
2368 {
2370 }
2371}
2372
2373void DeclinedNames::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2374{
2375 Mask changesMask = _changesMask;
2376 if (ignoreChangesMask)
2377 changesMask.SetAll();
2378
2379 data.WriteBits(changesMask.GetBlocksMask(0), 1);
2380 if (changesMask.GetBlock(0))
2381 data.WriteBits(changesMask.GetBlock(0), 32);
2382
2383 if (changesMask[0])
2384 {
2385 for (uint32 i = 0; i < 5; ++i)
2386 {
2387 if (changesMask[1 + i])
2388 {
2389 data.WriteBits(Name[i].size(), 10);
2390 }
2391 }
2392 }
2393 data.FlushBits();
2394 if (changesMask[0])
2395 {
2396 for (uint32 i = 0; i < 5; ++i)
2397 {
2398 if (changesMask[1 + i])
2399 {
2401 }
2402 }
2403 }
2404}
2405
2411
2412void CustomTabardInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2413{
2414 data << int32(EmblemStyle);
2415 data << int32(EmblemColor);
2416 data << int32(BorderStyle);
2417 data << int32(BorderColor);
2418 data << int32(BackgroundColor);
2419}
2420
2421void CustomTabardInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2422{
2423 Mask changesMask = _changesMask;
2424 if (ignoreChangesMask)
2425 changesMask.SetAll();
2426
2427 data.WriteBits(changesMask.GetBlock(0), 6);
2428
2429 data.FlushBits();
2430 if (changesMask[0])
2431 {
2432 if (changesMask[1])
2433 {
2434 data << int32(EmblemStyle);
2435 }
2436 if (changesMask[2])
2437 {
2438 data << int32(EmblemColor);
2439 }
2440 if (changesMask[3])
2441 {
2442 data << int32(BorderStyle);
2443 }
2444 if (changesMask[4])
2445 {
2446 data << int32(BorderColor);
2447 }
2448 if (changesMask[5])
2449 {
2450 data << int32(BackgroundColor);
2451 }
2452 }
2453}
2454
2464
2465void NPCAsPlayerInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2466{
2467 data << int32(Field_0);
2468 data << int32(CharacterLoadoutID);
2469 data << int32(CreatureID);
2470 data << LocWorldSpace;
2471 data << float(FacingWorldSpace);
2472 data << TransportGUID;
2473}
2474
2476{
2477 return Field_0 == right.Field_0
2479 && CreatureID == right.CreatureID
2480 && LocWorldSpace == right.LocWorldSpace
2482 && TransportGUID == right.TransportGUID;
2483}
2484
2485void PlayerData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
2486{
2487 data << *DuelArbiter;
2488 data << *WowAccount;
2489 data << *BnetAccount;
2490 data << uint64(GuildClubMemberID);
2491 data << *LootTargetGUID;
2492 data << uint32(PlayerFlags);
2493 data << uint32(PlayerFlagsEx);
2494 data << uint32(GuildRankID);
2495 data << uint32(GuildDeleteDate);
2496 data << int32(GuildLevel);
2497 data << uint32(Customizations.size());
2498 data << uint32(RandomCustomizations.size());
2499 for (uint32 i = 0; i < 2; ++i)
2500 {
2501 data << uint8(PartyType[i]);
2502 }
2503 data << uint8(NativeSex);
2504 data << uint8(Inebriation);
2505 data << uint8(PvpTitle);
2506 data << uint8(ArenaFaction);
2507 data << uint32(DuelTeam);
2508 data << int32(GuildTimeStamp);
2509 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2510 {
2511 for (uint32 i = 0; i < 175; ++i)
2512 {
2513 QuestLog[i].WriteCreate(data, receiver, owner);
2514 }
2515 WriteMapFieldCreate(QuestLogQuestIdToIndex, data, receiver, owner);
2516 data << uint32(QuestSessionQuestLog.size());
2517 }
2518 for (uint32 i = 0; i < 19; ++i)
2519 {
2520 VisibleItems[i].WriteCreate(data, receiver, owner);
2521 }
2522 data << int32(PlayerTitle);
2523 data << int32(FakeInebriation);
2524 data << uint32(VirtualPlayerRealm);
2525 data << uint32(CurrentSpecID);
2527 data << int32(TaxiMountAnimKitID);
2528 for (uint32 i = 0; i < 6; ++i)
2529 {
2530 data << float(AvgItemLevel[i]);
2531 }
2533 data << int32(HonorLevel);
2534 data << int64(LogoutTime);
2535 data << uint32(ArenaCooldowns.size());
2536 for (uint32 i = 0; i < 32; ++i)
2537 {
2538 ForcedReactions[i].WriteCreate(data, receiver, owner);
2539 }
2541 data << int32(OfferedScriptQuestID);
2543 data << uint32(PetNames.size());
2544 CtrOptions->WriteCreate(data, receiver, owner);
2545 data << int32(CovenantID);
2546 data << int32(SoulbindID);
2547 data << *DungeonScore;
2548 LeaverInfo->WriteCreate(data, receiver, owner);
2549 data << *SpectateTarget;
2551 for (uint32 i = 0; i < 16; ++i)
2552 {
2553 data << VisibleEquipableSpells[i];
2554 }
2556 for (uint32 i = 0; i < 19; ++i)
2557 {
2559 }
2560 PersonalTabard->WriteCreate(data, receiver, owner);
2561 NpcAsPlayerInfo->WriteCreate(data, receiver, owner);
2562 for (uint32 i = 0; i < Customizations.size(); ++i)
2563 {
2564 Customizations[i].WriteCreate(data, receiver, owner);
2565 }
2566 for (uint32 i = 0; i < RandomCustomizations.size(); ++i)
2567 {
2568 RandomCustomizations[i].WriteCreate(data, receiver, owner);
2569 }
2570 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2571 {
2572 for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
2573 {
2574 QuestSessionQuestLog[i].WriteCreate(data, receiver, owner);
2575 }
2576 }
2577 for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
2578 {
2579 ArenaCooldowns[i].WriteCreate(data, receiver, owner);
2580 }
2581 for (uint32 i = 0; i < PetNames.size(); ++i)
2582 {
2583 PetNames[i].WriteCreate(data, receiver, owner);
2584 }
2585 for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
2586 {
2587 data << int32(VisualItemReplacements[i]);
2588 }
2589 data.WriteBits(Name->size(), 6);
2590 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2591 {
2593 }
2594 data.WriteBit(HasLevelLink);
2595 data.WriteBit(DeclinedNames.has_value());
2596 data.FlushBits();
2598 if (DeclinedNames.has_value())
2599 {
2600 DeclinedNames->WriteCreate(data, receiver, owner);
2601 }
2602}
2603
2604static constexpr void PlayerDataAppendAllowedFieldsMaskForFlag(PlayerData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
2605{
2606 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2607 allowedMaskForTarget |= std::array<uint32, 11>{ 0x02000022u, 0xFFE00000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000001Fu, 0x00000000u, 0x00000000u, 0x00000000u };
2608}
2609
2610void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
2611{
2612 PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2613}
2614
2616{
2617 Mask allowedMaskForTarget({ 0xFDFFFFDDu, 0x001FFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFE0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000003Fu });
2618 PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2619 changesMask &= allowedMaskForTarget;
2620}
2621
2622void PlayerData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
2623{
2624 Mask allowedMaskForTarget({ 0xFDFFFFDDu, 0x001FFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFE0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000003Fu });
2625 PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2626 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
2627}
2628
2629void PlayerData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Player const* owner, bool ignoreNestedChangesMask) const
2630{
2631 data.WriteBits(changesMask.GetBlocksMask(0), 11);
2632 for (uint32 i = 0; i < 11; ++i)
2633 if (changesMask.GetBlock(i))
2634 data.WriteBits(changesMask.GetBlock(i), 32);
2635
2636 bool noQuestLogChangesMask = data.WriteBit(IsQuestLogChangesMaskSkipped());
2637 if (changesMask[0])
2638 {
2639 if (changesMask[1])
2640 {
2642 }
2643 if (changesMask[2])
2644 {
2645 data.WriteBit(HasLevelLink);
2646 }
2647 if (changesMask[3])
2648 {
2649 if (!ignoreNestedChangesMask)
2651 else
2653 }
2654 if (changesMask[4])
2655 {
2656 if (!ignoreNestedChangesMask)
2658 else
2660 }
2661 if (changesMask[5])
2662 {
2663 if (!ignoreNestedChangesMask)
2665 else
2667 }
2668 if (changesMask[6])
2669 {
2670 if (!ignoreNestedChangesMask)
2672 else
2674 }
2675 if (changesMask[7])
2676 {
2677 if (!ignoreNestedChangesMask)
2679 else
2681 }
2682 if (changesMask[8])
2683 {
2684 if (!ignoreNestedChangesMask)
2686 else
2688 }
2689 }
2690 data.FlushBits();
2691 if (changesMask[0])
2692 {
2693 if (changesMask[3])
2694 {
2695 for (uint32 i = 0; i < Customizations.size(); ++i)
2696 {
2697 if (Customizations.HasChanged(i) || ignoreNestedChangesMask)
2698 {
2699 Customizations[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2700 }
2701 }
2702 }
2703 if (changesMask[4])
2704 {
2705 for (uint32 i = 0; i < RandomCustomizations.size(); ++i)
2706 {
2707 if (RandomCustomizations.HasChanged(i) || ignoreNestedChangesMask)
2708 {
2709 RandomCustomizations[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2710 }
2711 }
2712 }
2713 if (changesMask[5])
2714 {
2715 for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
2716 {
2717 if (QuestSessionQuestLog.HasChanged(i) || ignoreNestedChangesMask)
2718 {
2719 if (noQuestLogChangesMask)
2720 QuestSessionQuestLog[i].WriteCreate(data, receiver, owner);
2721 else
2722 QuestSessionQuestLog[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2723 }
2724 }
2725 }
2726 if (changesMask[6])
2727 {
2728 for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
2729 {
2730 if (ArenaCooldowns.HasChanged(i) || ignoreNestedChangesMask)
2731 {
2732 ArenaCooldowns[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2733 }
2734 }
2735 }
2736 if (changesMask[7])
2737 {
2738 for (uint32 i = 0; i < PetNames.size(); ++i)
2739 {
2740 if (PetNames.HasChanged(i) || ignoreNestedChangesMask)
2741 {
2742 PetNames[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2743 }
2744 }
2745 }
2746 if (changesMask[8])
2747 {
2748 for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
2749 {
2750 if (VisualItemReplacements.HasChanged(i) || ignoreNestedChangesMask)
2751 {
2752 data << int32(VisualItemReplacements[i]);
2753 }
2754 }
2755 }
2756 if (changesMask[9])
2757 {
2758 data << *DuelArbiter;
2759 }
2760 if (changesMask[10])
2761 {
2762 data << *WowAccount;
2763 }
2764 if (changesMask[11])
2765 {
2766 data << *BnetAccount;
2767 }
2768 if (changesMask[12])
2769 {
2770 data << uint64(GuildClubMemberID);
2771 }
2772 if (changesMask[13])
2773 {
2774 data << *LootTargetGUID;
2775 }
2776 if (changesMask[14])
2777 {
2778 data << uint32(PlayerFlags);
2779 }
2780 if (changesMask[15])
2781 {
2782 data << uint32(PlayerFlagsEx);
2783 }
2784 if (changesMask[16])
2785 {
2786 data << uint32(GuildRankID);
2787 }
2788 if (changesMask[17])
2789 {
2790 data << uint32(GuildDeleteDate);
2791 }
2792 if (changesMask[18])
2793 {
2794 data << int32(GuildLevel);
2795 }
2796 if (changesMask[19])
2797 {
2798 data << uint8(NativeSex);
2799 }
2800 if (changesMask[20])
2801 {
2802 data << uint8(Inebriation);
2803 }
2804 if (changesMask[21])
2805 {
2806 data << uint8(PvpTitle);
2807 }
2808 if (changesMask[22])
2809 {
2810 data << uint8(ArenaFaction);
2811 }
2812 if (changesMask[23])
2813 {
2814 data << uint32(DuelTeam);
2815 }
2816 if (changesMask[24])
2817 {
2818 data << int32(GuildTimeStamp);
2819 }
2820 if (changesMask[25])
2821 {
2822 WriteMapFieldUpdate(QuestLogQuestIdToIndex, ignoreNestedChangesMask, data, receiver, owner);
2823 }
2824 if (changesMask[26])
2825 {
2826 data << int32(PlayerTitle);
2827 }
2828 if (changesMask[27])
2829 {
2830 data << int32(FakeInebriation);
2831 }
2832 if (changesMask[28])
2833 {
2834 data << uint32(VirtualPlayerRealm);
2835 }
2836 if (changesMask[29])
2837 {
2838 data << uint32(CurrentSpecID);
2839 }
2840 if (changesMask[30])
2841 {
2843 }
2844 if (changesMask[31])
2845 {
2846 data << int32(TaxiMountAnimKitID);
2847 }
2848 }
2849 if (changesMask[32])
2850 {
2851 if (changesMask[33])
2852 {
2854 }
2855 if (changesMask[34])
2856 {
2857 data << int32(HonorLevel);
2858 }
2859 if (changesMask[35])
2860 {
2861 data << int64(LogoutTime);
2862 }
2863 if (changesMask[37])
2864 {
2866 }
2867 if (changesMask[38])
2868 {
2869 data << int32(OfferedScriptQuestID);
2870 }
2871 if (changesMask[39])
2872 {
2874 }
2875 if (changesMask[40])
2876 {
2877 CtrOptions->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2878 }
2879 if (changesMask[41])
2880 {
2881 data << int32(CovenantID);
2882 }
2883 if (changesMask[42])
2884 {
2885 data << int32(SoulbindID);
2886 }
2887 if (changesMask[43])
2888 {
2889 data << *DungeonScore;
2890 }
2891 if (changesMask[44])
2892 {
2893 LeaverInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2894 }
2895 if (changesMask[45])
2896 {
2897 data << *SpectateTarget;
2898 }
2899 if (changesMask[46])
2900 {
2902 }
2903 if (changesMask[48])
2904 {
2905 PersonalTabard->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2906 }
2907 if (changesMask[49])
2908 {
2909 NpcAsPlayerInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2910 }
2911 if (changesMask[36])
2912 {
2913 data.WriteBits(Name->size(), 6);
2914 }
2915 data.WriteBit(DeclinedNames.has_value());
2916 }
2917 data.FlushBits();
2918 if (changesMask[32])
2919 {
2920 if (changesMask[36])
2921 {
2923 }
2924 if (changesMask[47])
2925 {
2926 if (DeclinedNames.has_value())
2927 {
2928 DeclinedNames->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2929 }
2930 }
2931 }
2932 if (changesMask[50])
2933 {
2934 for (uint32 i = 0; i < 2; ++i)
2935 {
2936 if (changesMask[51 + i])
2937 {
2938 data << uint8(PartyType[i]);
2939 }
2940 }
2941 }
2942 if (changesMask[53])
2943 {
2944 for (uint32 i = 0; i < 175; ++i)
2945 {
2946 if (changesMask[54 + i])
2947 {
2948 if (noQuestLogChangesMask)
2949 QuestLog[i].WriteCreate(data, receiver, owner);
2950 else
2951 QuestLog[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2952 }
2953 }
2954 }
2955 if (changesMask[229])
2956 {
2957 for (uint32 i = 0; i < 19; ++i)
2958 {
2959 if (changesMask[230 + i])
2960 {
2961 VisibleItems[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2962 }
2963 }
2964 }
2965 if (changesMask[249])
2966 {
2967 for (uint32 i = 0; i < 6; ++i)
2968 {
2969 if (changesMask[250 + i])
2970 {
2971 data << float(AvgItemLevel[i]);
2972 }
2973 }
2974 }
2975 if (changesMask[256])
2976 {
2977 for (uint32 i = 0; i < 32; ++i)
2978 {
2979 if (changesMask[257 + i])
2980 {
2981 ForcedReactions[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2982 }
2983 }
2984 }
2985 if (changesMask[289])
2986 {
2987 for (uint32 i = 0; i < 16; ++i)
2988 {
2989 if (changesMask[290 + i])
2990 {
2991 data << VisibleEquipableSpells[i];
2992 }
2993 }
2994 }
2995 if (changesMask[306])
2996 {
2997 for (uint32 i = 0; i < 19; ++i)
2998 {
2999 if (changesMask[307 + i])
3000 {
3002 }
3003 }
3004 }
3005}
3006
3008{
3065}
3066
3067void SkillInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3068{
3069 for (uint32 i = 0; i < 300; ++i)
3070 {
3071 data << uint16(SkillLineID[i]);
3072 data << uint16(SkillStep[i]);
3073 data << uint16(SkillRank[i]);
3074 data << uint16(SkillStartingRank[i]);
3075 data << uint16(SkillMaxRank[i]);
3076 data << int16(SkillTempBonus[i]);
3077 data << uint16(SkillPermBonus[i]);
3078 }
3079}
3080
3081void SkillInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3082{
3083 Mask changesMask = _changesMask;
3084 if (ignoreChangesMask)
3085 changesMask.SetAll();
3086
3087 for (uint32 i = 0; i < 2; ++i)
3088 data << uint32(changesMask.GetBlocksMask(i));
3089 data.WriteBits(changesMask.GetBlocksMask(2), 2);
3090 for (uint32 i = 0; i < 66; ++i)
3091 if (changesMask.GetBlock(i))
3092 data.WriteBits(changesMask.GetBlock(i), 32);
3093
3094 data.FlushBits();
3095 if (changesMask[0])
3096 {
3097 for (uint32 i = 0; i < 300; ++i)
3098 {
3099 if (changesMask[1 + i])
3100 {
3101 data << uint16(SkillLineID[i]);
3102 }
3103 if (changesMask[301 + i])
3104 {
3105 data << uint16(SkillStep[i]);
3106 }
3107 if (changesMask[601 + i])
3108 {
3109 data << uint16(SkillRank[i]);
3110 }
3111 if (changesMask[901 + i])
3112 {
3113 data << uint16(SkillStartingRank[i]);
3114 }
3115 if (changesMask[1201 + i])
3116 {
3117 data << uint16(SkillMaxRank[i]);
3118 }
3119 if (changesMask[1501 + i])
3120 {
3121 data << int16(SkillTempBonus[i]);
3122 }
3123 if (changesMask[1801 + i])
3124 {
3125 data << uint16(SkillPermBonus[i]);
3126 }
3127 }
3128 }
3129}
3130
3142
3143void BitVector::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3144{
3145 data << uint32(Values.size());
3146 for (uint32 i = 0; i < Values.size(); ++i)
3147 {
3148 data << uint64(Values[i]);
3149 }
3150}
3151
3152void BitVector::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3153{
3154 Mask changesMask = _changesMask;
3155 if (ignoreChangesMask)
3156 changesMask.SetAll();
3157
3158 data.WriteBits(changesMask.GetBlock(0), 2);
3159
3160 if (changesMask[0])
3161 {
3162 if (changesMask[1])
3163 {
3164 if (!ignoreChangesMask)
3165 Values.WriteUpdateMask(data);
3166 else
3168 }
3169 }
3170 data.FlushBits();
3171 if (changesMask[0])
3172 {
3173 if (changesMask[1])
3174 {
3175 for (uint32 i = 0; i < Values.size(); ++i)
3176 {
3177 if (Values.HasChanged(i) || ignoreChangesMask)
3178 {
3179 data << uint64(Values[i]);
3180 }
3181 }
3182 }
3183 }
3184}
3185
3191
3192void BitVectors::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3193{
3194 for (uint32 i = 0; i < 14; ++i)
3195 {
3196 Values[i].WriteCreate(data, receiver, owner);
3197 }
3198}
3199
3200void BitVectors::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3201{
3202 Mask changesMask = _changesMask;
3203 if (ignoreChangesMask)
3204 changesMask.SetAll();
3205
3206 data.WriteBits(changesMask.GetBlocksMask(0), 1);
3207 if (changesMask.GetBlock(0))
3208 data.WriteBits(changesMask.GetBlock(0), 32);
3209
3210 data.FlushBits();
3211 if (changesMask[0])
3212 {
3213 for (uint32 i = 0; i < 14; ++i)
3214 {
3215 if (changesMask[1 + i])
3216 {
3217 Values[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
3218 }
3219 }
3220 }
3221}
3222
3228
3229void PlayerDataElement::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3230{
3231 data << uint32(Type);
3232 if (Type == 1)
3233 {
3234 data << float(FloatValue);
3235 }
3236 if (Type == 0)
3237 {
3238 data << int64(Int64Value);
3239 }
3240}
3241
3243{
3244 return Type == right.Type
3245 && FloatValue == right.FloatValue
3246 && Int64Value == right.Int64Value;
3247}
3248
3249void RestInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3250{
3251 data << uint32(Threshold);
3252 data << uint8(StateID);
3253}
3254
3255void RestInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3256{
3257 Mask changesMask = _changesMask;
3258 if (ignoreChangesMask)
3259 changesMask.SetAll();
3260
3261 data.WriteBits(changesMask.GetBlock(0), 3);
3262
3263 data.FlushBits();
3264 if (changesMask[0])
3265 {
3266 if (changesMask[1])
3267 {
3268 data << uint32(Threshold);
3269 }
3270 if (changesMask[2])
3271 {
3272 data << uint8(StateID);
3273 }
3274 }
3275}
3276
3283
3284void PVPInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3285{
3286 data << int8(Bracket);
3287 data << int32(PvpRatingID);
3288 data << uint32(WeeklyPlayed);
3289 data << uint32(WeeklyWon);
3290 data << uint32(SeasonPlayed);
3291 data << uint32(SeasonWon);
3292 data << uint32(Rating);
3293 data << uint32(WeeklyBestRating);
3294 data << uint32(LastWeeksBestRating);
3295 data << uint32(PvpTierID);
3297 data << uint32(SeasonBestRating);
3298 data << uint32(SeasonBestTier);
3299 data << uint32(WeeklyRoundsPlayed);
3300 data << uint32(WeeklyRoundsWon);
3301 data << uint32(SeasonRoundsPlayed);
3302 data << uint32(SeasonRoundsWon);
3303 data.WriteBit(Disqualified);
3304 data.FlushBits();
3305}
3306
3307void PVPInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3308{
3309 Mask changesMask = _changesMask;
3310 if (ignoreChangesMask)
3311 changesMask.SetAll();
3312
3313 data.WriteBits(changesMask.GetBlock(0), 19);
3314
3315 if (changesMask[0])
3316 {
3317 if (changesMask[1])
3318 {
3319 data.WriteBit(Disqualified);
3320 }
3321 }
3322 data.FlushBits();
3323 if (changesMask[0])
3324 {
3325 if (changesMask[2])
3326 {
3327 data << int8(Bracket);
3328 }
3329 if (changesMask[3])
3330 {
3331 data << int32(PvpRatingID);
3332 }
3333 if (changesMask[4])
3334 {
3335 data << uint32(WeeklyPlayed);
3336 }
3337 if (changesMask[5])
3338 {
3339 data << uint32(WeeklyWon);
3340 }
3341 if (changesMask[6])
3342 {
3343 data << uint32(SeasonPlayed);
3344 }
3345 if (changesMask[7])
3346 {
3347 data << uint32(SeasonWon);
3348 }
3349 if (changesMask[8])
3350 {
3351 data << uint32(Rating);
3352 }
3353 if (changesMask[9])
3354 {
3355 data << uint32(WeeklyBestRating);
3356 }
3357 if (changesMask[10])
3358 {
3359 data << uint32(LastWeeksBestRating);
3360 }
3361 if (changesMask[11])
3362 {
3363 data << uint32(PvpTierID);
3364 }
3365 if (changesMask[12])
3366 {
3368 }
3369 if (changesMask[13])
3370 {
3371 data << uint32(SeasonBestRating);
3372 }
3373 if (changesMask[14])
3374 {
3375 data << uint32(SeasonBestTier);
3376 }
3377 if (changesMask[15])
3378 {
3379 data << uint32(WeeklyRoundsPlayed);
3380 }
3381 if (changesMask[16])
3382 {
3383 data << uint32(WeeklyRoundsWon);
3384 }
3385 if (changesMask[17])
3386 {
3387 data << uint32(SeasonRoundsPlayed);
3388 }
3389 if (changesMask[18])
3390 {
3391 data << uint32(SeasonRoundsWon);
3392 }
3393 }
3394}
3395
3418
3419void Research::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3420{
3421 data << int16(ResearchProjectID);
3422}
3423
3424bool Research::operator==(Research const& right) const
3425{
3426 return ResearchProjectID == right.ResearchProjectID;
3427}
3428
3429void CharacterRestriction::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3430{
3431 data << int32(Field_0);
3432 data << int32(Field_4);
3433 data << int32(Field_8);
3434 data.WriteBits(Type, 5);
3435 data.FlushBits();
3436}
3437
3439{
3440 return Field_0 == right.Field_0
3441 && Field_4 == right.Field_4
3442 && Field_8 == right.Field_8
3443 && Type == right.Type;
3444}
3445
3446void SpellPctModByLabel::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3447{
3448 data << int32(ModIndex);
3449 data << float(ModifierValue);
3450 data << int32(LabelID);
3451}
3452
3454{
3455 return ModIndex == right.ModIndex
3456 && ModifierValue == right.ModifierValue
3457 && LabelID == right.LabelID;
3458}
3459
3460void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3461{
3462 data << int32(ModIndex);
3463 data << int32(ModifierValue);
3464 data << int32(LabelID);
3465}
3466
3468{
3469 return ModIndex == right.ModIndex
3470 && ModifierValue == right.ModifierValue
3471 && LabelID == right.LabelID;
3472}
3473
3474void SpellPctPVPModByLabel::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3475{
3476 data << int32(PvpModIndex);
3477 data << float(ModifierValue);
3478 data << int32(LabelID);
3479}
3480
3482{
3483 return PvpModIndex == right.PvpModIndex
3484 && ModifierValue == right.ModifierValue
3485 && LabelID == right.LabelID;
3486}
3487
3488void SpellFlatPVPModByLabel::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3489{
3490 data << int32(PvpModIndex);
3491 data << int32(ModifierValue);
3492 data << int32(LabelID);
3493}
3494
3496{
3497 return PvpModIndex == right.PvpModIndex
3498 && ModifierValue == right.ModifierValue
3499 && LabelID == right.LabelID;
3500}
3501
3502void CompletedProject::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3503{
3504 data << int64(FirstCompleted);
3505 data << uint32(ProjectID);
3506 data << uint32(CompletionCount);
3507}
3508
3509void CompletedProject::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3510{
3511 Mask changesMask = _changesMask;
3512 if (ignoreChangesMask)
3513 changesMask.SetAll();
3514
3515 data.WriteBits(changesMask.GetBlock(0), 4);
3516
3517 data.FlushBits();
3518 if (changesMask[0])
3519 {
3520 if (changesMask[1])
3521 {
3522 data << int64(FirstCompleted);
3523 }
3524 if (changesMask[2])
3525 {
3526 data << uint32(ProjectID);
3527 }
3528 if (changesMask[3])
3529 {
3530 data << uint32(CompletionCount);
3531 }
3532 }
3533}
3534
3542
3543void ResearchHistory::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3544{
3545 data << uint32(CompletedProjects.size());
3546 for (uint32 i = 0; i < CompletedProjects.size(); ++i)
3547 {
3548 CompletedProjects[i].WriteCreate(data, receiver, owner);
3549 }
3550}
3551
3552void ResearchHistory::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3553{
3554 Mask changesMask = _changesMask;
3555 if (ignoreChangesMask)
3556 changesMask.SetAll();
3557
3558 data.WriteBits(changesMask.GetBlock(0), 2);
3559
3560 if (changesMask[0])
3561 {
3562 if (changesMask[1])
3563 {
3564 if (!ignoreChangesMask)
3566 else
3568 }
3569 }
3570 data.FlushBits();
3571 if (changesMask[0])
3572 {
3573 if (changesMask[1])
3574 {
3575 for (uint32 i = 0; i < CompletedProjects.size(); ++i)
3576 {
3577 if (CompletedProjects.HasChanged(i) || ignoreChangesMask)
3578 {
3579 CompletedProjects[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
3580 }
3581 }
3582 }
3583 }
3584}
3585
3591
3592void MawPower::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3593{
3594 data << int32(SpellID);
3595 data << int32(MawPowerID);
3596 data << int32(Stacks);
3597}
3598
3599bool MawPower::operator==(MawPower const& right) const
3600{
3601 return SpellID == right.SpellID
3602 && MawPowerID == right.MawPowerID
3603 && Stacks == right.Stacks;
3604}
3605
3606void MultiFloorExplore::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3607{
3608 data << uint32(WorldMapOverlayIDs.size());
3609 for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i)
3610 {
3611 data << int32(WorldMapOverlayIDs[i]);
3612 }
3613}
3614
3616{
3617 return WorldMapOverlayIDs == right.WorldMapOverlayIDs;
3618}
3619
3620void RecipeProgressionInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3621{
3623 data << uint16(Experience);
3624}
3625
3631
3632void DiscordPlayerInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3633{
3634 data.WriteBits(AccessToken.size() + 1, 24);
3635 data << uint64(DiscordUserID);
3636 data << uint8(AccountType);
3637 data << uint64(GuildLobbyID);
3638 data << uint8(GuildSettings);
3639 data << uint8(DisplayNameType);
3641}
3642
3644{
3645 return DiscordUserID == right.DiscordUserID
3646 && AccountType == right.AccountType
3647 && GuildLobbyID == right.GuildLobbyID
3648 && GuildSettings == right.GuildSettings
3650 && AccessToken == right.AccessToken;
3651}
3652
3653void QuestSession::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3654{
3655 data << *Owner;
3656 QuestCompleted->WriteCreate(data, receiver, owner);
3657}
3658
3659void QuestSession::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3660{
3661 Mask changesMask = _changesMask;
3662 if (ignoreChangesMask)
3663 changesMask.SetAll();
3664
3665 data.WriteBits(changesMask.GetBlock(0), 3);
3666
3667 data.FlushBits();
3668 if (changesMask[0])
3669 {
3670 if (changesMask[1])
3671 {
3672 data << *Owner;
3673 }
3674 if (changesMask[2])
3675 {
3676 QuestCompleted->WriteUpdate(ignoreChangesMask, data, receiver, owner);
3677 }
3678 }
3679}
3680
3687
3688void ReplayedQuest::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3689{
3690 data << int32(QuestID);
3691 data << uint32(ReplayTime);
3692}
3693
3694void ReplayedQuest::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3695{
3696 Mask changesMask = _changesMask;
3697 if (ignoreChangesMask)
3698 changesMask.SetAll();
3699
3700 data.WriteBits(changesMask.GetBlock(0), 3);
3701
3702 data.FlushBits();
3703 if (changesMask[0])
3704 {
3705 if (changesMask[1])
3706 {
3707 data << int32(QuestID);
3708 }
3709 if (changesMask[2])
3710 {
3711 data << uint32(ReplayTime);
3712 }
3713 }
3714}
3715
3722
3723void LevelLinkInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3724{
3725 data << *TargetGUID;
3726 data << int32(Level);
3727}
3728
3729void LevelLinkInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3730{
3731 Mask changesMask = _changesMask;
3732 if (ignoreChangesMask)
3733 changesMask.SetAll();
3734
3735 data.WriteBits(changesMask.GetBlock(0), 3);
3736
3737 data.FlushBits();
3738 if (changesMask[0])
3739 {
3740 if (changesMask[1])
3741 {
3742 data << *TargetGUID;
3743 }
3744 if (changesMask[2])
3745 {
3746 data << int32(Level);
3747 }
3748 }
3749}
3750
3757
3758void TraitEntry::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3759{
3760 data << int32(TraitNodeID);
3761 data << int32(TraitNodeEntryID);
3762 data << int32(Rank);
3763 data << int32(GrantedRanks);
3764 data << int32(BonusRanks);
3765}
3766
3767bool TraitEntry::operator==(TraitEntry const& right) const
3768{
3769 return TraitNodeID == right.TraitNodeID
3771 && Rank == right.Rank
3772 && GrantedRanks == right.GrantedRanks
3773 && BonusRanks == right.BonusRanks;
3774}
3775
3776void TraitSubTreeCache::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3777{
3778 data << int32(TraitSubTreeID);
3779 data << uint32(Entries.size());
3780 for (uint32 i = 0; i < Entries.size(); ++i)
3781 {
3782 Entries[i].WriteCreate(data, receiver, owner);
3783 }
3784 data.WriteBits(Active, 1);
3785 data.FlushBits();
3786}
3787
3789{
3790 return Entries == right.Entries
3791 && TraitSubTreeID == right.TraitSubTreeID
3792 && Active == right.Active;
3793}
3794
3795void TraitConfig::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3796{
3797 data << int32(ID);
3798 data << int32(Type);
3799 data << uint32(Entries.size());
3800 data << uint32(SubTrees.size());
3801 if (Type == 2)
3802 {
3803 data << int32(SkillLineID);
3804 }
3805 if (Type == 1)
3806 {
3807 data << int32(ChrSpecializationID);
3808 data << int32(CombatConfigFlags);
3809 data << int32(LocalIdentifier);
3810 }
3811 if (Type == 3)
3812 {
3813 data << int32(TraitSystemID);
3814 data << int32(VariationID);
3815 }
3816 for (uint32 i = 0; i < Entries.size(); ++i)
3817 {
3818 Entries[i].WriteCreate(data, receiver, owner);
3819 }
3820 for (uint32 i = 0; i < SubTrees.size(); ++i)
3821 {
3822 SubTrees[i].WriteCreate(data, receiver, owner);
3823 }
3824 data.WriteBits(Name->size(), 9);
3825 data.FlushBits();
3827}
3828
3829void TraitConfig::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3830{
3831 Mask changesMask = _changesMask;
3832 if (ignoreChangesMask)
3833 changesMask.SetAll();
3834
3835 data.WriteBits(changesMask.GetBlock(0), 15);
3836
3837 if (changesMask[0])
3838 {
3839 if (changesMask[1])
3840 {
3841 if (!ignoreChangesMask)
3842 Entries.WriteUpdateMask(data);
3843 else
3845 }
3846 if (changesMask[2])
3847 {
3848 if (!ignoreChangesMask)
3850 else
3852 }
3853 }
3854 data.FlushBits();
3855 if (changesMask[0])
3856 {
3857 if (changesMask[1])
3858 {
3859 for (uint32 i = 0; i < Entries.size(); ++i)
3860 {
3861 if (Entries.HasChanged(i) || ignoreChangesMask)
3862 {
3863 Entries[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
3864 }
3865 }
3866 }
3867 if (changesMask[2])
3868 {
3869 for (uint32 i = 0; i < SubTrees.size(); ++i)
3870 {
3871 if (SubTrees.HasChanged(i) || ignoreChangesMask)
3872 {
3873 SubTrees[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
3874 }
3875 }
3876 }
3877 if (changesMask[3])
3878 {
3879 data << int32(ID);
3880 }
3881 }
3882 if (changesMask[4])
3883 {
3884 if (changesMask[6])
3885 {
3886 data << int32(Type);
3887 }
3888 if (changesMask[7])
3889 {
3890 if (Type == 2)
3891 {
3892 data << int32(SkillLineID);
3893 }
3894 }
3895 }
3896 if (changesMask[8])
3897 {
3898 if (changesMask[9])
3899 {
3900 if (Type == 1)
3901 {
3902 data << int32(ChrSpecializationID);
3903 }
3904 }
3905 if (changesMask[10])
3906 {
3907 if (Type == 1)
3908 {
3909 data << int32(CombatConfigFlags);
3910 }
3911 }
3912 if (changesMask[11])
3913 {
3914 if (Type == 1)
3915 {
3916 data << int32(LocalIdentifier);
3917 }
3918 }
3919 }
3920 if (changesMask[12])
3921 {
3922 if (changesMask[13])
3923 {
3924 if (Type == 3)
3925 {
3926 data << int32(TraitSystemID);
3927 }
3928 }
3929 if (changesMask[14])
3930 {
3931 if (Type == 3)
3932 {
3933 data << int32(VariationID);
3934 }
3935 }
3936 }
3937 if (changesMask[4])
3938 {
3939 if (changesMask[5])
3940 {
3941 data.WriteBits(Name->size(), 9);
3942 }
3943 }
3944 data.FlushBits();
3945 if (changesMask[4])
3946 {
3947 if (changesMask[5])
3948 {
3950 }
3951 }
3952}
3953
3969
3970void CraftingReagentBase::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3971{
3972 data.WriteBit(ItemID.has_value());
3973 data.WriteBit(CurrencyID.has_value());
3974 data.FlushBits();
3975 if (ItemID.has_value())
3976 {
3977 data << int32(*ItemID);
3978 }
3979 if (CurrencyID.has_value())
3980 {
3981 data << int32(*CurrencyID);
3982 }
3983}
3984
3986{
3987 return ItemID == right.ItemID
3988 && CurrencyID == right.CurrencyID;
3989}
3990
3991void CraftingOrderItem::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3992{
3993 data << uint64(OrderItemID);
3994 data << int32(OrderItemType);
3995 data << *ItemGUID;
3996 data << *OwnerGUID;
3997 Reagent->WriteCreate(data, receiver, owner);
3998 data << uint32(Quantity);
3999 data << int32(ReagentQuality);
4000 data << uint32(Flags);
4002 data.FlushBits();
4004 {
4005 data << uint8(*DataSlotIndex);
4006 }
4007}
4008
4009void CraftingOrderItem::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4010{
4011 Mask changesMask = _changesMask;
4012 if (ignoreChangesMask)
4013 changesMask.SetAll();
4014
4015 data.WriteBits(changesMask.GetBlock(0), 12);
4016
4017 data.FlushBits();
4018 if (changesMask[0])
4019 {
4020 if (changesMask[1])
4021 {
4022 data << uint64(OrderItemID);
4023 }
4024 if (changesMask[2])
4025 {
4026 data << int32(OrderItemType);
4027 }
4028 if (changesMask[3])
4029 {
4030 data << *ItemGUID;
4031 }
4032 }
4033 if (changesMask[4])
4034 {
4035 if (changesMask[5])
4036 {
4037 data << *OwnerGUID;
4038 }
4039 if (changesMask[6])
4040 {
4041 Reagent->WriteUpdate(ignoreChangesMask, data, receiver, owner);
4042 }
4043 if (changesMask[7])
4044 {
4045 data << uint32(Quantity);
4046 }
4047 }
4048 if (changesMask[8])
4049 {
4050 if (changesMask[9])
4051 {
4052 data << int32(ReagentQuality);
4053 }
4054 if (changesMask[11])
4055 {
4056 data << uint32(Flags);
4057 }
4059 }
4060 data.FlushBits();
4061 if (changesMask[8])
4062 {
4063 if (changesMask[10])
4064 {
4066 {
4067 data << uint8(*DataSlotIndex);
4068 }
4069 }
4070 }
4071}
4072
4086
4087void CraftingOrderCustomer::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4088{
4089 data << *CustomerGUID;
4090 data << *CustomerAccountGUID;
4091}
4092
4093void CraftingOrderCustomer::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4094{
4095 Mask changesMask = _changesMask;
4096 if (ignoreChangesMask)
4097 changesMask.SetAll();
4098
4099 data.WriteBits(changesMask.GetBlock(0), 2);
4100
4101 data.FlushBits();
4102 if (changesMask[0])
4103 {
4104 data << *CustomerGUID;
4105 }
4106 if (changesMask[1])
4107 {
4108 data << *CustomerAccountGUID;
4109 }
4110}
4111
4118
4119void CraftingOrderNpcCustomer::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4120{
4122 data << int32(RealmAddress);
4123}
4124
4125void CraftingOrderNpcCustomer::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4126{
4127 Mask changesMask = _changesMask;
4128 if (ignoreChangesMask)
4129 changesMask.SetAll();
4130
4131 data.WriteBits(changesMask.GetBlock(0), 2);
4132
4133 data.FlushBits();
4134 if (changesMask[0])
4135 {
4137 }
4138 if (changesMask[1])
4139 {
4140 data << int32(RealmAddress);
4141 }
4142}
4143
4150
4151void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4152{
4153 data << int32(Field_0);
4154 data << uint64(OrderID);
4155 data << int32(SkillLineAbilityID);
4156 data << int32(OrderState);
4157 data << uint8(OrderType);
4158 data << uint8(MinQuality);
4159 data << int64(ExpirationTime);
4160 data << int64(ClaimEndTime);
4161 data << int64(TipAmount);
4162 data << int64(ConsortiumCut);
4163 data << uint32(Flags);
4164 data << *CrafterGUID;
4165 data << *PersonalCrafterGUID;
4167 data << int32(NpcTreasureID);
4168 data << uint32(Reagents.size());
4169 for (uint32 i = 0; i < Reagents.size(); ++i)
4170 {
4171 Reagents[i].WriteCreate(data, receiver, owner);
4172 }
4173 data.WriteBits(CustomerNotes->size(), 10);
4174 data.WriteBit(Customer.has_value());
4178 data.FlushBits();
4180 if (Customer.has_value())
4181 {
4182 Customer->WriteCreate(data, receiver, owner);
4183 }
4184 if (NpcCustomer.has_value())
4185 {
4186 NpcCustomer->WriteCreate(data, receiver, owner);
4187 }
4188 if (OutputItem.has_value())
4189 {
4190 OutputItem->WriteCreate(data, receiver, owner);
4191 }
4193 {
4194 data << *OutputItemData;
4195 }
4196}
4197
4198void CraftingOrderData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4199{
4200 Mask changesMask = _changesMask;
4201 if (ignoreChangesMask)
4202 changesMask.SetAll();
4203
4204 data.WriteBits(changesMask.GetBlock(0), 26);
4205
4206 if (changesMask[0])
4207 {
4208 if (changesMask[1])
4209 {
4210 if (!ignoreChangesMask)
4212 else
4214 }
4215 }
4216 data.FlushBits();
4217 if (changesMask[0])
4218 {
4219 if (changesMask[1])
4220 {
4221 for (uint32 i = 0; i < Reagents.size(); ++i)
4222 {
4223 if (Reagents.HasChanged(i) || ignoreChangesMask)
4224 {
4225 Reagents[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
4226 }
4227 }
4228 }
4229 if (changesMask[2])
4230 {
4231 data << int32(Field_0);
4232 }
4233 if (changesMask[3])
4234 {
4235 data << uint64(OrderID);
4236 }
4237 if (changesMask[4])
4238 {
4239 data << int32(SkillLineAbilityID);
4240 }
4241 if (changesMask[5])
4242 {
4243 data << int32(OrderState);
4244 }
4245 }
4246 if (changesMask[6])
4247 {
4248 if (changesMask[7])
4249 {
4250 data << uint8(OrderType);
4251 }
4252 if (changesMask[8])
4253 {
4254 data << uint8(MinQuality);
4255 }
4256 if (changesMask[9])
4257 {
4258 data << int64(ExpirationTime);
4259 }
4260 if (changesMask[10])
4261 {
4262 data << int64(ClaimEndTime);
4263 }
4264 if (changesMask[11])
4265 {
4266 data << int64(TipAmount);
4267 }
4268 }
4269 if (changesMask[12])
4270 {
4271 if (changesMask[13])
4272 {
4273 data << int64(ConsortiumCut);
4274 }
4275 if (changesMask[14])
4276 {
4277 data << uint32(Flags);
4278 }
4279 if (changesMask[15])
4280 {
4281 data << *CrafterGUID;
4282 }
4283 if (changesMask[16])
4284 {
4285 data << *PersonalCrafterGUID;
4286 }
4287 if (changesMask[17])
4288 {
4290 }
4291 }
4292 if (changesMask[18])
4293 {
4294 if (changesMask[19])
4295 {
4296 data << int32(NpcTreasureID);
4297 }
4298 if (changesMask[20])
4299 {
4300 data.WriteBits(CustomerNotes->size(), 10);
4301 }
4302 data.WriteBit(Customer.has_value());
4305 }
4306 if (changesMask[24])
4307 {
4309 }
4310 data.FlushBits();
4311 if (changesMask[18])
4312 {
4313 if (changesMask[20])
4314 {
4316 }
4317 if (changesMask[21])
4318 {
4319 if (Customer.has_value())
4320 {
4321 Customer->WriteUpdate(ignoreChangesMask, data, receiver, owner);
4322 }
4323 }
4324 if (changesMask[22])
4325 {
4326 if (NpcCustomer.has_value())
4327 {
4328 NpcCustomer->WriteUpdate(ignoreChangesMask, data, receiver, owner);
4329 }
4330 }
4331 if (changesMask[23])
4332 {
4333 if (OutputItem.has_value())
4334 {
4335 OutputItem->WriteUpdate(ignoreChangesMask, data, receiver, owner);
4336 }
4337 }
4338 }
4339 if (changesMask[24])
4340 {
4341 if (changesMask[25])
4342 {
4344 {
4345 data << *OutputItemData;
4346 }
4347 }
4348 }
4349}
4350
4376
4377void CraftingOrder::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4378{
4379 Data->WriteCreate(data, receiver, owner);
4381 data.WriteBits(Enchantments.size(), 4);
4382 data.WriteBits(Gems.size(), 2);
4383 data.FlushBits();
4385 {
4386 data << *RecraftItemInfo;
4387 }
4388 for (uint32 i = 0; i < Enchantments.size(); ++i)
4389 {
4390 data << Enchantments[i];
4391 }
4392 for (uint32 i = 0; i < Gems.size(); ++i)
4393 {
4394 data << Gems[i];
4395 }
4396 data.FlushBits();
4397}
4398
4399void CraftingOrder::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4400{
4401 Mask changesMask = _changesMask;
4402 if (ignoreChangesMask)
4403 changesMask.SetAll();
4404
4405 data.WriteBits(changesMask.GetBlock(0), 4);
4406
4407 if (changesMask[0])
4408 {
4409 if (!ignoreChangesMask)
4411 else
4413 }
4414 if (changesMask[1])
4415 {
4416 if (!ignoreChangesMask)
4417 Gems.WriteUpdateMask(data, 2);
4418 else
4420 }
4421 data.FlushBits();
4422 if (changesMask[0])
4423 {
4424 for (uint32 i = 0; i < Enchantments.size(); ++i)
4425 {
4426 if (Enchantments.HasChanged(i) || ignoreChangesMask)
4427 {
4428 data << Enchantments[i];
4429 }
4430 }
4431 }
4432 if (changesMask[1])
4433 {
4434 for (uint32 i = 0; i < Gems.size(); ++i)
4435 {
4436 if (Gems.HasChanged(i) || ignoreChangesMask)
4437 {
4438 data << Gems[i];
4439 }
4440 }
4441 }
4442 if (changesMask[2])
4443 {
4444 Data->WriteUpdate(ignoreChangesMask, data, receiver, owner);
4445 }
4447 data.FlushBits();
4448 if (changesMask[3])
4449 {
4451 {
4452 data << *RecraftItemInfo;
4453 }
4454 }
4455}
4456
4465
4466void PersonalCraftingOrderCount::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4467{
4468 data << int32(ProfessionID);
4469 data << uint32(Count);
4470}
4471
4472void PersonalCraftingOrderCount::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4473{
4474 Mask changesMask = _changesMask;
4475 if (ignoreChangesMask)
4476 changesMask.SetAll();
4477
4478 data.WriteBits(changesMask.GetBlock(0), 2);
4479
4480 data.FlushBits();
4481 if (changesMask[0])
4482 {
4483 data << int32(ProfessionID);
4484 }
4485 if (changesMask[1])
4486 {
4487 data << uint32(Count);
4488 }
4489}
4490
4497
4498void NPCCraftingOrderInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4499{
4500 data << uint64(OrderID);
4502 data << int32(NpcTreasureID);
4504}
4505
4506void NPCCraftingOrderInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4507{
4508 Mask changesMask = _changesMask;
4509 if (ignoreChangesMask)
4510 changesMask.SetAll();
4511
4512 data.WriteBits(changesMask.GetBlock(0), 4);
4513
4514 data.FlushBits();
4515 if (changesMask[0])
4516 {
4517 data << uint64(OrderID);
4518 }
4519 if (changesMask[1])
4520 {
4522 }
4523 if (changesMask[2])
4524 {
4525 data << int32(NpcTreasureID);
4526 }
4527 if (changesMask[3])
4528 {
4530 }
4531}
4532
4541
4542void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4543{
4544 data << int32(SpellCategoryID);
4545 data << int32(ModCooldown);
4546}
4547
4549{
4550 return SpellCategoryID == right.SpellCategoryID
4551 && ModCooldown == right.ModCooldown;
4552}
4553
4554void WeeklySpellUse::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4555{
4556 data << int32(SpellCategoryID);
4557 data << uint8(Uses);
4558}
4559
4561{
4562 return SpellCategoryID == right.SpellCategoryID
4563 && Uses == right.Uses;
4564}
4565
4566void StablePetInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4567{
4568 data << uint32(PetSlot);
4569 data << uint32(PetNumber);
4570 data << uint32(CreatureID);
4571 data << uint32(DisplayID);
4572 data << uint32(ExperienceLevel);
4573 data << uint8(PetFlags);
4574 data << uint32(Specialization);
4575 data.WriteBits(Name->size(), 8);
4576 data.FlushBits();
4578}
4579
4580void StablePetInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4581{
4582 Mask changesMask = _changesMask;
4583 if (ignoreChangesMask)
4584 changesMask.SetAll();
4585
4586 data.WriteBits(changesMask.GetBlock(0), 9);
4587
4588 data.FlushBits();
4589 if (changesMask[0])
4590 {
4591 if (changesMask[1])
4592 {
4593 data << uint32(PetSlot);
4594 }
4595 if (changesMask[2])
4596 {
4597 data << uint32(PetNumber);
4598 }
4599 if (changesMask[3])
4600 {
4601 data << uint32(CreatureID);
4602 }
4603 if (changesMask[4])
4604 {
4605 data << uint32(DisplayID);
4606 }
4607 if (changesMask[5])
4608 {
4609 data << uint32(ExperienceLevel);
4610 }
4611 if (changesMask[7])
4612 {
4613 data << uint8(PetFlags);
4614 }
4615 if (changesMask[8])
4616 {
4617 data << uint32(Specialization);
4618 }
4619 if (changesMask[6])
4620 {
4621 data.WriteBits(Name->size(), 8);
4622 }
4623 }
4624 data.FlushBits();
4625 if (changesMask[0])
4626 {
4627 if (changesMask[6])
4628 {
4630 }
4631 }
4632}
4633
4646
4647void StableInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4648{
4649 data << uint32(Pets.size());
4650 data << *StableMaster;
4651 for (uint32 i = 0; i < Pets.size(); ++i)
4652 {
4653 Pets[i].WriteCreate(data, receiver, owner);
4654 }
4655}
4656
4657void StableInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4658{
4659 Mask changesMask = _changesMask;
4660 if (ignoreChangesMask)
4661 changesMask.SetAll();
4662
4663 data.WriteBits(changesMask.GetBlock(0), 3);
4664
4665 if (changesMask[0])
4666 {
4667 if (changesMask[1])
4668 {
4669 if (!ignoreChangesMask)
4670 Pets.WriteUpdateMask(data);
4671 else
4673 }
4674 }
4675 data.FlushBits();
4676 if (changesMask[0])
4677 {
4678 if (changesMask[1])
4679 {
4680 for (uint32 i = 0; i < Pets.size(); ++i)
4681 {
4682 if (Pets.HasChanged(i) || ignoreChangesMask)
4683 {
4684 Pets[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
4685 }
4686 }
4687 }
4688 if (changesMask[2])
4689 {
4690 data << *StableMaster;
4691 }
4692 }
4693}
4694
4701
4702void CollectableSourceTrackedData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4703{
4704 data << int32(TargetType);
4705 data << int32(TargetID);
4707}
4708
4709void CollectableSourceTrackedData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4710{
4711 Mask changesMask = _changesMask;
4712 if (ignoreChangesMask)
4713 changesMask.SetAll();
4714
4715 data.WriteBits(changesMask.GetBlock(0), 4);
4716
4717 data.FlushBits();
4718 if (changesMask[0])
4719 {
4720 if (changesMask[1])
4721 {
4722 data << int32(TargetType);
4723 }
4724 if (changesMask[2])
4725 {
4726 data << int32(TargetID);
4727 }
4728 if (changesMask[3])
4729 {
4731 }
4732 }
4733}
4734
4742
4743void BankTabSettings::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4744{
4745 data.WriteBits(Name->size(), 7);
4746 data.WriteBits(Icon->size(), 9);
4747 data.WriteBits(Description->size(), 14);
4748 data << int32(DepositFlags);
4752}
4753
4754void BankTabSettings::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4755{
4756 Mask changesMask = _changesMask;
4757 if (ignoreChangesMask)
4758 changesMask.SetAll();
4759
4760 data.WriteBits(changesMask.GetBlock(0), 4);
4761
4762 if (changesMask[0])
4763 {
4764 data.WriteBits(Name->size(), 7);
4765 }
4766 if (changesMask[1])
4767 {
4768 data.WriteBits(Icon->size(), 9);
4769 }
4770 if (changesMask[2])
4771 {
4772 data.WriteBits(Description->size(), 14);
4773 }
4774 data.FlushBits();
4775 if (changesMask[3])
4776 {
4777 data << int32(DepositFlags);
4778 }
4779 if (changesMask[0])
4780 {
4782 }
4783 if (changesMask[1])
4784 {
4786 }
4787 if (changesMask[2])
4788 {
4790 }
4791}
4792
4801
4802void WalkInData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4803{
4804 data << int32(MapID);
4805 data << int64(InstanceID);
4806 data << WalkInPartyGUID;
4808 data.FlushBits();
4809}
4810
4811bool WalkInData::operator==(WalkInData const& right) const
4812{
4813 return MapID == right.MapID
4814 && InstanceID == right.InstanceID
4816 && WalkInPartyGUID == right.WalkInPartyGUID;
4817}
4818
4819void DelveData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4820{
4821 data << int32(MapID);
4822 data << int32(Tier);
4823 data << uint64(InstanceID);
4824 data << uint32(PlayersEligibleForRewards.size());
4825 data << uint32(ActiveOptionalAffixIDs.size());
4826 data << int32(EntranceType);
4827 for (uint32 i = 0; i < PlayersEligibleForRewards.size(); ++i)
4828 {
4829 data << PlayersEligibleForRewards[i];
4830 }
4831 for (uint32 i = 0; i < ActiveOptionalAffixIDs.size(); ++i)
4832 {
4833 data << int32(ActiveOptionalAffixIDs[i]);
4834 }
4836 data.WriteBits(IsLfg, 1);
4837 data.FlushBits();
4838}
4839
4840bool DelveData::operator==(DelveData const& right) const
4841{
4844 && MapID == right.MapID
4845 && Tier == right.Tier
4846 && InstanceID == right.InstanceID
4847 && EntranceType == right.EntranceType
4849 && IsLfg == right.IsLfg;
4850}
4851
4852void TransmogOutfitDataInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4853{
4854 data << uint8(SetType);
4855 data << uint32(Icon);
4856 data.WriteBits(Name->size(), 8);
4858 data.FlushBits();
4860}
4861
4862void TransmogOutfitDataInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4863{
4864 Mask changesMask = _changesMask;
4865 if (ignoreChangesMask)
4866 changesMask.SetAll();
4867
4868 data.WriteBits(changesMask.GetBlock(0), 4);
4869
4870 if (changesMask[0])
4871 {
4873 }
4874 data.FlushBits();
4875 if (changesMask[1])
4876 {
4877 data << uint8(SetType);
4878 }
4879 if (changesMask[3])
4880 {
4881 data << uint32(Icon);
4882 }
4883 if (changesMask[2])
4884 {
4885 data.WriteBits(Name->size(), 8);
4887 }
4888}
4889
4898
4899void TransmogOutfitSituationInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4900{
4901 data << uint32(SituationID);
4902 data << uint32(SpecID);
4903 data << uint32(LoadoutID);
4904 data << uint32(EquipmentSetID);
4905}
4906
4907void TransmogOutfitSituationInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4908{
4909 Mask changesMask = _changesMask;
4910 if (ignoreChangesMask)
4911 changesMask.SetAll();
4912
4913 data.WriteBits(changesMask.GetBlock(0), 4);
4914
4915 data.FlushBits();
4916 if (changesMask[0])
4917 {
4918 data << uint32(SituationID);
4919 }
4920 if (changesMask[1])
4921 {
4922 data << uint32(SpecID);
4923 }
4924 if (changesMask[2])
4925 {
4926 data << uint32(LoadoutID);
4927 }
4928 if (changesMask[3])
4929 {
4930 data << uint32(EquipmentSetID);
4931 }
4932}
4933
4942
4943void TransmogOutfitSlotData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4944{
4945 data << int8(Slot);
4946 data << uint8(SlotOption);
4947 data << uint8(SheatheCategory);
4951 data << uint8(IllusionDisplayType);
4952 data << uint32(Flags);
4953}
4954
4955void TransmogOutfitSlotData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4956{
4957 Mask changesMask = _changesMask;
4958 if (ignoreChangesMask)
4959 changesMask.SetAll();
4960
4961 data.WriteBits(changesMask.GetBlock(0), 11);
4962
4963 data.FlushBits();
4964 if (changesMask[0])
4965 {
4966 if (changesMask[1])
4967 {
4968 data << int8(Slot);
4969 }
4970 if (changesMask[2])
4971 {
4972 data << uint8(SlotOption);
4973 }
4974 if (changesMask[3])
4975 {
4976 data << uint8(SheatheCategory);
4977 }
4978 }
4979 if (changesMask[4])
4980 {
4981 if (changesMask[5])
4982 {
4984 }
4985 if (changesMask[6])
4986 {
4988 }
4989 if (changesMask[7])
4990 {
4992 }
4993 }
4994 if (changesMask[8])
4995 {
4996 if (changesMask[9])
4997 {
4998 data << uint8(IllusionDisplayType);
4999 }
5000 if (changesMask[10])
5001 {
5002 data << uint32(Flags);
5003 }
5004 }
5005}
5006
5019
5020void TransmogOutfitData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
5021{
5022 data << uint32(Id);
5023 OutfitInfo->WriteCreate(data, receiver, owner);
5024 data << uint32(Situations.size());
5025 data << uint32(Slots.size());
5026 data << uint32(Flags);
5027 for (uint32 i = 0; i < Situations.size(); ++i)
5028 {
5029 Situations[i].WriteCreate(data, receiver, owner);
5030 }
5031 for (uint32 i = 0; i < Slots.size(); ++i)
5032 {
5033 Slots[i].WriteCreate(data, receiver, owner);
5034 }
5035}
5036
5037void TransmogOutfitData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
5038{
5039 Mask changesMask = _changesMask;
5040 if (ignoreChangesMask)
5041 changesMask.SetAll();
5042
5043 data.WriteBits(changesMask.GetBlock(0), 5);
5044
5045 if (changesMask[0])
5046 {
5047 if (!ignoreChangesMask)
5049 else
5051 }
5052 if (changesMask[1])
5053 {
5054 if (!ignoreChangesMask)
5055 Slots.WriteUpdateMask(data);
5056 else
5058 }
5059 data.FlushBits();
5060 if (changesMask[0])
5061 {
5062 for (uint32 i = 0; i < Situations.size(); ++i)
5063 {
5064 if (Situations.HasChanged(i) || ignoreChangesMask)
5065 {
5066 Situations[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
5067 }
5068 }
5069 }
5070 if (changesMask[1])
5071 {
5072 for (uint32 i = 0; i < Slots.size(); ++i)
5073 {
5074 if (Slots.HasChanged(i) || ignoreChangesMask)
5075 {
5076 Slots[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
5077 }
5078 }
5079 }
5080 if (changesMask[2])
5081 {
5082 data << uint32(Id);
5083 }
5084 if (changesMask[3])
5085 {
5086 OutfitInfo->WriteUpdate(ignoreChangesMask, data, receiver, owner);
5087 }
5088 if (changesMask[4])
5089 {
5090 data << uint32(Flags);
5091 }
5092}
5093
5103
5104void ChallengeModeData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
5105{
5106 data << int32(MapID);
5107 data << int32(InitialPlayerCount);
5108 data << uint64(InstanceID);
5109 data << int64(StartTime);
5110 data << KeystoneOwnerGUID;
5111 data << LeaverGUID;
5113 data.WriteBits(IsActive, 1);
5114 data.WriteBits(HasRestrictions, 1);
5115 data.WriteBits(CanVoteAbandon, 1);
5116 data.FlushBits();
5117}
5118
5120{
5121 return MapID == right.MapID
5123 && InstanceID == right.InstanceID
5124 && StartTime == right.StartTime
5126 && LeaverGUID == right.LeaverGUID
5128 && IsActive == right.IsActive
5130 && CanVoteAbandon == right.CanVoteAbandon;
5131}
5132
5133void TransmogOutfitMetadata::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
5134{
5135 data << uint8(SituationTrigger);
5136 data << uint32(TransmogOutfitID);
5138 data << uint8(StampedOptionOffHand);
5139 data << float(CostMod);
5140 data.WriteBit(Locked);
5141 data.FlushBits();
5142}
5143
5145{
5146 return Locked == right.Locked
5151 && CostMod == right.CostMod;
5152}
5153
5154void ActivePlayerData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
5155{
5156 for (uint32 i = 0; i < 105; ++i)
5157 {
5158 data << InvSlots[i];
5159 }
5160 data << *FarsightObject;
5161 data << *SummonedBattlePetGUID;
5162 data << uint32(KnownTitles.size());
5163 data << uint64(Coinage);
5164 data << uint64(AccountBankCoinage);
5165 data << int32(XP);
5166 data << int32(NextLevelXP);
5167 data << int32(TrialXP);
5168 Skill->WriteCreate(data, receiver, owner);
5169 data << int32(CharacterPoints);
5170 data << int32(MaxTalentTiers);
5171 data << uint32(TrackCreatureMask);
5172 data << float(MainhandExpertise);
5173 data << float(OffhandExpertise);
5174 data << float(RangedExpertise);
5175 data << float(CombatRatingExpertise);
5176 data << float(BlockPercentage);
5177 data << float(DodgePercentage);
5178 data << float(DodgePercentageFromAttribute);
5179 data << float(ParryPercentage);
5180 data << float(ParryPercentageFromAttribute);
5181 data << float(CritPercentage);
5182 data << float(RangedCritPercentage);
5183 data << float(OffhandCritPercentage);
5184 data << float(SpellCritPercentage);
5185 data << int32(ShieldBlock);
5186 data << float(ShieldBlockCritPercentage);
5187 data << float(Mastery);
5188 data << float(Speed);
5189 data << float(Avoidance);
5190 data << float(Sturdiness);
5191 data << int32(Versatility);
5192 data << float(VersatilityBonus);
5193 data << float(PvpPowerDamage);
5194 data << float(PvpPowerHealing);
5195 BitVectors->WriteCreate(data, receiver, owner);
5197 data << uint32(AccountDataElements.size());
5198 for (uint32 i = 0; i < 2; ++i)
5199 {
5200 RestInfo[i].WriteCreate(data, receiver, owner);
5201 }
5202 for (uint32 i = 0; i < 7; ++i)
5203 {
5204 data << int32(ModDamageDonePos[i]);
5205 data << int32(ModDamageDoneNeg[i]);
5206 data << float(ModDamageDonePercent[i]);
5207 data << float(ModHealingDonePercent[i]);
5208 }
5209 data << int32(ModHealingDonePos);
5210 data << float(ModHealingPercent);
5211 data << float(ModPeriodicHealingDonePercent);
5212 for (uint32 i = 0; i < 3; ++i)
5213 {
5214 data << float(WeaponDmgMultipliers[i]);
5215 data << float(WeaponAtkSpeedMultipliers[i]);
5216 }
5217 data << float(ModSpellPowerPercent);
5218 data << float(ModResiliencePercent);
5219 data << float(OverrideSpellPowerByAPPercent);
5220 data << float(OverrideAPBySpellPowerPercent);
5221 data << int32(ModTargetResistance);
5223 data << uint32(LocalFlags);
5224 data << uint8(GrantableLevels);
5225 data << uint8(MultiActionBars);
5226 data << uint8(LifetimeMaxRank);
5227 data << uint8(NumRespecs);
5228 data << uint32(PvpMedals);
5229 for (uint32 i = 0; i < 12; ++i)
5230 {
5231 data << uint32(BuybackPrice[i]);
5232 data << int64(BuybackTimestamp[i]);
5233 }
5234 data << uint16(TodayHonorableKills);
5237 data << int32(WatchedFactionIndex);
5238 for (uint32 i = 0; i < 32; ++i)
5239 {
5240 data << int32(CombatRatings[i]);
5241 }
5242 data << uint32(PvpInfo.size());
5243 data << int32(MaxLevel);
5247 for (uint32 i = 0; i < 4; ++i)
5248 {
5249 data << uint32(NoReagentCostMask[i]);
5250 }
5251 data << int32(PetSpellPower);
5252 for (uint32 i = 0; i < 2; ++i)
5253 {
5254 data << int32(ProfessionSkillLine[i]);
5255 }
5256 data << float(UiHitModifier);
5257 data << float(UiSpellHitModifier);
5258 data << int32(HomeRealmTimeOffset);
5259 data << float(ModPetHaste);
5260 data << int8(JailersTowerLevelMax);
5261 data << int8(JailersTowerLevel);
5262 data << uint8(LocalRegenFlags);
5263 data << uint8(AuraVision);
5264 data << uint8(NumBackpackSlots);
5265 data << int32(OverrideSpellsID);
5266 data << uint16(LootSpecID);
5267 data << uint32(OverrideZonePVPType);
5268 for (uint32 i = 0; i < 5; ++i)
5269 {
5270 data << uint32(BagSlotFlags[i]);
5271 }
5272 data << int32(Honor);
5273 data << int32(HonorNextLevel);
5274 data << int32(PerksProgramCurrency);
5275 data << uint8(NumBankSlots);
5276 data << uint8(NumCharacterBankTabs);
5277 data << uint8(NumAccountBankTabs);
5278 for (uint32 i = 0; i < 1; ++i)
5279 {
5280 data << uint32(ResearchSites[i].size());
5281 data << uint32(ResearchSiteProgress[i].size());
5282 data << uint32(Research[i].size());
5283 for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
5284 {
5285 data << uint16(ResearchSites[i][j]);
5286 }
5287 for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
5288 {
5289 data << uint32(ResearchSiteProgress[i][j]);
5290 }
5291 for (uint32 j = 0; j < Research[i].size(); ++j)
5292 {
5293 Research[i][j].WriteCreate(data, receiver, owner);
5294 }
5295 }
5296 data << uint32(DailyQuestsCompleted.size());
5297 data << uint32(Field_1328.size());
5299 data << uint32(Heirlooms.size());
5300 data << uint32(HeirloomFlags.size());
5301 data << uint32(Toys.size());
5302 data << uint32(ToyFlags.size());
5303 data << uint32(Transmog.size());
5304 data << uint32(ConditionalTransmog.size());
5305 data << uint32(SelfResSpells.size());
5306 data << uint32(RuneforgePowers.size());
5307 data << uint32(TransmogIllusions.size());
5308 data << uint32(WarbandScenes.size());
5309 data << uint32(HouseRooms.size());
5311 data << uint32(HouseThemes.size());
5313 data << uint32(HouseTypes.size());
5316 data << uint32(SpellPctModByLabel.size());
5317 data << uint32(SpellFlatModByLabel.size());
5320 ResearchHistory->WriteCreate(data, receiver, owner);
5321 data << uint32(MawPowers.size());
5323 data << uint32(RecipeProgression.size());
5324 data << *FrozenPerksVendorItem;
5325 DiscordInfo->WriteCreate(data, receiver, owner);
5326 data << uint32(ReplayedQuests.size());
5327 data << uint32(TaskQuests.size());
5328 LevelLinkInfo->WriteCreate(data, receiver, owner);
5329 data << uint32(DisabledSpells.size());
5331 data << int32(TimerunningSeasonID);
5332 data << int32(TransportServerTime);
5335 data << *DungeonScore;
5336 WriteMapFieldCreate(TraitConfigs, data, receiver, owner);
5338 data << uint32(CraftingOrders.size());
5340 data << uint32(NpcCraftingOrders.size());
5341 data << uint32(CategoryCooldownMods.size());
5342 data << uint32(WeeklySpellUses.size());
5343 for (uint32 i = 0; i < 17; ++i)
5344 {
5345 data << float(ItemUpgradeHighWatermark[i]);
5346 }
5349 data << float(ItemUpgradeHighFingerWatermark);
5351 data << float(ItemUpgradeHighTrinketWatermark);
5355 WriteMapFieldCreate(DelveData, data, receiver, owner);
5356 WriteMapFieldCreate(TransmogOutfits, data, receiver, owner);
5357 ViewedOutfit->WriteCreate(data, receiver, owner);
5358 TransmogMetadata->WriteCreate(data, receiver, owner);
5359 data.FlushBits();
5360 for (uint32 i = 0; i < KnownTitles.size(); ++i)
5361 {
5362 data << uint64(KnownTitles[i]);
5363 }
5364 for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
5365 {
5366 CharacterDataElements[i].WriteCreate(data, receiver, owner);
5367 }
5368 for (uint32 i = 0; i < AccountDataElements.size(); ++i)
5369 {
5370 AccountDataElements[i].WriteCreate(data, receiver, owner);
5371 }
5372 for (uint32 i = 0; i < PvpInfo.size(); ++i)
5373 {
5374 PvpInfo[i].WriteCreate(data, receiver, owner);
5375 }
5376 for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
5377 {
5378 data << int32(DailyQuestsCompleted[i]);
5379 }
5380 for (uint32 i = 0; i < Field_1328.size(); ++i)
5381 {
5382 data << int32(Field_1328[i]);
5383 }
5384 for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
5385 {
5387 }
5388 for (uint32 i = 0; i < Heirlooms.size(); ++i)
5389 {
5390 data << int32(Heirlooms[i]);
5391 }
5392 for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
5393 {
5394 data << uint32(HeirloomFlags[i]);
5395 }
5396 for (uint32 i = 0; i < Toys.size(); ++i)
5397 {
5398 data << int32(Toys[i]);
5399 }
5400 for (uint32 i = 0; i < ToyFlags.size(); ++i)
5401 {
5402 data << uint32(ToyFlags[i]);
5403 }
5404 for (uint32 i = 0; i < Transmog.size(); ++i)
5405 {
5406 data << uint32(Transmog[i]);
5407 }
5408 for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
5409 {
5410 data << int32(ConditionalTransmog[i]);
5411 }
5412 for (uint32 i = 0; i < SelfResSpells.size(); ++i)
5413 {
5414 data << int32(SelfResSpells[i]);
5415 }
5416 for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
5417 {
5418 data << uint32(RuneforgePowers[i]);
5419 }
5420 for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
5421 {
5422 data << uint32(TransmogIllusions[i]);
5423 }
5424 for (uint32 i = 0; i < WarbandScenes.size(); ++i)
5425 {
5426 data << uint32(WarbandScenes[i]);
5427 }
5428 for (uint32 i = 0; i < HouseRooms.size(); ++i)
5429 {
5430 data << uint32(HouseRooms[i]);
5431 }
5432 for (uint32 i = 0; i < HouseExteriorComponents.size(); ++i)
5433 {
5434 data << uint32(HouseExteriorComponents[i]);
5435 }
5436 for (uint32 i = 0; i < HouseThemes.size(); ++i)
5437 {
5438 data << uint32(HouseThemes[i]);
5439 }
5440 for (uint32 i = 0; i < HouseRoomComponentTextures.size(); ++i)
5441 {
5443 }
5444 for (uint32 i = 0; i < HouseTypes.size(); ++i)
5445 {
5446 data << uint32(HouseTypes[i]);
5447 }
5448 for (uint32 i = 0; i < UnlockedTransmogOutfits.size(); ++i)
5449 {
5450 data << int32(UnlockedTransmogOutfits[i]);
5451 }
5452 for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
5453 {
5454 CharacterRestrictions[i].WriteCreate(data, receiver, owner);
5455 }
5456 for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
5457 {
5458 SpellPctModByLabel[i].WriteCreate(data, receiver, owner);
5459 }
5460 for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
5461 {
5462 SpellFlatModByLabel[i].WriteCreate(data, receiver, owner);
5463 }
5464 for (uint32 i = 0; i < SpellPctModPVPByLabel.size(); ++i)
5465 {
5466 SpellPctModPVPByLabel[i].WriteCreate(data, receiver, owner);
5467 }
5468 for (uint32 i = 0; i < SpellFlatModPVPByLabel.size(); ++i)
5469 {
5470 SpellFlatModPVPByLabel[i].WriteCreate(data, receiver, owner);
5471 }
5472 for (uint32 i = 0; i < MawPowers.size(); ++i)
5473 {
5474 MawPowers[i].WriteCreate(data, receiver, owner);
5475 }
5476 for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
5477 {
5478 MultiFloorExploration[i].WriteCreate(data, receiver, owner);
5479 }
5480 for (uint32 i = 0; i < RecipeProgression.size(); ++i)
5481 {
5482 RecipeProgression[i].WriteCreate(data, receiver, owner);
5483 }
5484 for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
5485 {
5486 ReplayedQuests[i].WriteCreate(data, receiver, owner);
5487 }
5488 for (uint32 i = 0; i < TaskQuests.size(); ++i)
5489 {
5490 TaskQuests[i].WriteCreate(data, receiver, owner);
5491 }
5492 for (uint32 i = 0; i < DisabledSpells.size(); ++i)
5493 {
5494 data << int32(DisabledSpells[i]);
5495 }
5496 for (uint32 i = 0; i < CraftingOrders.size(); ++i)
5497 {
5498 CraftingOrders[i].WriteCreate(data, receiver, owner);
5499 }
5500 for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
5501 {
5502 PersonalCraftingOrderCounts[i].WriteCreate(data, receiver, owner);
5503 }
5504 for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i)
5505 {
5506 NpcCraftingOrders[i].WriteCreate(data, receiver, owner);
5507 }
5508 for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
5509 {
5510 CategoryCooldownMods[i].WriteCreate(data, receiver, owner);
5511 }
5512 for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
5513 {
5514 WeeklySpellUses[i].WriteCreate(data, receiver, owner);
5515 }
5516 for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
5517 {
5518 TrackedCollectableSources[i].WriteCreate(data, receiver, owner);
5519 }
5526 data.WriteBit(QuestSession.has_value());
5527 data.WriteBit(PetStable.has_value());
5530 data.WriteBit(WalkInData.has_value());
5531 data.WriteBit(ChallengeModeData.has_value());
5532 data.FlushBits();
5533 if (QuestSession.has_value())
5534 {
5535 QuestSession->WriteCreate(data, receiver, owner);
5536 }
5537 if (PetStable.has_value())
5538 {
5539 PetStable->WriteCreate(data, receiver, owner);
5540 }
5541 for (uint32 i = 0; i < CharacterBankTabSettings.size(); ++i)
5542 {
5543 CharacterBankTabSettings[i].WriteCreate(data, receiver, owner);
5544 }
5545 for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
5546 {
5547 AccountBankTabSettings[i].WriteCreate(data, receiver, owner);
5548 }
5549 if (WalkInData.has_value())
5550 {
5551 WalkInData->WriteCreate(data, receiver, owner);
5552 }
5553 if (ChallengeModeData.has_value())
5554 {
5555 ChallengeModeData->WriteCreate(data, receiver, owner);
5556 }
5557}
5558
5559void ActivePlayerData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
5560{
5561 WriteUpdate(_changesMask, data, receiver, owner, false);
5562}
5563
5564void ActivePlayerData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Player const* owner, bool ignoreNestedChangesMask) const
5565{
5566 data.WriteBits(changesMask.GetBlocksMask(0), 13);
5567 for (uint32 i = 0; i < 13; ++i)
5568 if (changesMask.GetBlock(i))
5569 data.WriteBits(changesMask.GetBlock(i), 32);
5570
5571 if (changesMask[0])
5572 {
5573 if (changesMask[1])
5574 {
5576 }
5577 if (changesMask[2])
5578 {
5580 }
5581 if (changesMask[3])
5582 {
5584 }
5585 if (changesMask[4])
5586 {
5588 }
5589 if (changesMask[5])
5590 {
5592 }
5593 if (changesMask[6])
5594 {
5596 }
5597 if (changesMask[7])
5598 {
5599 if (!ignoreNestedChangesMask)
5601 else
5603 }
5604 if (changesMask[8])
5605 {
5606 if (!ignoreNestedChangesMask)
5608 else
5610 }
5611 if (changesMask[9])
5612 {
5613 if (!ignoreNestedChangesMask)
5615 else
5617 }
5618 if (changesMask[10])
5619 {
5620 if (!ignoreNestedChangesMask)
5622 else
5624 }
5625 }
5626 if (changesMask[50])
5627 {
5628 for (uint32 i = 0; i < 1; ++i)
5629 {
5630 if (changesMask[51])
5631 {
5632 if (!ignoreNestedChangesMask)
5633 ResearchSites[i].WriteUpdateMask(data);
5634 else
5636 }
5637 }
5638 }
5639 if (changesMask[52])
5640 {
5641 for (uint32 i = 0; i < 1; ++i)
5642 {
5643 if (changesMask[53])
5644 {
5645 if (!ignoreNestedChangesMask)
5646 ResearchSiteProgress[i].WriteUpdateMask(data);
5647 else
5649 }
5650 }
5651 }
5652 if (changesMask[54])
5653 {
5654 for (uint32 i = 0; i < 1; ++i)
5655 {
5656 if (changesMask[55])
5657 {
5658 if (!ignoreNestedChangesMask)
5659 Research[i].WriteUpdateMask(data);
5660 else
5662 }
5663 }
5664 }
5665 if (changesMask[50])
5666 {
5667 for (uint32 i = 0; i < 1; ++i)
5668 {
5669 if (changesMask[51])
5670 {
5671 for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
5672 {
5673 if (ResearchSites[i].HasChanged(j) || ignoreNestedChangesMask)
5674 {
5675 data << uint16(ResearchSites[i][j]);
5676 }
5677 }
5678 }
5679 }
5680 }
5681 if (changesMask[52])
5682 {
5683 for (uint32 i = 0; i < 1; ++i)
5684 {
5685 if (changesMask[53])
5686 {
5687 for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
5688 {
5689 if (ResearchSiteProgress[i].HasChanged(j) || ignoreNestedChangesMask)
5690 {
5691 data << uint32(ResearchSiteProgress[i][j]);
5692 }
5693 }
5694 }
5695 }
5696 }
5697 if (changesMask[54])
5698 {
5699 for (uint32 i = 0; i < 1; ++i)
5700 {
5701 if (changesMask[55])
5702 {
5703 for (uint32 j = 0; j < Research[i].size(); ++j)
5704 {
5705 if (Research[i].HasChanged(j) || ignoreNestedChangesMask)
5706 {
5707 Research[i][j].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
5708 }
5709 }
5710 }
5711 }
5712 }
5713 data.FlushBits();
5714 if (changesMask[0])
5715 {
5716 if (changesMask[11])
5717 {
5718 if (!ignoreNestedChangesMask)
5720 else
5722 }
5723 if (changesMask[12])
5724 {
5725 if (!ignoreNestedChangesMask)
5727 else
5729 }
5730 if (changesMask[13])
5731 {
5732 if (!ignoreNestedChangesMask)
5734 else
5736 }
5737 if (changesMask[14])
5738 {
5739 if (!ignoreNestedChangesMask)
5741 else
5743 }
5744 if (changesMask[15])
5745 {
5746 if (!ignoreNestedChangesMask)
5748 else
5750 }
5751 if (changesMask[16])
5752 {
5753 if (!ignoreNestedChangesMask)
5754 Toys.WriteUpdateMask(data);
5755 else
5757 }
5758 if (changesMask[17])
5759 {
5760 if (!ignoreNestedChangesMask)
5761 ToyFlags.WriteUpdateMask(data);
5762 else
5764 }
5765 if (changesMask[18])
5766 {
5767 if (!ignoreNestedChangesMask)
5769 else
5771 }
5772 if (changesMask[19])
5773 {
5774 if (!ignoreNestedChangesMask)
5776 else
5778 }
5779 if (changesMask[20])
5780 {
5781 if (!ignoreNestedChangesMask)
5783 else
5785 }
5786 if (changesMask[21])
5787 {
5788 if (!ignoreNestedChangesMask)
5790 else
5792 }
5793 if (changesMask[22])
5794 {
5795 if (!ignoreNestedChangesMask)
5797 else
5799 }
5800 if (changesMask[23])
5801 {
5802 if (!ignoreNestedChangesMask)
5804 else
5806 }
5807 if (changesMask[24])
5808 {
5809 if (!ignoreNestedChangesMask)
5811 else
5813 }
5814 if (changesMask[25])
5815 {
5816 if (!ignoreNestedChangesMask)
5818 else
5820 }
5821 if (changesMask[26])
5822 {
5823 if (!ignoreNestedChangesMask)
5825 else
5827 }
5828 if (changesMask[27])
5829 {
5830 if (!ignoreNestedChangesMask)
5832 else
5834 }
5835 if (changesMask[28])
5836 {
5837 if (!ignoreNestedChangesMask)
5839 else
5841 }
5842 if (changesMask[29])
5843 {
5844 if (!ignoreNestedChangesMask)
5846 else
5848 }
5849 if (changesMask[30])
5850 {
5851 if (!ignoreNestedChangesMask)
5853 else
5855 }
5856 if (changesMask[31])
5857 {
5858 if (!ignoreNestedChangesMask)
5859 SpellPctModByLabel.WriteUpdateMask(data);
5860 else
5862 }
5863 }
5864 if (changesMask[32])
5865 {
5866 if (changesMask[33])
5867 {
5868 if (!ignoreNestedChangesMask)
5869 SpellFlatModByLabel.WriteUpdateMask(data);
5870 else
5872 }
5873 if (changesMask[34])
5874 {
5875 if (!ignoreNestedChangesMask)
5877 else
5879 }
5880 if (changesMask[35])
5881 {
5882 if (!ignoreNestedChangesMask)
5884 else
5886 }
5887 if (changesMask[36])
5888 {
5889 if (!ignoreNestedChangesMask)
5891 else
5893 }
5894 if (changesMask[37])
5895 {
5896 if (!ignoreNestedChangesMask)
5898 else
5900 }
5901 if (changesMask[38])
5902 {
5903 if (!ignoreNestedChangesMask)
5905 else
5907 }
5908 if (changesMask[39])
5909 {
5910 if (!ignoreNestedChangesMask)
5912 else
5914 }
5915 if (changesMask[40])
5916 {
5917 if (!ignoreNestedChangesMask)
5919 else
5921 }
5922 if (changesMask[41])
5923 {
5924 if (!ignoreNestedChangesMask)
5926 else
5928 }
5929 if (changesMask[42])
5930 {
5931 if (!ignoreNestedChangesMask)
5933 else
5935 }
5936 if (changesMask[43])
5937 {
5938 if (!ignoreNestedChangesMask)
5940 else
5942 }
5943 if (changesMask[44])
5944 {
5945 if (!ignoreNestedChangesMask)
5947 else
5949 }
5950 if (changesMask[45])
5951 {
5952 if (!ignoreNestedChangesMask)
5954 else
5956 }
5957 if (changesMask[46])
5958 {
5959 if (!ignoreNestedChangesMask)
5961 else
5963 }
5964 if (changesMask[47])
5965 {
5966 if (!ignoreNestedChangesMask)
5968 else
5970 }
5971 }
5972 data.FlushBits();
5973 if (changesMask[0])
5974 {
5975 if (changesMask[7])
5976 {
5977 for (uint32 i = 0; i < KnownTitles.size(); ++i)
5978 {
5979 if (KnownTitles.HasChanged(i) || ignoreNestedChangesMask)
5980 {
5981 data << uint64(KnownTitles[i]);
5982 }
5983 }
5984 }
5985 if (changesMask[8])
5986 {
5987 for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
5988 {
5989 if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask)
5990 {
5991 CharacterDataElements[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
5992 }
5993 }
5994 }
5995 if (changesMask[9])
5996 {
5997 for (uint32 i = 0; i < AccountDataElements.size(); ++i)
5998 {
5999 if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask)
6000 {
6001 AccountDataElements[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6002 }
6003 }
6004 }
6005 if (changesMask[10])
6006 {
6007 for (uint32 i = 0; i < PvpInfo.size(); ++i)
6008 {
6009 if (PvpInfo.HasChanged(i) || ignoreNestedChangesMask)
6010 {
6011 PvpInfo[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6012 }
6013 }
6014 }
6015 if (changesMask[11])
6016 {
6017 for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
6018 {
6019 if (DailyQuestsCompleted.HasChanged(i) || ignoreNestedChangesMask)
6020 {
6021 data << int32(DailyQuestsCompleted[i]);
6022 }
6023 }
6024 }
6025 if (changesMask[12])
6026 {
6027 for (uint32 i = 0; i < Field_1328.size(); ++i)
6028 {
6029 if (Field_1328.HasChanged(i) || ignoreNestedChangesMask)
6030 {
6031 data << int32(Field_1328[i]);
6032 }
6033 }
6034 }
6035 if (changesMask[13])
6036 {
6037 for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
6038 {
6039 if (AvailableQuestLineXQuestIDs.HasChanged(i) || ignoreNestedChangesMask)
6040 {
6042 }
6043 }
6044 }
6045 if (changesMask[14])
6046 {
6047 for (uint32 i = 0; i < Heirlooms.size(); ++i)
6048 {
6049 if (Heirlooms.HasChanged(i) || ignoreNestedChangesMask)
6050 {
6051 data << int32(Heirlooms[i]);
6052 }
6053 }
6054 }
6055 if (changesMask[15])
6056 {
6057 for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
6058 {
6059 if (HeirloomFlags.HasChanged(i) || ignoreNestedChangesMask)
6060 {
6061 data << uint32(HeirloomFlags[i]);
6062 }
6063 }
6064 }
6065 if (changesMask[16])
6066 {
6067 for (uint32 i = 0; i < Toys.size(); ++i)
6068 {
6069 if (Toys.HasChanged(i) || ignoreNestedChangesMask)
6070 {
6071 data << int32(Toys[i]);
6072 }
6073 }
6074 }
6075 if (changesMask[17])
6076 {
6077 for (uint32 i = 0; i < ToyFlags.size(); ++i)
6078 {
6079 if (ToyFlags.HasChanged(i) || ignoreNestedChangesMask)
6080 {
6081 data << uint32(ToyFlags[i]);
6082 }
6083 }
6084 }
6085 if (changesMask[18])
6086 {
6087 for (uint32 i = 0; i < Transmog.size(); ++i)
6088 {
6089 if (Transmog.HasChanged(i) || ignoreNestedChangesMask)
6090 {
6091 data << uint32(Transmog[i]);
6092 }
6093 }
6094 }
6095 if (changesMask[19])
6096 {
6097 for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
6098 {
6099 if (ConditionalTransmog.HasChanged(i) || ignoreNestedChangesMask)
6100 {
6101 data << int32(ConditionalTransmog[i]);
6102 }
6103 }
6104 }
6105 if (changesMask[20])
6106 {
6107 for (uint32 i = 0; i < SelfResSpells.size(); ++i)
6108 {
6109 if (SelfResSpells.HasChanged(i) || ignoreNestedChangesMask)
6110 {
6111 data << int32(SelfResSpells[i]);
6112 }
6113 }
6114 }
6115 if (changesMask[21])
6116 {
6117 for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
6118 {
6119 if (RuneforgePowers.HasChanged(i) || ignoreNestedChangesMask)
6120 {
6121 data << uint32(RuneforgePowers[i]);
6122 }
6123 }
6124 }
6125 if (changesMask[22])
6126 {
6127 for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
6128 {
6129 if (TransmogIllusions.HasChanged(i) || ignoreNestedChangesMask)
6130 {
6131 data << uint32(TransmogIllusions[i]);
6132 }
6133 }
6134 }
6135 if (changesMask[23])
6136 {
6137 for (uint32 i = 0; i < WarbandScenes.size(); ++i)
6138 {
6139 if (WarbandScenes.HasChanged(i) || ignoreNestedChangesMask)
6140 {
6141 data << uint32(WarbandScenes[i]);
6142 }
6143 }
6144 }
6145 if (changesMask[24])
6146 {
6147 for (uint32 i = 0; i < HouseRooms.size(); ++i)
6148 {
6149 if (HouseRooms.HasChanged(i) || ignoreNestedChangesMask)
6150 {
6151 data << uint32(HouseRooms[i]);
6152 }
6153 }
6154 }
6155 if (changesMask[25])
6156 {
6157 for (uint32 i = 0; i < HouseExteriorComponents.size(); ++i)
6158 {
6159 if (HouseExteriorComponents.HasChanged(i) || ignoreNestedChangesMask)
6160 {
6161 data << uint32(HouseExteriorComponents[i]);
6162 }
6163 }
6164 }
6165 if (changesMask[26])
6166 {
6167 for (uint32 i = 0; i < HouseThemes.size(); ++i)
6168 {
6169 if (HouseThemes.HasChanged(i) || ignoreNestedChangesMask)
6170 {
6171 data << uint32(HouseThemes[i]);
6172 }
6173 }
6174 }
6175 if (changesMask[27])
6176 {
6177 for (uint32 i = 0; i < HouseRoomComponentTextures.size(); ++i)
6178 {
6179 if (HouseRoomComponentTextures.HasChanged(i) || ignoreNestedChangesMask)
6180 {
6182 }
6183 }
6184 }
6185 if (changesMask[28])
6186 {
6187 for (uint32 i = 0; i < HouseTypes.size(); ++i)
6188 {
6189 if (HouseTypes.HasChanged(i) || ignoreNestedChangesMask)
6190 {
6191 data << uint32(HouseTypes[i]);
6192 }
6193 }
6194 }
6195 if (changesMask[29])
6196 {
6197 for (uint32 i = 0; i < UnlockedTransmogOutfits.size(); ++i)
6198 {
6199 if (UnlockedTransmogOutfits.HasChanged(i) || ignoreNestedChangesMask)
6200 {
6201 data << int32(UnlockedTransmogOutfits[i]);
6202 }
6203 }
6204 }
6205 if (changesMask[30])
6206 {
6207 for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
6208 {
6209 if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask)
6210 {
6211 CharacterRestrictions[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6212 }
6213 }
6214 }
6215 if (changesMask[31])
6216 {
6217 for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
6218 {
6219 if (SpellPctModByLabel.HasChanged(i) || ignoreNestedChangesMask)
6220 {
6221 SpellPctModByLabel[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6222 }
6223 }
6224 }
6225 }
6226 if (changesMask[32])
6227 {
6228 if (changesMask[33])
6229 {
6230 for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
6231 {
6232 if (SpellFlatModByLabel.HasChanged(i) || ignoreNestedChangesMask)
6233 {
6234 SpellFlatModByLabel[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6235 }
6236 }
6237 }
6238 if (changesMask[34])
6239 {
6240 for (uint32 i = 0; i < SpellPctModPVPByLabel.size(); ++i)
6241 {
6242 if (SpellPctModPVPByLabel.HasChanged(i) || ignoreNestedChangesMask)
6243 {
6244 SpellPctModPVPByLabel[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6245 }
6246 }
6247 }
6248 if (changesMask[35])
6249 {
6250 for (uint32 i = 0; i < SpellFlatModPVPByLabel.size(); ++i)
6251 {
6252 if (SpellFlatModPVPByLabel.HasChanged(i) || ignoreNestedChangesMask)
6253 {
6254 SpellFlatModPVPByLabel[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6255 }
6256 }
6257 }
6258 if (changesMask[36])
6259 {
6260 for (uint32 i = 0; i < MawPowers.size(); ++i)
6261 {
6262 if (MawPowers.HasChanged(i) || ignoreNestedChangesMask)
6263 {
6264 MawPowers[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6265 }
6266 }
6267 }
6268 if (changesMask[37])
6269 {
6270 for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
6271 {
6272 if (MultiFloorExploration.HasChanged(i) || ignoreNestedChangesMask)
6273 {
6274 MultiFloorExploration[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6275 }
6276 }
6277 }
6278 if (changesMask[38])
6279 {
6280 for (uint32 i = 0; i < RecipeProgression.size(); ++i)
6281 {
6282 if (RecipeProgression.HasChanged(i) || ignoreNestedChangesMask)
6283 {
6284 RecipeProgression[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6285 }
6286 }
6287 }
6288 if (changesMask[39])
6289 {
6290 for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
6291 {
6292 if (ReplayedQuests.HasChanged(i) || ignoreNestedChangesMask)
6293 {
6294 ReplayedQuests[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6295 }
6296 }
6297 }
6298 if (changesMask[40])
6299 {
6300 for (uint32 i = 0; i < TaskQuests.size(); ++i)
6301 {
6302 if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask)
6303 {
6304 TaskQuests[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6305 }
6306 }
6307 }
6308 if (changesMask[41])
6309 {
6310 for (uint32 i = 0; i < DisabledSpells.size(); ++i)
6311 {
6312 if (DisabledSpells.HasChanged(i) || ignoreNestedChangesMask)
6313 {
6314 data << int32(DisabledSpells[i]);
6315 }
6316 }
6317 }
6318 if (changesMask[42])
6319 {
6320 for (uint32 i = 0; i < CraftingOrders.size(); ++i)
6321 {
6322 if (CraftingOrders.HasChanged(i) || ignoreNestedChangesMask)
6323 {
6324 CraftingOrders[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6325 }
6326 }
6327 }
6328 if (changesMask[43])
6329 {
6330 for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
6331 {
6332 if (PersonalCraftingOrderCounts.HasChanged(i) || ignoreNestedChangesMask)
6333 {
6334 PersonalCraftingOrderCounts[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6335 }
6336 }
6337 }
6338 if (changesMask[44])
6339 {
6340 for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i)
6341 {
6342 if (NpcCraftingOrders.HasChanged(i) || ignoreNestedChangesMask)
6343 {
6344 NpcCraftingOrders[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6345 }
6346 }
6347 }
6348 if (changesMask[45])
6349 {
6350 for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
6351 {
6352 if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask)
6353 {
6354 CategoryCooldownMods[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6355 }
6356 }
6357 }
6358 if (changesMask[46])
6359 {
6360 for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
6361 {
6362 if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask)
6363 {
6364 WeeklySpellUses[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6365 }
6366 }
6367 }
6368 if (changesMask[47])
6369 {
6370 for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
6371 {
6372 if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask)
6373 {
6374 TrackedCollectableSources[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6375 }
6376 }
6377 }
6378 }
6379 data.FlushBits();
6380 if (changesMask[32])
6381 {
6382 if (changesMask[48])
6383 {
6384 if (!ignoreNestedChangesMask)
6386 else
6388 }
6389 if (changesMask[49])
6390 {
6391 if (!ignoreNestedChangesMask)
6393 else
6395 }
6396 if (changesMask[48])
6397 {
6398 for (uint32 i = 0; i < CharacterBankTabSettings.size(); ++i)
6399 {
6400 if (CharacterBankTabSettings.HasChanged(i) || ignoreNestedChangesMask)
6401 {
6402 CharacterBankTabSettings[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6403 }
6404 }
6405 }
6406 if (changesMask[49])
6407 {
6408 for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
6409 {
6410 if (AccountBankTabSettings.HasChanged(i) || ignoreNestedChangesMask)
6411 {
6412 AccountBankTabSettings[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6413 }
6414 }
6415 }
6416 if (changesMask[56])
6417 {
6418 data << *FarsightObject;
6419 }
6420 if (changesMask[57])
6421 {
6422 data << *SummonedBattlePetGUID;
6423 }
6424 if (changesMask[58])
6425 {
6426 data << uint64(Coinage);
6427 }
6428 if (changesMask[59])
6429 {
6430 data << uint64(AccountBankCoinage);
6431 }
6432 if (changesMask[60])
6433 {
6434 data << int32(XP);
6435 }
6436 if (changesMask[61])
6437 {
6438 data << int32(NextLevelXP);
6439 }
6440 if (changesMask[62])
6441 {
6442 data << int32(TrialXP);
6443 }
6444 if (changesMask[63])
6445 {
6446 Skill->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6447 }
6448 if (changesMask[64])
6449 {
6450 data << int32(CharacterPoints);
6451 }
6452 if (changesMask[65])
6453 {
6454 data << int32(MaxTalentTiers);
6455 }
6456 if (changesMask[66])
6457 {
6458 data << uint32(TrackCreatureMask);
6459 }
6460 if (changesMask[67])
6461 {
6462 data << float(MainhandExpertise);
6463 }
6464 if (changesMask[68])
6465 {
6466 data << float(OffhandExpertise);
6467 }
6468 if (changesMask[69])
6469 {
6470 data << float(RangedExpertise);
6471 }
6472 }
6473 if (changesMask[70])
6474 {
6475 if (changesMask[71])
6476 {
6477 data << float(CombatRatingExpertise);
6478 }
6479 if (changesMask[72])
6480 {
6481 data << float(BlockPercentage);
6482 }
6483 if (changesMask[73])
6484 {
6485 data << float(DodgePercentage);
6486 }
6487 if (changesMask[74])
6488 {
6489 data << float(DodgePercentageFromAttribute);
6490 }
6491 if (changesMask[75])
6492 {
6493 data << float(ParryPercentage);
6494 }
6495 if (changesMask[76])
6496 {
6497 data << float(ParryPercentageFromAttribute);
6498 }
6499 if (changesMask[77])
6500 {
6501 data << float(CritPercentage);
6502 }
6503 if (changesMask[78])
6504 {
6505 data << float(RangedCritPercentage);
6506 }
6507 if (changesMask[79])
6508 {
6509 data << float(OffhandCritPercentage);
6510 }
6511 if (changesMask[80])
6512 {
6513 data << float(SpellCritPercentage);
6514 }
6515 if (changesMask[81])
6516 {
6517 data << int32(ShieldBlock);
6518 }
6519 if (changesMask[82])
6520 {
6521 data << float(ShieldBlockCritPercentage);
6522 }
6523 if (changesMask[83])
6524 {
6525 data << float(Mastery);
6526 }
6527 if (changesMask[84])
6528 {
6529 data << float(Speed);
6530 }
6531 if (changesMask[85])
6532 {
6533 data << float(Avoidance);
6534 }
6535 if (changesMask[86])
6536 {
6537 data << float(Sturdiness);
6538 }
6539 if (changesMask[87])
6540 {
6541 data << int32(Versatility);
6542 }
6543 if (changesMask[88])
6544 {
6545 data << float(VersatilityBonus);
6546 }
6547 if (changesMask[89])
6548 {
6549 data << float(PvpPowerDamage);
6550 }
6551 if (changesMask[90])
6552 {
6553 data << float(PvpPowerHealing);
6554 }
6555 if (changesMask[91])
6556 {
6557 BitVectors->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6558 }
6559 if (changesMask[92])
6560 {
6561 data << int32(ModHealingDonePos);
6562 }
6563 if (changesMask[93])
6564 {
6565 data << float(ModHealingPercent);
6566 }
6567 if (changesMask[94])
6568 {
6569 data << float(ModPeriodicHealingDonePercent);
6570 }
6571 if (changesMask[95])
6572 {
6573 data << float(ModSpellPowerPercent);
6574 }
6575 if (changesMask[96])
6576 {
6577 data << float(ModResiliencePercent);
6578 }
6579 if (changesMask[97])
6580 {
6581 data << float(OverrideSpellPowerByAPPercent);
6582 }
6583 if (changesMask[98])
6584 {
6585 data << float(OverrideAPBySpellPowerPercent);
6586 }
6587 if (changesMask[99])
6588 {
6589 data << int32(ModTargetResistance);
6590 }
6591 if (changesMask[100])
6592 {
6594 }
6595 if (changesMask[101])
6596 {
6597 data << uint32(LocalFlags);
6598 }
6599 }
6600 if (changesMask[102])
6601 {
6602 if (changesMask[103])
6603 {
6604 data << uint8(GrantableLevels);
6605 }
6606 if (changesMask[104])
6607 {
6608 data << uint8(MultiActionBars);
6609 }
6610 if (changesMask[105])
6611 {
6612 data << uint8(LifetimeMaxRank);
6613 }
6614 if (changesMask[106])
6615 {
6616 data << uint8(NumRespecs);
6617 }
6618 if (changesMask[107])
6619 {
6620 data << uint32(PvpMedals);
6621 }
6622 if (changesMask[108])
6623 {
6624 data << uint16(TodayHonorableKills);
6625 }
6626 if (changesMask[109])
6627 {
6629 }
6630 if (changesMask[110])
6631 {
6633 }
6634 if (changesMask[111])
6635 {
6636 data << int32(WatchedFactionIndex);
6637 }
6638 if (changesMask[112])
6639 {
6640 data << int32(MaxLevel);
6641 }
6642 if (changesMask[113])
6643 {
6645 }
6646 if (changesMask[114])
6647 {
6649 }
6650 if (changesMask[115])
6651 {
6653 }
6654 if (changesMask[116])
6655 {
6656 data << int32(PetSpellPower);
6657 }
6658 if (changesMask[117])
6659 {
6660 data << float(UiHitModifier);
6661 }
6662 if (changesMask[118])
6663 {
6664 data << float(UiSpellHitModifier);
6665 }
6666 if (changesMask[119])
6667 {
6668 data << int32(HomeRealmTimeOffset);
6669 }
6670 if (changesMask[120])
6671 {
6672 data << float(ModPetHaste);
6673 }
6674 if (changesMask[121])
6675 {
6676 data << int8(JailersTowerLevelMax);
6677 }
6678 if (changesMask[122])
6679 {
6680 data << int8(JailersTowerLevel);
6681 }
6682 if (changesMask[123])
6683 {
6684 data << uint8(LocalRegenFlags);
6685 }
6686 if (changesMask[124])
6687 {
6688 data << uint8(AuraVision);
6689 }
6690 if (changesMask[125])
6691 {
6692 data << uint8(NumBackpackSlots);
6693 }
6694 if (changesMask[126])
6695 {
6696 data << int32(OverrideSpellsID);
6697 }
6698 if (changesMask[127])
6699 {
6700 data << uint16(LootSpecID);
6701 }
6702 if (changesMask[128])
6703 {
6704 data << uint32(OverrideZonePVPType);
6705 }
6706 if (changesMask[129])
6707 {
6708 data << int32(Honor);
6709 }
6710 if (changesMask[130])
6711 {
6712 data << int32(HonorNextLevel);
6713 }
6714 if (changesMask[131])
6715 {
6716 data << int32(PerksProgramCurrency);
6717 }
6718 if (changesMask[132])
6719 {
6720 data << uint8(NumBankSlots);
6721 }
6722 if (changesMask[133])
6723 {
6724 data << uint8(NumCharacterBankTabs);
6725 }
6726 }
6727 if (changesMask[134])
6728 {
6729 if (changesMask[135])
6730 {
6731 data << uint8(NumAccountBankTabs);
6732 }
6733 if (changesMask[136])
6734 {
6735 ResearchHistory->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6736 }
6737 if (changesMask[137])
6738 {
6739 data << *FrozenPerksVendorItem;
6740 }
6741 if (changesMask[138])
6742 {
6743 DiscordInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6744 }
6745 if (changesMask[140])
6746 {
6747 LevelLinkInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6748 }
6749 if (changesMask[141])
6750 {
6752 }
6753 if (changesMask[142])
6754 {
6755 data << int32(TimerunningSeasonID);
6756 }
6757 if (changesMask[143])
6758 {
6759 data << int32(TransportServerTime);
6760 }
6761 if (changesMask[144])
6762 {
6764 }
6765 if (changesMask[145])
6766 {
6768 }
6769 if (changesMask[146])
6770 {
6771 data << *DungeonScore;
6772 }
6773 if (changesMask[147])
6774 {
6775 WriteMapFieldUpdate(TraitConfigs, ignoreNestedChangesMask, data, receiver, owner);
6776 }
6777 if (changesMask[148])
6778 {
6780 }
6781 if (changesMask[149])
6782 {
6784 }
6785 if (changesMask[150])
6786 {
6788 }
6789 if (changesMask[151])
6790 {
6791 data << float(ItemUpgradeHighFingerWatermark);
6792 }
6793 if (changesMask[152])
6794 {
6796 }
6797 if (changesMask[153])
6798 {
6799 data << float(ItemUpgradeHighTrinketWatermark);
6800 }
6801 if (changesMask[154])
6802 {
6804 }
6805 if (changesMask[156])
6806 {
6808 }
6809 if (changesMask[158])
6810 {
6811 WriteMapFieldUpdate(DelveData, ignoreNestedChangesMask, data, receiver, owner);
6812 }
6813 if (changesMask[159])
6814 {
6815 WriteMapFieldUpdate(TransmogOutfits, ignoreNestedChangesMask, data, receiver, owner);
6816 }
6817 if (changesMask[161])
6818 {
6819 ViewedOutfit->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6820 }
6821 if (changesMask[162])
6822 {
6823 TransmogMetadata->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6824 }
6825 }
6826 if (changesMask[134])
6827 {
6828 data.WriteBit(QuestSession.has_value());
6829 data.WriteBit(PetStable.has_value());
6830 data.WriteBit(WalkInData.has_value());
6831 data.WriteBit(ChallengeModeData.has_value());
6832 data.FlushBits();
6833 if (changesMask[139])
6834 {
6835 if (QuestSession.has_value())
6836 {
6837 QuestSession->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6838 }
6839 }
6840 if (changesMask[155])
6841 {
6842 if (PetStable.has_value())
6843 {
6844 PetStable->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6845 }
6846 }
6847 if (changesMask[157])
6848 {
6849 if (WalkInData.has_value())
6850 {
6851 WalkInData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6852 }
6853 }
6854 if (changesMask[160])
6855 {
6856 if (ChallengeModeData.has_value())
6857 {
6858 ChallengeModeData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6859 }
6860 }
6861 }
6862 if (changesMask[163])
6863 {
6864 for (uint32 i = 0; i < 105; ++i)
6865 {
6866 if (changesMask[164 + i])
6867 {
6868 data << InvSlots[i];
6869 }
6870 }
6871 }
6872 if (changesMask[269])
6873 {
6874 for (uint32 i = 0; i < 2; ++i)
6875 {
6876 if (changesMask[270 + i])
6877 {
6878 RestInfo[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6879 }
6880 }
6881 }
6882 if (changesMask[272])
6883 {
6884 for (uint32 i = 0; i < 7; ++i)
6885 {
6886 if (changesMask[273 + i])
6887 {
6888 data << int32(ModDamageDonePos[i]);
6889 }
6890 if (changesMask[280 + i])
6891 {
6892 data << int32(ModDamageDoneNeg[i]);
6893 }
6894 if (changesMask[287 + i])
6895 {
6896 data << float(ModDamageDonePercent[i]);
6897 }
6898 if (changesMask[294 + i])
6899 {
6900 data << float(ModHealingDonePercent[i]);
6901 }
6902 }
6903 }
6904 if (changesMask[301])
6905 {
6906 for (uint32 i = 0; i < 3; ++i)
6907 {
6908 if (changesMask[302 + i])
6909 {
6910 data << float(WeaponDmgMultipliers[i]);
6911 }
6912 if (changesMask[305 + i])
6913 {
6914 data << float(WeaponAtkSpeedMultipliers[i]);
6915 }
6916 }
6917 }
6918 if (changesMask[308])
6919 {
6920 for (uint32 i = 0; i < 12; ++i)
6921 {
6922 if (changesMask[309 + i])
6923 {
6924 data << uint32(BuybackPrice[i]);
6925 }
6926 if (changesMask[321 + i])
6927 {
6928 data << int64(BuybackTimestamp[i]);
6929 }
6930 }
6931 }
6932 if (changesMask[333])
6933 {
6934 for (uint32 i = 0; i < 32; ++i)
6935 {
6936 if (changesMask[334 + i])
6937 {
6938 data << int32(CombatRatings[i]);
6939 }
6940 }
6941 }
6942 if (changesMask[366])
6943 {
6944 for (uint32 i = 0; i < 4; ++i)
6945 {
6946 if (changesMask[367 + i])
6947 {
6948 data << uint32(NoReagentCostMask[i]);
6949 }
6950 }
6951 }
6952 if (changesMask[371])
6953 {
6954 for (uint32 i = 0; i < 2; ++i)
6955 {
6956 if (changesMask[372 + i])
6957 {
6958 data << int32(ProfessionSkillLine[i]);
6959 }
6960 }
6961 }
6962 if (changesMask[374])
6963 {
6964 for (uint32 i = 0; i < 5; ++i)
6965 {
6966 if (changesMask[375 + i])
6967 {
6968 data << uint32(BagSlotFlags[i]);
6969 }
6970 }
6971 }
6972 if (changesMask[380])
6973 {
6974 for (uint32 i = 0; i < 17; ++i)
6975 {
6976 if (changesMask[381 + i])
6977 {
6978 data << float(ItemUpgradeHighWatermark[i]);
6979 }
6980 }
6981 }
6982}
6983
6985{
7157}
7158
7159void GameObjectAssistActionData::WriteCreate(ByteBuffer& data, Player const* receiver, GameObject const* owner) const
7160{
7161 data.WriteBits(PlayerName.size(), 6);
7162 data.WriteBits(MonsterName.size() + 1, 11);
7163 data << uint32(VirtualRealmAddress);
7164 data << uint8(Sex);
7165 data << int64(Time);
7166 data << int32(DelveTier);
7169}
7170
7172{
7173 return PlayerName == right.PlayerName
7174 && MonsterName == right.MonsterName
7176 && Sex == right.Sex
7177 && Time == right.Time
7178 && DelveTier == right.DelveTier;
7179}
7180
7181void GameObjectData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, GameObject const* owner) const
7182{
7184
7185 data << int32(DisplayID);
7186 data << uint32(SpellVisualID);
7187 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, receiver, owner));
7190 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, receiver, owner);
7191 data << uint32(stateWorldEffectIDs->size());
7193 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
7194 {
7195 data << uint32((*stateWorldEffectIDs)[i]);
7196 }
7197 data << *CreatedBy;
7198 data << *GuildGUID;
7199 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, receiver, owner));
7200 data << uint32(FlagsB);
7201 data << float(ParentRotation->x);
7202 data << float(ParentRotation->y);
7203 data << float(ParentRotation->z);
7204 data << float(ParentRotation->w);
7205 data << int32(FactionTemplate);
7206 data << int8(ViewerDependentValue<StateTag>::GetValue(this, receiver, owner));
7207 data << int8(TypeID);
7208 data << uint8(PercentHealth);
7209 data << uint32(ArtKit);
7210 data << uint32(EnableDoodadSets.size());
7211 data << uint32(CustomParam);
7212 data << int32(Level);
7213 data << uint32(AnimGroupInstance);
7214 data << uint32(UiWidgetItemID);
7215 data << uint32(UiWidgetItemQuality);
7216 data << uint32(UiWidgetItemCount);
7217 data << uint32(WorldEffects.size());
7218 for (uint32 i = 0; i < EnableDoodadSets.size(); ++i)
7219 {
7220 data << int32(EnableDoodadSets[i]);
7221 }
7222 for (uint32 i = 0; i < WorldEffects.size(); ++i)
7223 {
7224 data << int32(WorldEffects[i]);
7225 }
7227 data.FlushBits();
7229 {
7230 AssistActionData->WriteCreate(data, receiver, owner);
7231 }
7232}
7233
7234void GameObjectData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, GameObject const* owner) const
7235{
7236 WriteUpdate(_changesMask, data, receiver, owner, false);
7237}
7238
7239void GameObjectData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, GameObject const* owner, bool ignoreNestedChangesMask) const
7240{
7241 data.WriteBits(changesMask.GetBlock(0), 27);
7242
7244
7245 if (changesMask[0])
7246 {
7247 if (changesMask[1])
7248 {
7249 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, receiver, owner);
7250 data.WriteBits(stateWorldEffectIDs->size(), 32);
7251 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
7252 {
7253 data << uint32((*stateWorldEffectIDs)[i]);
7254 }
7255 }
7256 }
7257 data.FlushBits();
7258 if (changesMask[0])
7259 {
7260 if (changesMask[2])
7261 {
7262 if (!ignoreNestedChangesMask)
7264 else
7266 }
7267 if (changesMask[3])
7268 {
7269 if (!ignoreNestedChangesMask)
7271 else
7273 }
7274 }
7275 data.FlushBits();
7276 if (changesMask[0])
7277 {
7278 if (changesMask[2])
7279 {
7280 for (uint32 i = 0; i < EnableDoodadSets.size(); ++i)
7281 {
7282 if (EnableDoodadSets.HasChanged(i) || ignoreNestedChangesMask)
7283 {
7284 data << int32(EnableDoodadSets[i]);
7285 }
7286 }
7287 }
7288 if (changesMask[3])
7289 {
7290 for (uint32 i = 0; i < WorldEffects.size(); ++i)
7291 {
7292 if (WorldEffects.HasChanged(i) || ignoreNestedChangesMask)
7293 {
7294 data << int32(WorldEffects[i]);
7295 }
7296 }
7297 }
7298 if (changesMask[4])
7299 {
7300 data << int32(DisplayID);
7301 }
7302 if (changesMask[5])
7303 {
7304 data << uint32(SpellVisualID);
7305 }
7306 if (changesMask[6])
7307 {
7308 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, receiver, owner));
7309 }
7310 if (changesMask[7])
7311 {
7313 }
7314 if (changesMask[8])
7315 {
7317 }
7318 if (changesMask[9])
7319 {
7321 }
7322 if (changesMask[10])
7323 {
7324 data << *CreatedBy;
7325 }
7326 if (changesMask[11])
7327 {
7328 data << *GuildGUID;
7329 }
7330 if (changesMask[12])
7331 {
7332 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, receiver, owner));
7333 }
7334 if (changesMask[13])
7335 {
7336 data << uint32(FlagsB);
7337 }
7338 if (changesMask[14])
7339 {
7340 data << float(ParentRotation->x);
7341 data << float(ParentRotation->y);
7342 data << float(ParentRotation->z);
7343 data << float(ParentRotation->w);
7344 }
7345 if (changesMask[15])
7346 {
7347 data << int32(FactionTemplate);
7348 }
7349 if (changesMask[16])
7350 {
7351 data << int8(ViewerDependentValue<StateTag>::GetValue(this, receiver, owner));
7352 }
7353 if (changesMask[17])
7354 {
7355 data << int8(TypeID);
7356 }
7357 if (changesMask[18])
7358 {
7359 data << uint8(PercentHealth);
7360 }
7361 if (changesMask[19])
7362 {
7363 data << uint32(ArtKit);
7364 }
7365 if (changesMask[20])
7366 {
7367 data << uint32(CustomParam);
7368 }
7369 if (changesMask[21])
7370 {
7371 data << int32(Level);
7372 }
7373 if (changesMask[22])
7374 {
7375 data << uint32(AnimGroupInstance);
7376 }
7377 if (changesMask[23])
7378 {
7379 data << uint32(UiWidgetItemID);
7380 }
7381 if (changesMask[24])
7382 {
7383 data << uint32(UiWidgetItemQuality);
7384 }
7385 if (changesMask[25])
7386 {
7387 data << uint32(UiWidgetItemCount);
7388 }
7390 }
7391 data.FlushBits();
7392 if (changesMask[0])
7393 {
7394 if (changesMask[26])
7395 {
7397 {
7398 AssistActionData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7399 }
7400 }
7401 }
7402}
7403
7434
7435void DynamicObjectData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, DynamicObject const* owner) const
7436{
7437 data << *Caster;
7438 data << uint8(Type);
7439 SpellVisual->WriteCreate(data, receiver, owner);
7440 data << int32(SpellID);
7441 data << float(Radius);
7442 data << uint32(CastTime);
7443}
7444
7445void DynamicObjectData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, DynamicObject const* owner) const
7446{
7447 WriteUpdate(_changesMask, data, receiver, owner, false);
7448}
7449
7450void DynamicObjectData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, DynamicObject const* owner, bool ignoreNestedChangesMask) const
7451{
7452 data.WriteBits(changesMask.GetBlock(0), 7);
7453
7454 data.FlushBits();
7455 if (changesMask[0])
7456 {
7457 if (changesMask[1])
7458 {
7459 data << *Caster;
7460 }
7461 if (changesMask[2])
7462 {
7463 data << uint8(Type);
7464 }
7465 if (changesMask[3])
7466 {
7467 SpellVisual->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7468 }
7469 if (changesMask[4])
7470 {
7471 data << int32(SpellID);
7472 }
7473 if (changesMask[5])
7474 {
7475 data << float(Radius);
7476 }
7477 if (changesMask[6])
7478 {
7479 data << uint32(CastTime);
7480 }
7481 }
7482}
7483
7494
7495void CorpseData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Corpse const* owner) const
7496{
7497 data << uint32(DynamicFlags);
7498 data << *Owner;
7499 data << *PartyGUID;
7500 data << *GuildGUID;
7501 data << uint32(DisplayID);
7502 for (uint32 i = 0; i < 19; ++i)
7503 {
7504 data << uint32(Items[i]);
7505 }
7506 data << uint8(RaceID);
7507 data << uint8(Sex);
7508 data << uint8(Class);
7509 data << uint32(Customizations.size());
7510 data << uint32(Flags);
7511 data << int32(FactionTemplate);
7513 for (uint32 i = 0; i < Customizations.size(); ++i)
7514 {
7515 Customizations[i].WriteCreate(data, receiver, owner);
7516 }
7517}
7518
7519void CorpseData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Corpse const* owner) const
7520{
7521 WriteUpdate(_changesMask, data, receiver, owner, false);
7522}
7523
7524void CorpseData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Corpse const* owner, bool ignoreNestedChangesMask) const
7525{
7526 data.WriteBits(changesMask.GetBlocksMask(0), 2);
7527 for (uint32 i = 0; i < 2; ++i)
7528 if (changesMask.GetBlock(i))
7529 data.WriteBits(changesMask.GetBlock(i), 32);
7530
7531 if (changesMask[0])
7532 {
7533 if (changesMask[1])
7534 {
7535 if (!ignoreNestedChangesMask)
7537 else
7539 }
7540 }
7541 data.FlushBits();
7542 if (changesMask[0])
7543 {
7544 if (changesMask[1])
7545 {
7546 for (uint32 i = 0; i < Customizations.size(); ++i)
7547 {
7548 if (Customizations.HasChanged(i) || ignoreNestedChangesMask)
7549 {
7550 Customizations[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7551 }
7552 }
7553 }
7554 if (changesMask[2])
7555 {
7556 data << uint32(DynamicFlags);
7557 }
7558 if (changesMask[3])
7559 {
7560 data << *Owner;
7561 }
7562 if (changesMask[4])
7563 {
7564 data << *PartyGUID;
7565 }
7566 if (changesMask[5])
7567 {
7568 data << *GuildGUID;
7569 }
7570 if (changesMask[6])
7571 {
7572 data << uint32(DisplayID);
7573 }
7574 if (changesMask[7])
7575 {
7576 data << uint8(RaceID);
7577 }
7578 if (changesMask[8])
7579 {
7580 data << uint8(Sex);
7581 }
7582 if (changesMask[9])
7583 {
7584 data << uint8(Class);
7585 }
7586 if (changesMask[10])
7587 {
7588 data << uint32(Flags);
7589 }
7590 if (changesMask[11])
7591 {
7592 data << int32(FactionTemplate);
7593 }
7594 if (changesMask[12])
7595 {
7597 }
7598 }
7599 if (changesMask[13])
7600 {
7601 for (uint32 i = 0; i < 19; ++i)
7602 {
7603 if (changesMask[14 + i])
7604 {
7605 data << uint32(Items[i]);
7606 }
7607 }
7608 }
7609}
7610
7628
7629void OverrideCurve::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7630{
7631 data << uint32(StartTimeOffset);
7632 for (uint32 i = 0; i < 2; ++i)
7633 {
7634 data << Points[i];
7635 }
7636 data << uint32(ParameterCurve);
7638 data.FlushBits();
7639}
7640
7641void OverrideCurve::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7642{
7643 Mask changesMask = _changesMask;
7644 if (ignoreChangesMask)
7645 changesMask.SetAll();
7646
7647 data.WriteBits(changesMask.GetBlock(0), 7);
7648
7649 if (changesMask[0])
7650 {
7651 if (changesMask[1])
7652 {
7654 }
7655 }
7656 data.FlushBits();
7657 if (changesMask[0])
7658 {
7659 if (changesMask[2])
7660 {
7661 data << uint32(StartTimeOffset);
7662 }
7663 if (changesMask[3])
7664 {
7665 data << uint32(ParameterCurve);
7666 }
7667 }
7668 if (changesMask[4])
7669 {
7670 for (uint32 i = 0; i < 2; ++i)
7671 {
7672 if (changesMask[5 + i])
7673 {
7674 data << Points[i];
7675 }
7676 }
7677 }
7678}
7679
7688
7689void VisualAnim::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7690{
7692 data.WriteBit(IsDecay);
7693 data.FlushBits();
7694 data << uint32(AnimKitID);
7695 data << uint32(ServerTime);
7697 {
7698 data << int16(*AnimationDataID);
7699 }
7700}
7701
7702void VisualAnim::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7703{
7704 Mask changesMask = _changesMask;
7705 if (ignoreChangesMask)
7706 changesMask.SetAll();
7707
7708 data.WriteBits(changesMask.GetBlock(0), 5);
7709
7710 if (changesMask[0])
7711 {
7712 if (changesMask[1])
7713 {
7714 data.WriteBit(IsDecay);
7715 }
7717 }
7718 data.FlushBits();
7719 if (changesMask[0])
7720 {
7721 if (changesMask[3])
7722 {
7723 data << uint32(AnimKitID);
7724 }
7725 if (changesMask[4])
7726 {
7727 data << uint32(ServerTime);
7728 }
7729 }
7730 data.FlushBits();
7731 if (changesMask[0])
7732 {
7733 if (changesMask[2])
7734 {
7736 {
7737 data << int16(*AnimationDataID);
7738 }
7739 }
7740 }
7741}
7742
7751
7753{
7754 data << TriggerGUID;
7755 data << Pos;
7756 data << float(Rotation.x);
7757 data << float(Rotation.y);
7758 data << float(Rotation.z);
7759 data << float(Rotation.w);
7760}
7761
7763{
7764 return TriggerGUID == right.TriggerGUID
7765 && Pos == right.Pos
7766 && Rotation == right.Rotation;
7767}
7768
7770{
7771 data << int32(Field_0);
7772 data << float(Field_4);
7773}
7774
7775void AreaTriggerActionSetPeriodModifier::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7776{
7777 Mask changesMask = _changesMask;
7778 if (ignoreChangesMask)
7779 changesMask.SetAll();
7780
7781 data.WriteBits(changesMask.GetBlock(0), 3);
7782
7783 data.FlushBits();
7784 if (changesMask[0])
7785 {
7786 if (changesMask[1])
7787 {
7788 data << int32(Field_0);
7789 }
7790 if (changesMask[2])
7791 {
7792 data << float(Field_4);
7793 }
7794 }
7795}
7796
7803
7804void AreaTriggerSplineCalculator::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7805{
7806 data.WriteBits(Points.size(), 16);
7807 data.WriteBit(Linear);
7808 data.FlushBits();
7809 for (uint32 i = 0; i < Points.size(); ++i)
7810 {
7811 data << Points[i];
7812 }
7813 data.FlushBits();
7814}
7815
7816void AreaTriggerSplineCalculator::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7817{
7818 Mask changesMask = _changesMask;
7819 if (ignoreChangesMask)
7820 changesMask.SetAll();
7821
7822 data.WriteBits(changesMask.GetBlock(0), 3);
7823
7824 if (changesMask[0])
7825 {
7826 if (changesMask[1])
7827 {
7828 data.WriteBit(Linear);
7829 }
7830 if (changesMask[2])
7831 {
7832 if (!ignoreChangesMask)
7833 Points.WriteUpdateMask(data, 16);
7834 else
7836 }
7837 }
7838 data.FlushBits();
7839 if (changesMask[0])
7840 {
7841 if (changesMask[2])
7842 {
7843 for (uint32 i = 0; i < Points.size(); ++i)
7844 {
7845 if (Points.HasChanged(i) || ignoreChangesMask)
7846 {
7847 data << Points[i];
7848 }
7849 }
7850 }
7851 }
7852}
7853
7860
7861void AreaTriggerOrbit::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7862{
7863 data << *Center;
7864 data << float(Radius);
7865 data << float(InitialAngle);
7866 data << float(BlendFromRadius);
7867 data << int32(ExtraTimeForBlending);
7869 data.FlushBits();
7870}
7871
7872void AreaTriggerOrbit::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7873{
7874 Mask changesMask = _changesMask;
7875 if (ignoreChangesMask)
7876 changesMask.SetAll();
7877
7878 data.WriteBits(changesMask.GetBlock(0), 7);
7879
7880 if (changesMask[0])
7881 {
7882 if (changesMask[1])
7883 {
7885 }
7886 }
7887 data.FlushBits();
7888 if (changesMask[0])
7889 {
7890 if (changesMask[2])
7891 {
7892 data << *Center;
7893 }
7894 if (changesMask[3])
7895 {
7896 data << float(Radius);
7897 }
7898 if (changesMask[4])
7899 {
7900 data << float(InitialAngle);
7901 }
7902 if (changesMask[5])
7903 {
7904 data << float(BlendFromRadius);
7905 }
7906 if (changesMask[6])
7907 {
7908 data << int32(ExtraTimeForBlending);
7909 }
7910 }
7911}
7912
7923
7924void AreaTriggerMovementScript::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7925{
7926 data << int32(SpellScriptID);
7927 data << *Center;
7928 data << uint32(CreationTime);
7929}
7930
7931void AreaTriggerMovementScript::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7932{
7933 Mask changesMask = _changesMask;
7934 if (ignoreChangesMask)
7935 changesMask.SetAll();
7936
7937 data.WriteBits(changesMask.GetBlock(0), 4);
7938
7939 data.FlushBits();
7940 if (changesMask[0])
7941 {
7942 if (changesMask[1])
7943 {
7944 data << int32(SpellScriptID);
7945 }
7946 if (changesMask[2])
7947 {
7948 data << *Center;
7949 }
7950 if (changesMask[3])
7951 {
7952 data << uint32(CreationTime);
7953 }
7954 }
7955}
7956
7964
7965void AreaTriggerSphere::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7966{
7967 data << float(Radius);
7968 data << float(RadiusTarget);
7969}
7970
7971void AreaTriggerSphere::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7972{
7973 Mask changesMask = _changesMask;
7974 if (ignoreChangesMask)
7975 changesMask.SetAll();
7976
7977 data.WriteBits(changesMask.GetBlock(0), 3);
7978
7979 data.FlushBits();
7980 if (changesMask[0])
7981 {
7982 if (changesMask[1])
7983 {
7984 data << float(Radius);
7985 }
7986 if (changesMask[2])
7987 {
7988 data << float(RadiusTarget);
7989 }
7990 }
7991}
7992
7999
8000void AreaTriggerBox::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8001{
8002 data << *Extents;
8003 data << *ExtentsTarget;
8004}
8005
8006void AreaTriggerBox::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8007{
8008 Mask changesMask = _changesMask;
8009 if (ignoreChangesMask)
8010 changesMask.SetAll();
8011
8012 data.WriteBits(changesMask.GetBlock(0), 3);
8013
8014 data.FlushBits();
8015 if (changesMask[0])
8016 {
8017 if (changesMask[1])
8018 {
8019 data << *Extents;
8020 }
8021 if (changesMask[2])
8022 {
8023 data << *ExtentsTarget;
8024 }
8025 }
8026}
8027
8034
8035void AreaTriggerPolygon::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8036{
8037 data << uint32(Vertices.size());
8038 data << uint32(VerticesTarget.size());
8039 data << float(Height);
8040 data << float(HeightTarget);
8041 for (uint32 i = 0; i < Vertices.size(); ++i)
8042 {
8043 data << Vertices[i];
8044 }
8045 for (uint32 i = 0; i < VerticesTarget.size(); ++i)
8046 {
8047 data << VerticesTarget[i];
8048 }
8049}
8050
8051void AreaTriggerPolygon::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8052{
8053 Mask changesMask = _changesMask;
8054 if (ignoreChangesMask)
8055 changesMask.SetAll();
8056
8057 data.WriteBits(changesMask.GetBlock(0), 5);
8058
8059 if (changesMask[0])
8060 {
8061 if (changesMask[1])
8062 {
8063 if (!ignoreChangesMask)
8065 else
8067 }
8068 if (changesMask[2])
8069 {
8070 if (!ignoreChangesMask)
8072 else
8074 }
8075 }
8076 data.FlushBits();
8077 if (changesMask[0])
8078 {
8079 if (changesMask[1])
8080 {
8081 for (uint32 i = 0; i < Vertices.size(); ++i)
8082 {
8083 if (Vertices.HasChanged(i) || ignoreChangesMask)
8084 {
8085 data << Vertices[i];
8086 }
8087 }
8088 }
8089 if (changesMask[2])
8090 {
8091 for (uint32 i = 0; i < VerticesTarget.size(); ++i)
8092 {
8093 if (VerticesTarget.HasChanged(i) || ignoreChangesMask)
8094 {
8095 data << VerticesTarget[i];
8096 }
8097 }
8098 }
8099 if (changesMask[3])
8100 {
8101 data << float(Height);
8102 }
8103 if (changesMask[4])
8104 {
8105 data << float(HeightTarget);
8106 }
8107 }
8108}
8109
8118
8119void AreaTriggerCylinder::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8120{
8121 data << float(Radius);
8122 data << float(RadiusTarget);
8123 data << float(Height);
8124 data << float(HeightTarget);
8125 data << float(LocationZOffset);
8126 data << float(LocationZOffsetTarget);
8127}
8128
8129void AreaTriggerCylinder::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8130{
8131 Mask changesMask = _changesMask;
8132 if (ignoreChangesMask)
8133 changesMask.SetAll();
8134
8135 data.WriteBits(changesMask.GetBlock(0), 7);
8136
8137 data.FlushBits();
8138 if (changesMask[0])
8139 {
8140 if (changesMask[1])
8141 {
8142 data << float(Radius);
8143 }
8144 if (changesMask[2])
8145 {
8146 data << float(RadiusTarget);
8147 }
8148 if (changesMask[3])
8149 {
8150 data << float(Height);
8151 }
8152 if (changesMask[4])
8153 {
8154 data << float(HeightTarget);
8155 }
8156 if (changesMask[5])
8157 {
8158 data << float(LocationZOffset);
8159 }
8160 if (changesMask[6])
8161 {
8162 data << float(LocationZOffsetTarget);
8163 }
8164 }
8165}
8166
8177
8178void AreaTriggerDisk::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8179{
8180 data << float(InnerRadius);
8181 data << float(InnerRadiusTarget);
8182 data << float(OuterRadius);
8183 data << float(OuterRadiusTarget);
8184 data << float(Height);
8185 data << float(HeightTarget);
8186 data << float(LocationZOffset);
8187 data << float(LocationZOffsetTarget);
8188}
8189
8190void AreaTriggerDisk::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8191{
8192 Mask changesMask = _changesMask;
8193 if (ignoreChangesMask)
8194 changesMask.SetAll();
8195
8196 data.WriteBits(changesMask.GetBlock(0), 9);
8197
8198 data.FlushBits();
8199 if (changesMask[0])
8200 {
8201 if (changesMask[1])
8202 {
8203 data << float(InnerRadius);
8204 }
8205 if (changesMask[2])
8206 {
8207 data << float(InnerRadiusTarget);
8208 }
8209 if (changesMask[3])
8210 {
8211 data << float(OuterRadius);
8212 }
8213 if (changesMask[4])
8214 {
8215 data << float(OuterRadiusTarget);
8216 }
8217 if (changesMask[5])
8218 {
8219 data << float(Height);
8220 }
8221 if (changesMask[6])
8222 {
8223 data << float(HeightTarget);
8224 }
8225 if (changesMask[7])
8226 {
8227 data << float(LocationZOffset);
8228 }
8229 if (changesMask[8])
8230 {
8231 data << float(LocationZOffsetTarget);
8232 }
8233 }
8234}
8235
8248
8249void AreaTriggerBoundedPlane::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8250{
8251 data << float(ExtentsY);
8252 data << float(ExtentsZ);
8253 data << float(ExtentsTargetY);
8254 data << float(ExtentsTargetZ);
8255}
8256
8257void AreaTriggerBoundedPlane::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8258{
8259 Mask changesMask = _changesMask;
8260 if (ignoreChangesMask)
8261 changesMask.SetAll();
8262
8263 data.WriteBits(changesMask.GetBlock(0), 5);
8264
8265 data.FlushBits();
8266 if (changesMask[0])
8267 {
8268 if (changesMask[1])
8269 {
8270 data << float(ExtentsY);
8271 }
8272 if (changesMask[2])
8273 {
8274 data << float(ExtentsZ);
8275 }
8276 if (changesMask[3])
8277 {
8278 data << float(ExtentsTargetY);
8279 }
8280 if (changesMask[4])
8281 {
8282 data << float(ExtentsTargetZ);
8283 }
8284 }
8285}
8286
8295
8296void AreaTriggerData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8297{
8298 OverrideScaleCurve->WriteCreate(data, receiver, owner);
8299 ExtraScaleCurve->WriteCreate(data, receiver, owner);
8300 OverrideMoveCurveX->WriteCreate(data, receiver, owner);
8301 OverrideMoveCurveY->WriteCreate(data, receiver, owner);
8302 OverrideMoveCurveZ->WriteCreate(data, receiver, owner);
8303 OverrideShapeCurve->WriteCreate(data, receiver, owner);
8304 data << *Caster;
8305 data << uint32(Duration);
8306 data << uint32(TimeToTarget);
8307 data << uint32(TimeToTargetScale);
8309 data << uint32(TimeToTargetPos);
8310 data << uint32(TimeToTargetShape);
8311 data << int32(SpellID);
8312 data << int32(SpellForVisuals);
8313 SpellVisual->WriteCreate(data, receiver, owner);
8314 data << float(BoundsRadius2D);
8315 data << uint32(DecalPropertiesID);
8316 data << *CreatingEffectGUID;
8317 data << *OrbitPathTarget;
8318 data << *RollPitchYaw;
8319 data << int32(PositionalSoundKitID);
8320 data << uint32(MovementStartTime);
8321 data << uint32(CreationTime);
8322 data << float(ZOffset);
8323 data << uint32(Flags);
8324 VisualAnim->WriteCreate(data, receiver, owner);
8325 data << uint32(ScaleCurveId);
8326 data << uint32(FacingCurveId);
8327 data << uint32(MorphCurveId);
8328 data << uint32(MoveCurveId);
8329 data << float(Facing);
8330 data << int32(PathType);
8331 data << uint8(ShapeType);
8332 PeriodModifier->WriteCreate(data, receiver, owner);
8333 if (PathType == 0)
8334 {
8335 PathData.Get<UF::AreaTriggerSplineCalculator>()->WriteCreate(data, receiver, owner);
8336 }
8337 if (PathType == 1)
8338 {
8339 PathData.Get<UF::AreaTriggerOrbit>()->WriteCreate(data, receiver, owner);
8340 }
8341 if (PathType == 3)
8342 {
8343 PathData.Get<UF::AreaTriggerMovementScript>()->WriteCreate(data, receiver, owner);
8344 }
8345 if (ShapeType == 0)
8346 {
8347 ShapeData.Get<UF::AreaTriggerSphere>()->WriteCreate(data, receiver, owner);
8348 }
8349 if (ShapeType == 1)
8350 {
8351 ShapeData.Get<UF::AreaTriggerBox>()->WriteCreate(data, receiver, owner);
8352 }
8353 if (ShapeType == 2 || ShapeType == 3 || ShapeType == 5 || ShapeType == 6)
8354 {
8355 ShapeData.Get<UF::AreaTriggerPolygon>()->WriteCreate(data, receiver, owner);
8356 }
8357 if (ShapeType == 4)
8358 {
8359 ShapeData.Get<UF::AreaTriggerCylinder>()->WriteCreate(data, receiver, owner);
8360 }
8361 if (ShapeType == 7)
8362 {
8363 ShapeData.Get<UF::AreaTriggerDisk>()->WriteCreate(data, receiver, owner);
8364 }
8365 if (ShapeType == 8)
8366 {
8367 ShapeData.Get<UF::AreaTriggerBoundedPlane>()->WriteCreate(data, receiver, owner);
8368 }
8371 data.FlushBits();
8373 {
8374 data << *TargetRollPitchYaw;
8375 }
8377 {
8378 ForcedPositionAndRotation->WriteCreate(data, receiver, owner);
8379 }
8380}
8381
8382void AreaTriggerData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8383{
8384 WriteUpdate(_changesMask, data, receiver, owner, false);
8385}
8386
8387void AreaTriggerData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner, bool ignoreNestedChangesMask) const
8388{
8389 data << uint32(changesMask.GetBlock(0));
8390 data.WriteBits(changesMask.GetBlock(1), 7);
8391
8392 data.FlushBits();
8393 if (changesMask[0])
8394 {
8395 if (changesMask[1])
8396 {
8397 OverrideScaleCurve->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8398 }
8399 if (changesMask[2])
8400 {
8401 ExtraScaleCurve->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8402 }
8403 if (changesMask[3])
8404 {
8405 OverrideMoveCurveX->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8406 }
8407 if (changesMask[4])
8408 {
8409 OverrideMoveCurveY->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8410 }
8411 if (changesMask[5])
8412 {
8413 OverrideMoveCurveZ->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8414 }
8415 if (changesMask[6])
8416 {
8417 OverrideShapeCurve->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8418 }
8419 if (changesMask[7])
8420 {
8421 data << *Caster;
8422 }
8423 if (changesMask[8])
8424 {
8425 data << uint32(Duration);
8426 }
8427 if (changesMask[9])
8428 {
8429 data << uint32(TimeToTarget);
8430 }
8431 if (changesMask[10])
8432 {
8433 data << uint32(TimeToTargetScale);
8434 }
8435 if (changesMask[11])
8436 {
8438 }
8439 if (changesMask[12])
8440 {
8441 data << uint32(TimeToTargetPos);
8442 }
8443 if (changesMask[13])
8444 {
8445 data << uint32(TimeToTargetShape);
8446 }
8447 if (changesMask[14])
8448 {
8449 data << int32(SpellID);
8450 }
8451 if (changesMask[15])
8452 {
8453 data << int32(SpellForVisuals);
8454 }
8455 if (changesMask[16])
8456 {
8457 SpellVisual->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8458 }
8459 if (changesMask[17])
8460 {
8461 data << float(BoundsRadius2D);
8462 }
8463 if (changesMask[18])
8464 {
8465 data << uint32(DecalPropertiesID);
8466 }
8467 if (changesMask[19])
8468 {
8469 data << *CreatingEffectGUID;
8470 }
8471 if (changesMask[20])
8472 {
8473 data << *OrbitPathTarget;
8474 }
8475 if (changesMask[21])
8476 {
8477 data << *RollPitchYaw;
8478 }
8479 if (changesMask[22])
8480 {
8481 data << int32(PositionalSoundKitID);
8482 }
8483 if (changesMask[23])
8484 {
8485 data << uint32(MovementStartTime);
8486 }
8487 if (changesMask[24])
8488 {
8489 data << uint32(CreationTime);
8490 }
8491 if (changesMask[25])
8492 {
8493 data << float(ZOffset);
8494 }
8495 if (changesMask[27])
8496 {
8497 data << uint32(Flags);
8498 }
8499 if (changesMask[28])
8500 {
8501 VisualAnim->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8502 }
8503 if (changesMask[29])
8504 {
8505 data << uint32(ScaleCurveId);
8506 }
8507 if (changesMask[30])
8508 {
8509 data << uint32(FacingCurveId);
8510 }
8511 if (changesMask[31])
8512 {
8513 data << uint32(MorphCurveId);
8514 }
8515 }
8516 if (changesMask[32])
8517 {
8518 if (changesMask[33])
8519 {
8520 data << uint32(MoveCurveId);
8521 }
8522 if (changesMask[34])
8523 {
8524 data << float(Facing);
8525 }
8526 if (changesMask[36])
8527 {
8528 data << int32(PathType);
8529 }
8530 if (changesMask[37])
8531 {
8532 data << uint8(ShapeType);
8533 }
8534 if (changesMask[38])
8535 {
8536 PeriodModifier->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8537 }
8538 if (changesMask[36])
8539 {
8540 if (PathType == 0)
8541 {
8542 PathData.Get<UF::AreaTriggerSplineCalculator>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8543 }
8544 if (PathType == 1)
8545 {
8546 PathData.Get<UF::AreaTriggerOrbit>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8547 }
8548 if (PathType == 3)
8549 {
8550 PathData.Get<UF::AreaTriggerMovementScript>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8551 }
8552 }
8553 if (changesMask[37])
8554 {
8555 if (ShapeType == 0)
8556 {
8557 ShapeData.Get<UF::AreaTriggerSphere>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8558 }
8559 if (ShapeType == 1)
8560 {
8561 ShapeData.Get<UF::AreaTriggerBox>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8562 }
8563 if (ShapeType == 2 || ShapeType == 3 || ShapeType == 5 || ShapeType == 6)
8564 {
8565 ShapeData.Get<UF::AreaTriggerPolygon>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8566 }
8567 if (ShapeType == 4)
8568 {
8569 ShapeData.Get<UF::AreaTriggerCylinder>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8570 }
8571 if (ShapeType == 7)
8572 {
8573 ShapeData.Get<UF::AreaTriggerDisk>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8574 }
8575 if (ShapeType == 8)
8576 {
8577 ShapeData.Get<UF::AreaTriggerBoundedPlane>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8578 }
8579 }
8580 }
8581 if (changesMask[0])
8582 {
8584 }
8585 if (changesMask[32])
8586 {
8588 }
8589 data.FlushBits();
8590 if (changesMask[0])
8591 {
8592 if (changesMask[26])
8593 {
8595 {
8596 data << *TargetRollPitchYaw;
8597 }
8598 }
8599 }
8600 if (changesMask[32])
8601 {
8602 if (changesMask[35])
8603 {
8605 {
8606 ForcedPositionAndRotation->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8607 }
8608 }
8609 }
8610}
8611
8613{
8654}
8655
8656void SceneObjectData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
8657{
8658 data << int32(ScriptPackageID);
8659 data << uint32(RndSeedVal);
8660 data << *CreatedBy;
8661 data << uint32(SceneType);
8662}
8663
8664void SceneObjectData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
8665{
8666 WriteUpdate(_changesMask, data, receiver, owner, false);
8667}
8668
8669void SceneObjectData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
8670{
8671 data.WriteBits(changesMask.GetBlock(0), 5);
8672
8673 data.FlushBits();
8674 if (changesMask[0])
8675 {
8676 if (changesMask[1])
8677 {
8678 data << int32(ScriptPackageID);
8679 }
8680 if (changesMask[2])
8681 {
8682 data << uint32(RndSeedVal);
8683 }
8684 if (changesMask[3])
8685 {
8686 data << *CreatedBy;
8687 }
8688 if (changesMask[4])
8689 {
8690 data << uint32(SceneType);
8691 }
8692 }
8693}
8694
8703
8704void ConversationLine::WriteCreate(ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8705{
8706 data << int32(ConversationLineID);
8707 data << int32(BroadcastTextID);
8708 data << uint32(ViewerDependentValue<StartTimeTag>::GetValue(this, receiver, owner));
8709 data << int32(UiCameraID);
8710 data << uint8(ActorIndex);
8711 data << uint8(Flags);
8712 data << uint8(ChatType);
8713}
8714
8716{
8719 && StartTime == right.StartTime
8720 && UiCameraID == right.UiCameraID
8721 && ActorIndex == right.ActorIndex
8722 && Flags == right.Flags
8723 && ChatType == right.ChatType;
8724}
8725
8726void ConversationActor::WriteCreate(ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8727{
8728 data << uint32(CreatureID);
8730 data << ActorGUID;
8731 data << int32(Id);
8732 data.WriteBits(Type, 1);
8733 data.WriteBits(NoActorObject, 1);
8734 data.FlushBits();
8735}
8736
8738{
8739 return CreatureID == right.CreatureID
8741 && ActorGUID == right.ActorGUID
8742 && Id == right.Id
8743 && Type == right.Type
8744 && NoActorObject == right.NoActorObject;
8745}
8746
8747void ConversationData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8748{
8749 data << uint32(Lines->size());
8750 data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, receiver, owner));
8751 data << uint32(Progress);
8752 for (uint32 i = 0; i < Lines->size(); ++i)
8753 {
8754 (*Lines)[i].WriteCreate(data, receiver, owner);
8755 }
8757 data.WriteBit(Field_33);
8758 data << uint32(Actors.size());
8759 data << uint32(Flags);
8760 for (uint32 i = 0; i < Actors.size(); ++i)
8761 {
8762 Actors[i].WriteCreate(data, receiver, owner);
8763 }
8764 data.FlushBits();
8765}
8766
8767void ConversationData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8768{
8769 WriteUpdate(_changesMask, data, receiver, owner, false);
8770}
8771
8772void ConversationData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Conversation const* owner, bool ignoreNestedChangesMask) const
8773{
8774 data.WriteBits(changesMask.GetBlock(0), 8);
8775
8776 if (changesMask[0])
8777 {
8778 if (changesMask[1])
8779 {
8781 }
8782 if (changesMask[2])
8783 {
8784 data.WriteBit(Field_33);
8785 }
8786 if (changesMask[3])
8787 {
8788 data.WriteBits(Lines->size(), 32);
8789 for (uint32 i = 0; i < Lines->size(); ++i)
8790 {
8791 (*Lines)[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8792 }
8793 }
8794 }
8795 data.FlushBits();
8796 if (changesMask[0])
8797 {
8798 if (changesMask[4])
8799 {
8800 if (!ignoreNestedChangesMask)
8801 Actors.WriteUpdateMask(data);
8802 else
8804 }
8805 }
8806 data.FlushBits();
8807 if (changesMask[0])
8808 {
8809 if (changesMask[4])
8810 {
8811 for (uint32 i = 0; i < Actors.size(); ++i)
8812 {
8813 if (Actors.HasChanged(i) || ignoreNestedChangesMask)
8814 {
8815 Actors[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8816 }
8817 }
8818 }
8819 if (changesMask[5])
8820 {
8821 data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, receiver, owner));
8822 }
8823 if (changesMask[6])
8824 {
8825 data << uint32(Progress);
8826 }
8827 if (changesMask[7])
8828 {
8829 data << uint32(Flags);
8830 }
8831 }
8832}
8833
8845
8846void MeshObjectData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
8847{
8848 data.WriteBit(IsWMO);
8849 data.WriteBit(IsRoom);
8850 data.WriteBit(Geobox.has_value());
8851 data.FlushBits();
8852 data << int32(FileDataID);
8853 if (Geobox.has_value())
8854 {
8855 data << *Geobox;
8856 }
8857}
8858
8859void MeshObjectData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
8860{
8861 WriteUpdate(_changesMask, data, receiver, owner, false);
8862}
8863
8864void MeshObjectData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
8865{
8866 data.WriteBits(changesMask.GetBlock(0), 5);
8867
8868 if (changesMask[0])
8869 {
8870 if (changesMask[1])
8871 {
8872 data.WriteBit(IsWMO);
8873 }
8874 if (changesMask[2])
8875 {
8876 data.WriteBit(IsRoom);
8877 }
8878 data.WriteBit(Geobox.has_value());
8879 }
8880 data.FlushBits();
8881 if (changesMask[0])
8882 {
8883 if (changesMask[3])
8884 {
8885 data << int32(FileDataID);
8886 }
8887 if (changesMask[4])
8888 {
8889 if (Geobox.has_value())
8890 {
8891 data << *Geobox;
8892 }
8893 }
8894 }
8895}
8896
8905
8906void VendorData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Creature const* owner) const
8907{
8908 data << int32(Flags);
8909}
8910
8911void VendorData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Creature const* owner) const
8912{
8913 WriteUpdate(_changesMask, data, receiver, owner, false);
8914}
8915
8916void VendorData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Creature const* owner, bool ignoreNestedChangesMask) const
8917{
8918 data.WriteBits(changesMask.GetBlock(0), 2);
8919
8920 data.FlushBits();
8921 if (changesMask[0])
8922 {
8923 if (changesMask[1])
8924 {
8925 data << int32(Flags);
8926 }
8927 }
8928}
8929
8935
8936void DecorDyeSlots::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
8937{
8938 for (uint32 i = 0; i < 3; ++i)
8939 {
8940 data << int32(DyeColorID[i]);
8941 }
8942}
8943
8945{
8946 return DyeColorID == right.DyeColorID;
8947}
8948
8949void DecorStoragePersistedData::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
8950{
8951 data << *HouseGUID;
8952 data << uint8(PlacementStatus);
8953 data << uint8(SourceType);
8954 data.WriteBit(DyeSlots.has_value());
8955 data.WriteBits(SourceValue->size() + 1, 24);
8956 data.FlushBits();
8957 if (DyeSlots.has_value())
8958 {
8959 DyeSlots->WriteCreate(data, receiver, owner);
8960 }
8962}
8963
8964void DecorStoragePersistedData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
8965{
8966 Mask changesMask = _changesMask;
8967 if (ignoreChangesMask)
8968 changesMask.SetAll();
8969
8970 data.WriteBits(changesMask.GetBlock(0), 5);
8971
8972 data.FlushBits();
8973 if (changesMask[0])
8974 {
8975 data << *HouseGUID;
8976 }
8977 if (changesMask[1])
8978 {
8979 data << uint8(PlacementStatus);
8980 }
8981 if (changesMask[3])
8982 {
8983 data << uint8(SourceType);
8984 }
8985 data.WriteBit(DyeSlots.has_value());
8986 if (changesMask[4])
8987 {
8988 data.WriteBits(SourceValue->size() + 1, 24);
8989 }
8990 data.FlushBits();
8991 if (changesMask[2])
8992 {
8993 if (DyeSlots.has_value())
8994 {
8995 DyeSlots->WriteUpdate(ignoreChangesMask, data, receiver, owner);
8996 }
8997 }
8998 if (changesMask[4])
8999 {
9001 }
9002}
9003
9013
9014void DecorPetInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Object const* owner) const
9015{
9016 data << *BattlePetGUID;
9017 data << *SpawnGroup;
9018 data << *SpawnedPet;
9019 data << uint32(CreatureID);
9020 data << uint8(PetBehavior);
9021 data.WriteBits(PetName->size(), 6);
9022 data.FlushBits();
9024}
9025
9026void DecorPetInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Object const* owner) const
9027{
9028 Mask changesMask = _changesMask;
9029 if (ignoreChangesMask)
9030 changesMask.SetAll();
9031
9032 data.WriteBits(changesMask.GetBlock(0), 6);
9033
9034 data.FlushBits();
9035 if (changesMask[0])
9036 {
9037 data << *BattlePetGUID;
9038 }
9039 if (changesMask[1])
9040 {
9041 data << *SpawnGroup;
9042 }
9043 if (changesMask[2])
9044 {
9045 data << *SpawnedPet;
9046 }
9047 if (changesMask[3])
9048 {
9049 data << uint32(CreatureID);
9050 }
9051 if (changesMask[5])
9052 {
9053 data << uint8(PetBehavior);
9054 }
9055 if (changesMask[4])
9056 {
9057 data.WriteBits(PetName->size(), 6);
9058 }
9059 data.FlushBits();
9060 if (changesMask[4])
9061 {
9063 }
9064}
9065
9076
9077void HousingDecorData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9078{
9079 data << *DecorGUID;
9080 data << *AttachParentGUID;
9081 data << uint8(Flags);
9082 data << *TargetGameObjectGUID;
9084 data.WriteBit(PetInfo.has_value());
9085 data.FlushBits();
9087 {
9088 PersistedData->WriteCreate(data, receiver, owner);
9089 }
9090 if (PetInfo.has_value())
9091 {
9092 PetInfo->WriteCreate(data, receiver, owner);
9093 }
9094}
9095
9096void HousingDecorData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9097{
9098 WriteUpdate(_changesMask, data, receiver, owner, false);
9099}
9100
9101void HousingDecorData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
9102{
9103 data.WriteBits(changesMask.GetBlock(0), 7);
9104
9105 data.FlushBits();
9106 if (changesMask[0])
9107 {
9108 if (changesMask[1])
9109 {
9110 data << *DecorGUID;
9111 }
9112 if (changesMask[2])
9113 {
9114 data << *AttachParentGUID;
9115 }
9116 if (changesMask[3])
9117 {
9118 data << uint8(Flags);
9119 }
9120 if (changesMask[6])
9121 {
9122 data << *TargetGameObjectGUID;
9123 }
9124 }
9125 if (changesMask[0])
9126 {
9128 data.WriteBit(PetInfo.has_value());
9129 data.FlushBits();
9130 if (changesMask[4])
9131 {
9133 {
9134 PersistedData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9135 }
9136 }
9137 if (changesMask[5])
9138 {
9139 if (PetInfo.has_value())
9140 {
9141 PetInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9142 }
9143 }
9144 }
9145}
9146
9157
9158void HousingDoorData::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9159{
9160 data << int32(RoomComponentID);
9161 data << *RoomComponentOffset;
9162 data << uint8(RoomComponentType);
9163 data << *AttachedRoomGUID;
9164}
9165
9166void HousingDoorData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9167{
9168 Mask changesMask = _changesMask;
9169 if (ignoreChangesMask)
9170 changesMask.SetAll();
9171
9172 data.WriteBits(changesMask.GetBlock(0), 5);
9173
9174 data.FlushBits();
9175 if (changesMask[0])
9176 {
9177 if (changesMask[1])
9178 {
9179 data << int32(RoomComponentID);
9180 }
9181 if (changesMask[2])
9182 {
9183 data << *RoomComponentOffset;
9184 }
9185 if (changesMask[3])
9186 {
9187 data << uint8(RoomComponentType);
9188 }
9189 if (changesMask[4])
9190 {
9191 data << *AttachedRoomGUID;
9192 }
9193 }
9194}
9195
9204
9205void HousingRoomData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9206{
9207 data << *HouseGUID;
9208 data << int32(HouseRoomID);
9209 data << int32(Flags);
9210 data << uint32(MeshObjects.size());
9211 data << uint32(Doors.size());
9212 for (uint32 i = 0; i < MeshObjects.size(); ++i)
9213 {
9214 data << MeshObjects[i];
9215 }
9216 for (uint32 i = 0; i < Doors.size(); ++i)
9217 {
9218 Doors[i].WriteCreate(data, receiver, owner);
9219 }
9220}
9221
9222void HousingRoomData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9223{
9224 WriteUpdate(_changesMask, data, receiver, owner, false);
9225}
9226
9227void HousingRoomData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
9228{
9229 data.WriteBits(changesMask.GetBlock(0), 6);
9230
9231 if (changesMask[0])
9232 {
9233 if (changesMask[1])
9234 {
9235 if (!ignoreNestedChangesMask)
9237 else
9239 }
9240 if (changesMask[2])
9241 {
9242 if (!ignoreNestedChangesMask)
9243 Doors.WriteUpdateMask(data);
9244 else
9246 }
9247 }
9248 data.FlushBits();
9249 if (changesMask[0])
9250 {
9251 if (changesMask[1])
9252 {
9253 for (uint32 i = 0; i < MeshObjects.size(); ++i)
9254 {
9255 if (MeshObjects.HasChanged(i) || ignoreNestedChangesMask)
9256 {
9257 data << MeshObjects[i];
9258 }
9259 }
9260 }
9261 if (changesMask[2])
9262 {
9263 for (uint32 i = 0; i < Doors.size(); ++i)
9264 {
9265 if (Doors.HasChanged(i) || ignoreNestedChangesMask)
9266 {
9267 Doors[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9268 }
9269 }
9270 }
9271 if (changesMask[3])
9272 {
9273 data << *HouseGUID;
9274 }
9275 if (changesMask[4])
9276 {
9277 data << int32(HouseRoomID);
9278 }
9279 if (changesMask[5])
9280 {
9281 data << int32(Flags);
9282 }
9283 }
9284}
9285
9295
9296void HousingRoomComponentMeshData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9297{
9298 data << *RoomGUID;
9300 data << int32(RoomComponentID);
9301 data << uint8(Field_20);
9302 data << uint8(RoomComponentType);
9303 data << int32(Field_24);
9304 data << int32(HouseThemeID);
9307}
9308
9309void HousingRoomComponentMeshData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9310{
9311 WriteUpdate(_changesMask, data, receiver, owner, false);
9312}
9313
9314void HousingRoomComponentMeshData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
9315{
9316 data.WriteBits(changesMask.GetBlock(0), 10);
9317
9318 data.FlushBits();
9319 if (changesMask[0])
9320 {
9321 if (changesMask[1])
9322 {
9323 data << *RoomGUID;
9324 }
9325 if (changesMask[2])
9326 {
9328 }
9329 if (changesMask[3])
9330 {
9331 data << int32(RoomComponentID);
9332 }
9333 if (changesMask[4])
9334 {
9335 data << uint8(Field_20);
9336 }
9337 if (changesMask[5])
9338 {
9339 data << uint8(RoomComponentType);
9340 }
9341 if (changesMask[6])
9342 {
9343 data << int32(Field_24);
9344 }
9345 if (changesMask[7])
9346 {
9347 data << int32(HouseThemeID);
9348 }
9349 if (changesMask[8])
9350 {
9352 }
9353 if (changesMask[9])
9354 {
9356 }
9357 }
9358}
9359
9373
9374void HousingPlayerHouseData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9375{
9376 data << *BnetAccount;
9377 data << *CosmeticOwner;
9378 data << int32(PlotIndex);
9379 data << uint32(Level);
9380 data << uint64(Favor);
9384 data << uint32(RoomPlacementBudget);
9385 data << *EntityGUID;
9386}
9387
9388void HousingPlayerHouseData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9389{
9390 WriteUpdate(_changesMask, data, receiver, owner, false);
9391}
9392
9393void HousingPlayerHouseData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
9394{
9395 data.WriteBits(changesMask.GetBlock(0), 11);
9396
9397 data.FlushBits();
9398 if (changesMask[0])
9399 {
9400 if (changesMask[1])
9401 {
9402 data << *BnetAccount;
9403 }
9404 if (changesMask[2])
9405 {
9406 data << *CosmeticOwner;
9407 }
9408 if (changesMask[3])
9409 {
9410 data << int32(PlotIndex);
9411 }
9412 if (changesMask[4])
9413 {
9414 data << uint32(Level);
9415 }
9416 if (changesMask[5])
9417 {
9418 data << uint64(Favor);
9419 }
9420 if (changesMask[6])
9421 {
9423 }
9424 if (changesMask[7])
9425 {
9427 }
9428 if (changesMask[8])
9429 {
9431 }
9432 if (changesMask[9])
9433 {
9434 data << uint32(RoomPlacementBudget);
9435 }
9436 if (changesMask[10])
9437 {
9438 data << *EntityGUID;
9439 }
9440 }
9441}
9442
9457
9458void HousingCornerstoneData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, GameObject const* owner) const
9459{
9460 data << uint64(Cost);
9461 data << int32(PlotIndex);
9462}
9463
9464void HousingCornerstoneData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, GameObject const* owner) const
9465{
9466 WriteUpdate(_changesMask, data, receiver, owner, false);
9467}
9468
9469void HousingCornerstoneData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, GameObject const* owner, bool ignoreNestedChangesMask) const
9470{
9471 data.WriteBits(changesMask.GetBlock(0), 3);
9472
9473 data.FlushBits();
9474 if (changesMask[0])
9475 {
9476 if (changesMask[1])
9477 {
9478 data << uint64(Cost);
9479 }
9480 if (changesMask[2])
9481 {
9482 data << int32(PlotIndex);
9483 }
9484 }
9485}
9486
9493
9494void PlayerHouseInfo::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9495{
9496 data << HouseGUID;
9497 data << OwnerGUID;
9498}
9499
9501{
9502 return HouseGUID == right.HouseGUID
9503 && OwnerGUID == right.OwnerGUID;
9504}
9505
9506void HousingOwner::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9507{
9508 data << BnetAccountGUID;
9509 data << PlayerGUID;
9510}
9511
9513{
9514 return BnetAccountGUID == right.BnetAccountGUID
9515 && PlayerGUID == right.PlayerGUID;
9516}
9517
9518void NeighborhoodMirrorData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9519{
9520 data.WriteBits(Name->size() + 1, 8);
9521 data << *OwnerGUID;
9522 data << uint32(Houses.size());
9523 data << uint32(Managers.size());
9525 for (uint32 i = 0; i < Houses.size(); ++i)
9526 {
9527 Houses[i].WriteCreate(data, receiver, owner);
9528 }
9529 for (uint32 i = 0; i < Managers.size(); ++i)
9530 {
9531 Managers[i].WriteCreate(data, receiver, owner);
9532 }
9533}
9534
9535void NeighborhoodMirrorData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9536{
9537 WriteUpdate(_changesMask, data, receiver, owner, false);
9538}
9539
9540void NeighborhoodMirrorData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
9541{
9542 data.WriteBits(changesMask.GetBlock(0), 5);
9543
9544 if (changesMask[0])
9545 {
9546 if (changesMask[1])
9547 {
9548 if (!ignoreNestedChangesMask)
9549 Houses.WriteUpdateMask(data);
9550 else
9552 }
9553 if (changesMask[2])
9554 {
9555 if (!ignoreNestedChangesMask)
9557 else
9559 }
9560 }
9561 data.FlushBits();
9562 if (changesMask[0])
9563 {
9564 if (changesMask[1])
9565 {
9566 for (uint32 i = 0; i < Houses.size(); ++i)
9567 {
9568 if (Houses.HasChanged(i) || ignoreNestedChangesMask)
9569 {
9570 Houses[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9571 }
9572 }
9573 }
9574 if (changesMask[2])
9575 {
9576 for (uint32 i = 0; i < Managers.size(); ++i)
9577 {
9578 if (Managers.HasChanged(i) || ignoreNestedChangesMask)
9579 {
9580 Managers[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9581 }
9582 }
9583 }
9584 }
9585 data.FlushBits();
9586 if (changesMask[0])
9587 {
9588 if (changesMask[3])
9589 {
9590 data.WriteBits(Name->size() + 1, 8);
9591 }
9592 if (changesMask[4])
9593 {
9594 data << *OwnerGUID;
9595 }
9596 if (changesMask[3])
9597 {
9599 }
9600 }
9601}
9602
9611
9612void MirroredMeshObjectData::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9613{
9614 data << *AttachParentGUID;
9615 data << *PositionLocalSpace;
9616 data << float(RotationLocalSpace->x);
9617 data << float(RotationLocalSpace->y);
9618 data << float(RotationLocalSpace->z);
9619 data << float(RotationLocalSpace->w);
9620 data << float(ScaleLocalSpace);
9621 data << uint8(AttachmentFlags);
9622}
9623
9624void MirroredMeshObjectData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9625{
9626 Mask changesMask = _changesMask;
9627 if (ignoreChangesMask)
9628 changesMask.SetAll();
9629
9630 data.WriteBits(changesMask.GetBlock(0), 6);
9631
9632 data.FlushBits();
9633 if (changesMask[0])
9634 {
9635 if (changesMask[1])
9636 {
9637 data << *AttachParentGUID;
9638 }
9639 if (changesMask[2])
9640 {
9641 data << *PositionLocalSpace;
9642 }
9643 if (changesMask[3])
9644 {
9645 data << float(RotationLocalSpace->x);
9646 data << float(RotationLocalSpace->y);
9647 data << float(RotationLocalSpace->z);
9648 data << float(RotationLocalSpace->w);
9649 }
9650 if (changesMask[4])
9651 {
9652 data << float(ScaleLocalSpace);
9653 }
9654 if (changesMask[5])
9655 {
9656 data << uint8(AttachmentFlags);
9657 }
9658 }
9659}
9660
9670
9671void MirroredPositionData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9672{
9673 PositionData->WriteCreate(data, receiver, owner);
9674}
9675
9676void MirroredPositionData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9677{
9678 WriteUpdate(_changesMask, data, receiver, owner, false);
9679}
9680
9681void MirroredPositionData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
9682{
9683 data.WriteBits(changesMask.GetBlock(0), 2);
9684
9685 data.FlushBits();
9686 if (changesMask[0])
9687 {
9688 if (changesMask[1])
9689 {
9690 PositionData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9691 }
9692 }
9693}
9694
9700
9701void PlayerMirrorHouse::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
9702{
9703 data << HouseGUID;
9704 data << NeighborhoodGUID;
9705 data << uint32(Level);
9706 data << uint32(Favor);
9707 data << uint32(InitiativeFavor);
9708 data << int32(MapID);
9709 data << int32(PlotID);
9710}
9711
9713{
9714 return HouseGUID == right.HouseGUID
9716 && Level == right.Level
9717 && Favor == right.Favor
9719 && MapID == right.MapID
9720 && PlotID == right.PlotID;
9721}
9722
9723void NeighborhoodCharterSignature::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
9724{
9725 data << Guid;
9726}
9727
9729{
9730 return Guid == right.Guid;
9731}
9732
9733void NeighborhoodCharter::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
9734{
9735 data << int32(Field_0);
9736 data << int32(Field_4);
9737 data << uint32(Signatures.size());
9738 for (uint32 i = 0; i < Signatures.size(); ++i)
9739 {
9740 Signatures[i].WriteCreate(data, receiver, owner);
9741 }
9742 data.WriteBits(Name.size() + 1, 8);
9743 data.FlushBits();
9745}
9746
9748{
9749 return Signatures == right.Signatures
9750 && Field_0 == right.Field_0
9751 && Field_4 == right.Field_4
9752 && Name == right.Name;
9753}
9754
9755void NeighborhoodOwnershipTransfer::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
9756{
9757 data << NeighborhoodGUID;
9758 data << CurrentOwnerGUID;
9759 data.WriteBits(NeighborhoodName.size() + 1, 8);
9760 data.FlushBits();
9762}
9763
9770
9771void PlayerHouseInfoComponentData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
9772{
9773 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
9774 {
9775 data << uint32(Field_8.size());
9776 }
9777 data << uint32(Houses.size());
9778 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
9779 {
9780 data << uint32(Field_88.size());
9781 data << uint32(Field_C0.size());
9782 data << uint32(Field_F8.size());
9783 data << uint32(Field_130.size());
9784 Charter->WriteCreate(data, receiver, owner);
9785 data << uint8(EditorMode);
9786 NeighborhoodOwnershipTransfer->WriteCreate(data, receiver, owner);
9787 data << *CurrentHouse;
9788 for (uint32 i = 0; i < Field_8.size(); ++i)
9789 {
9790 data << Field_8[i];
9791 }
9792 }
9793 for (uint32 i = 0; i < Houses.size(); ++i)
9794 {
9795 Houses[i].WriteCreate(data, receiver, owner);
9796 }
9797 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
9798 {
9799 for (uint32 i = 0; i < Field_88.size(); ++i)
9800 {
9801 data << Field_88[i];
9802 }
9803 for (uint32 i = 0; i < Field_C0.size(); ++i)
9804 {
9805 data << Field_C0[i];
9806 }
9807 for (uint32 i = 0; i < Field_F8.size(); ++i)
9808 {
9809 data << Field_F8[i];
9810 }
9811 for (uint32 i = 0; i < Field_130.size(); ++i)
9812 {
9813 data << Field_130[i];
9814 }
9815 }
9816}
9817
9819{
9820 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
9821 allowedMaskForTarget |= std::array<uint32, 1>{ 0x000007FAu };
9822}
9823
9825{
9826 PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
9827}
9828
9830{
9831 Mask allowedMaskForTarget({ 0x00000005u });
9832 PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
9833 changesMask &= allowedMaskForTarget;
9834}
9835
9836void PlayerHouseInfoComponentData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
9837{
9838 Mask allowedMaskForTarget({ 0x00000005u });
9839 PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
9840 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
9841}
9842
9843void PlayerHouseInfoComponentData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Player const* owner, bool ignoreNestedChangesMask) const
9844{
9845 data.WriteBits(changesMask.GetBlock(0), 11);
9846
9847 if (changesMask[0])
9848 {
9849 if (changesMask[1])
9850 {
9851 if (!ignoreNestedChangesMask)
9853 else
9855 }
9856 if (changesMask[2])
9857 {
9858 if (!ignoreNestedChangesMask)
9859 Houses.WriteUpdateMask(data);
9860 else
9862 }
9863 if (changesMask[3])
9864 {
9865 if (!ignoreNestedChangesMask)
9867 else
9869 }
9870 if (changesMask[4])
9871 {
9872 if (!ignoreNestedChangesMask)
9874 else
9876 }
9877 if (changesMask[5])
9878 {
9879 if (!ignoreNestedChangesMask)
9881 else
9883 }
9884 if (changesMask[6])
9885 {
9886 if (!ignoreNestedChangesMask)
9888 else
9890 }
9891 }
9892 data.FlushBits();
9893 if (changesMask[0])
9894 {
9895 if (changesMask[1])
9896 {
9897 for (uint32 i = 0; i < Field_8.size(); ++i)
9898 {
9899 if (Field_8.HasChanged(i) || ignoreNestedChangesMask)
9900 {
9901 data << Field_8[i];
9902 }
9903 }
9904 }
9905 if (changesMask[2])
9906 {
9907 for (uint32 i = 0; i < Houses.size(); ++i)
9908 {
9909 if (Houses.HasChanged(i) || ignoreNestedChangesMask)
9910 {
9911 Houses[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9912 }
9913 }
9914 }
9915 if (changesMask[3])
9916 {
9917 for (uint32 i = 0; i < Field_88.size(); ++i)
9918 {
9919 if (Field_88.HasChanged(i) || ignoreNestedChangesMask)
9920 {
9921 data << Field_88[i];
9922 }
9923 }
9924 }
9925 if (changesMask[4])
9926 {
9927 for (uint32 i = 0; i < Field_C0.size(); ++i)
9928 {
9929 if (Field_C0.HasChanged(i) || ignoreNestedChangesMask)
9930 {
9931 data << Field_C0[i];
9932 }
9933 }
9934 }
9935 if (changesMask[5])
9936 {
9937 for (uint32 i = 0; i < Field_F8.size(); ++i)
9938 {
9939 if (Field_F8.HasChanged(i) || ignoreNestedChangesMask)
9940 {
9941 data << Field_F8[i];
9942 }
9943 }
9944 }
9945 if (changesMask[6])
9946 {
9947 for (uint32 i = 0; i < Field_130.size(); ++i)
9948 {
9949 if (Field_130.HasChanged(i) || ignoreNestedChangesMask)
9950 {
9951 data << Field_130[i];
9952 }
9953 }
9954 }
9955 if (changesMask[7])
9956 {
9957 Charter->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9958 }
9959 if (changesMask[8])
9960 {
9961 data << uint8(EditorMode);
9962 }
9963 if (changesMask[9])
9964 {
9965 NeighborhoodOwnershipTransfer->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9966 }
9967 if (changesMask[10])
9968 {
9969 data << *CurrentHouse;
9970 }
9971 }
9972}
9973
9988
9989void HousingStorageData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9990{
9991 WriteMapFieldCreate(Decor, data, receiver, owner);
9992 data << uint32(DecorMaxOwnedCount);
9993}
9994
9995void HousingStorageData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9996{
9997 WriteUpdate(_changesMask, data, receiver, owner, false);
9998}
9999
10000void HousingStorageData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
10001{
10002 data.WriteBits(changesMask.GetBlock(0), 3);
10003
10004 data.FlushBits();
10005 if (changesMask[0])
10006 {
10007 if (changesMask[1])
10008 {
10009 WriteMapFieldUpdate(Decor, ignoreNestedChangesMask, data, receiver, owner);
10010 }
10011 if (changesMask[2])
10012 {
10013 data << uint32(DecorMaxOwnedCount);
10014 }
10015 }
10016}
10017
10024
10025void HousingFixtureData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
10026{
10027 data << int32(ExteriorComponentID);
10030 data << *HouseGUID;
10031 data << *AttachParentGUID;
10032 data << *Guid;
10033 data << *GameObjectGUID;
10035 data << uint8(Field_59);
10036 data << uint8(Size);
10037}
10038
10039void HousingFixtureData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
10040{
10041 WriteUpdate(_changesMask, data, receiver, owner, false);
10042}
10043
10044void HousingFixtureData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
10045{
10046 data.WriteBits(changesMask.GetBlock(0), 11);
10047
10048 data.FlushBits();
10049 if (changesMask[0])
10050 {
10051 if (changesMask[1])
10052 {
10053 data << int32(ExteriorComponentID);
10054 }
10055 if (changesMask[2])
10056 {
10058 }
10059 if (changesMask[3])
10060 {
10062 }
10063 if (changesMask[4])
10064 {
10065 data << *HouseGUID;
10066 }
10067 if (changesMask[5])
10068 {
10069 data << *AttachParentGUID;
10070 }
10071 if (changesMask[6])
10072 {
10073 data << *Guid;
10074 }
10075 if (changesMask[7])
10076 {
10077 data << *GameObjectGUID;
10078 }
10079 if (changesMask[8])
10080 {
10082 }
10083 if (changesMask[9])
10084 {
10085 data << uint8(Field_59);
10086 }
10087 if (changesMask[10])
10088 {
10089 data << uint8(Size);
10090 }
10091 }
10092}
10093
10108
10109void PlayerInitiativeInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
10110{
10111 data << int64(RemainingDuration);
10112 data << int32(CurrentInitiativeID);
10113 data << int32(CurrentMilestoneID);
10114 data << int32(CurrentCycleID);
10115 data << float(ProgressRequired);
10116 data << float(CurrentProgress);
10117 data << float(PlayerTotalContribution);
10118}
10119
10120void PlayerInitiativeInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
10121{
10122 Mask changesMask = _changesMask;
10123 if (ignoreChangesMask)
10124 changesMask.SetAll();
10125
10126 data.WriteBits(changesMask.GetBlock(0), 7);
10127
10128 data.FlushBits();
10129 if (changesMask[0])
10130 {
10131 data << int64(RemainingDuration);
10132 }
10133 if (changesMask[1])
10134 {
10135 data << int32(CurrentInitiativeID);
10136 }
10137 if (changesMask[2])
10138 {
10139 data << int32(CurrentMilestoneID);
10140 }
10141 if (changesMask[3])
10142 {
10143 data << int32(CurrentCycleID);
10144 }
10145 if (changesMask[4])
10146 {
10147 data << float(ProgressRequired);
10148 }
10149 if (changesMask[5])
10150 {
10151 data << float(CurrentProgress);
10152 }
10153 if (changesMask[6])
10154 {
10155 data << float(PlayerTotalContribution);
10156 }
10157}
10158
10170
10171void PlayerInitiativeTaskInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
10172{
10173 data << int32(TaskID);
10174 data << int32(TimesCompleted);
10175}
10176
10177void PlayerInitiativeTaskInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
10178{
10179 Mask changesMask = _changesMask;
10180 if (ignoreChangesMask)
10181 changesMask.SetAll();
10182
10183 data.WriteBits(changesMask.GetBlock(0), 2);
10184
10185 data.FlushBits();
10186 if (changesMask[0])
10187 {
10188 data << int32(TaskID);
10189 }
10190 if (changesMask[1])
10191 {
10192 data << int32(TimesCompleted);
10193 }
10194}
10195
10202
10203void NICompletedMilestoneEntry::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
10204{
10205 data << int64(AwardDate);
10206 data << uint32(MilestoneID);
10207}
10208
10210{
10211 return AwardDate == right.AwardDate
10212 && MilestoneID == right.MilestoneID;
10213}
10214
10215void NICompletedInitiativesEntry::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
10216{
10217 data << uint32(InitiativeID);
10218 data << uint32(CompletedMilestones.size());
10219 for (uint32 i = 0; i < CompletedMilestones.size(); ++i)
10220 {
10221 CompletedMilestones[i].WriteCreate(data, receiver, owner);
10222 }
10223 data.WriteBit(Completed);
10224 data.FlushBits();
10225}
10226
10228{
10229 return Completed == right.Completed
10231 && InitiativeID == right.InitiativeID;
10232}
10233
10234void PlayerInitiativeComponentData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
10235{
10236 data << *NeighborhoodGUID;
10237 InitiativeInfo->WriteCreate(data, receiver, owner);
10238 data << uint32(CompletedTasks.size());
10239 data << uint32(CompletedInitiatives.size());
10240 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
10241 {
10242 WriteSetFieldCreate(Houses, data, receiver, owner);
10243 }
10244 for (uint32 i = 0; i < CompletedTasks.size(); ++i)
10245 {
10246 CompletedTasks[i].WriteCreate(data, receiver, owner);
10247 }
10248 for (uint32 i = 0; i < CompletedInitiatives.size(); ++i)
10249 {
10250 CompletedInitiatives[i].WriteCreate(data, receiver, owner);
10251 }
10252}
10253
10255{
10256 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
10257 allowedMaskForTarget |= std::array<uint32, 1>{ 0x00000020u };
10258}
10259
10261{
10262 PlayerInitiativeComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
10263}
10264
10266{
10267 Mask allowedMaskForTarget({ 0x0000001Fu });
10268 PlayerInitiativeComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
10269 changesMask &= allowedMaskForTarget;
10270}
10271
10272void PlayerInitiativeComponentData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
10273{
10274 Mask allowedMaskForTarget({ 0x0000001Fu });
10275 PlayerInitiativeComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
10276 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
10277}
10278
10279void PlayerInitiativeComponentData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Player const* owner, bool ignoreNestedChangesMask) const
10280{
10281 data.WriteBits(changesMask.GetBlock(0), 6);
10282
10283 if (changesMask[0])
10284 {
10285 if (changesMask[1])
10286 {
10287 if (!ignoreNestedChangesMask)
10289 else
10291 }
10292 if (changesMask[2])
10293 {
10294 if (!ignoreNestedChangesMask)
10296 else
10298 }
10299 }
10300 data.FlushBits();
10301 if (changesMask[0])
10302 {
10303 if (changesMask[1])
10304 {
10305 for (uint32 i = 0; i < CompletedTasks.size(); ++i)
10306 {
10307 if (CompletedTasks.HasChanged(i) || ignoreNestedChangesMask)
10308 {
10309 CompletedTasks[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
10310 }
10311 }
10312 }
10313 if (changesMask[2])
10314 {
10315 for (uint32 i = 0; i < CompletedInitiatives.size(); ++i)
10316 {
10317 if (CompletedInitiatives.HasChanged(i) || ignoreNestedChangesMask)
10318 {
10319 CompletedInitiatives[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
10320 }
10321 }
10322 }
10323 if (changesMask[3])
10324 {
10325 data << *NeighborhoodGUID;
10326 }
10327 if (changesMask[4])
10328 {
10329 InitiativeInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
10330 }
10331 if (changesMask[5])
10332 {
10333 WriteSetFieldUpdate(Houses, ignoreNestedChangesMask, data, receiver, owner);
10334 }
10335 }
10336}
10337
10347
10348}
10349
10350#if TRINITY_COMPILER_IS_GCC
10351#pragma GCC diagnostic pop
10352#else
10353#pragma warning(pop)
10354#endif
ToyFlags
uint8_t uint8
Definition Define.h:156
int64_t int64
Definition Define.h:149
int16_t int16
Definition Define.h:151
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
TypeID
Definition ObjectGuid.h:37
ChatType
Definition ObjectMgr.h:135
PathType
PlayerFlags
Definition Player.h:511
BagSlotFlags
Definition Player.h:850
PlayerFlagsEx
Definition Player.h:549
std::map< uint32, ReputationRank > ForcedReactions
SceneType
Definition SceneObject.h:27
CreatureFamily
CreatureType
Stats
ShapeshiftForm
AnimTier
Definition UnitDefines.h:69
Definition Bag.h:27
bool WriteBit(bool bit)
Definition ByteBuffer.h:159
void FlushBits()
Definition ByteBuffer.h:142
void WriteBits(uint64 value, int32 bits)
Definition ByteBuffer.h:186
constexpr bool HasFlag(T flag) const
Definition EnumFlag.h:106
Definition Item.h:185
bool HasChanged(uint32 index) const
void WriteUpdateMask(ByteBuffer &data, int32 bitsForSize=32) const
std::size_t size() const
static void ClearChangesMask(UpdateFieldBase< T > &field)
UpdateMask< Bits > Mask
T const * Get() const noexcept
Definition Unit.h:647
constexpr uint32 GetBlock(uint32 index) const
Definition UpdateMask.h:59
constexpr void ResetAll()
Definition UpdateMask.h:85
constexpr void SetAll()
Definition UpdateMask.h:98
constexpr uint32 GetBlocksMask(uint32 index) const
Definition UpdateMask.h:54
TargetType
Definition hyjalAI.h:104
constexpr std::size_t size()
static constexpr void AzeriteItemDataAppendAllowedFieldsMaskForFlag(AzeriteItemData::Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void WriteMapFieldCreate(MapUpdateFieldBase< K, V > const &map, ByteBuffer &data, Player const *receiver, T const *owner)
static constexpr void PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(PlayerHouseInfoComponentData::Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
static constexpr void PlayerDataAppendAllowedFieldsMaskForFlag(PlayerData::Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void WriteSetFieldUpdate(SetUpdateFieldBase< T > const &set, bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, O const *owner)
void WriteCompleteDynamicFieldUpdateMask(std::size_t size, ByteBuffer &data, int32 bitsForSize=32)
static constexpr void PlayerInitiativeComponentDataAppendAllowedFieldsMaskForFlag(PlayerInitiativeComponentData::Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
static constexpr void ItemDataAppendAllowedFieldsMaskForFlag(ItemData::Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void WriteMapFieldUpdate(MapUpdateFieldBase< K, V > const &map, bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, T const *owner)
void WriteSetFieldCreate(SetUpdateFieldBase< T > const &set, ByteBuffer &data, Player const *receiver, O const *owner)
static constexpr void UnitDataAppendAllowedFieldsMaskForFlag(UnitData::Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
DataWriter< Container > Data(Container const &value)
DataWriter< Container > Data(Container const &value)
UpdateField< uint32, 32, 66 > TrackCreatureMask
UpdateField< int32, 134, 150 > ItemUpgradeHighFingerItemID
UpdateField< int32, 102, 111 > WatchedFactionIndex
UpdateField< float, 70, 80 > SpellCritPercentage
UpdateField< uint8, 102, 132 > NumBankSlots
DynamicUpdateField< uint64, 0, 7 > KnownTitles
DynamicUpdateField< UF::PlayerDataElement, 0, 9 > AccountDataElements
UpdateFieldArray< uint32, 4, 366, 367 > NoReagentCostMask
DynamicUpdateField< uint32, 0, 15 > HeirloomFlags
UpdateField< bool, 0, 3 > BankAutoSortDisabled
UpdateField< uint16, 102, 108 > TodayHonorableKills
MapUpdateField< int32, UF::TraitConfig, 134, 147 > TraitConfigs
UpdateFieldArray< float, 17, 380, 381 > ItemUpgradeHighWatermark
UpdateField< uint32, 134, 148 > ActiveCombatTraitConfigID
UpdateField< float, 70, 94 > ModPeriodicHealingDonePercent
UpdateField< float, 70, 90 > PvpPowerHealing
MapUpdateField< uint32, UF::TransmogOutfitData, 134, 159 > TransmogOutfits
UpdateField< uint64, 134, 154 > LootHistoryInstanceID
UpdateField< int32, 102, 112 > MaxLevel
UpdateFieldArray< int64, 12, 308, 321 > BuybackTimestamp
UpdateField< int32, 70, 99 > ModTargetResistance
DynamicUpdateField< UF::CharacterRestriction, 0, 30 > CharacterRestrictions
DynamicUpdateField< UF::NPCCraftingOrderInfo, 32, 44 > NpcCraftingOrders
UpdateField< float, 70, 72 > BlockPercentage
UpdateField< bool, 0, 2 > BackpackSellJunkDisabled
UpdateFieldArray< DynamicUpdateFieldBase< uint32 >, 1, 52, 53 > ResearchSiteProgress
UpdateField< ObjectGuid, 32, 57 > SummonedBattlePetGUID
DynamicUpdateField< UF::ReplayedQuest, 32, 39 > ReplayedQuests
UpdateField< int8, 102, 122 > JailersTowerLevel
UpdateField< int32, 70, 87 > Versatility
DynamicUpdateField< uint32, 0, 27 > HouseRoomComponentTextures
UpdateField< uint32, 70, 101 > LocalFlags
UpdateField< int32, 134, 149 > ItemUpgradeHighOnehandWeaponItemID
DynamicUpdateField< UF::BankTabSettings, 32, 48 > CharacterBankTabSettings
UpdateField< float, 32, 68 > OffhandExpertise
UpdateField< int16, 134, 145 > DEBUGSoulbindConduitRank
DynamicUpdateField< uint32, 0, 28 > HouseTypes
UpdateField< int32, 134, 152 > ItemUpgradeHighTrinketItemID
UpdateField< uint8, 102, 125 > NumBackpackSlots
UpdateField< UF::TransmogOutfitMetadata, 134, 162 > TransmogMetadata
DynamicUpdateField< int32, 32, 41 > DisabledSpells
UpdateField< float, 70, 77 > CritPercentage
DynamicUpdateField< uint32, 0, 24 > HouseRooms
DynamicUpdateField< int32, 0, 19 > ConditionalTransmog
UpdateField< uint8, 102, 115 > TransmogCostMinScalingLevel
UpdateField< float, 32, 69 > RangedExpertise
DynamicUpdateField< uint32, 0, 23 > WarbandScenes
UpdateField< float, 70, 74 > DodgePercentageFromAttribute
UpdateFieldArray< float, 3, 301, 302 > WeaponDmgMultipliers
UpdateFieldArray< float, 3, 301, 305 > WeaponAtkSpeedMultipliers
UpdateField< float, 134, 153 > ItemUpgradeHighTrinketWatermark
UpdateField< float, 102, 118 > UiSpellHitModifier
UpdateFieldArray< uint32, 12, 308, 309 > BuybackPrice
UpdateFieldArray< int32, 32, 333, 334 > CombatRatings
UpdateField< WorldPackets::MythicPlus::DungeonScoreData, 134, 146 > DungeonScore
DynamicUpdateField< int32, 0, 11 > DailyQuestsCompleted
DynamicUpdateField< int32, 0, 12 > Field_1328
UpdateField< bool, 0, 6 > HasPerksProgramPendingReward
UpdateField< int32, 70, 92 > ModHealingDonePos
UpdateFieldArray< float, 7, 272, 287 > ModDamageDonePercent
DynamicUpdateField< int32, 0, 13 > AvailableQuestLineXQuestIDs
UpdateField< int32, 102, 131 > PerksProgramCurrency
DynamicUpdateField< int32, 0, 29 > UnlockedTransmogOutfits
DynamicUpdateField< int32, 0, 16 > Toys
DynamicUpdateField< UF::SpellFlatPVPModByLabel, 32, 35 > SpellFlatModPVPByLabel
UpdateField< float, 70, 82 > ShieldBlockCritPercentage
UpdateField< int32, 32, 62 > TrialXP
UpdateField< uint8, 102, 133 > NumCharacterBankTabs
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint64, 32, 58 > Coinage
UpdateField< float, 70, 83 > Mastery
DynamicUpdateField< uint32, 0, 18 > Transmog
UpdateField< uint32, 102, 107 > PvpMedals
DynamicUpdateField< UF::PersonalCraftingOrderCount, 32, 43 > PersonalCraftingOrderCounts
UpdateFieldArray< int32, 7, 272, 280 > ModDamageDoneNeg
UpdateField< UF::SkillInfo, 32, 63 > Skill
UpdateField< int32, 102, 129 > Honor
UpdateField< float, 70, 73 > DodgePercentage
DynamicUpdateField< uint32, 0, 26 > HouseThemes
UpdateField< int32, 70, 100 > ModTargetPhysicalResistance
UpdateField< float, 70, 84 > Speed
UpdateField< int32, 32, 61 > NextLevelXP
DynamicUpdateField< UF::PVPInfo, 0, 10 > PvpInfo
UpdateField< float, 70, 88 > VersatilityBonus
UpdateField< float, 70, 89 > PvpPowerDamage
UpdateField< int32, 32, 60 > XP
UpdateField< float, 70, 78 > RangedCritPercentage
UpdateField< uint8, 134, 156 > RequiredMountCapabilityFlags
UpdateField< float, 102, 120 > ModPetHaste
UpdateField< UF::TransmogOutfitData, 134, 161 > ViewedOutfit
DynamicUpdateField< uint32, 0, 21 > RuneforgePowers
UpdateField< bool, 0, 4 > SortBagsRightToLeft
DynamicUpdateField< UF::CraftingOrder, 32, 42 > CraftingOrders
UpdateField< uint16, 102, 109 > YesterdayHonorableKills
UpdateField< uint16, 102, 127 > LootSpecID
DynamicUpdateField< UF::RecipeProgressionInfo, 32, 38 > RecipeProgression
UpdateField< float, 70, 76 > ParryPercentageFromAttribute
UpdateField< int32, 134, 143 > TransportServerTime
UpdateField< uint32, 102, 128 > OverrideZonePVPType
UpdateField< float, 70, 79 > OffhandCritPercentage
UpdateField< int32, 32, 64 > CharacterPoints
UpdateField< uint64, 32, 59 > AccountBankCoinage
UpdateField< uint8, 102, 105 > LifetimeMaxRank
UpdateField< uint8, 134, 135 > NumAccountBankTabs
UpdateField< int32, 102, 130 > HonorNextLevel
UpdateField< float, 70, 97 > OverrideSpellPowerByAPPercent
UpdateField< bool, 0, 1 > BackpackAutoSortDisabled
UpdateFieldArray< int32, 7, 272, 273 > ModDamageDonePos
UpdateField< UF::DiscordPlayerInfo, 134, 138 > DiscordInfo
UpdateField< int8, 102, 121 > JailersTowerLevelMax
UpdateField< uint8, 102, 104 > MultiActionBars
UpdateFieldArray< float, 7, 272, 294 > ModHealingDonePercent
DynamicUpdateField< uint32, 0, 22 > TransmogIllusions
DynamicUpdateField< UF::WeeklySpellUse, 32, 46 > WeeklySpellUses
UpdateField< float, 134, 151 > ItemUpgradeHighFingerWatermark
DynamicUpdateField< UF::BankTabSettings, 32, 49 > AccountBankTabSettings
DynamicUpdateField< UF::SpellPctPVPModByLabel, 32, 34 > SpellPctModPVPByLabel
UpdateField< float, 70, 75 > ParryPercentage
UpdateField< float, 70, 96 > ModResiliencePercent
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< float, 70, 95 > ModSpellPowerPercent
UpdateField< uint8, 102, 123 > LocalRegenFlags
DynamicUpdateField< uint32, 0, 25 > HouseExteriorComponents
UpdateFieldArray< int32, 2, 371, 372 > ProfessionSkillLine
UpdateField< int32, 102, 113 > ScalingPlayerLevelDelta
UpdateField< uint32, 102, 110 > LifetimeHonorableKills
DynamicUpdateField< int32, 0, 14 > Heirlooms
UpdateField< float, 70, 98 > OverrideAPBySpellPowerPercent
UpdateField< uint32, 134, 144 > WeeklyRewardsPeriodSinceOrigin
UpdateField< float, 70, 85 > Avoidance
UpdateField< float, 70, 71 > CombatRatingExpertise
UpdateField< uint8, 102, 124 > AuraVision
UpdateField< int32, 134, 141 > UiChromieTimeExpansionID
UpdateField< ObjectGuid, 32, 56 > FarsightObject
UpdateField< int32, 70, 81 > ShieldBlock
UpdateField< uint8, 102, 106 > NumRespecs
UpdateField< float, 32, 67 > MainhandExpertise
UpdateFieldArray< ObjectGuid, 105, 163, 164 > InvSlots
UpdateField< int32, 134, 142 > TimerunningSeasonID
UpdateField< bool, 0, 5 > InsertItemsLeftToRight
UpdateField< int32, 102, 119 > HomeRealmTimeOffset
DynamicUpdateField< UF::MultiFloorExplore, 32, 37 > MultiFloorExploration
UpdateField< float, 70, 86 > Sturdiness
UpdateFieldArray< DynamicUpdateFieldBase< uint16 >, 1, 50, 51 > ResearchSites
DynamicUpdateField< UF::CollectableSourceTrackedData, 32, 47 > TrackedCollectableSources
DynamicUpdateField< int32, 0, 20 > SelfResSpells
UpdateField< int32, 102, 116 > PetSpellPower
UpdateField< int32, 102, 126 > OverrideSpellsID
DynamicUpdateField< UF::CategoryCooldownMod, 32, 45 > CategoryCooldownMods
DynamicUpdateField< UF::QuestLog, 32, 40 > TaskQuests
UpdateField< int32, 32, 65 > MaxTalentTiers
UpdateField< int32, 102, 114 > MaxCreatureScalingLevel
DynamicUpdateField< UF::MawPower, 32, 36 > MawPowers
UpdateField< uint8, 102, 103 > GrantableLevels
UpdateField< float, 70, 93 > ModHealingPercent
UpdateField< float, 102, 117 > UiHitModifier
UpdateField< WorldPackets::PerksProgram::PerksVendorItem, 134, 137 > FrozenPerksVendorItem
DynamicUpdateField< UF::PlayerDataElement, 0, 8 > CharacterDataElements
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< int32, 0, 1 > Field_0
UpdateField< float, 0, 2 > Field_4
UpdateField< float, 0, 2 > ExtentsZ
UpdateField< float, 0, 1 > ExtentsY
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< float, 0, 3 > ExtentsTargetY
UpdateField< float, 0, 4 > ExtentsTargetZ
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< TaggedPosition< Position::XYZ >, 0, 1 > Extents
UpdateField< TaggedPosition< Position::XYZ >, 0, 2 > ExtentsTarget
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< float, 0, 5 > LocationZOffset
UpdateField< float, 0, 6 > LocationZOffsetTarget
UpdateField< float, 0, 4 > HeightTarget
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< float, 0, 2 > RadiusTarget
UpdateField< float, 0, 3 > Height
UpdateField< float, 0, 1 > Radius
UpdateField< UF::OverrideCurve, 0, 5 > OverrideMoveCurveZ
VariantUpdateField< 32, 36, UF::AreaTriggerSplineCalculator, UF::AreaTriggerOrbit, UF::AreaTriggerMovementScript > PathData
UpdateField< uint32, 32, 33 > MoveCurveId
UpdateField< int32, 0, 22 > PositionalSoundKitID
UpdateField< ObjectGuid, 0, 20 > OrbitPathTarget
UpdateField< uint32, 0, 30 > FacingCurveId
UpdateField< UF::SpellCastVisual, 0, 16 > SpellVisual
UpdateField< uint32, 0, 27 > Flags
UpdateField< float, 0, 17 > BoundsRadius2D
UpdateField< UF::OverrideCurve, 0, 3 > OverrideMoveCurveX
OptionalUpdateField< UF::ForceSetAreaTriggerPositionAndRotation, 32, 35 > ForcedPositionAndRotation
UpdateField< float, 32, 34 > Facing
UpdateField< uint8, 32, 37 > ShapeType
UpdateField< UF::OverrideCurve, 0, 1 > OverrideScaleCurve
UpdateField< UF::OverrideCurve, 0, 6 > OverrideShapeCurve
UpdateField< uint32, 0, 12 > TimeToTargetPos
UpdateField< float, 0, 25 > ZOffset
UpdateField< UF::OverrideCurve, 0, 2 > ExtraScaleCurve
OptionalUpdateField< TaggedPosition< Position::XYZ >, 0, 26 > TargetRollPitchYaw
UpdateField< uint32, 0, 31 > MorphCurveId
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< int32, 0, 15 > SpellForVisuals
UpdateField< uint32, 0, 8 > Duration
UpdateField< uint32, 0, 29 > ScaleCurveId
VariantUpdateField< 32, 37, UF::AreaTriggerSphere, UF::AreaTriggerBox, UF::AreaTriggerPolygon, UF::AreaTriggerCylinder, UF::AreaTriggerDisk, UF::AreaTriggerBoundedPlane > ShapeData
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< uint32, 0, 18 > DecalPropertiesID
UpdateField< uint32, 0, 13 > TimeToTargetShape
UpdateField< UF::AreaTriggerActionSetPeriodModifier, 32, 38 > PeriodModifier
UpdateField< uint32, 0, 11 > TimeToTargetExtraScale
UpdateField< uint32, 0, 10 > TimeToTargetScale
UpdateField< uint32, 0, 9 > TimeToTarget
UpdateField< uint32, 0, 24 > CreationTime
UpdateField< int32, 0, 14 > SpellID
UpdateField< uint32, 0, 23 > MovementStartTime
UpdateField< ObjectGuid, 0, 19 > CreatingEffectGUID
UpdateField< UF::OverrideCurve, 0, 4 > OverrideMoveCurveY
UpdateField< ObjectGuid, 0, 7 > Caster
UpdateField< TaggedPosition< Position::XYZ >, 0, 21 > RollPitchYaw
UpdateField< float, 0, 4 > OuterRadiusTarget
UpdateField< float, 0, 7 > LocationZOffset
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< float, 0, 5 > Height
UpdateField< float, 0, 1 > InnerRadius
UpdateField< float, 0, 8 > LocationZOffsetTarget
UpdateField< float, 0, 2 > InnerRadiusTarget
UpdateField< float, 0, 6 > HeightTarget
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< float, 0, 3 > OuterRadius
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< uint32, 0, 3 > CreationTime
UpdateField< int32, 0, 1 > SpellScriptID
UpdateField< TaggedPosition< Position::XYZ >, 0, 2 > Center
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< float, 0, 5 > BlendFromRadius
UpdateField< bool, 0, 1 > CounterClockwise
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< float, 0, 3 > Radius
UpdateField< float, 0, 4 > InitialAngle
UpdateField< int32, 0, 6 > ExtraTimeForBlending
UpdateField< TaggedPosition< Position::XYZ >, 0, 2 > Center
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
DynamicUpdateField< TaggedPosition< Position::XY >, 0, 2 > VerticesTarget
UpdateField< float, 0, 3 > Height
UpdateField< float, 0, 4 > HeightTarget
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
DynamicUpdateField< TaggedPosition< Position::XY >, 0, 1 > Vertices
UpdateField< float, 0, 2 > RadiusTarget
UpdateField< float, 0, 1 > Radius
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< bool, 0, 1 > Linear
UpdateField< uint32, 0, 3 > Flags
UpdateField< uint32, 0, 4 > StartTime
UpdateField< int32, 0, 2 > Charges
UpdateField< uint8, 0, 7 > MaxCharges
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 0, 5 > EndTime
UpdateField< uint32, 0, 6 > NextChargeTime
UpdateField< int32, 0, 1 > SpellID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(ArtifactPower const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Item const *owner) const
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, AzeriteEmpoweredItem const *owner) const
UpdateFieldArray< int32, 5, 0, 1 > Selections
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, AzeriteEmpoweredItem const *owner) const
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< uint32, 0, 8 > KnowledgeLevel
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, AzeriteItem const *owner) const
UpdateField< uint64, 0, 5 > Xp
DynamicUpdateField< UF::SelectedAzeriteEssences, 0, 3 > SelectedEssences
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, AzeriteItem const *owner) const
UpdateField< uint32, 0, 7 > AuraLevel
DynamicUpdateField< UF::UnlockedAzeriteEssence, 0, 2 > UnlockedEssences
DynamicUpdateField< uint32, 0, 4 > UnlockedEssenceMilestones
UpdateField< bool, 0, 1 > Enabled
UpdateField< uint32, 0, 6 > Level
UpdateField< int32, 0, 9 > DEBUGknowledgeWeek
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< int32, -1, 3 > DepositFlags
UpdateField< std::string, -1, 1 > Icon
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< std::string, -1, 2 > Description
UpdateField< std::string, -1, 0 > Name
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
DynamicUpdateField< uint64, 0, 1 > Values
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateFieldArray< UF::BitVector, 14, 0, 1 > Values
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
std::vector< uint32 > ConditionalFlags
bool operator==(CTROptions const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
uint32 ChromieTimeExpansionMask
bool operator==(CategoryCooldownMod const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(ChallengeModeData const &right) const
void WriteUpdate(bool, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(CharacterRestriction const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(ChrCustomizationChoice const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< int32, 0, 3 > CollectableSourceInfoID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, 0, 2 > TargetID
UpdateField< uint32, 0, 2 > ProjectID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int64, 0, 1 > FirstCompleted
UpdateField< uint32, 0, 3 > CompletionCount
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Bag const *owner) const
UpdateField< uint32, 0, 1 > NumSlots
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Bag const *owner) const
UpdateFieldArray< ObjectGuid, 98, 2, 3 > Slots
bool operator==(ConversationActor const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Conversation const *owner) const
UpdateField< bool, 0, 2 > Field_33
UpdateField< int32, 0, 5 > LastLineEndTime
UpdateField< bool, 0, 1 > DontPlayBroadcastTextSounds
UpdateField< uint32, 0, 7 > Flags
UpdateField< uint32, 0, 6 > Progress
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Conversation const *owner) const
UpdateField< std::vector< UF::ConversationLine >, 0, 3 > Lines
DynamicUpdateField< UF::ConversationActor, 0, 4 > Actors
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Conversation const *owner) const
bool operator==(ConversationLine const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Conversation const *owner) const
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Corpse const *owner) const
UpdateField< uint32, 0, 6 > DisplayID
UpdateField< uint32, 0, 12 > StateSpellVisualKitID
UpdateField< uint8, 0, 7 > RaceID
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Corpse const *owner) const
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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< ObjectGuid, -1, 1 > CustomerAccountGUID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< ObjectGuid, -1, 0 > CustomerGUID
UpdateField< uint8, 6, 7 > OrderType
OptionalUpdateField< UF::CraftingOrderCustomer, 18, 21 > Customer
UpdateField< int64, 6, 9 > ExpirationTime
UpdateField< int32, 0, 2 > Field_0
UpdateField< int32, 0, 5 > OrderState
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< std::string, 18, 20 > CustomerNotes
UpdateField< ObjectGuid, 12, 16 > PersonalCrafterGUID
UpdateField< ObjectGuid, 12, 15 > CrafterGUID
UpdateField< int64, 6, 10 > ClaimEndTime
UpdateField< uint32, 12, 14 > Flags
UpdateField< int32, 12, 17 > NpcCraftingOrderSetID
OptionalUpdateField< UF::CraftingOrderItem, 18, 23 > OutputItem
UpdateField< int64, 6, 11 > TipAmount
UpdateField< int32, 0, 4 > SkillLineAbilityID
OptionalUpdateField< UF::CraftingOrderNpcCustomer, 18, 22 > NpcCustomer
UpdateField< int32, 18, 19 > NpcTreasureID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint8, 6, 8 > MinQuality
UpdateField< uint64, 0, 3 > OrderID
UpdateField< int64, 12, 13 > ConsortiumCut
OptionalUpdateField< WorldPackets::Item::ItemInstance, 24, 25 > OutputItemData
DynamicUpdateField< UF::CraftingOrderItem, 0, 1 > Reagents
UpdateField< ObjectGuid, 4, 5 > OwnerGUID
OptionalUpdateField< uint8, 8, 10 > DataSlotIndex
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 8, 11 > Flags
UpdateField< int32, 0, 2 > OrderItemType
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 4, 7 > Quantity
UpdateField< ObjectGuid, 0, 3 > ItemGUID
UpdateField< int32, 8, 9 > ReagentQuality
UpdateField< UF::CraftingReagentBase, 4, 6 > Reagent
UpdateField< uint64, 0, 1 > OrderItemID
UpdateField< int64, -1, 0 > NpcCraftingOrderCustomerID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, -1, 1 > RealmAddress
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
DynamicUpdateField< WorldPackets::Item::ItemGemData, -1, 1 > Gems
OptionalUpdateField< WorldPackets::Item::ItemInstance, -1, 3 > RecraftItemInfo
UpdateField< UF::CraftingOrderData, -1, 2 > Data
DynamicUpdateField< WorldPackets::Item::ItemEnchantData, -1, 0 > Enchantments
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
Optional< int32 > CurrencyID
bool operator==(CraftingReagentBase const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
Optional< int32 > ItemID
UpdateField< int32, 0, 5 > BackgroundColor
UpdateField< int32, 0, 2 > EmblemColor
UpdateField< int32, 0, 3 > BorderStyle
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, 0, 4 > BorderColor
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, 0, 1 > EmblemStyle
UpdateFieldArray< std::string, 5, 0, 1 > Name
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
std::array< int32, 3 > DyeColorID
void WriteCreate(ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
bool operator==(DecorDyeSlots const &right) const
UpdateField< ObjectGuid, -1, 0 > BattlePetGUID
UpdateField< uint8, -1, 5 > PetBehavior
UpdateField< ObjectGuid, -1, 1 > SpawnGroup
void WriteCreate(ByteBuffer &data, Player const *receiver, Object const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< ObjectGuid, -1, 2 > SpawnedPet
UpdateField< std::string, -1, 4 > PetName
UpdateField< uint32, -1, 3 > CreatureID
UpdateField< uint8, -1, 3 > SourceType
UpdateField< ObjectGuid, -1, 0 > HouseGUID
UpdateField< std::string, -1, 4 > SourceValue
UpdateField< uint8, -1, 1 > PlacementStatus
void WriteCreate(ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
OptionalUpdateField< UF::DecorDyeSlots, -1, 2 > DyeSlots
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
std::vector< int32 > ActiveOptionalAffixIDs
bool operator==(DelveData const &right) const
uint32 RestrictingRewardPlayers
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
std::vector< ObjectGuid > PlayersEligibleForRewards
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(DiscordPlayerInfo const &right) const
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, DynamicObject const *owner) const
UpdateField< ObjectGuid, 0, 1 > Caster
UpdateField< uint8, 0, 2 > Type
UpdateField< uint32, 0, 6 > CastTime
UpdateField< float, 0, 5 > Radius
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, DynamicObject const *owner) const
UpdateField< UF::SpellCastVisual, 0, 3 > SpellVisual
UpdateField< int32, 0, 4 > SpellID
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
bool operator==(ForceSetAreaTriggerPositionAndRotation const &right) const
TaggedPosition< Position::XYZ > Pos
bool operator==(GameObjectAssistActionData const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, GameObject const *owner) const
UpdateField< int32, 0, 4 > DisplayID
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, GameObject const *owner) const
UpdateField< uint32, 0, 12 > Flags
UpdateField< QuaternionData, 0, 14 > ParentRotation
UpdateField< int8, 0, 16 > State
UpdateField< ObjectGuid, 0, 10 > CreatedBy
UpdateField< uint32, 0, 7 > SpawnTrackingStateAnimID
UpdateField< uint32, 0, 23 > UiWidgetItemID
UpdateField< int32, 0, 21 > Level
UpdateField< uint32, 0, 25 > UiWidgetItemCount
OptionalUpdateField< UF::GameObjectAssistActionData, 0, 26 > AssistActionData
UpdateField< uint8, 0, 18 > PercentHealth
UpdateField< uint32, 0, 20 > CustomParam
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, GameObject const *owner) const
UpdateField< uint32, 0, 5 > SpellVisualID
UpdateField< ObjectGuid, 0, 11 > GuildGUID
UpdateField< uint32, 0, 24 > UiWidgetItemQuality
DynamicUpdateField< int32, 0, 3 > WorldEffects
UpdateField< std::vector< uint32 >, 0, 1 > StateWorldEffectIDs
UpdateField< uint32, 0, 22 > AnimGroupInstance
UpdateField< uint32, 0, 9 > StateWorldEffectsQuestObjectiveID
UpdateField< uint32, 0, 13 > FlagsB
UpdateField< int32, 0, 15 > FactionTemplate
UpdateField< uint32, 0, 6 > StateSpellVisualID
UpdateField< uint32, 0, 8 > SpawnTrackingStateAnimKitID
UpdateField< uint32, 0, 19 > ArtKit
DynamicUpdateField< int32, 0, 2 > EnableDoodadSets
UpdateField< uint64, 0, 1 > Cost
UpdateField< int32, 0, 2 > PlotIndex
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, GameObject const *owner) const
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, GameObject const *owner) const
UpdateField< ObjectGuid, 0, 6 > TargetGameObjectGUID
UpdateField< ObjectGuid, 0, 2 > AttachParentGUID
OptionalUpdateField< UF::DecorStoragePersistedData, 0, 4 > PersistedData
UpdateField< uint8, 0, 3 > Flags
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
OptionalUpdateField< UF::DecorPetInfo, 0, 5 > PetInfo
UpdateField< ObjectGuid, 0, 1 > DecorGUID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
UpdateField< int32, 0, 1 > RoomComponentID
UpdateField< TaggedPosition< Position::XYZ >, 0, 2 > RoomComponentOffset
UpdateField< uint8, 0, 3 > RoomComponentType
UpdateField< ObjectGuid, 0, 4 > AttachedRoomGUID
UpdateField< ObjectGuid, 0, 4 > HouseGUID
UpdateField< int32, 0, 1 > ExteriorComponentID
UpdateField< ObjectGuid, 0, 7 > GameObjectGUID
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< uint8, 0, 8 > ExteriorComponentType
UpdateField< int32, 0, 2 > HouseExteriorWmoDataID
UpdateField< uint8, 0, 10 > Size
UpdateField< ObjectGuid, 0, 6 > Guid
UpdateField< int32, 0, 3 > ExteriorComponentHookID
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< uint8, 0, 9 > Field_59
UpdateField< ObjectGuid, 0, 5 > AttachParentGUID
ObjectGuid BnetAccountGUID
void WriteCreate(ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
ObjectGuid PlayerGUID
bool operator==(HousingOwner const &right) const
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
UpdateField< uint32, 0, 4 > Level
UpdateField< uint32, 0, 8 > ExteriorFixtureBudget
UpdateField< ObjectGuid, 0, 10 > EntityGUID
UpdateField< uint64, 0, 5 > Favor
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
UpdateField< uint32, 0, 6 > InteriorDecorPlacementBudget
UpdateField< uint32, 0, 9 > RoomPlacementBudget
UpdateField< int32, 0, 3 > PlotIndex
UpdateField< ObjectGuid, 0, 2 > CosmeticOwner
UpdateField< uint32, 0, 7 > ExteriorDecorPlacementBudget
UpdateField< ObjectGuid, 0, 1 > BnetAccount
UpdateField< ObjectGuid, 0, 1 > RoomGUID
UpdateField< int32, 0, 3 > RoomComponentID
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< int32, 0, 9 > RoomComponentTypeParam
UpdateField< int32, 0, 8 > RoomComponentTextureID
UpdateField< int32, 0, 2 > RoomComponentOptionID
UpdateField< int32, 0, 6 > Field_24
UpdateField< uint8, 0, 5 > RoomComponentType
UpdateField< int32, 0, 7 > HouseThemeID
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< uint8, 0, 4 > Field_20
UpdateField< int32, 0, 4 > HouseRoomID
UpdateField< ObjectGuid, 0, 3 > HouseGUID
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
DynamicUpdateField< UF::HousingDoorData, 0, 2 > Doors
DynamicUpdateField< ObjectGuid, 0, 1 > MeshObjects
UpdateField< int32, 0, 5 > Flags
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
MapUpdateField< ObjectGuid, UF::DecorStoragePersistedData, 0, 1 > Decor
UpdateField< uint32, 0, 2 > DecorMaxOwnedCount
UpdateField< ObjectGuid, 0, 6 > GiftCreator
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateFieldArray< UF::ItemEnchantment, 13, 27, 28 > Enchantment
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void ClearChangesMask()
UpdateField< UF::ItemModList, 0, 17 > Modifiers
UpdateField< ObjectGuid, 0, 5 > Creator
DynamicUpdateField< UF::SocketedGem, 0, 2 > Gems
UpdateField< uint32, 0, 10 > Durability
UpdateField< WorldPackets::Item::ItemBonusKey, 0, 19 > ItemBonusKey
UpdateField< uint32, 0, 11 > MaxDurability
UpdateField< uint32, 0, 9 > DynamicFlags
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Item const *owner) const
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Item const *owner) const
UpdateFieldArray< int32, 5, 21, 22 > SpellCharges
UpdateField< int64, 0, 14 > CreateTime
UpdateField< uint8, 0, 16 > ItemAppearanceModID
UpdateField< uint64, 0, 15 > ArtifactXP
UpdateField< ObjectGuid, 0, 3 > Owner
UpdateField< uint32, 0, 8 > Expiration
UpdateField< ObjectGuid, 0, 4 > ContainedIn
UpdateField< uint8, 0, 13 > Context
UpdateField< uint32, 0, 7 > StackCount
UpdateField< uint16, 0, 20 > DEBUGItemLevel
UpdateField< uint32, 0, 12 > CreatePlayedTime
DynamicUpdateField< UF::ArtifactPower, 0, 1 > ArtifactPowers
UpdateField< uint32, 0, 18 > ZoneFlags
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Item const *owner) const
UpdateField< int16, 0, 3 > Charges
void WriteCreate(ByteBuffer &data, Player const *receiver, Item const *owner) const
UpdateField< int32, 0, 1 > ID
UpdateField< uint16, 0, 4 > Inactive
UpdateField< uint32, 0, 2 > Duration
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Item const *owner) const
DynamicUpdateField< UF::ItemMod, -1, 0 > Values
void WriteCreate(ByteBuffer &data, Player const *receiver, Item const *owner) const
bool operator==(ItemMod const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Item const *owner) const
int64 LeaverExpirationTime
void WriteUpdate(bool, ByteBuffer &data, Player const *receiver, Player const *owner) const
int32 ConsecutiveSuccesses
bool operator==(LeaverInfo const &right) const
ObjectGuid BnetAccountGUID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
uint32 TotalSuccesses
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, 0, 2 > Level
UpdateField< ObjectGuid, 0, 1 > TargetGUID
bool operator==(MawPower const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< bool, 0, 1 > IsWMO
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< int32, 0, 3 > FileDataID
OptionalUpdateField< AaBox, 0, 4 > Geobox
UpdateField< bool, 0, 2 > IsRoom
UpdateField< float, 0, 4 > ScaleLocalSpace
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
UpdateField< TaggedPosition< Position::XYZ >, 0, 2 > PositionLocalSpace
UpdateField< uint8, 0, 5 > AttachmentFlags
UpdateField< ObjectGuid, 0, 1 > AttachParentGUID
void WriteCreate(ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
UpdateField< QuaternionData, 0, 3 > RotationLocalSpace
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
UpdateField< UF::MirroredMeshObjectData, 0, 1 > PositionData
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
std::vector< int32 > WorldMapOverlayIDs
bool operator==(MultiFloorExplore const &right) const
bool operator==(NICompletedInitiativesEntry const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
std::vector< UF::NICompletedMilestoneEntry > CompletedMilestones
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(NICompletedMilestoneEntry const &right) const
bool operator==(NPCAsPlayerInfo const &right) const
TaggedPosition< Position::XYZ > LocWorldSpace
ObjectGuid TransportGUID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, -1, 2 > NpcTreasureID
UpdateField< int32, -1, 3 > NpcCraftingOrderCustomerID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint64, -1, 0 > OrderID
UpdateField< int32, -1, 1 > NpcCraftingOrderSetID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(NeighborhoodCharterSignature const &right) const
bool operator==(NeighborhoodCharter const &right) const
std::vector< UF::NeighborhoodCharterSignature > Signatures
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< std::string, 0, 3 > Name
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
UpdateField< ObjectGuid, 0, 4 > OwnerGUID
DynamicUpdateField< UF::PlayerHouseInfo, 0, 1 > Houses
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
DynamicUpdateField< UF::HousingOwner, 0, 2 > Managers
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool, ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(NeighborhoodOwnershipTransfer const &right) const
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< uint32, 0, 2 > DynamicFlags
void ClearChangesMask()
UpdateField< int32, 0, 1 > EntryID
UpdateField< float, 0, 3 > Scale
UpdateField< uint32, 0, 2 > StartTimeOffset
UpdateField< uint32, 0, 3 > ParameterCurve
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< bool, 0, 1 > OverrideActive
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< int8, 0, 2 > Bracket
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 0, 15 > WeeklyRoundsPlayed
UpdateField< bool, 0, 1 > Disqualified
UpdateField< uint32, 0, 11 > PvpTierID
void ClearChangesMask()
UpdateField< uint32, 0, 14 > SeasonBestTier
UpdateField< uint32, 0, 8 > Rating
UpdateField< uint32, 0, 18 > SeasonRoundsWon
UpdateField< uint32, 0, 13 > SeasonBestRating
UpdateField< uint32, 0, 5 > WeeklyWon
UpdateField< uint32, 0, 16 > WeeklyRoundsWon
UpdateField< uint32, 0, 17 > SeasonRoundsPlayed
UpdateField< uint32, 0, 10 > LastWeeksBestRating
UpdateField< uint32, 0, 7 > SeasonWon
UpdateField< uint32, 0, 4 > WeeklyPlayed
UpdateField< uint32, 0, 12 > WeeklyBestWinPvpTierID
UpdateField< int32, 0, 3 > PvpRatingID
UpdateField< uint32, 0, 9 > WeeklyBestRating
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 0, 6 > SeasonPlayed
void WriteCreate(ByteBuffer &data, Player const *receiver, Unit const *owner) const
bool operator==(PassiveSpellHistory const &right) const
UpdateField< int32, -1, 0 > ProfessionID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, -1, 1 > Count
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 0, 1 > CreatureID
UpdateField< std::string, 0, 2 > Name
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(PlayerDataElement const &right) const
UpdateField< int32, 32, 34 > HonorLevel
UpdateField< uint8, 32, 33 > CurrentBattlePetBreedQuality
UpdateField< ObjectGuid, 0, 11 > BnetAccount
DynamicUpdateField< UF::PetCreatureName, 0, 7 > PetNames
UpdateField< ObjectGuid, 0, 13 > LootTargetGUID
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 4 > RandomCustomizations
UpdateField< bool, 0, 2 > HasLevelLink
UpdateField< int64, 32, 35 > LogoutTime
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< uint64, 0, 12 > GuildClubMemberID
UpdateFieldArray< WorldPackets::Item::ItemInstance, 16, 289, 290 > VisibleEquipableSpells
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateFieldArray< uint32, 19, 306, 307 > PlunderstormItemDisplayID
UpdateField< UF::NPCAsPlayerInfo, 32, 49 > NpcAsPlayerInfo
UpdateField< int32, 32, 38 > OfferedScriptQuestID
MapUpdateField< int32, int32, 0, 25 > QuestLogQuestIdToIndex
UpdateField< int32, 0, 18 > GuildLevel
UpdateField< uint32, 0, 29 > CurrentSpecID
UpdateField< int32, 0, 26 > PlayerTitle
UpdateField< UF::CTROptions, 32, 40 > CtrOptions
DynamicUpdateField< UF::ArenaCooldown, 0, 6 > ArenaCooldowns
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 3 > Customizations
DynamicUpdateField< UF::QuestLog, 0, 5 > QuestSessionQuestLog
UpdateField< int32, 0, 27 > FakeInebriation
UpdateField< int32, 32, 41 > CovenantID
UpdateField< uint8, 0, 21 > PvpTitle
UpdateField< int32, 32, 37 > OfferedAdvJournalQuestID
UpdateField< ObjectGuid, 0, 9 > DuelArbiter
UpdateFieldArray< float, 6, 249, 250 > AvgItemLevel
UpdateField< std::string, 32, 36 > Name
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< ObjectGuid, 32, 45 > SpectateTarget
UpdateField< uint8, 0, 22 > ArenaFaction
UpdateField< int32, 0, 24 > GuildTimeStamp
UpdateField< int32, 32, 39 > CurrentBattlePetSpeciesID
UpdateField< int32, 32, 42 > SoulbindID
DynamicUpdateField< int32, 0, 8 > VisualItemReplacements
UpdateField< uint32, 0, 16 > GuildRankID
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< UF::CustomTabardInfo, 32, 48 > PersonalTabard
UpdateField< ObjectGuid, 0, 10 > WowAccount
UpdateField< bool, 0, 1 > HasQuestSession
UpdateFieldArray< UF::VisibleItem, 19, 229, 230 > VisibleItems
UpdateField< int32, 0, 31 > TaxiMountAnimKitID
UpdateField< uint32, 0, 17 > GuildDeleteDate
UpdateField< uint8, 0, 20 > Inebriation
bool IsQuestLogChangesMaskSkipped() const
UpdateField< uint32, 0, 23 > DuelTeam
UpdateField< int32, 0, 30 > CurrentCombatTraitConfigSubTreeID
UpdateField< int32, 32, 46 > WorldLootObjectInventorySwapSlot
UpdateField< uint8, 0, 19 > NativeSex
UpdateField< WorldPackets::MythicPlus::DungeonScoreSummary, 32, 43 > DungeonScore
UpdateField< uint32, 0, 28 > VirtualPlayerRealm
UpdateFieldArray< uint8, 2, 50, 51 > PartyType
DynamicUpdateField< UF::PlayerMirrorHouse, 0, 2 > Houses
DynamicUpdateField< ObjectGuid, 0, 1 > Field_8
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
DynamicUpdateField< ObjectGuid, 0, 5 > Field_F8
DynamicUpdateField< ObjectGuid, 0, 6 > Field_130
DynamicUpdateField< ObjectGuid, 0, 3 > Field_88
DynamicUpdateField< ObjectGuid, 0, 4 > Field_C0
UpdateField< UF::NeighborhoodCharter, 0, 7 > Charter
UpdateField< ObjectGuid, 0, 10 > CurrentHouse
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint8, 0, 8 > EditorMode
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void WriteCreate(ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
bool operator==(PlayerHouseInfo const &right) const
DynamicUpdateField< UF::NICompletedInitiativesEntry, 0, 2 > CompletedInitiatives
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
SetUpdateField< ObjectGuid, 0, 5 > Houses
UpdateField< UF::PlayerInitiativeInfo, 0, 4 > InitiativeInfo
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< ObjectGuid, 0, 3 > NeighborhoodGUID
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
DynamicUpdateField< UF::PlayerInitiativeTaskInfo, 0, 1 > CompletedTasks
UpdateField< int32, -1, 1 > CurrentInitiativeID
UpdateField< float, -1, 6 > PlayerTotalContribution
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, -1, 3 > CurrentCycleID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< float, -1, 5 > CurrentProgress
UpdateField< int64, -1, 0 > RemainingDuration
UpdateField< int32, -1, 2 > CurrentMilestoneID
UpdateField< float, -1, 4 > ProgressRequired
UpdateField< int32, -1, 1 > TimesCompleted
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, -1, 0 > TaskID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(PlayerMirrorHouse const &right) const
UpdateField< int32, 0, 1 > QuestID
UpdateFieldArray< int16, 24, 6, 7 > ObjectiveProgress
UpdateField< uint32, 0, 5 > EnabledObjectivesMask
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int64, 0, 3 > EndTime
UpdateField< uint16, 0, 2 > StateFlags
void ClearChangesMask()
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 0, 4 > ObjectiveFlags
UpdateField< UF::BitVector, 0, 2 > QuestCompleted
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< ObjectGuid, 0, 1 > Owner
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(RecipeProgressionInfo const &right) const
UpdateField< uint32, 0, 2 > ReplayTime
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, 0, 1 > QuestID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
DynamicUpdateField< UF::CompletedProject, 0, 1 > CompletedProjects
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
int16 ResearchProjectID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(Research const &right) const
void WriteUpdate(bool, ByteBuffer &data, Player const *receiver, Player const *owner) const
void ClearChangesMask()
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 0, 1 > Threshold
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint8, 0, 2 > StateID
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< int32, 0, 1 > ScriptPackageID
UpdateField< ObjectGuid, 0, 3 > CreatedBy
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Object const *owner) const
UpdateField< uint32, 0, 2 > RndSeedVal
void WriteCreate(ByteBuffer &data, Player const *receiver, AzeriteItem const *owner) const
UpdateFieldArray< uint32, 4, 3, 4 > AzeriteEssenceID
UpdateField< bool, 0, 1 > Enabled
UpdateField< uint32, 0, 2 > SpecializationID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AzeriteItem const *owner) const
UpdateFieldArray< uint16, 300, 0, 1201 > SkillMaxRank
UpdateFieldArray< uint16, 300, 0, 1801 > SkillPermBonus
UpdateFieldArray< uint16, 300, 0, 1 > SkillLineID
UpdateFieldArray< int16, 300, 0, 1501 > SkillTempBonus
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateFieldArray< uint16, 300, 0, 301 > SkillStep
UpdateFieldArray< uint16, 300, 0, 901 > SkillStartingRank
UpdateFieldArray< uint16, 300, 0, 601 > SkillRank
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Item const *owner) const
UpdateFieldArray< uint16, 16, 3, 4 > BonusListIDs
void WriteCreate(ByteBuffer &data, Player const *receiver, Item const *owner) const
UpdateField< uint8, 0, 2 > Context
UpdateField< int32, 0, 1 > ItemID
bool operator==(SpellCastVisual const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Object const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool, ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(SpellFlatModByLabel const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(SpellFlatPVPModByLabel const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(SpellPctModByLabel const &right) const
void WriteUpdate(bool, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(SpellPctPVPModByLabel const &right) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< ObjectGuid, 0, 2 > StableMaster
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
DynamicUpdateField< UF::StablePetInfo, 0, 1 > Pets
UpdateField< uint32, 0, 5 > ExperienceLevel
UpdateField< uint32, 0, 2 > PetNumber
UpdateField< uint32, 0, 1 > PetSlot
UpdateField< std::string, 0, 6 > Name
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint8, 0, 7 > PetFlags
UpdateField< uint32, 0, 4 > DisplayID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 0, 3 > CreatureID
UpdateField< uint32, 0, 8 > Specialization
UpdateField< int32, 12, 13 > TraitSystemID
UpdateField< int32, 4, 6 > Type
UpdateField< int32, 0, 3 > ID
UpdateField< std::string, 4, 5 > Name
UpdateField< int32, 12, 14 > VariationID
UpdateField< int32, 4, 7 > SkillLineID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
DynamicUpdateField< UF::TraitSubTreeCache, 0, 2 > SubTrees
UpdateField< int32, 8, 10 > CombatConfigFlags
UpdateField< int32, 8, 9 > ChrSpecializationID
UpdateField< int32, 8, 11 > LocalIdentifier
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(TraitEntry const &right) const
bool operator==(TraitSubTreeCache const &right) const
std::vector< UF::TraitEntry > Entries
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, -1, 3 > Icon
UpdateField< uint8, -1, 1 > SetType
UpdateField< std::string, -1, 2 > Name
UpdateField< bool, -1, 0 > SituationsEnabled
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, -1, 4 > Flags
DynamicUpdateField< UF::TransmogOutfitSituationInfo, -1, 0 > Situations
UpdateField< UF::TransmogOutfitDataInfo, -1, 3 > OutfitInfo
UpdateField< uint32, -1, 2 > Id
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
DynamicUpdateField< UF::TransmogOutfitSlotData, -1, 1 > Slots
bool operator==(TransmogOutfitMetadata const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, -1, 2 > LoadoutID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, -1, 3 > EquipmentSetID
UpdateField< uint32, -1, 1 > SpecID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, -1, 0 > SituationID
UpdateField< uint8, 8, 9 > IllusionDisplayType
UpdateField< uint8, 4, 6 > AppearanceDisplayType
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int8, 0, 1 > Slot
UpdateField< uint8, 0, 2 > SlotOption
UpdateField< uint32, 4, 5 > ItemModifiedAppearanceID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, 8, 10 > Flags
UpdateField< uint8, 0, 3 > SheatheCategory
UpdateField< uint32, 4, 7 > SpellItemEnchantmentID
UpdateField< uint32, 0, 3 > VirtualRealmAddress
UpdateField< std::string, 0, 2 > PlayerName
UpdateField< uint8, 0, 1 > Type
void WriteCreate(ByteBuffer &data, Player const *receiver, Unit const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Unit const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Unit const *owner) const
bool operator==(UnitChannel const &right) const
UF::SpellCastVisual SpellVisual
UpdateField< bool, 0, 1 > Field_314
UpdateField< uint32, 32, 52 > AuraState
UpdateField< uint32, 32, 37 > OverrideDisplayPowerID
UpdateFieldArray< int32, 5, 187, 193 > StatPosBuff
UpdateFieldArray< float, 10, 139, 170 > PowerRegenInterruptedFlatModifier
UpdateField< uint64, 0, 24 > BattlePetDBID
UpdateField< int64, 32, 38 > Health
UpdateField< std::vector< uint32 >, 0, 2 > StateWorldEffectIDs
UpdateFieldArray< int32, 7, 208, 216 > BonusResistanceMods
OptionalUpdateField< UF::UnitAssistActionData, 128, 138 > AssistActionData
UpdateField< uint8, 32, 46 > ScalingFactionGroup
UpdateField< int32, 32, 62 > CosmeticMountDisplayID
UpdateField< ObjectGuid, 0, 26 > BattlePetDecorHouseGUID
UpdateField< float, 128, 129 > GlideEventSpeedDivisor
UpdateField< int32, 32, 59 > NativeDisplayID
UpdateFieldArray< float, 10, 139, 160 > PowerRegenFlatModifier
UpdateField< int32, 64, 91 > AttackPower
UpdateField< float, 96, 111 > HoverHeight
UpdateField< uint8, 32, 34 > Sex
UpdateField< uint32, 128, 134 > CurrentAreaID
UpdateField< int32, 96, 117 > BattlePetCompanionExperience
UpdateField< int32, 32, 40 > Level
UpdateField< float, 96, 100 > RangedAttackPowerMultiplier
UpdateField< float, 32, 63 > MinDamage
UpdateField< float, 32, 54 > BoundingRadius
UpdateField< float, 96, 109 > ManaCostMultiplier
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< uint32, 32, 49 > Flags2
UpdateField< int32, 96, 123 > LookAtControllerID
UpdateField< float, 64, 81 > ModHasteRegen
UpdateField< uint8, 32, 33 > PlayerClassId
UpdateField< uint32, 0, 12 > StateWorldEffectsQuestObjectiveID
UpdateField< uint32, 32, 50 > Flags3
UpdateField< int32, 32, 44 > ScalingLevelMax
DynamicUpdateField< int32, 0, 4 > WorldEffects
UpdateField< ObjectGuid, 128, 137 > NameplateAttachToGUID
UpdateField< uint8, 64, 70 > VisFlags
UpdateField< float, 64, 78 > ModSpellHaste
UpdateField< int32, 96, 103 > OffHandWeaponAttackPower
UpdateField< float, 96, 107 > MinRangedDamage
UpdateField< int32, 96, 121 > LooksLikeMountID
UpdateFieldArray< uint32, 2, 184, 185 > AttackRoundBaseTime
UpdateField< int32, 96, 120 > ScaleDuration
UpdateField< uint8, 0, 31 > ClassId
DynamicUpdateField< ObjectGuid, 0, 5 > ChannelObjects
UpdateFieldArray< int32, 5, 187, 203 > StatSupportBuff
UpdateField< float, 96, 106 > Lifesteal
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Unit const *owner) const
UpdateField< int32, 64, 92 > AttackPowerModPos
UpdateField< ObjectGuid, 0, 18 > SummonedBy
UpdateField< int32, 128, 132 > MaxHealthModifierFlatPos
UpdateField< uint32, 0, 10 > StateAnimID
UpdateField< float, 64, 80 > ModRangedHaste
UpdateField< int32, 64, 86 > BaseHealth
UpdateFieldArray< int32, 7, 208, 209 > Resistances
UpdateField< int32, 96, 116 > WildBattlePetLevel
UpdateField< uint8, 64, 87 > SheatheState
UpdateField< int32, 96, 97 > RangedAttackPower
UpdateField< int32, 32, 42 > ContentTuningID
UpdateField< float, 32, 60 > NativeXDisplayScale
UpdateField< int32, 32, 45 > ScalingLevelDelta
DynamicUpdateField< UF::PassiveSpellHistory, 0, 3 > PassiveSpells
UpdateField< float, 32, 56 > DisplayScale
UpdateField< int32, 96, 122 > LooksLikeCreatureID
UpdateField< int32, 96, 115 > AzeriteItemLevel
UpdateField< int32, 96, 101 > RangedAttackPowerModSupport
UpdateField< int32, 128, 131 > MaxHealthModifierFlatNeg
UpdateField< int8, 0, 28 > SpellEmpowerStage
UpdateField< int32, 64, 85 > BaseMana
UpdateFieldArray< int32, 10, 139, 140 > Power
UpdateField< int32, 64, 93 > AttackPowerModNeg
UpdateField< ObjectGuid, 0, 19 > CreatedBy
UpdateField< float, 128, 136 > AutoAttackRangeMod
UpdateField< uint32, 128, 133 > SilencedSchoolMask
UpdateField< uint8, 64, 68 > StandState
UpdateField< ObjectGuid, 0, 17 > CharmedBy
UpdateField< int32, 64, 95 > AttackPowerModSupport
UpdateField< ObjectGuid, 0, 21 > LookAtControllerTarget
UpdateField< UF::UnitChannel, 0, 27 > ChannelData
UpdateField< uint8, 64, 69 > PetTalentPoints
UpdateField< float, 128, 135 > NameplateDistanceMod
UpdateField< uint32, 32, 51 > Flags4
UpdateField< float, 64, 79 > ModHaste
UpdateField< int32, 64, 83 > CreatedBySpell
UpdateField< float, 96, 110 > MaxHealthModifier
UpdateField< int32, 96, 112 > MinItemLevelCutoff
UpdateField< float, 64, 67 > MaxOffHandDamage
UpdateField< int32, 96, 114 > MaxItemLevel
UpdateField< uint8, 0, 30 > Race
UpdateFieldArray< int32, 10, 139, 150 > MaxPower
UpdateField< ObjectGuid, 0, 15 > Summon
UpdateField< uint32, 0, 29 > SummonedByHomeRealm
UpdateField< int32, 96, 113 > MinItemLevel
UpdateField< uint32, 96, 118 > BattlePetCompanionNameTimestamp
UpdateField< int32, 96, 104 > RangedWeaponAttackPower
void ClearChangesMask()
UpdateField< int32, 128, 130 > DriveCapabilityID
UpdateField< uint8, 32, 36 > DisplayPower
UpdateField< int32, 96, 98 > RangedAttackPowerModPos
UpdateField< uint32, 64, 72 > PetNumber
UpdateField< int64, 32, 39 > MaxHealth
UpdateField< uint32, 0, 8 > NpcFlags2
UpdateFieldArray< int32, 7, 208, 223 > ManaCostModifier
UpdateField< int32, 32, 61 > MountDisplayID
UpdateField< int32, 96, 105 > SetAttackSpeedAura
UpdateField< float, 64, 94 > AttackPowerMultiplier
UpdateField< uint8, 64, 89 > PetFlags
UpdateField< int32, 96, 125 > TaxiNodesID
UpdateField< int32, 96, 124 > PerksVendorItemID
UpdateField< int32, 32, 43 > ScalingLevelMin
UpdateField< int32, 96, 119 > InteractSpellID
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Unit const *owner) const
UpdateField< int32, 0, 6 > DisplayID
UpdateField< float, 64, 65 > MaxDamage
UpdateField< uint32, 64, 73 > PetNameTimestamp
UpdateField< uint32, 32, 53 > RangedAttackRoundBaseTime
UpdateField< int32, 0, 13 > SpellOverrideNameID
UpdateField< ObjectGuid, 0, 23 > BattlePetCompanionGUID
UpdateFieldArray< int32, 5, 187, 198 > StatNegBuff
UpdateField< uint32, 0, 9 > StateSpellVisualID
UpdateField< int32, 32, 47 > FactionTemplate
UpdateField< uint32, 0, 11 > StateAnimKitID
UpdateField< ObjectGuid, 0, 16 > Critter
UpdateField< uint32, 64, 74 > PetExperience
UpdateField< ObjectGuid, 0, 22 > Target
UpdateField< int32, 96, 102 > MainHandWeaponAttackPower
UpdateField< float, 64, 82 > ModTimeRate
UpdateField< int32, 64, 84 > EmoteState
UpdateField< float, 32, 55 > CombatReach
UpdateField< ObjectGuid, 0, 20 > DemonCreator
UpdateField< uint8, 32, 58 > OverrideCreatureType
UpdateField< int32, 96, 127 > FlightCapabilityID
UpdateField< ObjectGuid, 96, 126 > GuildGUID
UpdateField< float, 96, 108 > MaxRangedDamage
UpdateField< int32, 32, 41 > EffectiveLevel
UpdateFieldArray< UF::VisibleItem, 3, 180, 181 > VirtualItems
UpdateField< ObjectGuid, 0, 14 > Charm
UpdateField< uint8, 64, 88 > PvpFlags
UpdateField< float, 64, 77 > ModCastingSpeedNeg
UpdateField< float, 64, 66 > MinOffHandDamage
UpdateField< uint32, 0, 7 > NpcFlags
UpdateField< int32, 96, 99 > RangedAttackPowerModNeg
UpdateField< uint32, 64, 75 > PetNextLevelExperience
UpdateField< ObjectGuid, 0, 25 > BattlePetAttachedToDecorGUID
UpdateField< float, 64, 76 > ModCastingSpeed
UpdateField< uint32, 32, 48 > Flags
void WriteCreate(ByteBuffer &data, Player const *receiver, AzeriteItem const *owner) const
bool operator==(UnlockedAzeriteEssence const &right) const
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Creature const *owner) const
UpdateField< int32, 0, 1 > Flags
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Creature const *owner) const
UpdateField< uint16, 0, 7 > ItemVisual
void WriteCreate(ByteBuffer &data, Player const *receiver, Unit const *owner) const
UpdateField< uint32, 0, 8 > ItemModifiedAppearanceID
UpdateField< int32, 0, 3 > ItemID
UpdateField< uint8, 0, 10 > SheatheCategory
UpdateField< int32, 0, 5 > ConditionalItemAppearanceID
UpdateField< bool, 0, 2 > HasIllusion
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Unit const *owner) const
UpdateField< uint16, 0, 6 > ItemAppearanceModID
UpdateField< uint8, 0, 9 > TransmogSlotOption
UpdateField< bool, 0, 1 > HasTransmog
UpdateField< int32, 0, 4 > SecondaryItemModifiedAppearanceID
UpdateField< uint32, 0, 3 > AnimKitID
UpdateField< uint32, 0, 4 > ServerTime
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
OptionalUpdateField< int16, 0, 2 > AnimationDataID
void WriteCreate(ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< bool, 0, 1 > IsDecay
bool operator==(WalkInData const &right) const
void WriteUpdate(bool, ByteBuffer &data, Player const *receiver, Player const *owner) const
uint32 WalkInInstanceType
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
ObjectGuid WalkInPartyGUID
bool operator==(WeeklySpellUse const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, 0, 1 > FactionID
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< int32, 0, 2 > Reaction