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 == TRINITY_COMPILER_GNU
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
135void ItemMod::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Item const* owner) const
136{
137 data << uint8(Type);
138 data << int32(Value);
139}
140
141bool ItemMod::operator==(ItemMod const& right) const
142{
143 return Type == right.Type
144 && Value == right.Value;
145}
146
147void ItemModList::WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const
148{
149 data.WriteBits(Values.size(), 6);
150 for (uint32 i = 0; i < Values.size(); ++i)
151 {
152 Values[i].WriteCreate(data, receiver, owner);
153 }
154 data.FlushBits();
155}
156
157void ItemModList::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Item const* owner) const
158{
159 Mask changesMask = _changesMask;
160 if (ignoreChangesMask)
161 changesMask.SetAll();
162
163 data.WriteBits(changesMask.GetBlock(0), 1);
164
165 if (changesMask[0])
166 {
167 if (!ignoreChangesMask)
168 Values.WriteUpdateMask(data, 6);
169 else
171 }
172 data.FlushBits();
173 if (changesMask[0])
174 {
175 for (uint32 i = 0; i < Values.size(); ++i)
176 {
177 if (Values.HasChanged(i) || ignoreChangesMask)
178 {
179 Values[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
180 }
181 }
182 }
183 data.FlushBits();
184}
185
191
192void ArtifactPower::WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const
193{
194 data << int16(ArtifactPowerID);
195 data << uint8(PurchasedRank);
197}
198
199void ArtifactPower::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Item const* owner) const
200{
201 data << int16(ArtifactPowerID);
202 data << uint8(PurchasedRank);
204}
205
207{
208 return ArtifactPowerID == right.ArtifactPowerID
209 && PurchasedRank == right.PurchasedRank
211}
212
213void SocketedGem::WriteCreate(ByteBuffer& data, Player const* receiver, Item const* owner) const
214{
215 data << int32(ItemID);
216 for (uint32 i = 0; i < 16; ++i)
217 {
218 data << uint16(BonusListIDs[i]);
219 }
220 data << uint8(Context);
221}
222
223void SocketedGem::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Item const* owner) const
224{
225 Mask changesMask = _changesMask;
226 if (ignoreChangesMask)
227 changesMask.SetAll();
228
229 data.WriteBits(changesMask.GetBlocksMask(0), 1);
230 if (changesMask.GetBlock(0))
231 data.WriteBits(changesMask.GetBlock(0), 32);
232
233 data.FlushBits();
234 if (changesMask[0])
235 {
236 if (changesMask[1])
237 {
238 data << int32(ItemID);
239 }
240 if (changesMask[2])
241 {
242 data << uint8(Context);
243 }
244 }
245 if (changesMask[3])
246 {
247 for (uint32 i = 0; i < 16; ++i)
248 {
249 if (changesMask[4 + i])
250 {
251 data << uint16(BonusListIDs[i]);
252 }
253 }
254 }
255}
256
264
265void ItemData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Item const* owner) const
266{
267 data << *Owner;
268 data << *ContainedIn;
269 data << *Creator;
270 data << *GiftCreator;
271 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
272 {
273 data << uint32(StackCount);
274 data << uint32(Expiration);
275 for (uint32 i = 0; i < 5; ++i)
276 {
277 data << int32(SpellCharges[i]);
278 }
279 }
280 data << uint32(DynamicFlags);
281 for (uint32 i = 0; i < 13; ++i)
282 {
283 Enchantment[i].WriteCreate(data, receiver, owner);
284 }
285 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
286 {
287 data << uint32(Durability);
288 data << uint32(MaxDurability);
289 }
290 data << uint32(CreatePlayedTime);
291 data << uint8(Context);
292 data << int64(CreateTime);
293 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
294 {
295 data << uint64(ArtifactXP);
296 data << uint8(ItemAppearanceModID);
297 }
298 data << uint32(ArtifactPowers.size());
299 data << uint32(Gems.size());
300 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
301 {
302 data << uint32(ZoneFlags);
303 }
304 data << *ItemBonusKey;
305 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
306 {
307 data << uint16(DEBUGItemLevel);
308 }
309 for (uint32 i = 0; i < ArtifactPowers.size(); ++i)
310 {
311 ArtifactPowers[i].WriteCreate(data, receiver, owner);
312 }
313 for (uint32 i = 0; i < Gems.size(); ++i)
314 {
315 Gems[i].WriteCreate(data, receiver, owner);
316 }
317 Modifiers->WriteCreate(data, receiver, owner);
318}
319
320static constexpr void ItemDataAppendAllowedFieldsMaskForFlag(ItemData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
321{
322 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
323 allowedMaskForTarget |= std::array<uint32, 2>{ 0x07F58D80u, 0x00000000u };
324}
325
326void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
327{
328 ItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
329}
330
332{
333 Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
334 ItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
335 changesMask &= allowedMaskForTarget;
336}
337
338void ItemData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Item const* owner) const
339{
340 Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
341 ItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
342 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
343}
344
345void ItemData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Item const* owner, bool ignoreNestedChangesMask) const
346{
347 data.WriteBits(changesMask.GetBlocksMask(0), 2);
348 for (uint32 i = 0; i < 2; ++i)
349 if (changesMask.GetBlock(i))
350 data.WriteBits(changesMask.GetBlock(i), 32);
351
352 if (changesMask[0])
353 {
354 if (changesMask[1])
355 {
356 if (!ignoreNestedChangesMask)
358 else
360 }
361 if (changesMask[2])
362 {
363 if (!ignoreNestedChangesMask)
364 Gems.WriteUpdateMask(data);
365 else
367 }
368 }
369 data.FlushBits();
370 if (changesMask[0])
371 {
372 if (changesMask[1])
373 {
374 for (uint32 i = 0; i < ArtifactPowers.size(); ++i)
375 {
376 if (ArtifactPowers.HasChanged(i) || ignoreNestedChangesMask)
377 {
378 ArtifactPowers[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
379 }
380 }
381 }
382 if (changesMask[2])
383 {
384 for (uint32 i = 0; i < Gems.size(); ++i)
385 {
386 if (Gems.HasChanged(i) || ignoreNestedChangesMask)
387 {
388 Gems[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
389 }
390 }
391 }
392 if (changesMask[3])
393 {
394 data << *Owner;
395 }
396 if (changesMask[4])
397 {
398 data << *ContainedIn;
399 }
400 if (changesMask[5])
401 {
402 data << *Creator;
403 }
404 if (changesMask[6])
405 {
406 data << *GiftCreator;
407 }
408 if (changesMask[7])
409 {
410 data << uint32(StackCount);
411 }
412 if (changesMask[8])
413 {
414 data << uint32(Expiration);
415 }
416 if (changesMask[9])
417 {
418 data << uint32(DynamicFlags);
419 }
420 if (changesMask[10])
421 {
422 data << uint32(Durability);
423 }
424 if (changesMask[11])
425 {
426 data << uint32(MaxDurability);
427 }
428 if (changesMask[12])
429 {
430 data << uint32(CreatePlayedTime);
431 }
432 if (changesMask[13])
433 {
434 data << uint8(Context);
435 }
436 if (changesMask[14])
437 {
438 data << int64(CreateTime);
439 }
440 if (changesMask[15])
441 {
442 data << uint64(ArtifactXP);
443 }
444 if (changesMask[16])
445 {
446 data << uint8(ItemAppearanceModID);
447 }
448 if (changesMask[18])
449 {
450 data << uint32(ZoneFlags);
451 }
452 if (changesMask[19])
453 {
454 data << *ItemBonusKey;
455 }
456 if (changesMask[20])
457 {
458 data << uint16(DEBUGItemLevel);
459 }
460 if (changesMask[17])
461 {
462 Modifiers->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
463 }
464 }
465 if (changesMask[21])
466 {
467 for (uint32 i = 0; i < 5; ++i)
468 {
469 if (changesMask[22 + i])
470 {
471 data << int32(SpellCharges[i]);
472 }
473 }
474 }
475 if (changesMask[27])
476 {
477 for (uint32 i = 0; i < 13; ++i)
478 {
479 if (changesMask[28 + i])
480 {
481 Enchantment[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
482 }
483 }
484 }
485}
486
513
514void ContainerData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Bag const* owner) const
515{
516 for (uint32 i = 0; i < 98; ++i)
517 {
518 data << Slots[i];
519 }
520 data << uint32(NumSlots);
521}
522
523void ContainerData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Bag const* owner) const
524{
525 WriteUpdate(_changesMask, data, receiver, owner, false);
526}
527
528void ContainerData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Bag const* owner, bool ignoreNestedChangesMask) const
529{
530 data.WriteBits(changesMask.GetBlocksMask(0), 4);
531 for (uint32 i = 0; i < 4; ++i)
532 if (changesMask.GetBlock(i))
533 data.WriteBits(changesMask.GetBlock(i), 32);
534
535 data.FlushBits();
536 if (changesMask[0])
537 {
538 if (changesMask[1])
539 {
540 data << uint32(NumSlots);
541 }
542 }
543 if (changesMask[2])
544 {
545 for (uint32 i = 0; i < 98; ++i)
546 {
547 if (changesMask[3 + i])
548 {
549 data << Slots[i];
550 }
551 }
552 }
553}
554
561
562void AzeriteEmpoweredItemData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AzeriteEmpoweredItem const* owner) const
563{
564 for (uint32 i = 0; i < 5; ++i)
565 {
566 data << int32(Selections[i]);
567 }
568}
569
570void AzeriteEmpoweredItemData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AzeriteEmpoweredItem const* owner) const
571{
572 WriteUpdate(_changesMask, data, receiver, owner, false);
573}
574
575void AzeriteEmpoweredItemData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, AzeriteEmpoweredItem const* owner, bool ignoreNestedChangesMask) const
576{
577 data.WriteBits(changesMask.GetBlocksMask(0), 1);
578 if (changesMask.GetBlock(0))
579 data.WriteBits(changesMask.GetBlock(0), 32);
580
581 data.FlushBits();
582 if (changesMask[0])
583 {
584 for (uint32 i = 0; i < 5; ++i)
585 {
586 if (changesMask[1 + i])
587 {
588 data << int32(Selections[i]);
589 }
590 }
591 }
592}
593
599
600void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
601{
602 data << uint32(AzeriteEssenceID);
603 data << uint32(Rank);
604}
605
606void UnlockedAzeriteEssence::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
607{
608 data << uint32(AzeriteEssenceID);
609 data << uint32(Rank);
610}
611
613{
614 return AzeriteEssenceID == right.AzeriteEssenceID
615 && Rank == right.Rank;
616}
617
618void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
619{
620 for (uint32 i = 0; i < 4; ++i)
621 {
622 data << uint32(AzeriteEssenceID[i]);
623 }
624 data << uint32(SpecializationID);
625 data.WriteBit(Enabled);
626 data.FlushBits();
627}
628
629void SelectedAzeriteEssences::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
630{
631 Mask changesMask = _changesMask;
632 if (ignoreChangesMask)
633 changesMask.SetAll();
634
635 data.WriteBits(changesMask.GetBlocksMask(0), 1);
636 if (changesMask.GetBlock(0))
637 data.WriteBits(changesMask.GetBlock(0), 32);
638
639 if (changesMask[0])
640 {
641 if (changesMask[1])
642 {
643 data.WriteBit(Enabled);
644 }
645 }
646 data.FlushBits();
647 if (changesMask[0])
648 {
649 if (changesMask[2])
650 {
651 data << uint32(SpecializationID);
652 }
653 }
654 if (changesMask[3])
655 {
656 for (uint32 i = 0; i < 4; ++i)
657 {
658 if (changesMask[4 + i])
659 {
660 data << uint32(AzeriteEssenceID[i]);
661 }
662 }
663 }
664 data.FlushBits();
665}
666
674
675void AzeriteItemData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
676{
677 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
678 {
679 data << uint64(Xp);
680 data << uint32(Level);
681 data << uint32(AuraLevel);
682 data << uint32(KnowledgeLevel);
683 data << int32(DEBUGknowledgeWeek);
684 }
685 data << uint32(UnlockedEssences.size());
686 data << uint32(SelectedEssences.size());
688 for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
689 {
690 UnlockedEssences[i].WriteCreate(data, receiver, owner);
691 }
692 for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
693 {
695 }
696 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
697 {
698 data.WriteBit(Enabled);
699 }
700 for (uint32 i = 0; i < SelectedEssences.size(); ++i)
701 {
702 SelectedEssences[i].WriteCreate(data, receiver, owner);
703 }
704 data.FlushBits();
705}
706
707static constexpr void AzeriteItemDataAppendAllowedFieldsMaskForFlag(AzeriteItemData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
708{
709 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
710 allowedMaskForTarget |= std::array<uint32, 1>{ 0x000003E2u };
711}
712
713void AzeriteItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
714{
715 AzeriteItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
716}
717
719{
720 Mask allowedMaskForTarget({ 0x0000001Du });
721 AzeriteItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
722 changesMask &= allowedMaskForTarget;
723}
724
725void AzeriteItemData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner) const
726{
727 Mask allowedMaskForTarget({ 0x0000001Du });
728 AzeriteItemDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
729 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
730}
731
732void AzeriteItemData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, AzeriteItem const* owner, bool ignoreNestedChangesMask) const
733{
734 data.WriteBits(changesMask.GetBlock(0), 10);
735
736 if (changesMask[0])
737 {
738 if (changesMask[1])
739 {
740 data.WriteBit(Enabled);
741 }
742 if (changesMask[2])
743 {
744 if (!ignoreNestedChangesMask)
746 else
748 }
749 if (changesMask[3])
750 {
751 if (!ignoreNestedChangesMask)
753 else
755 }
756 if (changesMask[4])
757 {
758 if (!ignoreNestedChangesMask)
760 else
762 }
763 }
764 data.FlushBits();
765 if (changesMask[0])
766 {
767 if (changesMask[2])
768 {
769 for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
770 {
771 if (UnlockedEssences.HasChanged(i) || ignoreNestedChangesMask)
772 {
773 UnlockedEssences[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
774 }
775 }
776 }
777 if (changesMask[4])
778 {
779 for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
780 {
781 if (UnlockedEssenceMilestones.HasChanged(i) || ignoreNestedChangesMask)
782 {
784 }
785 }
786 }
787 if (changesMask[3])
788 {
789 for (uint32 i = 0; i < SelectedEssences.size(); ++i)
790 {
791 if (SelectedEssences.HasChanged(i) || ignoreNestedChangesMask)
792 {
793 SelectedEssences[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
794 }
795 }
796 }
797 if (changesMask[5])
798 {
799 data << uint64(Xp);
800 }
801 if (changesMask[6])
802 {
803 data << uint32(Level);
804 }
805 if (changesMask[7])
806 {
807 data << uint32(AuraLevel);
808 }
809 if (changesMask[8])
810 {
811 data << uint32(KnowledgeLevel);
812 }
813 if (changesMask[9])
814 {
815 data << int32(DEBUGknowledgeWeek);
816 }
817 }
818 data.FlushBits();
819}
820
834
835void SpellCastVisual::WriteCreate(ByteBuffer& data, Player const* receiver, Object const* owner) const
836{
837 data << int32(SpellXSpellVisualID);
838 data << int32(ScriptVisualID);
839}
840
841void SpellCastVisual::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Object const* owner) const
842{
843 data << int32(SpellXSpellVisualID);
844 data << int32(ScriptVisualID);
845}
846
848{
850 && ScriptVisualID == right.ScriptVisualID;
851}
852
853void UnitChannel::WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const
854{
855 data << int32(SpellID);
856 SpellVisual.WriteCreate(data, receiver, owner);
857 data << uint32(StartTimeMs);
858 data << uint32(Duration);
859}
860
861void UnitChannel::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Unit const* owner) const
862{
863 data << int32(SpellID);
864 SpellVisual.WriteUpdate(ignoreChangesMask, data, receiver, owner);
865 data << uint32(StartTimeMs);
866 data << uint32(Duration);
867}
868
869bool UnitChannel::operator==(UnitChannel const& right) const
870{
871 return SpellID == right.SpellID
872 && SpellVisual == right.SpellVisual
873 && StartTimeMs == right.StartTimeMs
874 && Duration == right.Duration;
875}
876
877void VisibleItem::WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const
878{
879 data << int32(ItemID);
883 data << uint16(ItemVisual);
885 data << uint8(TransmogSlotOption);
886 data << uint8(SheatheCategory);
887 data.WriteBit(HasTransmog);
888 data.WriteBit(HasIllusion);
889 data.FlushBits();
890}
891
892void VisibleItem::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Unit const* owner) const
893{
894 Mask changesMask = _changesMask;
895 if (ignoreChangesMask)
896 changesMask.SetAll();
897
898 data.WriteBits(changesMask.GetBlock(0), 11);
899
900 if (changesMask[0])
901 {
902 if (changesMask[1])
903 {
904 data.WriteBit(HasTransmog);
905 }
906 if (changesMask[2])
907 {
908 data.WriteBit(HasIllusion);
909 }
910 }
911 data.FlushBits();
912 if (changesMask[0])
913 {
914 if (changesMask[3])
915 {
916 data << int32(ItemID);
917 }
918 if (changesMask[4])
919 {
921 }
922 if (changesMask[5])
923 {
925 }
926 if (changesMask[6])
927 {
929 }
930 if (changesMask[7])
931 {
932 data << uint16(ItemVisual);
933 }
934 if (changesMask[8])
935 {
937 }
938 if (changesMask[9])
939 {
940 data << uint8(TransmogSlotOption);
941 }
942 if (changesMask[10])
943 {
944 data << uint8(SheatheCategory);
945 }
946 }
947 data.FlushBits();
948}
949
964
965void PassiveSpellHistory::WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const
966{
967 data << int32(SpellID);
968 data << int32(AuraSpellID);
969}
970
971void PassiveSpellHistory::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Unit const* owner) const
972{
973 data << int32(SpellID);
974 data << int32(AuraSpellID);
975}
976
978{
979 return SpellID == right.SpellID
980 && AuraSpellID == right.AuraSpellID;
981}
982
983void UnitAssistActionData::WriteCreate(ByteBuffer& data, Player const* receiver, Unit const* owner) const
984{
985 data << uint8(Type);
987 data.WriteBits(PlayerName->size(), 6);
988 data.FlushBits();
990}
991
992void UnitAssistActionData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Unit const* owner) const
993{
994 Mask changesMask = _changesMask;
995 if (ignoreChangesMask)
996 changesMask.SetAll();
997
998 data.WriteBits(changesMask.GetBlock(0), 4);
999
1000 data.FlushBits();
1001 if (changesMask[0])
1002 {
1003 if (changesMask[1])
1004 {
1005 data << uint8(Type);
1006 }
1007 if (changesMask[3])
1008 {
1009 data << uint32(VirtualRealmAddress);
1010 }
1011 if (changesMask[2])
1012 {
1013 data.WriteBits(PlayerName->size(), 6);
1014 data.FlushBits();
1016 }
1017 }
1018}
1019
1027
1028void UnitData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Unit const* owner) const
1029{
1031
1032 data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, receiver, owner));
1033 data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, receiver, owner));
1034 data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, receiver, owner));
1035 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, receiver, owner));
1036 data << uint32(ViewerDependentValue<StateAnimIDTag>::GetValue(this, receiver, owner));
1037 data << uint32(ViewerDependentValue<StateAnimKitIDTag>::GetValue(this, receiver, owner));
1038 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, receiver, owner);
1039 data << uint32(stateWorldEffectIDs->size());
1041 data << int32(SpellOverrideNameID);
1042 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
1043 {
1044 data << uint32((*stateWorldEffectIDs)[i]);
1045 }
1046 data << *Charm;
1047 data << *Summon;
1048 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1049 {
1050 data << *Critter;
1051 }
1052 data << *CharmedBy;
1053 data << *SummonedBy;
1054 data << *CreatedBy;
1055 data << *DemonCreator;
1056 data << *LookAtControllerTarget;
1057 data << *Target;
1058 data << *BattlePetCompanionGUID;
1059 data << uint64(BattlePetDBID);
1060 ChannelData->WriteCreate(data, receiver, owner);
1061 data << int8(SpellEmpowerStage);
1062 data << uint32(SummonedByHomeRealm);
1063 data << uint8(Race);
1064 data << uint8(ClassId);
1065 data << uint8(PlayerClassId);
1066 data << uint8(Sex);
1067 data << uint8(CreatureType);
1068 data << uint8(DisplayPower);
1070 data << int64(Health);
1071 for (uint32 i = 0; i < 10; ++i)
1072 {
1073 data << int32(Power[i]);
1074 data << int32(MaxPower[i]);
1075 }
1076 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::UnitAll))
1077 {
1078 for (uint32 i = 0; i < 10; ++i)
1079 {
1080 data << float(PowerRegenFlatModifier[i]);
1081 data << float(PowerRegenInterruptedFlatModifier[i]);
1082 }
1083 }
1084 data << int64(MaxHealth);
1085 data << int32(Level);
1086 data << int32(EffectiveLevel);
1087 data << int32(ContentTuningID);
1088 data << int32(ScalingLevelMin);
1089 data << int32(ScalingLevelMax);
1090 data << int32(ScalingLevelDelta);
1091 data << uint8(ScalingFactionGroup);
1092 data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, receiver, owner));
1093 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, receiver, owner));
1094 data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, receiver, owner));
1095 data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, receiver, owner));
1096 data << uint32(ViewerDependentValue<Flags4Tag>::GetValue(this, receiver, owner));
1097 data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, receiver, owner));
1098 for (uint32 i = 0; i < 2; ++i)
1099 {
1100 data << uint32(AttackRoundBaseTime[i]);
1101 }
1102 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1103 {
1105 }
1106 data << float(BoundingRadius);
1107 data << float(CombatReach);
1108 data << float(DisplayScale);
1109 data << int32(CreatureFamily);
1110 data << uint8(OverrideCreatureType);
1111 data << int32(NativeDisplayID);
1112 data << float(NativeXDisplayScale);
1113 data << int32(MountDisplayID);
1115 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
1116 {
1117 data << float(MinDamage);
1118 data << float(MaxDamage);
1119 data << float(MinOffHandDamage);
1120 data << float(MaxOffHandDamage);
1121 }
1122 data << uint8(StandState);
1123 data << uint8(PetTalentPoints);
1124 data << uint8(VisFlags);
1125 data << uint8(AnimTier);
1126 data << uint32(PetNumber);
1127 data << uint32(PetNameTimestamp);
1128 data << uint32(PetExperience);
1130 data << float(ModCastingSpeed);
1131 data << float(ModCastingSpeedNeg);
1132 data << float(ModSpellHaste);
1133 data << float(ModHaste);
1134 data << float(ModRangedHaste);
1135 data << float(ModHasteRegen);
1136 data << float(ModTimeRate);
1137 data << int32(CreatedBySpell);
1138 data << int32(EmoteState);
1139 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1140 {
1141 for (uint32 i = 0; i < 5; ++i)
1142 {
1143 data << int32(Stats[i]);
1144 data << int32(StatPosBuff[i]);
1145 data << int32(StatNegBuff[i]);
1146 data << int32(StatSupportBuff[i]);
1147 }
1148 }
1149 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
1150 {
1151 for (uint32 i = 0; i < 7; ++i)
1152 {
1153 data << int32(Resistances[i]);
1154 }
1155 }
1156 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1157 {
1158 for (uint32 i = 0; i < 7; ++i)
1159 {
1160 data << int32(BonusResistanceMods[i]);
1161 data << int32(ManaCostModifier[i]);
1162 }
1163 }
1164 data << int32(BaseMana);
1165 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1166 {
1167 data << int32(BaseHealth);
1168 }
1169 data << uint8(SheatheState);
1170 data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, receiver, owner));
1171 data << uint8(PetFlags);
1172 data << uint8(ShapeshiftForm);
1173 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1174 {
1175 data << int32(AttackPower);
1176 data << int32(AttackPowerModPos);
1177 data << int32(AttackPowerModNeg);
1178 data << float(AttackPowerMultiplier);
1180 data << int32(RangedAttackPower);
1183 data << float(RangedAttackPowerMultiplier);
1188 data << int32(SetAttackSpeedAura);
1189 data << float(Lifesteal);
1190 data << float(MinRangedDamage);
1191 data << float(MaxRangedDamage);
1192 data << float(ManaCostMultiplier);
1193 }
1194 data << float(MaxHealthModifier);
1195 data << float(HoverHeight);
1196 data << int32(MinItemLevelCutoff);
1197 data << int32(MinItemLevel);
1198 data << int32(MaxItemLevel);
1199 data << int32(AzeriteItemLevel);
1200 data << int32(WildBattlePetLevel);
1203 data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, receiver, owner));
1204 data << int32(ScaleDuration);
1205 data << int32(LooksLikeMountID);
1206 data << int32(LooksLikeCreatureID);
1207 data << int32(LookAtControllerID);
1208 data << int32(PerksVendorItemID);
1209 data << int32(TaxiNodesID);
1210 data << *GuildGUID;
1211 data << uint32(PassiveSpells.size());
1212 data << uint32(WorldEffects.size());
1213 data << uint32(ChannelObjects.size());
1214 data << int32(FlightCapabilityID);
1215 data << float(GlideEventSpeedDivisor);
1216 data << int32(DriveCapabilityID);
1219 data << uint32(SilencedSchoolMask);
1220 data << uint32(CurrentAreaID);
1221 data << float(NameplateDistanceMod);
1222 data << float(AutoAttackRangeMod);
1223 data << *NameplateAttachToGUID;
1224 for (uint32 i = 0; i < PassiveSpells.size(); ++i)
1225 {
1226 PassiveSpells[i].WriteCreate(data, receiver, owner);
1227 }
1228 for (uint32 i = 0; i < WorldEffects.size(); ++i)
1229 {
1230 data << int32(WorldEffects[i]);
1231 }
1232 for (uint32 i = 0; i < ChannelObjects.size(); ++i)
1233 {
1234 data << ChannelObjects[i];
1235 }
1236 for (uint32 i = 0; i < 3; ++i)
1237 {
1238 VirtualItems[i].WriteCreate(data, receiver, owner);
1239 }
1240 data.FlushBits();
1241 data.WriteBit(Field_314);
1244 {
1245 AssistActionData->WriteCreate(data, receiver, owner);
1246 }
1247 data.FlushBits();
1248}
1249
1250static constexpr void UnitDataAppendAllowedFieldsMaskForFlag(UnitData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
1251{
1252 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1253 allowedMaskForTarget |= std::array<uint32, 8>{ 0x00010000u, 0xE0080000u, 0xFE100002u, 0x00000FFEu, 0xC0000200u, 0xFE03FFFFu, 0xFFFFFFFFu, 0x0000000Fu };
1254 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
1255 allowedMaskForTarget |= std::array<uint32, 8>{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000200u, 0x0003FFFFu, 0x00000000u, 0x00000000u };
1256 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
1257 allowedMaskForTarget |= std::array<uint32, 8>{ 0x00000000u, 0xE0000000u, 0x00000002u, 0x00000000u, 0x00000000u, 0x00000000u, 0x003FC000u, 0x00000000u };
1258}
1259
1260void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
1261{
1262 UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1263}
1264
1266{
1267 Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x1FF7FFFFu, 0x01EFFFFDu, 0xFFFFF001u, 0x3FFFFFFFu, 0x01FC0000u, 0x00000000u, 0x00000000u });
1268 UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1269 changesMask &= allowedMaskForTarget;
1270}
1271
1272void UnitData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Unit const* owner) const
1273{
1274 Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x1FF7FFFFu, 0x01EFFFFDu, 0xFFFFF001u, 0x3FFFFFFFu, 0x01FC0000u, 0x00000000u, 0x00000000u });
1275 UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1276 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
1277}
1278
1279void UnitData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Unit const* owner, bool ignoreNestedChangesMask) const
1280{
1281 data.WriteBits(changesMask.GetBlocksMask(0), 8);
1282 for (uint32 i = 0; i < 8; ++i)
1283 if (changesMask.GetBlock(i))
1284 data.WriteBits(changesMask.GetBlock(i), 32);
1285
1287
1288 if (changesMask[0])
1289 {
1290 if (changesMask[1])
1291 {
1292 data.WriteBit(Field_314);
1293 }
1294 if (changesMask[2])
1295 {
1296 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, receiver, owner);
1297 data.WriteBits(stateWorldEffectIDs->size(), 32);
1298 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
1299 {
1300 data << uint32((*stateWorldEffectIDs)[i]);
1301 }
1302 }
1303 }
1304 data.FlushBits();
1305 if (changesMask[0])
1306 {
1307 if (changesMask[3])
1308 {
1309 if (!ignoreNestedChangesMask)
1311 else
1313 }
1314 if (changesMask[4])
1315 {
1316 if (!ignoreNestedChangesMask)
1318 else
1320 }
1321 if (changesMask[5])
1322 {
1323 if (!ignoreNestedChangesMask)
1325 else
1327 }
1328 }
1329 data.FlushBits();
1330 if (changesMask[0])
1331 {
1332 if (changesMask[3])
1333 {
1334 for (uint32 i = 0; i < PassiveSpells.size(); ++i)
1335 {
1336 if (PassiveSpells.HasChanged(i) || ignoreNestedChangesMask)
1337 {
1338 PassiveSpells[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
1339 }
1340 }
1341 }
1342 if (changesMask[4])
1343 {
1344 for (uint32 i = 0; i < WorldEffects.size(); ++i)
1345 {
1346 if (WorldEffects.HasChanged(i) || ignoreNestedChangesMask)
1347 {
1348 data << int32(WorldEffects[i]);
1349 }
1350 }
1351 }
1352 if (changesMask[5])
1353 {
1354 for (uint32 i = 0; i < ChannelObjects.size(); ++i)
1355 {
1356 if (ChannelObjects.HasChanged(i) || ignoreNestedChangesMask)
1357 {
1358 data << ChannelObjects[i];
1359 }
1360 }
1361 }
1362 if (changesMask[6])
1363 {
1364 data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, receiver, owner));
1365 }
1366 if (changesMask[7])
1367 {
1368 data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, receiver, owner));
1369 }
1370 if (changesMask[8])
1371 {
1372 data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, receiver, owner));
1373 }
1374 if (changesMask[9])
1375 {
1376 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, receiver, owner));
1377 }
1378 if (changesMask[10])
1379 {
1380 data << uint32(ViewerDependentValue<StateAnimIDTag>::GetValue(this, receiver, owner));
1381 }
1382 if (changesMask[11])
1383 {
1384 data << uint32(ViewerDependentValue<StateAnimKitIDTag>::GetValue(this, receiver, owner));
1385 }
1386 if (changesMask[12])
1387 {
1389 }
1390 if (changesMask[13])
1391 {
1392 data << int32(SpellOverrideNameID);
1393 }
1394 if (changesMask[14])
1395 {
1396 data << *Charm;
1397 }
1398 if (changesMask[15])
1399 {
1400 data << *Summon;
1401 }
1402 if (changesMask[16])
1403 {
1404 data << *Critter;
1405 }
1406 if (changesMask[17])
1407 {
1408 data << *CharmedBy;
1409 }
1410 if (changesMask[18])
1411 {
1412 data << *SummonedBy;
1413 }
1414 if (changesMask[19])
1415 {
1416 data << *CreatedBy;
1417 }
1418 if (changesMask[20])
1419 {
1420 data << *DemonCreator;
1421 }
1422 if (changesMask[21])
1423 {
1424 data << *LookAtControllerTarget;
1425 }
1426 if (changesMask[22])
1427 {
1428 data << *Target;
1429 }
1430 if (changesMask[23])
1431 {
1432 data << *BattlePetCompanionGUID;
1433 }
1434 if (changesMask[24])
1435 {
1436 data << uint64(BattlePetDBID);
1437 }
1438 if (changesMask[25])
1439 {
1440 ChannelData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
1441 }
1442 if (changesMask[26])
1443 {
1444 data << int8(SpellEmpowerStage);
1445 }
1446 if (changesMask[27])
1447 {
1448 data << uint32(SummonedByHomeRealm);
1449 }
1450 if (changesMask[28])
1451 {
1452 data << uint8(Race);
1453 }
1454 if (changesMask[29])
1455 {
1456 data << uint8(ClassId);
1457 }
1458 if (changesMask[30])
1459 {
1460 data << uint8(PlayerClassId);
1461 }
1462 if (changesMask[31])
1463 {
1464 data << uint8(Sex);
1465 }
1466 }
1467 if (changesMask[32])
1468 {
1469 if (changesMask[33])
1470 {
1471 data << uint8(CreatureType);
1472 }
1473 if (changesMask[34])
1474 {
1475 data << uint8(DisplayPower);
1476 }
1477 if (changesMask[35])
1478 {
1480 }
1481 if (changesMask[36])
1482 {
1483 data << int64(Health);
1484 }
1485 if (changesMask[37])
1486 {
1487 data << int64(MaxHealth);
1488 }
1489 if (changesMask[38])
1490 {
1491 data << int32(Level);
1492 }
1493 if (changesMask[39])
1494 {
1495 data << int32(EffectiveLevel);
1496 }
1497 if (changesMask[40])
1498 {
1499 data << int32(ContentTuningID);
1500 }
1501 if (changesMask[41])
1502 {
1503 data << int32(ScalingLevelMin);
1504 }
1505 if (changesMask[42])
1506 {
1507 data << int32(ScalingLevelMax);
1508 }
1509 if (changesMask[43])
1510 {
1511 data << int32(ScalingLevelDelta);
1512 }
1513 if (changesMask[44])
1514 {
1515 data << uint8(ScalingFactionGroup);
1516 }
1517 if (changesMask[45])
1518 {
1519 data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, receiver, owner));
1520 }
1521 if (changesMask[46])
1522 {
1523 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, receiver, owner));
1524 }
1525 if (changesMask[47])
1526 {
1527 data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, receiver, owner));
1528 }
1529 if (changesMask[48])
1530 {
1531 data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, receiver, owner));
1532 }
1533 if (changesMask[49])
1534 {
1535 data << uint32(ViewerDependentValue<Flags4Tag>::GetValue(this, receiver, owner));
1536 }
1537 if (changesMask[50])
1538 {
1539 data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, receiver, owner));
1540 }
1541 if (changesMask[51])
1542 {
1544 }
1545 if (changesMask[52])
1546 {
1547 data << float(BoundingRadius);
1548 }
1549 if (changesMask[53])
1550 {
1551 data << float(CombatReach);
1552 }
1553 if (changesMask[54])
1554 {
1555 data << float(DisplayScale);
1556 }
1557 if (changesMask[55])
1558 {
1559 data << int32(CreatureFamily);
1560 }
1561 if (changesMask[56])
1562 {
1563 data << uint8(OverrideCreatureType);
1564 }
1565 if (changesMask[57])
1566 {
1567 data << int32(NativeDisplayID);
1568 }
1569 if (changesMask[58])
1570 {
1571 data << float(NativeXDisplayScale);
1572 }
1573 if (changesMask[59])
1574 {
1575 data << int32(MountDisplayID);
1576 }
1577 if (changesMask[60])
1578 {
1580 }
1581 if (changesMask[61])
1582 {
1583 data << float(MinDamage);
1584 }
1585 if (changesMask[62])
1586 {
1587 data << float(MaxDamage);
1588 }
1589 if (changesMask[63])
1590 {
1591 data << float(MinOffHandDamage);
1592 }
1593 }
1594 if (changesMask[64])
1595 {
1596 if (changesMask[65])
1597 {
1598 data << float(MaxOffHandDamage);
1599 }
1600 if (changesMask[66])
1601 {
1602 data << uint8(StandState);
1603 }
1604 if (changesMask[67])
1605 {
1606 data << uint8(PetTalentPoints);
1607 }
1608 if (changesMask[68])
1609 {
1610 data << uint8(VisFlags);
1611 }
1612 if (changesMask[69])
1613 {
1614 data << uint8(AnimTier);
1615 }
1616 if (changesMask[70])
1617 {
1618 data << uint32(PetNumber);
1619 }
1620 if (changesMask[71])
1621 {
1622 data << uint32(PetNameTimestamp);
1623 }
1624 if (changesMask[72])
1625 {
1626 data << uint32(PetExperience);
1627 }
1628 if (changesMask[73])
1629 {
1631 }
1632 if (changesMask[74])
1633 {
1634 data << float(ModCastingSpeed);
1635 }
1636 if (changesMask[75])
1637 {
1638 data << float(ModCastingSpeedNeg);
1639 }
1640 if (changesMask[76])
1641 {
1642 data << float(ModSpellHaste);
1643 }
1644 if (changesMask[77])
1645 {
1646 data << float(ModHaste);
1647 }
1648 if (changesMask[78])
1649 {
1650 data << float(ModRangedHaste);
1651 }
1652 if (changesMask[79])
1653 {
1654 data << float(ModHasteRegen);
1655 }
1656 if (changesMask[80])
1657 {
1658 data << float(ModTimeRate);
1659 }
1660 if (changesMask[81])
1661 {
1662 data << int32(CreatedBySpell);
1663 }
1664 if (changesMask[82])
1665 {
1666 data << int32(EmoteState);
1667 }
1668 if (changesMask[83])
1669 {
1670 data << int32(BaseMana);
1671 }
1672 if (changesMask[84])
1673 {
1674 data << int32(BaseHealth);
1675 }
1676 if (changesMask[85])
1677 {
1678 data << uint8(SheatheState);
1679 }
1680 if (changesMask[86])
1681 {
1682 data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, receiver, owner));
1683 }
1684 if (changesMask[87])
1685 {
1686 data << uint8(PetFlags);
1687 }
1688 if (changesMask[88])
1689 {
1690 data << uint8(ShapeshiftForm);
1691 }
1692 if (changesMask[89])
1693 {
1694 data << int32(AttackPower);
1695 }
1696 if (changesMask[90])
1697 {
1698 data << int32(AttackPowerModPos);
1699 }
1700 if (changesMask[91])
1701 {
1702 data << int32(AttackPowerModNeg);
1703 }
1704 if (changesMask[92])
1705 {
1706 data << float(AttackPowerMultiplier);
1707 }
1708 if (changesMask[93])
1709 {
1711 }
1712 if (changesMask[94])
1713 {
1714 data << int32(RangedAttackPower);
1715 }
1716 if (changesMask[95])
1717 {
1719 }
1720 }
1721 if (changesMask[96])
1722 {
1723 if (changesMask[97])
1724 {
1726 }
1727 if (changesMask[98])
1728 {
1729 data << float(RangedAttackPowerMultiplier);
1730 }
1731 if (changesMask[99])
1732 {
1734 }
1735 if (changesMask[100])
1736 {
1738 }
1739 if (changesMask[101])
1740 {
1742 }
1743 if (changesMask[102])
1744 {
1746 }
1747 if (changesMask[103])
1748 {
1749 data << int32(SetAttackSpeedAura);
1750 }
1751 if (changesMask[104])
1752 {
1753 data << float(Lifesteal);
1754 }
1755 if (changesMask[105])
1756 {
1757 data << float(MinRangedDamage);
1758 }
1759 if (changesMask[106])
1760 {
1761 data << float(MaxRangedDamage);
1762 }
1763 if (changesMask[107])
1764 {
1765 data << float(ManaCostMultiplier);
1766 }
1767 if (changesMask[108])
1768 {
1769 data << float(MaxHealthModifier);
1770 }
1771 if (changesMask[109])
1772 {
1773 data << float(HoverHeight);
1774 }
1775 if (changesMask[110])
1776 {
1777 data << int32(MinItemLevelCutoff);
1778 }
1779 if (changesMask[111])
1780 {
1781 data << int32(MinItemLevel);
1782 }
1783 if (changesMask[112])
1784 {
1785 data << int32(MaxItemLevel);
1786 }
1787 if (changesMask[113])
1788 {
1789 data << int32(AzeriteItemLevel);
1790 }
1791 if (changesMask[114])
1792 {
1793 data << int32(WildBattlePetLevel);
1794 }
1795 if (changesMask[115])
1796 {
1798 }
1799 if (changesMask[116])
1800 {
1802 }
1803 if (changesMask[117])
1804 {
1805 data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, receiver, owner));
1806 }
1807 if (changesMask[118])
1808 {
1809 data << int32(ScaleDuration);
1810 }
1811 if (changesMask[119])
1812 {
1813 data << int32(LooksLikeMountID);
1814 }
1815 if (changesMask[120])
1816 {
1817 data << int32(LooksLikeCreatureID);
1818 }
1819 if (changesMask[121])
1820 {
1821 data << int32(LookAtControllerID);
1822 }
1823 if (changesMask[122])
1824 {
1825 data << int32(PerksVendorItemID);
1826 }
1827 if (changesMask[123])
1828 {
1829 data << int32(TaxiNodesID);
1830 }
1831 if (changesMask[124])
1832 {
1833 data << *GuildGUID;
1834 }
1835 if (changesMask[125])
1836 {
1837 data << int32(FlightCapabilityID);
1838 }
1839 if (changesMask[126])
1840 {
1841 data << float(GlideEventSpeedDivisor);
1842 }
1843 if (changesMask[127])
1844 {
1845 data << int32(DriveCapabilityID);
1846 }
1847 }
1848 if (changesMask[128])
1849 {
1850 if (changesMask[129])
1851 {
1853 }
1854 if (changesMask[130])
1855 {
1857 }
1858 if (changesMask[131])
1859 {
1860 data << uint32(SilencedSchoolMask);
1861 }
1862 if (changesMask[132])
1863 {
1864 data << uint32(CurrentAreaID);
1865 }
1866 if (changesMask[133])
1867 {
1868 data << float(NameplateDistanceMod);
1869 }
1870 if (changesMask[134])
1871 {
1872 data << float(AutoAttackRangeMod);
1873 }
1874 if (changesMask[135])
1875 {
1876 data << *NameplateAttachToGUID;
1877 }
1879 data.FlushBits();
1880 if (changesMask[136])
1881 {
1883 {
1884 AssistActionData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
1885 }
1886 }
1887 }
1888 if (changesMask[137])
1889 {
1890 for (uint32 i = 0; i < 10; ++i)
1891 {
1892 if (changesMask[138 + i])
1893 {
1894 data << int32(Power[i]);
1895 }
1896 if (changesMask[148 + i])
1897 {
1898 data << int32(MaxPower[i]);
1899 }
1900 if (changesMask[158 + i])
1901 {
1902 data << float(PowerRegenFlatModifier[i]);
1903 }
1904 if (changesMask[168 + i])
1905 {
1906 data << float(PowerRegenInterruptedFlatModifier[i]);
1907 }
1908 }
1909 }
1910 if (changesMask[182])
1911 {
1912 for (uint32 i = 0; i < 2; ++i)
1913 {
1914 if (changesMask[183 + i])
1915 {
1916 data << uint32(AttackRoundBaseTime[i]);
1917 }
1918 }
1919 }
1920 if (changesMask[185])
1921 {
1922 for (uint32 i = 0; i < 5; ++i)
1923 {
1924 if (changesMask[186 + i])
1925 {
1926 data << int32(Stats[i]);
1927 }
1928 if (changesMask[191 + i])
1929 {
1930 data << int32(StatPosBuff[i]);
1931 }
1932 if (changesMask[196 + i])
1933 {
1934 data << int32(StatNegBuff[i]);
1935 }
1936 if (changesMask[201 + i])
1937 {
1938 data << int32(StatSupportBuff[i]);
1939 }
1940 }
1941 }
1942 if (changesMask[206])
1943 {
1944 for (uint32 i = 0; i < 7; ++i)
1945 {
1946 if (changesMask[207 + i])
1947 {
1948 data << int32(Resistances[i]);
1949 }
1950 if (changesMask[214 + i])
1951 {
1952 data << int32(BonusResistanceMods[i]);
1953 }
1954 if (changesMask[221 + i])
1955 {
1956 data << int32(ManaCostModifier[i]);
1957 }
1958 }
1959 }
1960 if (changesMask[178])
1961 {
1962 for (uint32 i = 0; i < 3; ++i)
1963 {
1964 if (changesMask[179 + i])
1965 {
1966 VirtualItems[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
1967 }
1968 }
1969 }
1970 data.FlushBits();
1971}
1972
1974{
2121}
2122
2123void ChrCustomizationChoice::WriteCreate(ByteBuffer& data, Player const* receiver, Object const* owner) const
2124{
2127}
2128
2129void ChrCustomizationChoice::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Object const* owner) const
2130{
2133}
2134
2140
2141void QuestLog::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2142{
2143 data << int32(QuestID);
2144 data << uint16(StateFlags);
2145 for (uint32 i = 0; i < 24; ++i)
2146 {
2147 data << int16(ObjectiveProgress[i]);
2148 }
2149 data << int64(EndTime);
2150 data << uint32(ObjectiveFlags);
2152}
2153
2154void QuestLog::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2155{
2156 Mask changesMask = _changesMask;
2157 if (ignoreChangesMask)
2158 changesMask.SetAll();
2159
2160 data.WriteBits(changesMask.GetBlocksMask(0), 1);
2161 if (changesMask.GetBlock(0))
2162 data.WriteBits(changesMask.GetBlock(0), 32);
2163
2164 data.FlushBits();
2165 if (changesMask[0])
2166 {
2167 if (changesMask[1])
2168 {
2169 data << int32(QuestID);
2170 }
2171 if (changesMask[2])
2172 {
2173 data << uint16(StateFlags);
2174 }
2175 if (changesMask[3])
2176 {
2177 data << int64(EndTime);
2178 }
2179 if (changesMask[4])
2180 {
2181 data << uint32(ObjectiveFlags);
2182 }
2183 if (changesMask[5])
2184 {
2186 }
2187 }
2188 if (changesMask[6])
2189 {
2190 for (uint32 i = 0; i < 24; ++i)
2191 {
2192 if (changesMask[7 + i])
2193 {
2194 data << int16(ObjectiveProgress[i]);
2195 }
2196 }
2197 }
2198}
2199
2210
2211void ArenaCooldown::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2212{
2213 data << int32(SpellID);
2214 data << int32(Charges);
2215 data << uint32(Flags);
2216 data << uint32(StartTime);
2217 data << uint32(EndTime);
2218 data << uint32(NextChargeTime);
2219 data << uint8(MaxCharges);
2220}
2221
2222void ArenaCooldown::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2223{
2224 Mask changesMask = _changesMask;
2225 if (ignoreChangesMask)
2226 changesMask.SetAll();
2227
2228 data.WriteBits(changesMask.GetBlock(0), 8);
2229
2230 data.FlushBits();
2231 if (changesMask[0])
2232 {
2233 if (changesMask[1])
2234 {
2235 data << int32(SpellID);
2236 }
2237 if (changesMask[2])
2238 {
2239 data << int32(Charges);
2240 }
2241 if (changesMask[3])
2242 {
2243 data << uint32(Flags);
2244 }
2245 if (changesMask[4])
2246 {
2247 data << uint32(StartTime);
2248 }
2249 if (changesMask[5])
2250 {
2251 data << uint32(EndTime);
2252 }
2253 if (changesMask[6])
2254 {
2255 data << uint32(NextChargeTime);
2256 }
2257 if (changesMask[7])
2258 {
2259 data << uint8(MaxCharges);
2260 }
2261 }
2262}
2263
2275
2276void ZonePlayerForcedReaction::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2277{
2278 data << int32(FactionID);
2279 data << int32(Reaction);
2280}
2281
2282void ZonePlayerForcedReaction::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2283{
2284 Mask changesMask = _changesMask;
2285 if (ignoreChangesMask)
2286 changesMask.SetAll();
2287
2288 data.WriteBits(changesMask.GetBlock(0), 3);
2289
2290 data.FlushBits();
2291 if (changesMask[0])
2292 {
2293 if (changesMask[1])
2294 {
2295 data << int32(FactionID);
2296 }
2297 if (changesMask[2])
2298 {
2299 data << int32(Reaction);
2300 }
2301 }
2302}
2303
2310
2311void PetCreatureName::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2312{
2313 data << uint32(CreatureID);
2314 data.WriteBits(Name->size(), 8);
2316 data.FlushBits();
2317}
2318
2319void PetCreatureName::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2320{
2321 Mask changesMask = _changesMask;
2322 if (ignoreChangesMask)
2323 changesMask.SetAll();
2324
2325 data.WriteBits(changesMask.GetBlock(0), 3);
2326
2327 data.FlushBits();
2328 if (changesMask[0])
2329 {
2330 if (changesMask[1])
2331 {
2332 data << uint32(CreatureID);
2333 }
2334 if (changesMask[2])
2335 {
2336 data.WriteBits(Name->size(), 8);
2338 }
2339 }
2340 data.FlushBits();
2341}
2342
2349
2350void CTROptions::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2351{
2352 data << uint32(ConditionalFlags.size());
2353 data << uint8(FactionGroup);
2355 for (uint32 i = 0; i < ConditionalFlags.size(); ++i)
2356 {
2357 data << uint32(ConditionalFlags[i]);
2358 }
2359}
2360
2361void CTROptions::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2362{
2363 data << uint32(ConditionalFlags.size());
2364 data.FlushBits();
2365 data << uint8(FactionGroup);
2367 for (uint32 i = 0; i < ConditionalFlags.size(); ++i)
2368 {
2369 data << uint32(ConditionalFlags[i]);
2370 }
2371}
2372
2373bool CTROptions::operator==(CTROptions const& right) const
2374{
2375 return ConditionalFlags == right.ConditionalFlags
2376 && FactionGroup == right.FactionGroup
2378}
2379
2380void LeaverInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2381{
2382 data << BnetAccountGUID;
2383 data << float(LeaveScore);
2384 data << uint32(SeasonID);
2385 data << uint32(TotalLeaves);
2386 data << uint32(TotalSuccesses);
2387 data << int32(ConsecutiveSuccesses);
2388 data << int64(LastPenaltyTime);
2389 data << int64(LeaverExpirationTime);
2390 data << int32(Flags);
2391 data.WriteBit(IsLeaver);
2392 data.FlushBits();
2393}
2394
2395void LeaverInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2396{
2397 data.FlushBits();
2398 data << BnetAccountGUID;
2399 data << float(LeaveScore);
2400 data << uint32(SeasonID);
2401 data << uint32(TotalLeaves);
2402 data << uint32(TotalSuccesses);
2403 data << int32(ConsecutiveSuccesses);
2404 data << int64(LastPenaltyTime);
2405 data << int64(LeaverExpirationTime);
2406 data << int32(Flags);
2407 data.WriteBit(IsLeaver);
2408 data.FlushBits();
2409}
2410
2411bool LeaverInfo::operator==(LeaverInfo const& right) const
2412{
2413 return IsLeaver == right.IsLeaver
2415 && LeaveScore == right.LeaveScore
2416 && SeasonID == right.SeasonID
2417 && TotalLeaves == right.TotalLeaves
2418 && TotalSuccesses == right.TotalSuccesses
2422 && Flags == right.Flags;
2423}
2424
2425void DeclinedNames::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2426{
2427 for (uint32 i = 0; i < 5; ++i)
2428 {
2429 data.WriteBits(Name[i].size(), 10);
2430 }
2431 for (uint32 i = 0; i < 5; ++i)
2432 {
2434 }
2435 data.FlushBits();
2436}
2437
2438void DeclinedNames::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2439{
2440 Mask changesMask = _changesMask;
2441 if (ignoreChangesMask)
2442 changesMask.SetAll();
2443
2444 data.WriteBits(changesMask.GetBlocksMask(0), 1);
2445 if (changesMask.GetBlock(0))
2446 data.WriteBits(changesMask.GetBlock(0), 32);
2447
2448 if (changesMask[0])
2449 {
2450 for (uint32 i = 0; i < 5; ++i)
2451 {
2452 if (changesMask[1 + i])
2453 {
2454 data.WriteBits(Name[i].size(), 10);
2455 }
2456 }
2457 }
2458 data.FlushBits();
2459 if (changesMask[0])
2460 {
2461 for (uint32 i = 0; i < 5; ++i)
2462 {
2463 if (changesMask[1 + i])
2464 {
2466 }
2467 }
2468 }
2469 data.FlushBits();
2470}
2471
2477
2478void CustomTabardInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2479{
2480 data << int32(EmblemStyle);
2481 data << int32(EmblemColor);
2482 data << int32(BorderStyle);
2483 data << int32(BorderColor);
2484 data << int32(BackgroundColor);
2485}
2486
2487void CustomTabardInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2488{
2489 Mask changesMask = _changesMask;
2490 if (ignoreChangesMask)
2491 changesMask.SetAll();
2492
2493 data.WriteBits(changesMask.GetBlock(0), 6);
2494
2495 data.FlushBits();
2496 if (changesMask[0])
2497 {
2498 if (changesMask[1])
2499 {
2500 data << int32(EmblemStyle);
2501 }
2502 if (changesMask[2])
2503 {
2504 data << int32(EmblemColor);
2505 }
2506 if (changesMask[3])
2507 {
2508 data << int32(BorderStyle);
2509 }
2510 if (changesMask[4])
2511 {
2512 data << int32(BorderColor);
2513 }
2514 if (changesMask[5])
2515 {
2516 data << int32(BackgroundColor);
2517 }
2518 }
2519}
2520
2530
2531void NPCAsPlayerInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
2532{
2533 data << int32(Field_0);
2534 data << int32(CharacterLoadoutID);
2535 data << int32(CreatureID);
2536 data << LocWorldSpace;
2537 data << float(FacingWorldSpace);
2538 data << TransportGUID;
2539}
2540
2541void NPCAsPlayerInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
2542{
2543 data << int32(Field_0);
2544 data << int32(CharacterLoadoutID);
2545 data << int32(CreatureID);
2546 data << LocWorldSpace;
2547 data << float(FacingWorldSpace);
2548 data << TransportGUID;
2549}
2550
2552{
2553 return Field_0 == right.Field_0
2555 && CreatureID == right.CreatureID
2556 && LocWorldSpace == right.LocWorldSpace
2558 && TransportGUID == right.TransportGUID;
2559}
2560
2561void PlayerData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
2562{
2563 data << *DuelArbiter;
2564 data << *WowAccount;
2565 data << *BnetAccount;
2566 data << uint64(GuildClubMemberID);
2567 data << *LootTargetGUID;
2568 data << uint32(PlayerFlags);
2569 data << uint32(PlayerFlagsEx);
2570 data << uint32(GuildRankID);
2571 data << uint32(GuildDeleteDate);
2572 data << int32(GuildLevel);
2573 data << uint32(Customizations.size());
2574 data << uint32(RandomCustomizations.size());
2575 for (uint32 i = 0; i < 2; ++i)
2576 {
2577 data << uint8(PartyType[i]);
2578 }
2579 data << uint8(NativeSex);
2580 data << uint8(Inebriation);
2581 data << uint8(PvpTitle);
2582 data << uint8(ArenaFaction);
2583 data << uint32(DuelTeam);
2584 data << int32(GuildTimeStamp);
2585 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2586 {
2587 for (uint32 i = 0; i < 175; ++i)
2588 {
2589 QuestLog[i].WriteCreate(data, receiver, owner);
2590 }
2591 WriteMapFieldCreate(QuestLogQuestIdToIndex, data, receiver, owner);
2592 data << uint32(QuestSessionQuestLog.size());
2593 }
2594 data << int32(PlayerTitle);
2595 data << int32(FakeInebriation);
2596 data << uint32(VirtualPlayerRealm);
2597 data << uint32(CurrentSpecID);
2599 data << int32(TaxiMountAnimKitID);
2600 for (uint32 i = 0; i < 6; ++i)
2601 {
2602 data << float(AvgItemLevel[i]);
2603 }
2605 data << int32(HonorLevel);
2606 data << int64(LogoutTime);
2607 data << uint32(ArenaCooldowns.size());
2608 for (uint32 i = 0; i < 32; ++i)
2609 {
2610 ForcedReactions[i].WriteCreate(data, receiver, owner);
2611 }
2613 data << int32(OfferedScriptQuestID);
2615 data << uint32(PetNames.size());
2616 CtrOptions->WriteCreate(data, receiver, owner);
2617 data << int32(CovenantID);
2618 data << int32(SoulbindID);
2619 data << *SpectateTarget;
2622 for (uint32 i = 0; i < 19; ++i)
2623 {
2625 }
2626 PersonalTabard->WriteCreate(data, receiver, owner);
2627 NpcAsPlayerInfo->WriteCreate(data, receiver, owner);
2628 for (uint32 i = 0; i < Customizations.size(); ++i)
2629 {
2630 Customizations[i].WriteCreate(data, receiver, owner);
2631 }
2632 for (uint32 i = 0; i < RandomCustomizations.size(); ++i)
2633 {
2634 RandomCustomizations[i].WriteCreate(data, receiver, owner);
2635 }
2636 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2637 {
2638 for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
2639 {
2640 QuestSessionQuestLog[i].WriteCreate(data, receiver, owner);
2641 }
2642 }
2643 for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
2644 {
2645 ArenaCooldowns[i].WriteCreate(data, receiver, owner);
2646 }
2647 for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
2648 {
2649 data << int32(VisualItemReplacements[i]);
2650 }
2651 for (uint32 i = 0; i < 19; ++i)
2652 {
2653 VisibleItems[i].WriteCreate(data, receiver, owner);
2654 }
2655 data.FlushBits();
2656 data.WriteBits(Name->size(), 6);
2657 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2658 {
2660 }
2661 data.WriteBit(HasLevelLink);
2662 data.WriteBits(DeclinedNames.has_value(), 1);
2663 data << *DungeonScore;
2665 LeaverInfo->WriteCreate(data, receiver, owner);
2666 for (uint32 i = 0; i < 16; ++i)
2667 {
2668 data << VisibleEquipableSpells[i];
2669 }
2670 for (uint32 i = 0; i < PetNames.size(); ++i)
2671 {
2672 PetNames[i].WriteCreate(data, receiver, owner);
2673 }
2674 if (DeclinedNames.has_value())
2675 {
2676 DeclinedNames->WriteCreate(data, receiver, owner);
2677 }
2678 data.FlushBits();
2679}
2680
2681static constexpr void PlayerDataAppendAllowedFieldsMaskForFlag(PlayerData::Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
2682{
2683 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2684 allowedMaskForTarget |= std::array<uint32, 11>{ 0x02000022u, 0xFFE00000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000001Fu, 0x00000000u, 0x00000000u, 0x00000000u };
2685}
2686
2687void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
2688{
2689 PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2690}
2691
2693{
2694 Mask allowedMaskForTarget({ 0xFDFFFFDDu, 0x001FFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFE0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000003Fu });
2695 PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2696 changesMask &= allowedMaskForTarget;
2697}
2698
2699void PlayerData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
2700{
2701 Mask allowedMaskForTarget({ 0xFDFFFFDDu, 0x001FFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFE0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000003Fu });
2702 PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2703 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
2704}
2705
2706void PlayerData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Player const* owner, bool ignoreNestedChangesMask) const
2707{
2708 data.WriteBits(changesMask.GetBlocksMask(0), 11);
2709 for (uint32 i = 0; i < 11; ++i)
2710 if (changesMask.GetBlock(i))
2711 data.WriteBits(changesMask.GetBlock(i), 32);
2712
2713 bool noQuestLogChangesMask = data.WriteBit(IsQuestLogChangesMaskSkipped());
2714 if (changesMask[0])
2715 {
2716 if (changesMask[1])
2717 {
2719 }
2720 if (changesMask[2])
2721 {
2722 data.WriteBit(HasLevelLink);
2723 }
2724 if (changesMask[3])
2725 {
2726 if (!ignoreNestedChangesMask)
2728 else
2730 }
2731 if (changesMask[4])
2732 {
2733 if (!ignoreNestedChangesMask)
2735 else
2737 }
2738 if (changesMask[5])
2739 {
2740 if (!ignoreNestedChangesMask)
2742 else
2744 }
2745 if (changesMask[6])
2746 {
2747 if (!ignoreNestedChangesMask)
2749 else
2751 }
2752 if (changesMask[7])
2753 {
2754 if (!ignoreNestedChangesMask)
2756 else
2758 }
2759 if (changesMask[8])
2760 {
2761 if (!ignoreNestedChangesMask)
2763 else
2765 }
2766 }
2767 data.FlushBits();
2768 if (changesMask[0])
2769 {
2770 if (changesMask[3])
2771 {
2772 for (uint32 i = 0; i < Customizations.size(); ++i)
2773 {
2774 if (Customizations.HasChanged(i) || ignoreNestedChangesMask)
2775 {
2776 Customizations[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2777 }
2778 }
2779 }
2780 if (changesMask[4])
2781 {
2782 for (uint32 i = 0; i < RandomCustomizations.size(); ++i)
2783 {
2784 if (RandomCustomizations.HasChanged(i) || ignoreNestedChangesMask)
2785 {
2786 RandomCustomizations[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2787 }
2788 }
2789 }
2790 if (changesMask[5])
2791 {
2792 for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
2793 {
2794 if (QuestSessionQuestLog.HasChanged(i) || ignoreNestedChangesMask)
2795 {
2796 if (noQuestLogChangesMask)
2797 QuestSessionQuestLog[i].WriteCreate(data, receiver, owner);
2798 else
2799 QuestSessionQuestLog[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2800 }
2801 }
2802 }
2803 if (changesMask[6])
2804 {
2805 for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
2806 {
2807 if (ArenaCooldowns.HasChanged(i) || ignoreNestedChangesMask)
2808 {
2809 ArenaCooldowns[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2810 }
2811 }
2812 }
2813 if (changesMask[8])
2814 {
2815 for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
2816 {
2817 if (VisualItemReplacements.HasChanged(i) || ignoreNestedChangesMask)
2818 {
2819 data << int32(VisualItemReplacements[i]);
2820 }
2821 }
2822 }
2823 if (changesMask[7])
2824 {
2825 for (uint32 i = 0; i < PetNames.size(); ++i)
2826 {
2827 if (PetNames.HasChanged(i) || ignoreNestedChangesMask)
2828 {
2829 PetNames[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2830 }
2831 }
2832 }
2833 if (changesMask[9])
2834 {
2835 data << *DuelArbiter;
2836 }
2837 if (changesMask[10])
2838 {
2839 data << *WowAccount;
2840 }
2841 if (changesMask[11])
2842 {
2843 data << *BnetAccount;
2844 }
2845 if (changesMask[12])
2846 {
2847 data << uint64(GuildClubMemberID);
2848 }
2849 if (changesMask[13])
2850 {
2851 data << *LootTargetGUID;
2852 }
2853 if (changesMask[14])
2854 {
2855 data << uint32(PlayerFlags);
2856 }
2857 if (changesMask[15])
2858 {
2859 data << uint32(PlayerFlagsEx);
2860 }
2861 if (changesMask[16])
2862 {
2863 data << uint32(GuildRankID);
2864 }
2865 if (changesMask[17])
2866 {
2867 data << uint32(GuildDeleteDate);
2868 }
2869 if (changesMask[18])
2870 {
2871 data << int32(GuildLevel);
2872 }
2873 if (changesMask[19])
2874 {
2875 data << uint8(NativeSex);
2876 }
2877 if (changesMask[20])
2878 {
2879 data << uint8(Inebriation);
2880 }
2881 if (changesMask[21])
2882 {
2883 data << uint8(PvpTitle);
2884 }
2885 if (changesMask[22])
2886 {
2887 data << uint8(ArenaFaction);
2888 }
2889 if (changesMask[23])
2890 {
2891 data << uint32(DuelTeam);
2892 }
2893 if (changesMask[24])
2894 {
2895 data << int32(GuildTimeStamp);
2896 }
2897 if (changesMask[25])
2898 {
2899 WriteMapFieldUpdate(QuestLogQuestIdToIndex, ignoreNestedChangesMask, data, receiver, owner);
2900 }
2901 if (changesMask[26])
2902 {
2903 data << int32(PlayerTitle);
2904 }
2905 if (changesMask[27])
2906 {
2907 data << int32(FakeInebriation);
2908 }
2909 if (changesMask[28])
2910 {
2911 data << uint32(VirtualPlayerRealm);
2912 }
2913 if (changesMask[29])
2914 {
2915 data << uint32(CurrentSpecID);
2916 }
2917 if (changesMask[30])
2918 {
2920 }
2921 if (changesMask[31])
2922 {
2923 data << int32(TaxiMountAnimKitID);
2924 }
2925 }
2926 if (changesMask[32])
2927 {
2928 if (changesMask[33])
2929 {
2931 }
2932 if (changesMask[34])
2933 {
2934 data << int32(HonorLevel);
2935 }
2936 if (changesMask[35])
2937 {
2938 data << int64(LogoutTime);
2939 }
2940 if (changesMask[37])
2941 {
2943 }
2944 if (changesMask[38])
2945 {
2946 data << int32(OfferedScriptQuestID);
2947 }
2948 if (changesMask[39])
2949 {
2951 }
2952 if (changesMask[40])
2953 {
2954 CtrOptions->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2955 }
2956 if (changesMask[41])
2957 {
2958 data << int32(CovenantID);
2959 }
2960 if (changesMask[42])
2961 {
2962 data << int32(SoulbindID);
2963 }
2964 if (changesMask[45])
2965 {
2966 data << *SpectateTarget;
2967 }
2968 if (changesMask[46])
2969 {
2971 }
2972 if (changesMask[48])
2973 {
2974 PersonalTabard->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2975 }
2976 if (changesMask[49])
2977 {
2978 NpcAsPlayerInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2979 }
2980 if (changesMask[36])
2981 {
2982 data.WriteBits(Name->size(), 6);
2983 }
2984 data.WriteBits(DeclinedNames.has_value(), 1);
2985 data.FlushBits();
2986 if (changesMask[43])
2987 {
2988 data << *DungeonScore;
2989 }
2990 if (changesMask[36])
2991 {
2993 }
2994 if (changesMask[44])
2995 {
2996 LeaverInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
2997 }
2998 if (changesMask[47])
2999 {
3000 if (DeclinedNames.has_value())
3001 {
3002 DeclinedNames->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
3003 }
3004 }
3005 }
3006 if (changesMask[50])
3007 {
3008 for (uint32 i = 0; i < 2; ++i)
3009 {
3010 if (changesMask[51 + i])
3011 {
3012 data << uint8(PartyType[i]);
3013 }
3014 }
3015 }
3016 if (changesMask[53])
3017 {
3018 for (uint32 i = 0; i < 175; ++i)
3019 {
3020 if (changesMask[54 + i])
3021 {
3022 if (noQuestLogChangesMask)
3023 QuestLog[i].WriteCreate(data, receiver, owner);
3024 else
3025 QuestLog[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
3026 }
3027 }
3028 }
3029 if (changesMask[249])
3030 {
3031 for (uint32 i = 0; i < 6; ++i)
3032 {
3033 if (changesMask[250 + i])
3034 {
3035 data << float(AvgItemLevel[i]);
3036 }
3037 }
3038 }
3039 if (changesMask[256])
3040 {
3041 for (uint32 i = 0; i < 32; ++i)
3042 {
3043 if (changesMask[257 + i])
3044 {
3045 ForcedReactions[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
3046 }
3047 }
3048 }
3049 if (changesMask[306])
3050 {
3051 for (uint32 i = 0; i < 19; ++i)
3052 {
3053 if (changesMask[307 + i])
3054 {
3056 }
3057 }
3058 }
3059 if (changesMask[229])
3060 {
3061 for (uint32 i = 0; i < 19; ++i)
3062 {
3063 if (changesMask[230 + i])
3064 {
3065 VisibleItems[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
3066 }
3067 }
3068 }
3069 if (changesMask[289])
3070 {
3071 for (uint32 i = 0; i < 16; ++i)
3072 {
3073 if (changesMask[290 + i])
3074 {
3075 data << VisibleEquipableSpells[i];
3076 }
3077 }
3078 }
3079 data.FlushBits();
3080}
3081
3083{
3140}
3141
3142void SkillInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3143{
3144 for (uint32 i = 0; i < 300; ++i)
3145 {
3146 data << uint16(SkillLineID[i]);
3147 data << uint16(SkillStep[i]);
3148 data << uint16(SkillRank[i]);
3149 data << uint16(SkillStartingRank[i]);
3150 data << uint16(SkillMaxRank[i]);
3151 data << int16(SkillTempBonus[i]);
3152 data << uint16(SkillPermBonus[i]);
3153 }
3154}
3155
3156void SkillInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3157{
3158 Mask changesMask = _changesMask;
3159 if (ignoreChangesMask)
3160 changesMask.SetAll();
3161
3162 for (uint32 i = 0; i < 2; ++i)
3163 data << uint32(changesMask.GetBlocksMask(i));
3164 data.WriteBits(changesMask.GetBlocksMask(2), 2);
3165 for (uint32 i = 0; i < 66; ++i)
3166 if (changesMask.GetBlock(i))
3167 data.WriteBits(changesMask.GetBlock(i), 32);
3168
3169 data.FlushBits();
3170 if (changesMask[0])
3171 {
3172 for (uint32 i = 0; i < 300; ++i)
3173 {
3174 if (changesMask[1 + i])
3175 {
3176 data << uint16(SkillLineID[i]);
3177 }
3178 if (changesMask[301 + i])
3179 {
3180 data << uint16(SkillStep[i]);
3181 }
3182 if (changesMask[601 + i])
3183 {
3184 data << uint16(SkillRank[i]);
3185 }
3186 if (changesMask[901 + i])
3187 {
3188 data << uint16(SkillStartingRank[i]);
3189 }
3190 if (changesMask[1201 + i])
3191 {
3192 data << uint16(SkillMaxRank[i]);
3193 }
3194 if (changesMask[1501 + i])
3195 {
3196 data << int16(SkillTempBonus[i]);
3197 }
3198 if (changesMask[1801 + i])
3199 {
3200 data << uint16(SkillPermBonus[i]);
3201 }
3202 }
3203 }
3204}
3205
3217
3218void BitVector::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3219{
3220 data << uint32(Values.size());
3221 for (uint32 i = 0; i < Values.size(); ++i)
3222 {
3223 data << uint64(Values[i]);
3224 }
3225}
3226
3227void BitVector::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3228{
3229 Mask changesMask = _changesMask;
3230 if (ignoreChangesMask)
3231 changesMask.SetAll();
3232
3233 data.WriteBits(changesMask.GetBlock(0), 2);
3234
3235 if (changesMask[0])
3236 {
3237 if (changesMask[1])
3238 {
3239 if (!ignoreChangesMask)
3240 Values.WriteUpdateMask(data);
3241 else
3243 }
3244 }
3245 data.FlushBits();
3246 if (changesMask[0])
3247 {
3248 if (changesMask[1])
3249 {
3250 for (uint32 i = 0; i < Values.size(); ++i)
3251 {
3252 if (Values.HasChanged(i) || ignoreChangesMask)
3253 {
3254 data << uint64(Values[i]);
3255 }
3256 }
3257 }
3258 }
3259}
3260
3266
3267void BitVectors::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3268{
3269 for (uint32 i = 0; i < 14; ++i)
3270 {
3271 Values[i].WriteCreate(data, receiver, owner);
3272 }
3273}
3274
3275void BitVectors::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3276{
3277 Mask changesMask = _changesMask;
3278 if (ignoreChangesMask)
3279 changesMask.SetAll();
3280
3281 data.WriteBits(changesMask.GetBlocksMask(0), 1);
3282 if (changesMask.GetBlock(0))
3283 data.WriteBits(changesMask.GetBlock(0), 32);
3284
3285 data.FlushBits();
3286 if (changesMask[0])
3287 {
3288 for (uint32 i = 0; i < 14; ++i)
3289 {
3290 if (changesMask[1 + i])
3291 {
3292 Values[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
3293 }
3294 }
3295 }
3296}
3297
3303
3304void PlayerDataElement::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3305{
3306 data << uint32(Type);
3307 if (Type == 1)
3308 {
3309 data << float(FloatValue);
3310 }
3311 if (Type == 0)
3312 {
3313 data << int64(Int64Value);
3314 }
3315}
3316
3317void PlayerDataElement::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3318{
3319 data << uint32(Type);
3320 if (Type == 1)
3321 {
3322 data << float(FloatValue);
3323 }
3324 if (Type == 0)
3325 {
3326 data << int64(Int64Value);
3327 }
3328}
3329
3331{
3332 return Type == right.Type
3333 && FloatValue == right.FloatValue
3334 && Int64Value == right.Int64Value;
3335}
3336
3337void RestInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3338{
3339 data << uint32(Threshold);
3340 data << uint8(StateID);
3341}
3342
3343void RestInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3344{
3345 Mask changesMask = _changesMask;
3346 if (ignoreChangesMask)
3347 changesMask.SetAll();
3348
3349 data.WriteBits(changesMask.GetBlock(0), 3);
3350
3351 data.FlushBits();
3352 if (changesMask[0])
3353 {
3354 if (changesMask[1])
3355 {
3356 data << uint32(Threshold);
3357 }
3358 if (changesMask[2])
3359 {
3360 data << uint8(StateID);
3361 }
3362 }
3363}
3364
3371
3372void PVPInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3373{
3374 data << int8(Bracket);
3375 data << int32(PvpRatingID);
3376 data << uint32(WeeklyPlayed);
3377 data << uint32(WeeklyWon);
3378 data << uint32(SeasonPlayed);
3379 data << uint32(SeasonWon);
3380 data << uint32(Rating);
3381 data << uint32(WeeklyBestRating);
3382 data << uint32(LastWeeksBestRating);
3383 data << uint32(PvpTierID);
3385 data << uint32(SeasonBestRating);
3386 data << uint32(SeasonBestTier);
3387 data << uint32(WeeklyRoundsPlayed);
3388 data << uint32(WeeklyRoundsWon);
3389 data << uint32(SeasonRoundsPlayed);
3390 data << uint32(SeasonRoundsWon);
3391 data.WriteBit(Disqualified);
3392 data.FlushBits();
3393}
3394
3395void PVPInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3396{
3397 Mask changesMask = _changesMask;
3398 if (ignoreChangesMask)
3399 changesMask.SetAll();
3400
3401 data.WriteBits(changesMask.GetBlock(0), 19);
3402
3403 if (changesMask[0])
3404 {
3405 if (changesMask[1])
3406 {
3407 data.WriteBit(Disqualified);
3408 }
3409 }
3410 data.FlushBits();
3411 if (changesMask[0])
3412 {
3413 if (changesMask[2])
3414 {
3415 data << int8(Bracket);
3416 }
3417 if (changesMask[3])
3418 {
3419 data << int32(PvpRatingID);
3420 }
3421 if (changesMask[4])
3422 {
3423 data << uint32(WeeklyPlayed);
3424 }
3425 if (changesMask[5])
3426 {
3427 data << uint32(WeeklyWon);
3428 }
3429 if (changesMask[6])
3430 {
3431 data << uint32(SeasonPlayed);
3432 }
3433 if (changesMask[7])
3434 {
3435 data << uint32(SeasonWon);
3436 }
3437 if (changesMask[8])
3438 {
3439 data << uint32(Rating);
3440 }
3441 if (changesMask[9])
3442 {
3443 data << uint32(WeeklyBestRating);
3444 }
3445 if (changesMask[10])
3446 {
3447 data << uint32(LastWeeksBestRating);
3448 }
3449 if (changesMask[11])
3450 {
3451 data << uint32(PvpTierID);
3452 }
3453 if (changesMask[12])
3454 {
3456 }
3457 if (changesMask[13])
3458 {
3459 data << uint32(SeasonBestRating);
3460 }
3461 if (changesMask[14])
3462 {
3463 data << uint32(SeasonBestTier);
3464 }
3465 if (changesMask[15])
3466 {
3467 data << uint32(WeeklyRoundsPlayed);
3468 }
3469 if (changesMask[16])
3470 {
3471 data << uint32(WeeklyRoundsWon);
3472 }
3473 if (changesMask[17])
3474 {
3475 data << uint32(SeasonRoundsPlayed);
3476 }
3477 if (changesMask[18])
3478 {
3479 data << uint32(SeasonRoundsWon);
3480 }
3481 }
3482 data.FlushBits();
3483}
3484
3507
3508void CharacterRestriction::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3509{
3510 data << int32(Field_0);
3511 data << int32(Field_4);
3512 data << int32(Field_8);
3513 data.WriteBits(Type, 5);
3514 data.FlushBits();
3515}
3516
3517void CharacterRestriction::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3518{
3519 data << int32(Field_0);
3520 data << int32(Field_4);
3521 data << int32(Field_8);
3522 data.WriteBits(Type, 5);
3523 data.FlushBits();
3524}
3525
3527{
3528 return Field_0 == right.Field_0
3529 && Field_4 == right.Field_4
3530 && Field_8 == right.Field_8
3531 && Type == right.Type;
3532}
3533
3534void SpellPctModByLabel::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3535{
3536 data << int32(ModIndex);
3537 data << float(ModifierValue);
3538 data << int32(LabelID);
3539}
3540
3541void SpellPctModByLabel::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3542{
3543 data << int32(ModIndex);
3544 data << float(ModifierValue);
3545 data << int32(LabelID);
3546}
3547
3549{
3550 return ModIndex == right.ModIndex
3551 && ModifierValue == right.ModifierValue
3552 && LabelID == right.LabelID;
3553}
3554
3555void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3556{
3557 data << int32(ModIndex);
3558 data << int32(ModifierValue);
3559 data << int32(LabelID);
3560}
3561
3562void SpellFlatModByLabel::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3563{
3564 data << int32(ModIndex);
3565 data << int32(ModifierValue);
3566 data << int32(LabelID);
3567}
3568
3570{
3571 return ModIndex == right.ModIndex
3572 && ModifierValue == right.ModifierValue
3573 && LabelID == right.LabelID;
3574}
3575
3576void SpellPctPVPModByLabel::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3577{
3578 data << int32(PvpModIndex);
3579 data << float(ModifierValue);
3580 data << int32(LabelID);
3581}
3582
3583void SpellPctPVPModByLabel::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3584{
3585 data << int32(PvpModIndex);
3586 data << float(ModifierValue);
3587 data << int32(LabelID);
3588}
3589
3591{
3592 return PvpModIndex == right.PvpModIndex
3593 && ModifierValue == right.ModifierValue
3594 && LabelID == right.LabelID;
3595}
3596
3597void SpellFlatPVPModByLabel::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3598{
3599 data << int32(PvpModIndex);
3600 data << int32(ModifierValue);
3601 data << int32(LabelID);
3602}
3603
3604void SpellFlatPVPModByLabel::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3605{
3606 data << int32(PvpModIndex);
3607 data << int32(ModifierValue);
3608 data << int32(LabelID);
3609}
3610
3612{
3613 return PvpModIndex == right.PvpModIndex
3614 && ModifierValue == right.ModifierValue
3615 && LabelID == right.LabelID;
3616}
3617
3618void CompletedProject::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3619{
3620 data << int64(FirstCompleted);
3621 data << uint32(ProjectID);
3622 data << uint32(CompletionCount);
3623}
3624
3625void CompletedProject::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3626{
3627 Mask changesMask = _changesMask;
3628 if (ignoreChangesMask)
3629 changesMask.SetAll();
3630
3631 data.WriteBits(changesMask.GetBlock(0), 4);
3632
3633 data.FlushBits();
3634 if (changesMask[0])
3635 {
3636 if (changesMask[1])
3637 {
3638 data << int64(FirstCompleted);
3639 }
3640 if (changesMask[2])
3641 {
3642 data << uint32(ProjectID);
3643 }
3644 if (changesMask[3])
3645 {
3646 data << uint32(CompletionCount);
3647 }
3648 }
3649}
3650
3658
3659void ResearchHistory::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3660{
3661 data << uint32(CompletedProjects.size());
3662 for (uint32 i = 0; i < CompletedProjects.size(); ++i)
3663 {
3664 CompletedProjects[i].WriteCreate(data, receiver, owner);
3665 }
3666}
3667
3668void ResearchHistory::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3669{
3670 Mask changesMask = _changesMask;
3671 if (ignoreChangesMask)
3672 changesMask.SetAll();
3673
3674 data.WriteBits(changesMask.GetBlock(0), 2);
3675
3676 if (changesMask[0])
3677 {
3678 if (changesMask[1])
3679 {
3680 if (!ignoreChangesMask)
3682 else
3684 }
3685 }
3686 data.FlushBits();
3687 if (changesMask[0])
3688 {
3689 if (changesMask[1])
3690 {
3691 for (uint32 i = 0; i < CompletedProjects.size(); ++i)
3692 {
3693 if (CompletedProjects.HasChanged(i) || ignoreChangesMask)
3694 {
3695 CompletedProjects[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
3696 }
3697 }
3698 }
3699 }
3700}
3701
3707
3708void MawPower::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3709{
3710 data << int32(SpellID);
3711 data << int32(MawPowerID);
3712 data << int32(Stacks);
3713}
3714
3715void MawPower::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3716{
3717 data << int32(SpellID);
3718 data << int32(MawPowerID);
3719 data << int32(Stacks);
3720}
3721
3722bool MawPower::operator==(MawPower const& right) const
3723{
3724 return SpellID == right.SpellID
3725 && MawPowerID == right.MawPowerID
3726 && Stacks == right.Stacks;
3727}
3728
3729void MultiFloorExplore::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3730{
3731 data << uint32(WorldMapOverlayIDs.size());
3732 for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i)
3733 {
3734 data << int32(WorldMapOverlayIDs[i]);
3735 }
3736}
3737
3738void MultiFloorExplore::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3739{
3740 data << uint32(WorldMapOverlayIDs.size());
3741 for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i)
3742 {
3743 data << int32(WorldMapOverlayIDs[i]);
3744 }
3745 data.FlushBits();
3746}
3747
3749{
3750 return WorldMapOverlayIDs == right.WorldMapOverlayIDs;
3751}
3752
3753void RecipeProgressionInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3754{
3756 data << uint16(Experience);
3757}
3758
3759void RecipeProgressionInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3760{
3762 data << uint16(Experience);
3763}
3764
3770
3771void LevelLinkInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3772{
3773 data << *TargetGUID;
3774 data << int32(Level);
3775}
3776
3777void LevelLinkInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3778{
3779 Mask changesMask = _changesMask;
3780 if (ignoreChangesMask)
3781 changesMask.SetAll();
3782
3783 data.WriteBits(changesMask.GetBlock(0), 3);
3784
3785 data.FlushBits();
3786 if (changesMask[0])
3787 {
3788 if (changesMask[1])
3789 {
3790 data << *TargetGUID;
3791 }
3792 if (changesMask[2])
3793 {
3794 data << int32(Level);
3795 }
3796 }
3797}
3798
3805
3806void QuestSession::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3807{
3808 data << *Owner;
3809 QuestCompleted->WriteCreate(data, receiver, owner);
3810}
3811
3812void QuestSession::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3813{
3814 Mask changesMask = _changesMask;
3815 if (ignoreChangesMask)
3816 changesMask.SetAll();
3817
3818 data.WriteBits(changesMask.GetBlock(0), 3);
3819
3820 data.FlushBits();
3821 if (changesMask[0])
3822 {
3823 if (changesMask[1])
3824 {
3825 data << *Owner;
3826 }
3827 if (changesMask[2])
3828 {
3829 QuestCompleted->WriteUpdate(ignoreChangesMask, data, receiver, owner);
3830 }
3831 }
3832}
3833
3840
3841void ReplayedQuest::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3842{
3843 data << int32(QuestID);
3844 data << uint32(ReplayTime);
3845}
3846
3847void ReplayedQuest::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3848{
3849 Mask changesMask = _changesMask;
3850 if (ignoreChangesMask)
3851 changesMask.SetAll();
3852
3853 data.WriteBits(changesMask.GetBlock(0), 3);
3854
3855 data.FlushBits();
3856 if (changesMask[0])
3857 {
3858 if (changesMask[1])
3859 {
3860 data << int32(QuestID);
3861 }
3862 if (changesMask[2])
3863 {
3864 data << uint32(ReplayTime);
3865 }
3866 }
3867}
3868
3875
3876void TraitEntry::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3877{
3878 data << int32(TraitNodeID);
3879 data << int32(TraitNodeEntryID);
3880 data << int32(Rank);
3881 data << int32(GrantedRanks);
3882 data << int32(BonusRanks);
3883}
3884
3885void TraitEntry::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3886{
3887 data << int32(TraitNodeID);
3888 data << int32(TraitNodeEntryID);
3889 data << int32(Rank);
3890 data << int32(GrantedRanks);
3891 data << int32(BonusRanks);
3892}
3893
3894bool TraitEntry::operator==(TraitEntry const& right) const
3895{
3896 return TraitNodeID == right.TraitNodeID
3898 && Rank == right.Rank
3899 && GrantedRanks == right.GrantedRanks
3900 && BonusRanks == right.BonusRanks;
3901}
3902
3903void TraitSubTreeCache::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3904{
3905 data << int32(TraitSubTreeID);
3906 data << uint32(Entries.size());
3907 for (uint32 i = 0; i < Entries.size(); ++i)
3908 {
3909 Entries[i].WriteCreate(data, receiver, owner);
3910 }
3911 data.WriteBits(Active, 1);
3912 data.FlushBits();
3913}
3914
3915void TraitSubTreeCache::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3916{
3917 data << int32(TraitSubTreeID);
3918 data << uint32(Entries.size());
3919 for (uint32 i = 0; i < Entries.size(); ++i)
3920 {
3921 Entries[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
3922 }
3923 data.FlushBits();
3924 data.WriteBits(Active, 1);
3925 data.FlushBits();
3926}
3927
3929{
3930 return Entries == right.Entries
3931 && TraitSubTreeID == right.TraitSubTreeID
3932 && Active == right.Active;
3933}
3934
3935void TraitConfig::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
3936{
3937 data << int32(ID);
3938 data << int32(Type);
3939 data << uint32(Entries.size());
3940 data << uint32(SubTrees.size());
3941 if (Type == 2)
3942 {
3943 data << int32(SkillLineID);
3944 }
3945 if (Type == 1)
3946 {
3947 data << int32(ChrSpecializationID);
3948 data << int32(CombatConfigFlags);
3949 data << int32(LocalIdentifier);
3950 }
3951 if (Type == 3)
3952 {
3953 data << int32(TraitSystemID);
3954 data << int32(VariationID);
3955 }
3956 for (uint32 i = 0; i < Entries.size(); ++i)
3957 {
3958 Entries[i].WriteCreate(data, receiver, owner);
3959 }
3960 data.WriteBits(Name->size(), 9);
3961 for (uint32 i = 0; i < SubTrees.size(); ++i)
3962 {
3963 SubTrees[i].WriteCreate(data, receiver, owner);
3964 }
3966 data.FlushBits();
3967}
3968
3969void TraitConfig::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
3970{
3971 Mask changesMask = _changesMask;
3972 if (ignoreChangesMask)
3973 changesMask.SetAll();
3974
3975 data.WriteBits(changesMask.GetBlock(0), 15);
3976
3977 if (changesMask[0])
3978 {
3979 if (changesMask[1])
3980 {
3981 if (!ignoreChangesMask)
3982 Entries.WriteUpdateMask(data);
3983 else
3985 }
3986 if (changesMask[2])
3987 {
3988 if (!ignoreChangesMask)
3990 else
3992 }
3993 }
3994 data.FlushBits();
3995 if (changesMask[0])
3996 {
3997 if (changesMask[1])
3998 {
3999 for (uint32 i = 0; i < Entries.size(); ++i)
4000 {
4001 if (Entries.HasChanged(i) || ignoreChangesMask)
4002 {
4003 Entries[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
4004 }
4005 }
4006 }
4007 if (changesMask[2])
4008 {
4009 for (uint32 i = 0; i < SubTrees.size(); ++i)
4010 {
4011 if (SubTrees.HasChanged(i) || ignoreChangesMask)
4012 {
4013 SubTrees[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
4014 }
4015 }
4016 }
4017 if (changesMask[3])
4018 {
4019 data << int32(ID);
4020 }
4021 }
4022 if (changesMask[4])
4023 {
4024 if (changesMask[6])
4025 {
4026 data << int32(Type);
4027 }
4028 if (changesMask[7])
4029 {
4030 if (Type == 2)
4031 {
4032 data << int32(SkillLineID);
4033 }
4034 }
4035 }
4036 if (changesMask[8])
4037 {
4038 if (changesMask[9])
4039 {
4040 if (Type == 1)
4041 {
4042 data << int32(ChrSpecializationID);
4043 }
4044 }
4045 if (changesMask[10])
4046 {
4047 if (Type == 1)
4048 {
4049 data << int32(CombatConfigFlags);
4050 }
4051 }
4052 if (changesMask[11])
4053 {
4054 if (Type == 1)
4055 {
4056 data << int32(LocalIdentifier);
4057 }
4058 }
4059 }
4060 if (changesMask[12])
4061 {
4062 if (changesMask[13])
4063 {
4064 if (Type == 3)
4065 {
4066 data << int32(TraitSystemID);
4067 }
4068 }
4069 if (changesMask[14])
4070 {
4071 if (Type == 3)
4072 {
4073 data << int32(VariationID);
4074 }
4075 }
4076 }
4077 if (changesMask[4])
4078 {
4079 if (changesMask[5])
4080 {
4081 data.WriteBits(Name->size(), 9);
4083 }
4084 }
4085 data.FlushBits();
4086}
4087
4103
4104void CraftingOrderItem::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4105{
4106 data << uint64(OrderItemID);
4107 data << *ItemGUID;
4108 data << *OwnerGUID;
4109 data << int32(ItemID);
4110 data << uint32(Quantity);
4111 data << int32(ReagentQuality);
4113 data.FlushBits();
4115 {
4116 data << uint8(DataSlotIndex);
4117 }
4118}
4119
4120void CraftingOrderItem::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4121{
4122 Mask changesMask = _changesMask;
4123 if (ignoreChangesMask)
4124 changesMask.SetAll();
4125
4126 data.WriteBits(changesMask.GetBlock(0), 7);
4127
4128 data.FlushBits();
4129 if (changesMask[0])
4130 {
4131 data << uint64(OrderItemID);
4132 }
4133 if (changesMask[1])
4134 {
4135 data << *ItemGUID;
4136 }
4137 if (changesMask[2])
4138 {
4139 data << *OwnerGUID;
4140 }
4141 if (changesMask[3])
4142 {
4143 data << int32(ItemID);
4144 }
4145 if (changesMask[4])
4146 {
4147 data << uint32(Quantity);
4148 }
4149 if (changesMask[5])
4150 {
4151 data << int32(ReagentQuality);
4152 }
4154 data.FlushBits();
4155 if (changesMask[6])
4156 {
4158 {
4159 data << uint8(DataSlotIndex);
4160 }
4161 }
4162}
4163
4175
4176void CraftingOrderCustomer::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4177{
4178 data << *CustomerGUID;
4179 data << *CustomerAccountGUID;
4180}
4181
4182void CraftingOrderCustomer::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4183{
4184 Mask changesMask = _changesMask;
4185 if (ignoreChangesMask)
4186 changesMask.SetAll();
4187
4188 data.WriteBits(changesMask.GetBlock(0), 2);
4189
4190 data.FlushBits();
4191 if (changesMask[0])
4192 {
4193 data << *CustomerGUID;
4194 }
4195 if (changesMask[1])
4196 {
4197 data << *CustomerAccountGUID;
4198 }
4199}
4200
4207
4208void CraftingOrderNpcCustomer::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4209{
4211 data << int32(RealmAddress);
4212}
4213
4214void CraftingOrderNpcCustomer::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4215{
4216 Mask changesMask = _changesMask;
4217 if (ignoreChangesMask)
4218 changesMask.SetAll();
4219
4220 data.WriteBits(changesMask.GetBlock(0), 2);
4221
4222 data.FlushBits();
4223 if (changesMask[0])
4224 {
4226 }
4227 if (changesMask[1])
4228 {
4229 data << int32(RealmAddress);
4230 }
4231}
4232
4239
4240void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4241{
4242 data << int32(Field_0);
4243 data << uint64(OrderID);
4244 data << int32(SkillLineAbilityID);
4245 data << int32(OrderState);
4246 data << uint8(OrderType);
4247 data << uint8(MinQuality);
4248 data << int64(ExpirationTime);
4249 data << int64(ClaimEndTime);
4250 data << int64(TipAmount);
4251 data << int64(ConsortiumCut);
4252 data << uint32(Flags);
4253 data << *CrafterGUID;
4254 data << *PersonalCrafterGUID;
4256 data << int32(NpcTreasureID);
4257 data << uint32(Reagents.size());
4258 data.WriteBits(CustomerNotes->size(), 10);
4259 data.WriteBits(Customer.has_value(), 1);
4260 data.WriteBits(NpcCustomer.has_value(), 1);
4261 data.WriteBits(OutputItem.has_value(), 1);
4263 data.FlushBits();
4264 for (uint32 i = 0; i < Reagents.size(); ++i)
4265 {
4266 Reagents[i].WriteCreate(data, receiver, owner);
4267 }
4269 if (Customer.has_value())
4270 {
4271 Customer->WriteCreate(data, receiver, owner);
4272 }
4273 if (NpcCustomer.has_value())
4274 {
4275 NpcCustomer->WriteCreate(data, receiver, owner);
4276 }
4277 if (OutputItem.has_value())
4278 {
4279 OutputItem->WriteCreate(data, receiver, owner);
4280 }
4282 {
4283 data << *OutputItemData;
4284 }
4285 data.FlushBits();
4286}
4287
4288void CraftingOrderData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4289{
4290 Mask changesMask = _changesMask;
4291 if (ignoreChangesMask)
4292 changesMask.SetAll();
4293
4294 data.WriteBits(changesMask.GetBlock(0), 26);
4295
4296 if (changesMask[0])
4297 {
4298 if (changesMask[1])
4299 {
4300 if (!ignoreChangesMask)
4302 else
4304 }
4305 }
4306 data.FlushBits();
4307 if (changesMask[0])
4308 {
4309 if (changesMask[1])
4310 {
4311 for (uint32 i = 0; i < Reagents.size(); ++i)
4312 {
4313 if (Reagents.HasChanged(i) || ignoreChangesMask)
4314 {
4315 Reagents[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
4316 }
4317 }
4318 }
4319 if (changesMask[2])
4320 {
4321 data << int32(Field_0);
4322 }
4323 if (changesMask[3])
4324 {
4325 data << uint64(OrderID);
4326 }
4327 if (changesMask[4])
4328 {
4329 data << int32(SkillLineAbilityID);
4330 }
4331 if (changesMask[5])
4332 {
4333 data << int32(OrderState);
4334 }
4335 }
4336 if (changesMask[6])
4337 {
4338 if (changesMask[7])
4339 {
4340 data << uint8(OrderType);
4341 }
4342 if (changesMask[8])
4343 {
4344 data << uint8(MinQuality);
4345 }
4346 if (changesMask[9])
4347 {
4348 data << int64(ExpirationTime);
4349 }
4350 if (changesMask[10])
4351 {
4352 data << int64(ClaimEndTime);
4353 }
4354 if (changesMask[11])
4355 {
4356 data << int64(TipAmount);
4357 }
4358 }
4359 if (changesMask[12])
4360 {
4361 if (changesMask[13])
4362 {
4363 data << int64(ConsortiumCut);
4364 }
4365 if (changesMask[14])
4366 {
4367 data << uint32(Flags);
4368 }
4369 if (changesMask[15])
4370 {
4371 data << *CrafterGUID;
4372 }
4373 if (changesMask[16])
4374 {
4375 data << *PersonalCrafterGUID;
4376 }
4377 if (changesMask[17])
4378 {
4380 }
4381 }
4382 if (changesMask[18])
4383 {
4384 if (changesMask[19])
4385 {
4386 data << int32(NpcTreasureID);
4387 }
4388 if (changesMask[20])
4389 {
4390 data.WriteBits(CustomerNotes->size(), 10);
4391 }
4392 data.WriteBits(Customer.has_value(), 1);
4393 data.WriteBits(NpcCustomer.has_value(), 1);
4394 data.WriteBits(OutputItem.has_value(), 1);
4395 }
4396 if (changesMask[24])
4397 {
4399 }
4400 if (changesMask[18])
4401 {
4402 if (changesMask[20])
4403 {
4405 }
4406 if (changesMask[21])
4407 {
4408 if (Customer.has_value())
4409 {
4410 Customer->WriteUpdate(ignoreChangesMask, data, receiver, owner);
4411 }
4412 }
4413 if (changesMask[22])
4414 {
4415 if (NpcCustomer.has_value())
4416 {
4417 NpcCustomer->WriteUpdate(ignoreChangesMask, data, receiver, owner);
4418 }
4419 }
4420 if (changesMask[23])
4421 {
4422 if (OutputItem.has_value())
4423 {
4424 OutputItem->WriteUpdate(ignoreChangesMask, data, receiver, owner);
4425 }
4426 }
4427 }
4428 if (changesMask[24])
4429 {
4430 if (changesMask[25])
4431 {
4433 {
4434 data << *OutputItemData;
4435 }
4436 }
4437 }
4438 data.FlushBits();
4439}
4440
4466
4467void CraftingOrder::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4468{
4469 Data->WriteCreate(data, receiver, owner);
4471 data.WriteBits(Enchantments.size(), 4);
4472 data.WriteBits(Gems.size(), 2);
4473 data.FlushBits();
4475 {
4476 data << *RecraftItemInfo;
4477 }
4478 for (uint32 i = 0; i < Enchantments.size(); ++i)
4479 {
4480 data << Enchantments[i];
4481 }
4482 for (uint32 i = 0; i < Gems.size(); ++i)
4483 {
4484 data << Gems[i];
4485 }
4486 data.FlushBits();
4487}
4488
4489void CraftingOrder::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4490{
4491 Mask changesMask = _changesMask;
4492 if (ignoreChangesMask)
4493 changesMask.SetAll();
4494
4495 data.WriteBits(changesMask.GetBlock(0), 4);
4496
4497 if (changesMask[0])
4498 {
4499 if (!ignoreChangesMask)
4501 else
4503 }
4504 if (changesMask[1])
4505 {
4506 if (!ignoreChangesMask)
4507 Gems.WriteUpdateMask(data, 2);
4508 else
4510 }
4511 data.FlushBits();
4512 if (changesMask[0])
4513 {
4514 for (uint32 i = 0; i < Enchantments.size(); ++i)
4515 {
4516 if (Enchantments.HasChanged(i) || ignoreChangesMask)
4517 {
4518 data << Enchantments[i];
4519 }
4520 }
4521 }
4522 if (changesMask[1])
4523 {
4524 for (uint32 i = 0; i < Gems.size(); ++i)
4525 {
4526 if (Gems.HasChanged(i) || ignoreChangesMask)
4527 {
4528 data << Gems[i];
4529 }
4530 }
4531 }
4532 if (changesMask[2])
4533 {
4534 Data->WriteUpdate(ignoreChangesMask, data, receiver, owner);
4535 }
4537 data.FlushBits();
4538 if (changesMask[3])
4539 {
4541 {
4542 data << *RecraftItemInfo;
4543 }
4544 }
4545 data.FlushBits();
4546}
4547
4556
4557void PersonalCraftingOrderCount::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4558{
4559 data << int32(ProfessionID);
4560 data << uint32(Count);
4561}
4562
4563void PersonalCraftingOrderCount::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4564{
4565 Mask changesMask = _changesMask;
4566 if (ignoreChangesMask)
4567 changesMask.SetAll();
4568
4569 data.WriteBits(changesMask.GetBlock(0), 2);
4570
4571 data.FlushBits();
4572 if (changesMask[0])
4573 {
4574 data << int32(ProfessionID);
4575 }
4576 if (changesMask[1])
4577 {
4578 data << uint32(Count);
4579 }
4580}
4581
4588
4589void NPCCraftingOrderInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4590{
4591 data << uint64(OrderID);
4593 data << int32(NpcTreasureID);
4595}
4596
4597void NPCCraftingOrderInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4598{
4599 Mask changesMask = _changesMask;
4600 if (ignoreChangesMask)
4601 changesMask.SetAll();
4602
4603 data.WriteBits(changesMask.GetBlock(0), 4);
4604
4605 data.FlushBits();
4606 if (changesMask[0])
4607 {
4608 data << uint64(OrderID);
4609 }
4610 if (changesMask[1])
4611 {
4613 }
4614 if (changesMask[2])
4615 {
4616 data << int32(NpcTreasureID);
4617 }
4618 if (changesMask[3])
4619 {
4621 }
4622}
4623
4632
4633void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4634{
4635 data << int32(SpellCategoryID);
4636 data << int32(ModCooldown);
4637}
4638
4639void CategoryCooldownMod::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4640{
4641 data << int32(SpellCategoryID);
4642 data << int32(ModCooldown);
4643}
4644
4646{
4647 return SpellCategoryID == right.SpellCategoryID
4648 && ModCooldown == right.ModCooldown;
4649}
4650
4651void WeeklySpellUse::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4652{
4653 data << int32(SpellCategoryID);
4654 data << uint8(Uses);
4655}
4656
4657void WeeklySpellUse::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4658{
4659 data << int32(SpellCategoryID);
4660 data << uint8(Uses);
4661}
4662
4664{
4665 return SpellCategoryID == right.SpellCategoryID
4666 && Uses == right.Uses;
4667}
4668
4669void StablePetInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4670{
4671 data << uint32(PetSlot);
4672 data << uint32(PetNumber);
4673 data << uint32(CreatureID);
4674 data << uint32(DisplayID);
4675 data << uint32(ExperienceLevel);
4676 data << uint8(PetFlags);
4677 data << uint32(Specialization);
4678 data.WriteBits(Name->size(), 8);
4680 data.FlushBits();
4681}
4682
4683void StablePetInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4684{
4685 Mask changesMask = _changesMask;
4686 if (ignoreChangesMask)
4687 changesMask.SetAll();
4688
4689 data.WriteBits(changesMask.GetBlock(0), 9);
4690
4691 data.FlushBits();
4692 if (changesMask[0])
4693 {
4694 if (changesMask[1])
4695 {
4696 data << uint32(PetSlot);
4697 }
4698 if (changesMask[2])
4699 {
4700 data << uint32(PetNumber);
4701 }
4702 if (changesMask[3])
4703 {
4704 data << uint32(CreatureID);
4705 }
4706 if (changesMask[4])
4707 {
4708 data << uint32(DisplayID);
4709 }
4710 if (changesMask[5])
4711 {
4712 data << uint32(ExperienceLevel);
4713 }
4714 if (changesMask[7])
4715 {
4716 data << uint8(PetFlags);
4717 }
4718 if (changesMask[8])
4719 {
4720 data << uint32(Specialization);
4721 }
4722 if (changesMask[6])
4723 {
4724 data.WriteBits(Name->size(), 8);
4726 }
4727 }
4728 data.FlushBits();
4729}
4730
4743
4744void StableInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4745{
4746 data << uint32(Pets.size());
4747 data << *StableMaster;
4748 for (uint32 i = 0; i < Pets.size(); ++i)
4749 {
4750 Pets[i].WriteCreate(data, receiver, owner);
4751 }
4752}
4753
4754void StableInfo::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), 3);
4761
4762 if (changesMask[0])
4763 {
4764 if (changesMask[1])
4765 {
4766 if (!ignoreChangesMask)
4767 Pets.WriteUpdateMask(data);
4768 else
4770 }
4771 }
4772 data.FlushBits();
4773 if (changesMask[0])
4774 {
4775 if (changesMask[1])
4776 {
4777 for (uint32 i = 0; i < Pets.size(); ++i)
4778 {
4779 if (Pets.HasChanged(i) || ignoreChangesMask)
4780 {
4781 Pets[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
4782 }
4783 }
4784 }
4785 if (changesMask[2])
4786 {
4787 data << *StableMaster;
4788 }
4789 }
4790}
4791
4798
4799void CollectableSourceTrackedData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4800{
4801 data << int32(TargetType);
4802 data << int32(TargetID);
4804}
4805
4806void CollectableSourceTrackedData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4807{
4808 Mask changesMask = _changesMask;
4809 if (ignoreChangesMask)
4810 changesMask.SetAll();
4811
4812 data.WriteBits(changesMask.GetBlock(0), 4);
4813
4814 data.FlushBits();
4815 if (changesMask[0])
4816 {
4817 if (changesMask[1])
4818 {
4819 data << int32(TargetType);
4820 }
4821 if (changesMask[2])
4822 {
4823 data << int32(TargetID);
4824 }
4825 if (changesMask[3])
4826 {
4828 }
4829 }
4830}
4831
4839
4840void BankTabSettings::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4841{
4842 data.WriteBits(Name->size(), 7);
4843 data.WriteBits(Icon->size(), 9);
4844 data.WriteBits(Description->size(), 14);
4845 data << int32(DepositFlags);
4849 data.FlushBits();
4850}
4851
4852void BankTabSettings::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4853{
4854 Mask changesMask = _changesMask;
4855 if (ignoreChangesMask)
4856 changesMask.SetAll();
4857
4858 data.WriteBits(changesMask.GetBlock(0), 4);
4859
4860 if (changesMask[0])
4861 {
4862 data.WriteBits(Name->size(), 7);
4863 }
4864 if (changesMask[1])
4865 {
4866 data.WriteBits(Icon->size(), 9);
4867 }
4868 if (changesMask[2])
4869 {
4870 data.WriteBits(Description->size(), 14);
4871 }
4872 data.FlushBits();
4873 if (changesMask[3])
4874 {
4875 data << int32(DepositFlags);
4876 }
4877 if (changesMask[0])
4878 {
4880 }
4881 if (changesMask[1])
4882 {
4884 }
4885 if (changesMask[2])
4886 {
4888 }
4889 data.FlushBits();
4890}
4891
4900
4901void WalkInData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4902{
4903 data << int32(MapID);
4904 data << int64(InstanceID);
4905 data << WalkInPartyGUID;
4907 data.FlushBits();
4908}
4909
4910void WalkInData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4911{
4912 data << int32(MapID);
4913 data << int64(InstanceID);
4914 data << WalkInPartyGUID;
4916 data.FlushBits();
4917}
4918
4919bool WalkInData::operator==(WalkInData const& right) const
4920{
4921 return MapID == right.MapID
4922 && InstanceID == right.InstanceID
4924 && WalkInPartyGUID == right.WalkInPartyGUID;
4925}
4926
4927void DelveData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4928{
4929 data << int32(MapID);
4930 data << int32(Tier);
4931 data << uint64(InstanceID);
4932 data << uint32(PlayersEligibleForRewards.size());
4933 data << uint32(ActiveOptionalAffixIDs.size());
4934 data << int32(EntranceType);
4935 for (uint32 i = 0; i < PlayersEligibleForRewards.size(); ++i)
4936 {
4937 data << PlayersEligibleForRewards[i];
4938 }
4939 for (uint32 i = 0; i < ActiveOptionalAffixIDs.size(); ++i)
4940 {
4941 data << int32(ActiveOptionalAffixIDs[i]);
4942 }
4944 data.FlushBits();
4945}
4946
4947void DelveData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4948{
4949 data.FlushBits();
4950 data << int32(MapID);
4951 data << int32(Tier);
4952 data << uint64(InstanceID);
4953 data << uint32(PlayersEligibleForRewards.size());
4954 data << uint32(ActiveOptionalAffixIDs.size());
4955 data << int32(EntranceType);
4956 for (uint32 i = 0; i < PlayersEligibleForRewards.size(); ++i)
4957 {
4958 data << PlayersEligibleForRewards[i];
4959 }
4960 for (uint32 i = 0; i < ActiveOptionalAffixIDs.size(); ++i)
4961 {
4962 data << int32(ActiveOptionalAffixIDs[i]);
4963 }
4965 data.FlushBits();
4966}
4967
4968bool DelveData::operator==(DelveData const& right) const
4969{
4972 && MapID == right.MapID
4973 && Tier == right.Tier
4974 && InstanceID == right.InstanceID
4975 && EntranceType == right.EntranceType
4977}
4978
4979void TransmogOutfitDataInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
4980{
4981 data << uint8(SetType);
4982 data << uint32(Icon);
4983 data.WriteBits(Name->size(), 8);
4985 data.FlushBits();
4987 data.FlushBits();
4988}
4989
4990void TransmogOutfitDataInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
4991{
4992 Mask changesMask = _changesMask;
4993 if (ignoreChangesMask)
4994 changesMask.SetAll();
4995
4996 data.WriteBits(changesMask.GetBlock(0), 4);
4997
4998 if (changesMask[0])
4999 {
5001 }
5002 data.FlushBits();
5003 if (changesMask[1])
5004 {
5005 data << uint8(SetType);
5006 }
5007 if (changesMask[3])
5008 {
5009 data << uint32(Icon);
5010 }
5011 if (changesMask[2])
5012 {
5013 data.WriteBits(Name->size(), 8);
5015 }
5016 data.FlushBits();
5017}
5018
5027
5028void TransmogOutfitSituationInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
5029{
5030 data << uint32(SituationID);
5031 data << uint32(SpecID);
5032 data << uint32(LoadoutID);
5033 data << uint32(EquipmentSetID);
5034}
5035
5036void TransmogOutfitSituationInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
5037{
5038 Mask changesMask = _changesMask;
5039 if (ignoreChangesMask)
5040 changesMask.SetAll();
5041
5042 data.WriteBits(changesMask.GetBlock(0), 4);
5043
5044 data.FlushBits();
5045 if (changesMask[0])
5046 {
5047 data << uint32(SituationID);
5048 }
5049 if (changesMask[1])
5050 {
5051 data << uint32(SpecID);
5052 }
5053 if (changesMask[2])
5054 {
5055 data << uint32(LoadoutID);
5056 }
5057 if (changesMask[3])
5058 {
5059 data << uint32(EquipmentSetID);
5060 }
5061}
5062
5071
5072void TransmogOutfitSlotData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
5073{
5074 data << int8(Slot);
5075 data << uint8(SlotOption);
5076 data << uint8(SheatheCategory);
5080 data << uint8(IllusionDisplayType);
5081 data << uint32(Flags);
5082}
5083
5084void TransmogOutfitSlotData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
5085{
5086 Mask changesMask = _changesMask;
5087 if (ignoreChangesMask)
5088 changesMask.SetAll();
5089
5090 data.WriteBits(changesMask.GetBlock(0), 11);
5091
5092 data.FlushBits();
5093 if (changesMask[0])
5094 {
5095 if (changesMask[1])
5096 {
5097 data << int8(Slot);
5098 }
5099 if (changesMask[2])
5100 {
5101 data << uint8(SlotOption);
5102 }
5103 if (changesMask[3])
5104 {
5105 data << uint8(SheatheCategory);
5106 }
5107 }
5108 if (changesMask[4])
5109 {
5110 if (changesMask[5])
5111 {
5113 }
5114 if (changesMask[6])
5115 {
5117 }
5118 if (changesMask[7])
5119 {
5121 }
5122 }
5123 if (changesMask[8])
5124 {
5125 if (changesMask[9])
5126 {
5127 data << uint8(IllusionDisplayType);
5128 }
5129 if (changesMask[10])
5130 {
5131 data << uint32(Flags);
5132 }
5133 }
5134}
5135
5148
5149void TransmogOutfitData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
5150{
5151 data << uint32(Id);
5152 data << uint32(Situations.size());
5153 data << uint32(Slots.size());
5154 data << uint32(Flags);
5155 for (uint32 i = 0; i < Situations.size(); ++i)
5156 {
5157 Situations[i].WriteCreate(data, receiver, owner);
5158 }
5159 for (uint32 i = 0; i < Slots.size(); ++i)
5160 {
5161 Slots[i].WriteCreate(data, receiver, owner);
5162 }
5163 OutfitInfo->WriteCreate(data, receiver, owner);
5164}
5165
5166void TransmogOutfitData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
5167{
5168 Mask changesMask = _changesMask;
5169 if (ignoreChangesMask)
5170 changesMask.SetAll();
5171
5172 data.WriteBits(changesMask.GetBlock(0), 5);
5173
5174 if (changesMask[0])
5175 {
5176 if (!ignoreChangesMask)
5178 else
5180 }
5181 if (changesMask[1])
5182 {
5183 if (!ignoreChangesMask)
5184 Slots.WriteUpdateMask(data);
5185 else
5187 }
5188 data.FlushBits();
5189 if (changesMask[0])
5190 {
5191 for (uint32 i = 0; i < Situations.size(); ++i)
5192 {
5193 if (Situations.HasChanged(i) || ignoreChangesMask)
5194 {
5195 Situations[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
5196 }
5197 }
5198 }
5199 if (changesMask[1])
5200 {
5201 for (uint32 i = 0; i < Slots.size(); ++i)
5202 {
5203 if (Slots.HasChanged(i) || ignoreChangesMask)
5204 {
5205 Slots[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
5206 }
5207 }
5208 }
5209 if (changesMask[2])
5210 {
5211 data << uint32(Id);
5212 }
5213 if (changesMask[4])
5214 {
5215 data << uint32(Flags);
5216 }
5217 if (changesMask[3])
5218 {
5219 OutfitInfo->WriteUpdate(ignoreChangesMask, data, receiver, owner);
5220 }
5221}
5222
5232
5233void ChallengeModeData::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
5234{
5235 data << int32(MapID);
5236 data << int32(InitialPlayerCount);
5237 data << uint64(InstanceID);
5238 data << int64(StartTime);
5239 data << KeystoneOwnerGUID;
5240 data << LeaverGUID;
5242 data.WriteBits(IsActive, 1);
5243 data.WriteBits(HasRestrictions, 1);
5244 data.WriteBits(CanVoteAbandon, 1);
5245 data.FlushBits();
5246}
5247
5248void ChallengeModeData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
5249{
5250 data << int32(MapID);
5251 data << int32(InitialPlayerCount);
5252 data << uint64(InstanceID);
5253 data << int64(StartTime);
5254 data << KeystoneOwnerGUID;
5255 data << LeaverGUID;
5257 data.WriteBits(IsActive, 1);
5258 data.WriteBits(HasRestrictions, 1);
5259 data.WriteBits(CanVoteAbandon, 1);
5260 data.FlushBits();
5261}
5262
5264{
5265 return MapID == right.MapID
5267 && InstanceID == right.InstanceID
5268 && StartTime == right.StartTime
5270 && LeaverGUID == right.LeaverGUID
5272 && IsActive == right.IsActive
5274 && CanVoteAbandon == right.CanVoteAbandon;
5275}
5276
5277void TransmogOutfitMetadata::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
5278{
5279 data << uint8(SituationTrigger);
5280 data << uint32(TransmogOutfitID);
5282 data << uint8(StampedOptionOffHand);
5283 data << float(CostMod);
5284 data.WriteBit(Locked);
5285 data.FlushBits();
5286}
5287
5288void TransmogOutfitMetadata::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
5289{
5290 data << uint8(SituationTrigger);
5291 data << uint32(TransmogOutfitID);
5293 data << uint8(StampedOptionOffHand);
5294 data << float(CostMod);
5295 data.WriteBit(Locked);
5296 data.FlushBits();
5297 data.FlushBits();
5298}
5299
5301{
5302 return Locked == right.Locked
5307 && CostMod == right.CostMod;
5308}
5309
5310void Research::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
5311{
5312 data << int16(ResearchProjectID);
5313}
5314
5315void Research::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
5316{
5317 data << int16(ResearchProjectID);
5318}
5319
5320bool Research::operator==(Research const& right) const
5321{
5322 return ResearchProjectID == right.ResearchProjectID;
5323}
5324
5325void ActivePlayerData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
5326{
5327 for (uint32 i = 0; i < 105; ++i)
5328 {
5329 data << InvSlots[i];
5330 }
5331 data << *FarsightObject;
5332 data << *SummonedBattlePetGUID;
5333 data << uint32(KnownTitles.size());
5334 data << uint64(Coinage);
5335 data << uint64(AccountBankCoinage);
5336 data << int32(XP);
5337 data << int32(NextLevelXP);
5338 data << int32(TrialXP);
5339 Skill->WriteCreate(data, receiver, owner);
5340 data << int32(CharacterPoints);
5341 data << int32(MaxTalentTiers);
5342 data << uint32(TrackCreatureMask);
5343 data << float(MainhandExpertise);
5344 data << float(OffhandExpertise);
5345 data << float(RangedExpertise);
5346 data << float(CombatRatingExpertise);
5347 data << float(BlockPercentage);
5348 data << float(DodgePercentage);
5349 data << float(DodgePercentageFromAttribute);
5350 data << float(ParryPercentage);
5351 data << float(ParryPercentageFromAttribute);
5352 data << float(CritPercentage);
5353 data << float(RangedCritPercentage);
5354 data << float(OffhandCritPercentage);
5355 data << float(SpellCritPercentage);
5356 data << int32(ShieldBlock);
5357 data << float(ShieldBlockCritPercentage);
5358 data << float(Mastery);
5359 data << float(Speed);
5360 data << float(Avoidance);
5361 data << float(Sturdiness);
5362 data << int32(Versatility);
5363 data << float(VersatilityBonus);
5364 data << float(PvpPowerDamage);
5365 data << float(PvpPowerHealing);
5366 BitVectors->WriteCreate(data, receiver, owner);
5368 data << uint32(AccountDataElements.size());
5369 for (uint32 i = 0; i < 2; ++i)
5370 {
5371 RestInfo[i].WriteCreate(data, receiver, owner);
5372 }
5373 for (uint32 i = 0; i < 7; ++i)
5374 {
5375 data << int32(ModDamageDonePos[i]);
5376 data << int32(ModDamageDoneNeg[i]);
5377 data << float(ModDamageDonePercent[i]);
5378 data << float(ModHealingDonePercent[i]);
5379 }
5380 data << int32(ModHealingDonePos);
5381 data << float(ModHealingPercent);
5382 data << float(ModPeriodicHealingDonePercent);
5383 for (uint32 i = 0; i < 3; ++i)
5384 {
5385 data << float(WeaponDmgMultipliers[i]);
5386 data << float(WeaponAtkSpeedMultipliers[i]);
5387 }
5388 data << float(ModSpellPowerPercent);
5389 data << float(ModResiliencePercent);
5390 data << float(OverrideSpellPowerByAPPercent);
5391 data << float(OverrideAPBySpellPowerPercent);
5392 data << int32(ModTargetResistance);
5394 data << uint32(LocalFlags);
5395 data << uint8(GrantableLevels);
5396 data << uint8(MultiActionBars);
5397 data << uint8(LifetimeMaxRank);
5398 data << uint8(NumRespecs);
5399 data << uint32(PvpMedals);
5400 for (uint32 i = 0; i < 12; ++i)
5401 {
5402 data << uint32(BuybackPrice[i]);
5403 data << int64(BuybackTimestamp[i]);
5404 }
5405 data << uint16(TodayHonorableKills);
5408 data << int32(WatchedFactionIndex);
5409 for (uint32 i = 0; i < 32; ++i)
5410 {
5411 data << int32(CombatRatings[i]);
5412 }
5413 data << uint32(PvpInfo.size());
5414 data << int32(MaxLevel);
5418 for (uint32 i = 0; i < 4; ++i)
5419 {
5420 data << uint32(NoReagentCostMask[i]);
5421 }
5422 data << int32(PetSpellPower);
5423 for (uint32 i = 0; i < 2; ++i)
5424 {
5425 data << int32(ProfessionSkillLine[i]);
5426 }
5427 data << float(UiHitModifier);
5428 data << float(UiSpellHitModifier);
5429 data << int32(HomeRealmTimeOffset);
5430 data << float(ModPetHaste);
5431 data << int8(JailersTowerLevelMax);
5432 data << int8(JailersTowerLevel);
5433 data << uint8(LocalRegenFlags);
5434 data << uint8(AuraVision);
5435 data << uint8(NumBackpackSlots);
5436 data << int32(OverrideSpellsID);
5437 data << uint16(LootSpecID);
5438 data << uint32(OverrideZonePVPType);
5439 for (uint32 i = 0; i < 5; ++i)
5440 {
5441 data << uint32(BagSlotFlags[i]);
5442 }
5443 data << int32(Honor);
5444 data << int32(HonorNextLevel);
5445 data << int32(PerksProgramCurrency);
5446 data << uint8(NumBankSlots);
5447 data << uint8(NumCharacterBankTabs);
5448 data << uint8(NumAccountBankTabs);
5449 for (uint32 i = 0; i < 1; ++i)
5450 {
5451 data << uint32(ResearchSites[i].size());
5452 data << uint32(ResearchSiteProgress[i].size());
5453 data << uint32(Research[i].size());
5454 for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
5455 {
5456 data << uint16(ResearchSites[i][j]);
5457 }
5458 for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
5459 {
5460 data << uint32(ResearchSiteProgress[i][j]);
5461 }
5462 for (uint32 j = 0; j < Research[i].size(); ++j)
5463 {
5464 Research[i][j].WriteCreate(data, receiver, owner);
5465 }
5466 }
5467 data << uint32(DailyQuestsCompleted.size());
5468 data << uint32(Field_1328.size());
5470 data << uint32(Heirlooms.size());
5471 data << uint32(HeirloomFlags.size());
5472 data << uint32(Toys.size());
5473 data << uint32(ToyFlags.size());
5474 data << uint32(Transmog.size());
5475 data << uint32(ConditionalTransmog.size());
5476 data << uint32(SelfResSpells.size());
5477 data << uint32(RuneforgePowers.size());
5478 data << uint32(TransmogIllusions.size());
5479 data << uint32(WarbandScenes.size());
5480 data << uint32(HouseRooms.size());
5482 data << uint32(HouseThemes.size());
5484 data << uint32(HouseTypes.size());
5487 data << uint32(SpellPctModByLabel.size());
5488 data << uint32(SpellFlatModByLabel.size());
5491 data << uint32(MawPowers.size());
5493 data << uint32(RecipeProgression.size());
5494 data << uint32(ReplayedQuests.size());
5495 data << uint32(TaskQuests.size());
5496 data << uint32(DisabledSpells.size());
5498 data << int32(TimerunningSeasonID);
5499 data << int32(TransportServerTime);
5503 data << uint32(CraftingOrders.size());
5505 data << uint32(NpcCraftingOrders.size());
5506 data << uint32(CategoryCooldownMods.size());
5507 data << uint32(WeeklySpellUses.size());
5508 for (uint32 i = 0; i < 17; ++i)
5509 {
5510 data << float(ItemUpgradeHighWatermark[i]);
5511 }
5514 data << float(ItemUpgradeHighFingerWatermark);
5516 data << float(ItemUpgradeHighTrinketWatermark);
5520 for (uint32 i = 0; i < KnownTitles.size(); ++i)
5521 {
5522 data << uint64(KnownTitles[i]);
5523 }
5524 for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
5525 {
5526 CharacterDataElements[i].WriteCreate(data, receiver, owner);
5527 }
5528 for (uint32 i = 0; i < AccountDataElements.size(); ++i)
5529 {
5530 AccountDataElements[i].WriteCreate(data, receiver, owner);
5531 }
5532 for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
5533 {
5534 data << int32(DailyQuestsCompleted[i]);
5535 }
5536 for (uint32 i = 0; i < Field_1328.size(); ++i)
5537 {
5538 data << int32(Field_1328[i]);
5539 }
5540 for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
5541 {
5543 }
5544 for (uint32 i = 0; i < Heirlooms.size(); ++i)
5545 {
5546 data << int32(Heirlooms[i]);
5547 }
5548 for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
5549 {
5550 data << uint32(HeirloomFlags[i]);
5551 }
5552 for (uint32 i = 0; i < Toys.size(); ++i)
5553 {
5554 data << int32(Toys[i]);
5555 }
5556 for (uint32 i = 0; i < ToyFlags.size(); ++i)
5557 {
5558 data << uint32(ToyFlags[i]);
5559 }
5560 for (uint32 i = 0; i < Transmog.size(); ++i)
5561 {
5562 data << uint32(Transmog[i]);
5563 }
5564 for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
5565 {
5566 data << int32(ConditionalTransmog[i]);
5567 }
5568 for (uint32 i = 0; i < SelfResSpells.size(); ++i)
5569 {
5570 data << int32(SelfResSpells[i]);
5571 }
5572 for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
5573 {
5574 data << uint32(RuneforgePowers[i]);
5575 }
5576 for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
5577 {
5578 data << uint32(TransmogIllusions[i]);
5579 }
5580 for (uint32 i = 0; i < WarbandScenes.size(); ++i)
5581 {
5582 data << uint32(WarbandScenes[i]);
5583 }
5584 for (uint32 i = 0; i < HouseRooms.size(); ++i)
5585 {
5586 data << uint32(HouseRooms[i]);
5587 }
5588 for (uint32 i = 0; i < HouseExteriorComponents.size(); ++i)
5589 {
5590 data << uint32(HouseExteriorComponents[i]);
5591 }
5592 for (uint32 i = 0; i < HouseThemes.size(); ++i)
5593 {
5594 data << uint32(HouseThemes[i]);
5595 }
5596 for (uint32 i = 0; i < HouseRoomComponentTextures.size(); ++i)
5597 {
5599 }
5600 for (uint32 i = 0; i < HouseTypes.size(); ++i)
5601 {
5602 data << uint32(HouseTypes[i]);
5603 }
5604 for (uint32 i = 0; i < UnlockedTransmogOutfits.size(); ++i)
5605 {
5606 data << int32(UnlockedTransmogOutfits[i]);
5607 }
5608 for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
5609 {
5610 SpellPctModByLabel[i].WriteCreate(data, receiver, owner);
5611 }
5612 for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
5613 {
5614 SpellFlatModByLabel[i].WriteCreate(data, receiver, owner);
5615 }
5616 for (uint32 i = 0; i < SpellPctModPVPByLabel.size(); ++i)
5617 {
5618 SpellPctModPVPByLabel[i].WriteCreate(data, receiver, owner);
5619 }
5620 for (uint32 i = 0; i < SpellFlatModPVPByLabel.size(); ++i)
5621 {
5622 SpellFlatModPVPByLabel[i].WriteCreate(data, receiver, owner);
5623 }
5624 for (uint32 i = 0; i < MawPowers.size(); ++i)
5625 {
5626 MawPowers[i].WriteCreate(data, receiver, owner);
5627 }
5628 for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
5629 {
5630 MultiFloorExploration[i].WriteCreate(data, receiver, owner);
5631 }
5632 for (uint32 i = 0; i < RecipeProgression.size(); ++i)
5633 {
5634 RecipeProgression[i].WriteCreate(data, receiver, owner);
5635 }
5636 for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
5637 {
5638 ReplayedQuests[i].WriteCreate(data, receiver, owner);
5639 }
5640 for (uint32 i = 0; i < TaskQuests.size(); ++i)
5641 {
5642 TaskQuests[i].WriteCreate(data, receiver, owner);
5643 }
5644 for (uint32 i = 0; i < DisabledSpells.size(); ++i)
5645 {
5646 data << int32(DisabledSpells[i]);
5647 }
5648 for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
5649 {
5650 PersonalCraftingOrderCounts[i].WriteCreate(data, receiver, owner);
5651 }
5652 for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i)
5653 {
5654 NpcCraftingOrders[i].WriteCreate(data, receiver, owner);
5655 }
5656 for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
5657 {
5658 CategoryCooldownMods[i].WriteCreate(data, receiver, owner);
5659 }
5660 for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
5661 {
5662 WeeklySpellUses[i].WriteCreate(data, receiver, owner);
5663 }
5664 for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
5665 {
5666 TrackedCollectableSources[i].WriteCreate(data, receiver, owner);
5667 }
5668 data.FlushBits();
5675 data.WriteBits(QuestSession.has_value(), 1);
5676 data.WriteBits(PetStable.has_value(), 1);
5679 data.WriteBits(WalkInData.has_value(), 1);
5680 data.WriteBits(ChallengeModeData.has_value(), 1);
5681 data.FlushBits();
5682 ResearchHistory->WriteCreate(data, receiver, owner);
5683 if (QuestSession.has_value())
5684 {
5685 QuestSession->WriteCreate(data, receiver, owner);
5686 }
5687 data << *FrozenPerksVendorItem;
5688 LevelLinkInfo->WriteCreate(data, receiver, owner);
5689 data << *DungeonScore;
5690 WriteMapFieldCreate(TraitConfigs, data, receiver, owner);
5691 WriteMapFieldCreate(DelveData, data, receiver, owner);
5692 WriteMapFieldCreate(TransmogOutfits, data, receiver, owner);
5693 ViewedOutfit->WriteCreate(data, receiver, owner);
5694 TransmogMetadata->WriteCreate(data, receiver, owner);
5695 for (uint32 i = 0; i < PvpInfo.size(); ++i)
5696 {
5697 PvpInfo[i].WriteCreate(data, receiver, owner);
5698 }
5699 for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
5700 {
5701 CharacterRestrictions[i].WriteCreate(data, receiver, owner);
5702 }
5703 for (uint32 i = 0; i < CraftingOrders.size(); ++i)
5704 {
5705 CraftingOrders[i].WriteCreate(data, receiver, owner);
5706 }
5707 if (PetStable.has_value())
5708 {
5709 PetStable->WriteCreate(data, receiver, owner);
5710 }
5711 for (uint32 i = 0; i < CharacterBankTabSettings.size(); ++i)
5712 {
5713 CharacterBankTabSettings[i].WriteCreate(data, receiver, owner);
5714 }
5715 for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
5716 {
5717 AccountBankTabSettings[i].WriteCreate(data, receiver, owner);
5718 }
5719 if (WalkInData.has_value())
5720 {
5721 WalkInData->WriteCreate(data, receiver, owner);
5722 }
5723 if (ChallengeModeData.has_value())
5724 {
5725 ChallengeModeData->WriteCreate(data, receiver, owner);
5726 }
5727 data.FlushBits();
5728}
5729
5730void ActivePlayerData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
5731{
5732 WriteUpdate(_changesMask, data, receiver, owner, false);
5733}
5734
5735void ActivePlayerData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Player const* owner, bool ignoreNestedChangesMask) const
5736{
5737 data.WriteBits(changesMask.GetBlocksMask(0), 13);
5738 for (uint32 i = 0; i < 13; ++i)
5739 if (changesMask.GetBlock(i))
5740 data.WriteBits(changesMask.GetBlock(i), 32);
5741
5742 if (changesMask[0])
5743 {
5744 if (changesMask[1])
5745 {
5747 }
5748 if (changesMask[2])
5749 {
5751 }
5752 if (changesMask[3])
5753 {
5755 }
5756 if (changesMask[4])
5757 {
5759 }
5760 if (changesMask[5])
5761 {
5763 }
5764 if (changesMask[6])
5765 {
5767 }
5768 if (changesMask[7])
5769 {
5770 if (!ignoreNestedChangesMask)
5772 else
5774 }
5775 if (changesMask[8])
5776 {
5777 if (!ignoreNestedChangesMask)
5779 else
5781 }
5782 if (changesMask[9])
5783 {
5784 if (!ignoreNestedChangesMask)
5786 else
5788 }
5789 if (changesMask[10])
5790 {
5791 if (!ignoreNestedChangesMask)
5793 else
5795 }
5796 }
5797 if (changesMask[50])
5798 {
5799 for (uint32 i = 0; i < 1; ++i)
5800 {
5801 if (changesMask[51])
5802 {
5803 if (!ignoreNestedChangesMask)
5804 ResearchSites[i].WriteUpdateMask(data);
5805 else
5807 }
5808 }
5809 }
5810 if (changesMask[52])
5811 {
5812 for (uint32 i = 0; i < 1; ++i)
5813 {
5814 if (changesMask[53])
5815 {
5816 if (!ignoreNestedChangesMask)
5817 ResearchSiteProgress[i].WriteUpdateMask(data);
5818 else
5820 }
5821 }
5822 }
5823 if (changesMask[54])
5824 {
5825 for (uint32 i = 0; i < 1; ++i)
5826 {
5827 if (changesMask[55])
5828 {
5829 if (!ignoreNestedChangesMask)
5830 Research[i].WriteUpdateMask(data);
5831 else
5833 }
5834 }
5835 }
5836 if (changesMask[50])
5837 {
5838 for (uint32 i = 0; i < 1; ++i)
5839 {
5840 if (changesMask[51])
5841 {
5842 for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
5843 {
5844 if (ResearchSites[i].HasChanged(j) || ignoreNestedChangesMask)
5845 {
5846 data << uint16(ResearchSites[i][j]);
5847 }
5848 }
5849 }
5850 }
5851 }
5852 if (changesMask[52])
5853 {
5854 for (uint32 i = 0; i < 1; ++i)
5855 {
5856 if (changesMask[53])
5857 {
5858 for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
5859 {
5860 if (ResearchSiteProgress[i].HasChanged(j) || ignoreNestedChangesMask)
5861 {
5862 data << uint32(ResearchSiteProgress[i][j]);
5863 }
5864 }
5865 }
5866 }
5867 }
5868 if (changesMask[54])
5869 {
5870 for (uint32 i = 0; i < 1; ++i)
5871 {
5872 if (changesMask[55])
5873 {
5874 for (uint32 j = 0; j < Research[i].size(); ++j)
5875 {
5876 if (Research[i].HasChanged(j) || ignoreNestedChangesMask)
5877 {
5878 Research[i][j].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
5879 }
5880 }
5881 }
5882 }
5883 }
5884 data.FlushBits();
5885 if (changesMask[0])
5886 {
5887 if (changesMask[11])
5888 {
5889 if (!ignoreNestedChangesMask)
5891 else
5893 }
5894 if (changesMask[12])
5895 {
5896 if (!ignoreNestedChangesMask)
5898 else
5900 }
5901 if (changesMask[13])
5902 {
5903 if (!ignoreNestedChangesMask)
5905 else
5907 }
5908 if (changesMask[14])
5909 {
5910 if (!ignoreNestedChangesMask)
5912 else
5914 }
5915 if (changesMask[15])
5916 {
5917 if (!ignoreNestedChangesMask)
5919 else
5921 }
5922 if (changesMask[16])
5923 {
5924 if (!ignoreNestedChangesMask)
5925 Toys.WriteUpdateMask(data);
5926 else
5928 }
5929 if (changesMask[17])
5930 {
5931 if (!ignoreNestedChangesMask)
5932 ToyFlags.WriteUpdateMask(data);
5933 else
5935 }
5936 if (changesMask[18])
5937 {
5938 if (!ignoreNestedChangesMask)
5940 else
5942 }
5943 if (changesMask[19])
5944 {
5945 if (!ignoreNestedChangesMask)
5947 else
5949 }
5950 if (changesMask[20])
5951 {
5952 if (!ignoreNestedChangesMask)
5954 else
5956 }
5957 if (changesMask[21])
5958 {
5959 if (!ignoreNestedChangesMask)
5961 else
5963 }
5964 if (changesMask[22])
5965 {
5966 if (!ignoreNestedChangesMask)
5968 else
5970 }
5971 if (changesMask[23])
5972 {
5973 if (!ignoreNestedChangesMask)
5975 else
5977 }
5978 if (changesMask[24])
5979 {
5980 if (!ignoreNestedChangesMask)
5982 else
5984 }
5985 if (changesMask[25])
5986 {
5987 if (!ignoreNestedChangesMask)
5989 else
5991 }
5992 if (changesMask[26])
5993 {
5994 if (!ignoreNestedChangesMask)
5996 else
5998 }
5999 if (changesMask[27])
6000 {
6001 if (!ignoreNestedChangesMask)
6003 else
6005 }
6006 if (changesMask[28])
6007 {
6008 if (!ignoreNestedChangesMask)
6010 else
6012 }
6013 if (changesMask[29])
6014 {
6015 if (!ignoreNestedChangesMask)
6017 else
6019 }
6020 if (changesMask[30])
6021 {
6022 if (!ignoreNestedChangesMask)
6024 else
6026 }
6027 if (changesMask[31])
6028 {
6029 if (!ignoreNestedChangesMask)
6030 SpellPctModByLabel.WriteUpdateMask(data);
6031 else
6033 }
6034 }
6035 if (changesMask[32])
6036 {
6037 if (changesMask[33])
6038 {
6039 if (!ignoreNestedChangesMask)
6040 SpellFlatModByLabel.WriteUpdateMask(data);
6041 else
6043 }
6044 if (changesMask[34])
6045 {
6046 if (!ignoreNestedChangesMask)
6048 else
6050 }
6051 if (changesMask[35])
6052 {
6053 if (!ignoreNestedChangesMask)
6055 else
6057 }
6058 if (changesMask[36])
6059 {
6060 if (!ignoreNestedChangesMask)
6062 else
6064 }
6065 if (changesMask[37])
6066 {
6067 if (!ignoreNestedChangesMask)
6069 else
6071 }
6072 if (changesMask[38])
6073 {
6074 if (!ignoreNestedChangesMask)
6076 else
6078 }
6079 if (changesMask[39])
6080 {
6081 if (!ignoreNestedChangesMask)
6083 else
6085 }
6086 if (changesMask[40])
6087 {
6088 if (!ignoreNestedChangesMask)
6090 else
6092 }
6093 if (changesMask[41])
6094 {
6095 if (!ignoreNestedChangesMask)
6097 else
6099 }
6100 if (changesMask[42])
6101 {
6102 if (!ignoreNestedChangesMask)
6104 else
6106 }
6107 if (changesMask[43])
6108 {
6109 if (!ignoreNestedChangesMask)
6111 else
6113 }
6114 if (changesMask[44])
6115 {
6116 if (!ignoreNestedChangesMask)
6118 else
6120 }
6121 if (changesMask[45])
6122 {
6123 if (!ignoreNestedChangesMask)
6125 else
6127 }
6128 if (changesMask[46])
6129 {
6130 if (!ignoreNestedChangesMask)
6132 else
6134 }
6135 if (changesMask[47])
6136 {
6137 if (!ignoreNestedChangesMask)
6139 else
6141 }
6142 }
6143 data.FlushBits();
6144 if (changesMask[0])
6145 {
6146 if (changesMask[7])
6147 {
6148 for (uint32 i = 0; i < KnownTitles.size(); ++i)
6149 {
6150 if (KnownTitles.HasChanged(i) || ignoreNestedChangesMask)
6151 {
6152 data << uint64(KnownTitles[i]);
6153 }
6154 }
6155 }
6156 if (changesMask[8])
6157 {
6158 for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
6159 {
6160 if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask)
6161 {
6162 CharacterDataElements[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6163 }
6164 }
6165 }
6166 if (changesMask[9])
6167 {
6168 for (uint32 i = 0; i < AccountDataElements.size(); ++i)
6169 {
6170 if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask)
6171 {
6172 AccountDataElements[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6173 }
6174 }
6175 }
6176 if (changesMask[11])
6177 {
6178 for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
6179 {
6180 if (DailyQuestsCompleted.HasChanged(i) || ignoreNestedChangesMask)
6181 {
6182 data << int32(DailyQuestsCompleted[i]);
6183 }
6184 }
6185 }
6186 if (changesMask[12])
6187 {
6188 for (uint32 i = 0; i < Field_1328.size(); ++i)
6189 {
6190 if (Field_1328.HasChanged(i) || ignoreNestedChangesMask)
6191 {
6192 data << int32(Field_1328[i]);
6193 }
6194 }
6195 }
6196 if (changesMask[13])
6197 {
6198 for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
6199 {
6200 if (AvailableQuestLineXQuestIDs.HasChanged(i) || ignoreNestedChangesMask)
6201 {
6203 }
6204 }
6205 }
6206 if (changesMask[14])
6207 {
6208 for (uint32 i = 0; i < Heirlooms.size(); ++i)
6209 {
6210 if (Heirlooms.HasChanged(i) || ignoreNestedChangesMask)
6211 {
6212 data << int32(Heirlooms[i]);
6213 }
6214 }
6215 }
6216 if (changesMask[15])
6217 {
6218 for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
6219 {
6220 if (HeirloomFlags.HasChanged(i) || ignoreNestedChangesMask)
6221 {
6222 data << uint32(HeirloomFlags[i]);
6223 }
6224 }
6225 }
6226 if (changesMask[16])
6227 {
6228 for (uint32 i = 0; i < Toys.size(); ++i)
6229 {
6230 if (Toys.HasChanged(i) || ignoreNestedChangesMask)
6231 {
6232 data << int32(Toys[i]);
6233 }
6234 }
6235 }
6236 if (changesMask[17])
6237 {
6238 for (uint32 i = 0; i < ToyFlags.size(); ++i)
6239 {
6240 if (ToyFlags.HasChanged(i) || ignoreNestedChangesMask)
6241 {
6242 data << uint32(ToyFlags[i]);
6243 }
6244 }
6245 }
6246 if (changesMask[18])
6247 {
6248 for (uint32 i = 0; i < Transmog.size(); ++i)
6249 {
6250 if (Transmog.HasChanged(i) || ignoreNestedChangesMask)
6251 {
6252 data << uint32(Transmog[i]);
6253 }
6254 }
6255 }
6256 if (changesMask[19])
6257 {
6258 for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
6259 {
6260 if (ConditionalTransmog.HasChanged(i) || ignoreNestedChangesMask)
6261 {
6262 data << int32(ConditionalTransmog[i]);
6263 }
6264 }
6265 }
6266 if (changesMask[20])
6267 {
6268 for (uint32 i = 0; i < SelfResSpells.size(); ++i)
6269 {
6270 if (SelfResSpells.HasChanged(i) || ignoreNestedChangesMask)
6271 {
6272 data << int32(SelfResSpells[i]);
6273 }
6274 }
6275 }
6276 if (changesMask[21])
6277 {
6278 for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
6279 {
6280 if (RuneforgePowers.HasChanged(i) || ignoreNestedChangesMask)
6281 {
6282 data << uint32(RuneforgePowers[i]);
6283 }
6284 }
6285 }
6286 if (changesMask[22])
6287 {
6288 for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
6289 {
6290 if (TransmogIllusions.HasChanged(i) || ignoreNestedChangesMask)
6291 {
6292 data << uint32(TransmogIllusions[i]);
6293 }
6294 }
6295 }
6296 if (changesMask[23])
6297 {
6298 for (uint32 i = 0; i < WarbandScenes.size(); ++i)
6299 {
6300 if (WarbandScenes.HasChanged(i) || ignoreNestedChangesMask)
6301 {
6302 data << uint32(WarbandScenes[i]);
6303 }
6304 }
6305 }
6306 if (changesMask[24])
6307 {
6308 for (uint32 i = 0; i < HouseRooms.size(); ++i)
6309 {
6310 if (HouseRooms.HasChanged(i) || ignoreNestedChangesMask)
6311 {
6312 data << uint32(HouseRooms[i]);
6313 }
6314 }
6315 }
6316 if (changesMask[25])
6317 {
6318 for (uint32 i = 0; i < HouseExteriorComponents.size(); ++i)
6319 {
6320 if (HouseExteriorComponents.HasChanged(i) || ignoreNestedChangesMask)
6321 {
6322 data << uint32(HouseExteriorComponents[i]);
6323 }
6324 }
6325 }
6326 if (changesMask[26])
6327 {
6328 for (uint32 i = 0; i < HouseThemes.size(); ++i)
6329 {
6330 if (HouseThemes.HasChanged(i) || ignoreNestedChangesMask)
6331 {
6332 data << uint32(HouseThemes[i]);
6333 }
6334 }
6335 }
6336 if (changesMask[27])
6337 {
6338 for (uint32 i = 0; i < HouseRoomComponentTextures.size(); ++i)
6339 {
6340 if (HouseRoomComponentTextures.HasChanged(i) || ignoreNestedChangesMask)
6341 {
6343 }
6344 }
6345 }
6346 if (changesMask[28])
6347 {
6348 for (uint32 i = 0; i < HouseTypes.size(); ++i)
6349 {
6350 if (HouseTypes.HasChanged(i) || ignoreNestedChangesMask)
6351 {
6352 data << uint32(HouseTypes[i]);
6353 }
6354 }
6355 }
6356 if (changesMask[29])
6357 {
6358 for (uint32 i = 0; i < UnlockedTransmogOutfits.size(); ++i)
6359 {
6360 if (UnlockedTransmogOutfits.HasChanged(i) || ignoreNestedChangesMask)
6361 {
6362 data << int32(UnlockedTransmogOutfits[i]);
6363 }
6364 }
6365 }
6366 if (changesMask[31])
6367 {
6368 for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
6369 {
6370 if (SpellPctModByLabel.HasChanged(i) || ignoreNestedChangesMask)
6371 {
6372 SpellPctModByLabel[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6373 }
6374 }
6375 }
6376 }
6377 if (changesMask[32])
6378 {
6379 if (changesMask[33])
6380 {
6381 for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
6382 {
6383 if (SpellFlatModByLabel.HasChanged(i) || ignoreNestedChangesMask)
6384 {
6385 SpellFlatModByLabel[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6386 }
6387 }
6388 }
6389 if (changesMask[34])
6390 {
6391 for (uint32 i = 0; i < SpellPctModPVPByLabel.size(); ++i)
6392 {
6393 if (SpellPctModPVPByLabel.HasChanged(i) || ignoreNestedChangesMask)
6394 {
6395 SpellPctModPVPByLabel[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6396 }
6397 }
6398 }
6399 if (changesMask[35])
6400 {
6401 for (uint32 i = 0; i < SpellFlatModPVPByLabel.size(); ++i)
6402 {
6403 if (SpellFlatModPVPByLabel.HasChanged(i) || ignoreNestedChangesMask)
6404 {
6405 SpellFlatModPVPByLabel[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6406 }
6407 }
6408 }
6409 if (changesMask[36])
6410 {
6411 for (uint32 i = 0; i < MawPowers.size(); ++i)
6412 {
6413 if (MawPowers.HasChanged(i) || ignoreNestedChangesMask)
6414 {
6415 MawPowers[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6416 }
6417 }
6418 }
6419 if (changesMask[37])
6420 {
6421 for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
6422 {
6423 if (MultiFloorExploration.HasChanged(i) || ignoreNestedChangesMask)
6424 {
6425 MultiFloorExploration[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6426 }
6427 }
6428 }
6429 if (changesMask[38])
6430 {
6431 for (uint32 i = 0; i < RecipeProgression.size(); ++i)
6432 {
6433 if (RecipeProgression.HasChanged(i) || ignoreNestedChangesMask)
6434 {
6435 RecipeProgression[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6436 }
6437 }
6438 }
6439 if (changesMask[39])
6440 {
6441 for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
6442 {
6443 if (ReplayedQuests.HasChanged(i) || ignoreNestedChangesMask)
6444 {
6445 ReplayedQuests[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6446 }
6447 }
6448 }
6449 if (changesMask[40])
6450 {
6451 for (uint32 i = 0; i < TaskQuests.size(); ++i)
6452 {
6453 if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask)
6454 {
6455 TaskQuests[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6456 }
6457 }
6458 }
6459 if (changesMask[41])
6460 {
6461 for (uint32 i = 0; i < DisabledSpells.size(); ++i)
6462 {
6463 if (DisabledSpells.HasChanged(i) || ignoreNestedChangesMask)
6464 {
6465 data << int32(DisabledSpells[i]);
6466 }
6467 }
6468 }
6469 if (changesMask[43])
6470 {
6471 for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
6472 {
6473 if (PersonalCraftingOrderCounts.HasChanged(i) || ignoreNestedChangesMask)
6474 {
6475 PersonalCraftingOrderCounts[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6476 }
6477 }
6478 }
6479 if (changesMask[44])
6480 {
6481 for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i)
6482 {
6483 if (NpcCraftingOrders.HasChanged(i) || ignoreNestedChangesMask)
6484 {
6485 NpcCraftingOrders[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6486 }
6487 }
6488 }
6489 if (changesMask[45])
6490 {
6491 for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
6492 {
6493 if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask)
6494 {
6495 CategoryCooldownMods[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6496 }
6497 }
6498 }
6499 if (changesMask[46])
6500 {
6501 for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
6502 {
6503 if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask)
6504 {
6505 WeeklySpellUses[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6506 }
6507 }
6508 }
6509 if (changesMask[47])
6510 {
6511 for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
6512 {
6513 if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask)
6514 {
6515 TrackedCollectableSources[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6516 }
6517 }
6518 }
6519 }
6520 data.FlushBits();
6521 if (changesMask[32])
6522 {
6523 if (changesMask[48])
6524 {
6525 if (!ignoreNestedChangesMask)
6527 else
6529 }
6530 if (changesMask[49])
6531 {
6532 if (!ignoreNestedChangesMask)
6534 else
6536 }
6537 }
6538 data.FlushBits();
6539 if (changesMask[0])
6540 {
6541 if (changesMask[10])
6542 {
6543 for (uint32 i = 0; i < PvpInfo.size(); ++i)
6544 {
6545 if (PvpInfo.HasChanged(i) || ignoreNestedChangesMask)
6546 {
6547 PvpInfo[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6548 }
6549 }
6550 }
6551 if (changesMask[30])
6552 {
6553 for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
6554 {
6555 if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask)
6556 {
6557 CharacterRestrictions[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6558 }
6559 }
6560 }
6561 }
6562 if (changesMask[32])
6563 {
6564 if (changesMask[42])
6565 {
6566 for (uint32 i = 0; i < CraftingOrders.size(); ++i)
6567 {
6568 if (CraftingOrders.HasChanged(i) || ignoreNestedChangesMask)
6569 {
6570 CraftingOrders[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6571 }
6572 }
6573 }
6574 if (changesMask[48])
6575 {
6576 for (uint32 i = 0; i < CharacterBankTabSettings.size(); ++i)
6577 {
6578 if (CharacterBankTabSettings.HasChanged(i) || ignoreNestedChangesMask)
6579 {
6580 CharacterBankTabSettings[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6581 }
6582 }
6583 }
6584 if (changesMask[49])
6585 {
6586 for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
6587 {
6588 if (AccountBankTabSettings.HasChanged(i) || ignoreNestedChangesMask)
6589 {
6590 AccountBankTabSettings[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6591 }
6592 }
6593 }
6594 if (changesMask[56])
6595 {
6596 data << *FarsightObject;
6597 }
6598 if (changesMask[57])
6599 {
6600 data << *SummonedBattlePetGUID;
6601 }
6602 if (changesMask[58])
6603 {
6604 data << uint64(Coinage);
6605 }
6606 if (changesMask[59])
6607 {
6608 data << uint64(AccountBankCoinage);
6609 }
6610 if (changesMask[60])
6611 {
6612 data << int32(XP);
6613 }
6614 if (changesMask[61])
6615 {
6616 data << int32(NextLevelXP);
6617 }
6618 if (changesMask[62])
6619 {
6620 data << int32(TrialXP);
6621 }
6622 if (changesMask[63])
6623 {
6624 Skill->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6625 }
6626 if (changesMask[64])
6627 {
6628 data << int32(CharacterPoints);
6629 }
6630 if (changesMask[65])
6631 {
6632 data << int32(MaxTalentTiers);
6633 }
6634 if (changesMask[66])
6635 {
6636 data << uint32(TrackCreatureMask);
6637 }
6638 if (changesMask[67])
6639 {
6640 data << float(MainhandExpertise);
6641 }
6642 if (changesMask[68])
6643 {
6644 data << float(OffhandExpertise);
6645 }
6646 if (changesMask[69])
6647 {
6648 data << float(RangedExpertise);
6649 }
6650 }
6651 if (changesMask[70])
6652 {
6653 if (changesMask[71])
6654 {
6655 data << float(CombatRatingExpertise);
6656 }
6657 if (changesMask[72])
6658 {
6659 data << float(BlockPercentage);
6660 }
6661 if (changesMask[73])
6662 {
6663 data << float(DodgePercentage);
6664 }
6665 if (changesMask[74])
6666 {
6667 data << float(DodgePercentageFromAttribute);
6668 }
6669 if (changesMask[75])
6670 {
6671 data << float(ParryPercentage);
6672 }
6673 if (changesMask[76])
6674 {
6675 data << float(ParryPercentageFromAttribute);
6676 }
6677 if (changesMask[77])
6678 {
6679 data << float(CritPercentage);
6680 }
6681 if (changesMask[78])
6682 {
6683 data << float(RangedCritPercentage);
6684 }
6685 if (changesMask[79])
6686 {
6687 data << float(OffhandCritPercentage);
6688 }
6689 if (changesMask[80])
6690 {
6691 data << float(SpellCritPercentage);
6692 }
6693 if (changesMask[81])
6694 {
6695 data << int32(ShieldBlock);
6696 }
6697 if (changesMask[82])
6698 {
6699 data << float(ShieldBlockCritPercentage);
6700 }
6701 if (changesMask[83])
6702 {
6703 data << float(Mastery);
6704 }
6705 if (changesMask[84])
6706 {
6707 data << float(Speed);
6708 }
6709 if (changesMask[85])
6710 {
6711 data << float(Avoidance);
6712 }
6713 if (changesMask[86])
6714 {
6715 data << float(Sturdiness);
6716 }
6717 if (changesMask[87])
6718 {
6719 data << int32(Versatility);
6720 }
6721 if (changesMask[88])
6722 {
6723 data << float(VersatilityBonus);
6724 }
6725 if (changesMask[89])
6726 {
6727 data << float(PvpPowerDamage);
6728 }
6729 if (changesMask[90])
6730 {
6731 data << float(PvpPowerHealing);
6732 }
6733 if (changesMask[91])
6734 {
6735 BitVectors->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6736 }
6737 if (changesMask[92])
6738 {
6739 data << int32(ModHealingDonePos);
6740 }
6741 if (changesMask[93])
6742 {
6743 data << float(ModHealingPercent);
6744 }
6745 if (changesMask[94])
6746 {
6747 data << float(ModPeriodicHealingDonePercent);
6748 }
6749 if (changesMask[95])
6750 {
6751 data << float(ModSpellPowerPercent);
6752 }
6753 if (changesMask[96])
6754 {
6755 data << float(ModResiliencePercent);
6756 }
6757 if (changesMask[97])
6758 {
6759 data << float(OverrideSpellPowerByAPPercent);
6760 }
6761 if (changesMask[98])
6762 {
6763 data << float(OverrideAPBySpellPowerPercent);
6764 }
6765 if (changesMask[99])
6766 {
6767 data << int32(ModTargetResistance);
6768 }
6769 if (changesMask[100])
6770 {
6772 }
6773 if (changesMask[101])
6774 {
6775 data << uint32(LocalFlags);
6776 }
6777 }
6778 if (changesMask[102])
6779 {
6780 if (changesMask[103])
6781 {
6782 data << uint8(GrantableLevels);
6783 }
6784 if (changesMask[104])
6785 {
6786 data << uint8(MultiActionBars);
6787 }
6788 if (changesMask[105])
6789 {
6790 data << uint8(LifetimeMaxRank);
6791 }
6792 if (changesMask[106])
6793 {
6794 data << uint8(NumRespecs);
6795 }
6796 if (changesMask[107])
6797 {
6798 data << uint32(PvpMedals);
6799 }
6800 if (changesMask[108])
6801 {
6802 data << uint16(TodayHonorableKills);
6803 }
6804 if (changesMask[109])
6805 {
6807 }
6808 if (changesMask[110])
6809 {
6811 }
6812 if (changesMask[111])
6813 {
6814 data << int32(WatchedFactionIndex);
6815 }
6816 if (changesMask[112])
6817 {
6818 data << int32(MaxLevel);
6819 }
6820 if (changesMask[113])
6821 {
6823 }
6824 if (changesMask[114])
6825 {
6827 }
6828 if (changesMask[115])
6829 {
6831 }
6832 if (changesMask[116])
6833 {
6834 data << int32(PetSpellPower);
6835 }
6836 if (changesMask[117])
6837 {
6838 data << float(UiHitModifier);
6839 }
6840 if (changesMask[118])
6841 {
6842 data << float(UiSpellHitModifier);
6843 }
6844 if (changesMask[119])
6845 {
6846 data << int32(HomeRealmTimeOffset);
6847 }
6848 if (changesMask[120])
6849 {
6850 data << float(ModPetHaste);
6851 }
6852 if (changesMask[121])
6853 {
6854 data << int8(JailersTowerLevelMax);
6855 }
6856 if (changesMask[122])
6857 {
6858 data << int8(JailersTowerLevel);
6859 }
6860 if (changesMask[123])
6861 {
6862 data << uint8(LocalRegenFlags);
6863 }
6864 if (changesMask[124])
6865 {
6866 data << uint8(AuraVision);
6867 }
6868 if (changesMask[125])
6869 {
6870 data << uint8(NumBackpackSlots);
6871 }
6872 if (changesMask[126])
6873 {
6874 data << int32(OverrideSpellsID);
6875 }
6876 if (changesMask[127])
6877 {
6878 data << uint16(LootSpecID);
6879 }
6880 if (changesMask[128])
6881 {
6882 data << uint32(OverrideZonePVPType);
6883 }
6884 if (changesMask[129])
6885 {
6886 data << int32(Honor);
6887 }
6888 if (changesMask[130])
6889 {
6890 data << int32(HonorNextLevel);
6891 }
6892 if (changesMask[131])
6893 {
6894 data << int32(PerksProgramCurrency);
6895 }
6896 if (changesMask[132])
6897 {
6898 data << uint8(NumBankSlots);
6899 }
6900 if (changesMask[133])
6901 {
6902 data << uint8(NumCharacterBankTabs);
6903 }
6904 }
6905 if (changesMask[134])
6906 {
6907 if (changesMask[135])
6908 {
6909 data << uint8(NumAccountBankTabs);
6910 }
6911 if (changesMask[140])
6912 {
6914 }
6915 if (changesMask[141])
6916 {
6917 data << int32(TimerunningSeasonID);
6918 }
6919 if (changesMask[142])
6920 {
6921 data << int32(TransportServerTime);
6922 }
6923 if (changesMask[143])
6924 {
6926 }
6927 if (changesMask[144])
6928 {
6930 }
6931 if (changesMask[147])
6932 {
6934 }
6935 if (changesMask[148])
6936 {
6938 }
6939 if (changesMask[149])
6940 {
6942 }
6943 if (changesMask[150])
6944 {
6945 data << float(ItemUpgradeHighFingerWatermark);
6946 }
6947 if (changesMask[151])
6948 {
6950 }
6951 if (changesMask[152])
6952 {
6953 data << float(ItemUpgradeHighTrinketWatermark);
6954 }
6955 if (changesMask[153])
6956 {
6958 }
6959 if (changesMask[155])
6960 {
6962 }
6963 data.WriteBits(QuestSession.has_value(), 1);
6964 data.WriteBits(PetStable.has_value(), 1);
6965 data.WriteBits(WalkInData.has_value(), 1);
6966 data.WriteBits(ChallengeModeData.has_value(), 1);
6967 }
6968 data.FlushBits();
6969 if (changesMask[134])
6970 {
6971 if (changesMask[136])
6972 {
6973 ResearchHistory->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6974 }
6975 if (changesMask[138])
6976 {
6977 if (QuestSession.has_value())
6978 {
6979 QuestSession->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6980 }
6981 }
6982 if (changesMask[137])
6983 {
6984 data << *FrozenPerksVendorItem;
6985 }
6986 if (changesMask[139])
6987 {
6988 LevelLinkInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
6989 }
6990 if (changesMask[145])
6991 {
6992 data << *DungeonScore;
6993 }
6994 if (changesMask[146])
6995 {
6996 WriteMapFieldUpdate(TraitConfigs, ignoreNestedChangesMask, data, receiver, owner);
6997 }
6998 if (changesMask[157])
6999 {
7000 WriteMapFieldUpdate(DelveData, ignoreNestedChangesMask, data, receiver, owner);
7001 }
7002 if (changesMask[158])
7003 {
7004 WriteMapFieldUpdate(TransmogOutfits, ignoreNestedChangesMask, data, receiver, owner);
7005 }
7006 if (changesMask[160])
7007 {
7008 ViewedOutfit->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7009 }
7010 if (changesMask[161])
7011 {
7012 TransmogMetadata->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7013 }
7014 if (changesMask[154])
7015 {
7016 if (PetStable.has_value())
7017 {
7018 PetStable->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7019 }
7020 }
7021 if (changesMask[156])
7022 {
7023 if (WalkInData.has_value())
7024 {
7025 WalkInData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7026 }
7027 }
7028 if (changesMask[159])
7029 {
7030 if (ChallengeModeData.has_value())
7031 {
7032 ChallengeModeData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7033 }
7034 }
7035 }
7036 if (changesMask[162])
7037 {
7038 for (uint32 i = 0; i < 105; ++i)
7039 {
7040 if (changesMask[163 + i])
7041 {
7042 data << InvSlots[i];
7043 }
7044 }
7045 }
7046 if (changesMask[268])
7047 {
7048 for (uint32 i = 0; i < 2; ++i)
7049 {
7050 if (changesMask[269 + i])
7051 {
7052 RestInfo[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7053 }
7054 }
7055 }
7056 if (changesMask[271])
7057 {
7058 for (uint32 i = 0; i < 7; ++i)
7059 {
7060 if (changesMask[272 + i])
7061 {
7062 data << int32(ModDamageDonePos[i]);
7063 }
7064 if (changesMask[279 + i])
7065 {
7066 data << int32(ModDamageDoneNeg[i]);
7067 }
7068 if (changesMask[286 + i])
7069 {
7070 data << float(ModDamageDonePercent[i]);
7071 }
7072 if (changesMask[293 + i])
7073 {
7074 data << float(ModHealingDonePercent[i]);
7075 }
7076 }
7077 }
7078 if (changesMask[300])
7079 {
7080 for (uint32 i = 0; i < 3; ++i)
7081 {
7082 if (changesMask[301 + i])
7083 {
7084 data << float(WeaponDmgMultipliers[i]);
7085 }
7086 if (changesMask[304 + i])
7087 {
7088 data << float(WeaponAtkSpeedMultipliers[i]);
7089 }
7090 }
7091 }
7092 if (changesMask[307])
7093 {
7094 for (uint32 i = 0; i < 12; ++i)
7095 {
7096 if (changesMask[308 + i])
7097 {
7098 data << uint32(BuybackPrice[i]);
7099 }
7100 if (changesMask[320 + i])
7101 {
7102 data << int64(BuybackTimestamp[i]);
7103 }
7104 }
7105 }
7106 if (changesMask[332])
7107 {
7108 for (uint32 i = 0; i < 32; ++i)
7109 {
7110 if (changesMask[333 + i])
7111 {
7112 data << int32(CombatRatings[i]);
7113 }
7114 }
7115 }
7116 if (changesMask[365])
7117 {
7118 for (uint32 i = 0; i < 4; ++i)
7119 {
7120 if (changesMask[366 + i])
7121 {
7122 data << uint32(NoReagentCostMask[i]);
7123 }
7124 }
7125 }
7126 if (changesMask[370])
7127 {
7128 for (uint32 i = 0; i < 2; ++i)
7129 {
7130 if (changesMask[371 + i])
7131 {
7132 data << int32(ProfessionSkillLine[i]);
7133 }
7134 }
7135 }
7136 if (changesMask[373])
7137 {
7138 for (uint32 i = 0; i < 5; ++i)
7139 {
7140 if (changesMask[374 + i])
7141 {
7142 data << uint32(BagSlotFlags[i]);
7143 }
7144 }
7145 }
7146 if (changesMask[379])
7147 {
7148 for (uint32 i = 0; i < 17; ++i)
7149 {
7150 if (changesMask[380 + i])
7151 {
7152 data << float(ItemUpgradeHighWatermark[i]);
7153 }
7154 }
7155 }
7156 data.FlushBits();
7157}
7158
7160{
7331}
7332
7333void GameObjectAssistActionData::WriteCreate(ByteBuffer& data, Player const* receiver, GameObject const* owner) const
7334{
7335 data.WriteBits(PlayerName.size(), 6);
7336 data.WriteBits(MonsterName.size() + 1, 11);
7337 data << uint32(VirtualRealmAddress);
7338 data << uint8(Sex);
7339 data << int64(Time);
7340 data << int32(DelveTier);
7343}
7344
7345void GameObjectAssistActionData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, GameObject const* owner) const
7346{
7347 data.WriteBits(PlayerName.size(), 6);
7348 data.WriteBits(MonsterName.size() + 1, 11);
7349 data << uint32(VirtualRealmAddress);
7350 data << uint8(Sex);
7351 data << int64(Time);
7352 data << int32(DelveTier);
7355}
7356
7358{
7359 return PlayerName == right.PlayerName
7360 && MonsterName == right.MonsterName
7362 && Sex == right.Sex
7363 && Time == right.Time
7364 && DelveTier == right.DelveTier;
7365}
7366
7367void GameObjectData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, GameObject const* owner) const
7368{
7370
7371 data << int32(DisplayID);
7372 data << uint32(SpellVisualID);
7373 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, receiver, owner));
7376 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, receiver, owner);
7377 data << uint32(stateWorldEffectIDs->size());
7379 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
7380 {
7381 data << uint32((*stateWorldEffectIDs)[i]);
7382 }
7383 data << *CreatedBy;
7384 data << *GuildGUID;
7385 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, receiver, owner));
7386 data << float(ParentRotation->x);
7387 data << float(ParentRotation->y);
7388 data << float(ParentRotation->z);
7389 data << float(ParentRotation->w);
7390 data << int32(FactionTemplate);
7391 data << int8(ViewerDependentValue<StateTag>::GetValue(this, receiver, owner));
7392 data << int8(TypeID);
7393 data << uint8(PercentHealth);
7394 data << uint32(ArtKit);
7395 data << uint32(EnableDoodadSets.size());
7396 data << uint32(CustomParam);
7397 data << int32(Level);
7398 data << uint32(AnimGroupInstance);
7399 data << uint32(UiWidgetItemID);
7400 data << uint32(UiWidgetItemQuality);
7401 data << uint32(UiWidgetItemCount);
7402 data << uint32(WorldEffects.size());
7403 for (uint32 i = 0; i < EnableDoodadSets.size(); ++i)
7404 {
7405 data << int32(EnableDoodadSets[i]);
7406 }
7407 for (uint32 i = 0; i < WorldEffects.size(); ++i)
7408 {
7409 data << int32(WorldEffects[i]);
7410 }
7412 data.FlushBits();
7414 {
7415 AssistActionData->WriteCreate(data, receiver, owner);
7416 }
7417}
7418
7419void GameObjectData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, GameObject const* owner) const
7420{
7421 WriteUpdate(_changesMask, data, receiver, owner, false);
7422}
7423
7424void GameObjectData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, GameObject const* owner, bool ignoreNestedChangesMask) const
7425{
7426 data.WriteBits(changesMask.GetBlock(0), 26);
7427
7429
7430 if (changesMask[0])
7431 {
7432 if (changesMask[1])
7433 {
7434 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, receiver, owner);
7435 data.WriteBits(stateWorldEffectIDs->size(), 32);
7436 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
7437 {
7438 data << uint32((*stateWorldEffectIDs)[i]);
7439 }
7440 }
7441 }
7442 data.FlushBits();
7443 if (changesMask[0])
7444 {
7445 if (changesMask[2])
7446 {
7447 if (!ignoreNestedChangesMask)
7449 else
7451 }
7452 if (changesMask[3])
7453 {
7454 if (!ignoreNestedChangesMask)
7456 else
7458 }
7459 }
7460 data.FlushBits();
7461 if (changesMask[0])
7462 {
7463 if (changesMask[2])
7464 {
7465 for (uint32 i = 0; i < EnableDoodadSets.size(); ++i)
7466 {
7467 if (EnableDoodadSets.HasChanged(i) || ignoreNestedChangesMask)
7468 {
7469 data << int32(EnableDoodadSets[i]);
7470 }
7471 }
7472 }
7473 if (changesMask[3])
7474 {
7475 for (uint32 i = 0; i < WorldEffects.size(); ++i)
7476 {
7477 if (WorldEffects.HasChanged(i) || ignoreNestedChangesMask)
7478 {
7479 data << int32(WorldEffects[i]);
7480 }
7481 }
7482 }
7483 if (changesMask[4])
7484 {
7485 data << int32(DisplayID);
7486 }
7487 if (changesMask[5])
7488 {
7489 data << uint32(SpellVisualID);
7490 }
7491 if (changesMask[6])
7492 {
7493 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, receiver, owner));
7494 }
7495 if (changesMask[7])
7496 {
7498 }
7499 if (changesMask[8])
7500 {
7502 }
7503 if (changesMask[9])
7504 {
7506 }
7507 if (changesMask[10])
7508 {
7509 data << *CreatedBy;
7510 }
7511 if (changesMask[11])
7512 {
7513 data << *GuildGUID;
7514 }
7515 if (changesMask[12])
7516 {
7517 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, receiver, owner));
7518 }
7519 if (changesMask[13])
7520 {
7521 data << float(ParentRotation->x);
7522 data << float(ParentRotation->y);
7523 data << float(ParentRotation->z);
7524 data << float(ParentRotation->w);
7525 }
7526 if (changesMask[14])
7527 {
7528 data << int32(FactionTemplate);
7529 }
7530 if (changesMask[15])
7531 {
7532 data << int8(ViewerDependentValue<StateTag>::GetValue(this, receiver, owner));
7533 }
7534 if (changesMask[16])
7535 {
7536 data << int8(TypeID);
7537 }
7538 if (changesMask[17])
7539 {
7540 data << uint8(PercentHealth);
7541 }
7542 if (changesMask[18])
7543 {
7544 data << uint32(ArtKit);
7545 }
7546 if (changesMask[19])
7547 {
7548 data << uint32(CustomParam);
7549 }
7550 if (changesMask[20])
7551 {
7552 data << int32(Level);
7553 }
7554 if (changesMask[21])
7555 {
7556 data << uint32(AnimGroupInstance);
7557 }
7558 if (changesMask[22])
7559 {
7560 data << uint32(UiWidgetItemID);
7561 }
7562 if (changesMask[23])
7563 {
7564 data << uint32(UiWidgetItemQuality);
7565 }
7566 if (changesMask[24])
7567 {
7568 data << uint32(UiWidgetItemCount);
7569 }
7571 data.FlushBits();
7572 if (changesMask[25])
7573 {
7575 {
7576 AssistActionData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7577 }
7578 }
7579 }
7580}
7581
7611
7612void DynamicObjectData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, DynamicObject const* owner) const
7613{
7614 data << *Caster;
7615 data << uint8(Type);
7616 SpellVisual->WriteCreate(data, receiver, owner);
7617 data << int32(SpellID);
7618 data << float(Radius);
7619 data << uint32(CastTime);
7620}
7621
7622void DynamicObjectData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, DynamicObject const* owner) const
7623{
7624 WriteUpdate(_changesMask, data, receiver, owner, false);
7625}
7626
7627void DynamicObjectData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, DynamicObject const* owner, bool ignoreNestedChangesMask) const
7628{
7629 data.WriteBits(changesMask.GetBlock(0), 7);
7630
7631 data.FlushBits();
7632 if (changesMask[0])
7633 {
7634 if (changesMask[1])
7635 {
7636 data << *Caster;
7637 }
7638 if (changesMask[2])
7639 {
7640 data << uint8(Type);
7641 }
7642 if (changesMask[3])
7643 {
7644 SpellVisual->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7645 }
7646 if (changesMask[4])
7647 {
7648 data << int32(SpellID);
7649 }
7650 if (changesMask[5])
7651 {
7652 data << float(Radius);
7653 }
7654 if (changesMask[6])
7655 {
7656 data << uint32(CastTime);
7657 }
7658 }
7659}
7660
7671
7672void CorpseData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Corpse const* owner) const
7673{
7674 data << uint32(DynamicFlags);
7675 data << *Owner;
7676 data << *PartyGUID;
7677 data << *GuildGUID;
7678 data << uint32(DisplayID);
7679 for (uint32 i = 0; i < 19; ++i)
7680 {
7681 data << uint32(Items[i]);
7682 }
7683 data << uint8(RaceID);
7684 data << uint8(Sex);
7685 data << uint8(Class);
7686 data << uint32(Customizations.size());
7687 data << uint32(Flags);
7688 data << int32(FactionTemplate);
7690 for (uint32 i = 0; i < Customizations.size(); ++i)
7691 {
7692 Customizations[i].WriteCreate(data, receiver, owner);
7693 }
7694}
7695
7696void CorpseData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Corpse const* owner) const
7697{
7698 WriteUpdate(_changesMask, data, receiver, owner, false);
7699}
7700
7701void CorpseData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Corpse const* owner, bool ignoreNestedChangesMask) const
7702{
7703 data.WriteBits(changesMask.GetBlocksMask(0), 2);
7704 for (uint32 i = 0; i < 2; ++i)
7705 if (changesMask.GetBlock(i))
7706 data.WriteBits(changesMask.GetBlock(i), 32);
7707
7708 if (changesMask[0])
7709 {
7710 if (changesMask[1])
7711 {
7712 if (!ignoreNestedChangesMask)
7714 else
7716 }
7717 }
7718 data.FlushBits();
7719 if (changesMask[0])
7720 {
7721 if (changesMask[1])
7722 {
7723 for (uint32 i = 0; i < Customizations.size(); ++i)
7724 {
7725 if (Customizations.HasChanged(i) || ignoreNestedChangesMask)
7726 {
7727 Customizations[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
7728 }
7729 }
7730 }
7731 if (changesMask[2])
7732 {
7733 data << uint32(DynamicFlags);
7734 }
7735 if (changesMask[3])
7736 {
7737 data << *Owner;
7738 }
7739 if (changesMask[4])
7740 {
7741 data << *PartyGUID;
7742 }
7743 if (changesMask[5])
7744 {
7745 data << *GuildGUID;
7746 }
7747 if (changesMask[6])
7748 {
7749 data << uint32(DisplayID);
7750 }
7751 if (changesMask[7])
7752 {
7753 data << uint8(RaceID);
7754 }
7755 if (changesMask[8])
7756 {
7757 data << uint8(Sex);
7758 }
7759 if (changesMask[9])
7760 {
7761 data << uint8(Class);
7762 }
7763 if (changesMask[10])
7764 {
7765 data << uint32(Flags);
7766 }
7767 if (changesMask[11])
7768 {
7769 data << int32(FactionTemplate);
7770 }
7771 if (changesMask[12])
7772 {
7774 }
7775 }
7776 if (changesMask[13])
7777 {
7778 for (uint32 i = 0; i < 19; ++i)
7779 {
7780 if (changesMask[14 + i])
7781 {
7782 data << uint32(Items[i]);
7783 }
7784 }
7785 }
7786}
7787
7805
7806void ScaleCurve::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7807{
7808 data << uint32(StartTimeOffset);
7809 for (uint32 i = 0; i < 2; ++i)
7810 {
7811 data << Points[i];
7812 }
7813 data << uint32(ParameterCurve);
7815 data.FlushBits();
7816}
7817
7818void ScaleCurve::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7819{
7820 Mask changesMask = _changesMask;
7821 if (ignoreChangesMask)
7822 changesMask.SetAll();
7823
7824 data.WriteBits(changesMask.GetBlock(0), 7);
7825
7826 if (changesMask[0])
7827 {
7828 if (changesMask[1])
7829 {
7831 }
7832 }
7833 data.FlushBits();
7834 if (changesMask[0])
7835 {
7836 if (changesMask[2])
7837 {
7838 data << uint32(StartTimeOffset);
7839 }
7840 if (changesMask[3])
7841 {
7842 data << uint32(ParameterCurve);
7843 }
7844 }
7845 if (changesMask[4])
7846 {
7847 for (uint32 i = 0; i < 2; ++i)
7848 {
7849 if (changesMask[5 + i])
7850 {
7851 data << Points[i];
7852 }
7853 }
7854 }
7855 data.FlushBits();
7856}
7857
7866
7867void VisualAnim::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7868{
7870 data.WriteBit(IsDecay);
7871 data.FlushBits();
7872 data << uint32(AnimKitID);
7873 data << uint32(AnimProgress);
7875 {
7876 data << int16(AnimationDataID);
7877 }
7878 data.FlushBits();
7879}
7880
7881void VisualAnim::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7882{
7883 Mask changesMask = _changesMask;
7884 if (ignoreChangesMask)
7885 changesMask.SetAll();
7886
7887 data.WriteBits(changesMask.GetBlock(0), 5);
7888
7889 if (changesMask[0])
7890 {
7891 if (changesMask[1])
7892 {
7893 data.WriteBit(IsDecay);
7894 }
7896 }
7897 data.FlushBits();
7898 if (changesMask[0])
7899 {
7900 if (changesMask[3])
7901 {
7902 data << uint32(AnimKitID);
7903 }
7904 if (changesMask[4])
7905 {
7906 data << uint32(AnimProgress);
7907 }
7908 if (changesMask[2])
7909 {
7911 {
7912 data << int16(AnimationDataID);
7913 }
7914 }
7915 }
7916 data.FlushBits();
7917}
7918
7927
7929{
7930 data << TriggerGUID;
7931 data << Pos;
7932 data << float(Rotation.x);
7933 data << float(Rotation.y);
7934 data << float(Rotation.z);
7935 data << float(Rotation.w);
7936}
7937
7938void ForceSetAreaTriggerPositionAndRotation::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7939{
7940 data << TriggerGUID;
7941 data << Pos;
7942 data << float(Rotation.x);
7943 data << float(Rotation.y);
7944 data << float(Rotation.z);
7945 data << float(Rotation.w);
7946}
7947
7949{
7950 return TriggerGUID == right.TriggerGUID
7951 && Pos == right.Pos
7952 && Rotation == right.Rotation;
7953}
7954
7956{
7957 data << int32(Field_0);
7958 data << float(Field_4);
7959}
7960
7961void AreaTriggerActionSetPeriodModifier::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7962{
7963 Mask changesMask = _changesMask;
7964 if (ignoreChangesMask)
7965 changesMask.SetAll();
7966
7967 data.WriteBits(changesMask.GetBlock(0), 3);
7968
7969 data.FlushBits();
7970 if (changesMask[0])
7971 {
7972 if (changesMask[1])
7973 {
7974 data << int32(Field_0);
7975 }
7976 if (changesMask[2])
7977 {
7978 data << float(Field_4);
7979 }
7980 }
7981}
7982
7989
7990void AreaTriggerSplineCalculator::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
7991{
7992 data.WriteBits(Points.size(), 16);
7993 data.WriteBit(Catmullrom);
7994 for (uint32 i = 0; i < Points.size(); ++i)
7995 {
7996 data << Points[i];
7997 }
7998 data.FlushBits();
7999}
8000
8001void AreaTriggerSplineCalculator::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8002{
8003 Mask changesMask = _changesMask;
8004 if (ignoreChangesMask)
8005 changesMask.SetAll();
8006
8007 data.WriteBits(changesMask.GetBlock(0), 3);
8008
8009 if (changesMask[0])
8010 {
8011 if (changesMask[1])
8012 {
8013 data.WriteBit(Catmullrom);
8014 }
8015 if (changesMask[2])
8016 {
8017 if (!ignoreChangesMask)
8018 Points.WriteUpdateMask(data, 16);
8019 else
8021 }
8022 }
8023 data.FlushBits();
8024 if (changesMask[0])
8025 {
8026 if (changesMask[2])
8027 {
8028 for (uint32 i = 0; i < Points.size(); ++i)
8029 {
8030 if (Points.HasChanged(i) || ignoreChangesMask)
8031 {
8032 data << Points[i];
8033 }
8034 }
8035 }
8036 }
8037 data.FlushBits();
8038}
8039
8046
8047void AreaTriggerOrbit::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8048{
8049 data << *Center;
8050 data << float(Radius);
8051 data << float(InitialAngle);
8052 data << float(BlendFromRadius);
8053 data << int32(ExtraTimeForBlending);
8055 data.FlushBits();
8056}
8057
8058void AreaTriggerOrbit::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8059{
8060 Mask changesMask = _changesMask;
8061 if (ignoreChangesMask)
8062 changesMask.SetAll();
8063
8064 data.WriteBits(changesMask.GetBlock(0), 7);
8065
8066 if (changesMask[0])
8067 {
8068 if (changesMask[1])
8069 {
8071 }
8072 }
8073 data.FlushBits();
8074 if (changesMask[0])
8075 {
8076 if (changesMask[2])
8077 {
8078 data << *Center;
8079 }
8080 if (changesMask[3])
8081 {
8082 data << float(Radius);
8083 }
8084 if (changesMask[4])
8085 {
8086 data << float(InitialAngle);
8087 }
8088 if (changesMask[5])
8089 {
8090 data << float(BlendFromRadius);
8091 }
8092 if (changesMask[6])
8093 {
8094 data << int32(ExtraTimeForBlending);
8095 }
8096 }
8097 data.FlushBits();
8098}
8099
8110
8111void AreaTriggerMovementScript::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8112{
8113 data << int32(SpellScriptID);
8114 data << *Center;
8115 data << uint32(CreationTime);
8116}
8117
8118void AreaTriggerMovementScript::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8119{
8120 Mask changesMask = _changesMask;
8121 if (ignoreChangesMask)
8122 changesMask.SetAll();
8123
8124 data.WriteBits(changesMask.GetBlock(0), 4);
8125
8126 data.FlushBits();
8127 if (changesMask[0])
8128 {
8129 if (changesMask[1])
8130 {
8131 data << int32(SpellScriptID);
8132 }
8133 if (changesMask[2])
8134 {
8135 data << *Center;
8136 }
8137 if (changesMask[3])
8138 {
8139 data << uint32(CreationTime);
8140 }
8141 }
8142}
8143
8151
8152void AreaTriggerSphere::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8153{
8154 data << float(Radius);
8155 data << float(RadiusTarget);
8156}
8157
8158void AreaTriggerSphere::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8159{
8160 Mask changesMask = _changesMask;
8161 if (ignoreChangesMask)
8162 changesMask.SetAll();
8163
8164 data.WriteBits(changesMask.GetBlock(0), 3);
8165
8166 data.FlushBits();
8167 if (changesMask[0])
8168 {
8169 if (changesMask[1])
8170 {
8171 data << float(Radius);
8172 }
8173 if (changesMask[2])
8174 {
8175 data << float(RadiusTarget);
8176 }
8177 }
8178}
8179
8186
8187void AreaTriggerBox::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8188{
8189 data << *Extents;
8190 data << *ExtentsTarget;
8191}
8192
8193void AreaTriggerBox::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8194{
8195 Mask changesMask = _changesMask;
8196 if (ignoreChangesMask)
8197 changesMask.SetAll();
8198
8199 data.WriteBits(changesMask.GetBlock(0), 3);
8200
8201 data.FlushBits();
8202 if (changesMask[0])
8203 {
8204 if (changesMask[1])
8205 {
8206 data << *Extents;
8207 }
8208 if (changesMask[2])
8209 {
8210 data << *ExtentsTarget;
8211 }
8212 }
8213}
8214
8221
8222void AreaTriggerPolygon::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8223{
8224 data << uint32(Vertices.size());
8225 data << uint32(VerticesTarget.size());
8226 data << float(Height);
8227 data << float(HeightTarget);
8228 for (uint32 i = 0; i < Vertices.size(); ++i)
8229 {
8230 data << Vertices[i];
8231 }
8232 for (uint32 i = 0; i < VerticesTarget.size(); ++i)
8233 {
8234 data << VerticesTarget[i];
8235 }
8236}
8237
8238void AreaTriggerPolygon::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8239{
8240 Mask changesMask = _changesMask;
8241 if (ignoreChangesMask)
8242 changesMask.SetAll();
8243
8244 data.WriteBits(changesMask.GetBlock(0), 5);
8245
8246 if (changesMask[0])
8247 {
8248 if (changesMask[1])
8249 {
8250 if (!ignoreChangesMask)
8252 else
8254 }
8255 if (changesMask[2])
8256 {
8257 if (!ignoreChangesMask)
8259 else
8261 }
8262 }
8263 data.FlushBits();
8264 if (changesMask[0])
8265 {
8266 if (changesMask[1])
8267 {
8268 for (uint32 i = 0; i < Vertices.size(); ++i)
8269 {
8270 if (Vertices.HasChanged(i) || ignoreChangesMask)
8271 {
8272 data << Vertices[i];
8273 }
8274 }
8275 }
8276 if (changesMask[2])
8277 {
8278 for (uint32 i = 0; i < VerticesTarget.size(); ++i)
8279 {
8280 if (VerticesTarget.HasChanged(i) || ignoreChangesMask)
8281 {
8282 data << VerticesTarget[i];
8283 }
8284 }
8285 }
8286 if (changesMask[3])
8287 {
8288 data << float(Height);
8289 }
8290 if (changesMask[4])
8291 {
8292 data << float(HeightTarget);
8293 }
8294 }
8295}
8296
8305
8306void AreaTriggerCylinder::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8307{
8308 data << float(Radius);
8309 data << float(RadiusTarget);
8310 data << float(Height);
8311 data << float(HeightTarget);
8312 data << float(LocationZOffset);
8313 data << float(LocationZOffsetTarget);
8314}
8315
8316void AreaTriggerCylinder::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8317{
8318 Mask changesMask = _changesMask;
8319 if (ignoreChangesMask)
8320 changesMask.SetAll();
8321
8322 data.WriteBits(changesMask.GetBlock(0), 7);
8323
8324 data.FlushBits();
8325 if (changesMask[0])
8326 {
8327 if (changesMask[1])
8328 {
8329 data << float(Radius);
8330 }
8331 if (changesMask[2])
8332 {
8333 data << float(RadiusTarget);
8334 }
8335 if (changesMask[3])
8336 {
8337 data << float(Height);
8338 }
8339 if (changesMask[4])
8340 {
8341 data << float(HeightTarget);
8342 }
8343 if (changesMask[5])
8344 {
8345 data << float(LocationZOffset);
8346 }
8347 if (changesMask[6])
8348 {
8349 data << float(LocationZOffsetTarget);
8350 }
8351 }
8352}
8353
8364
8365void AreaTriggerDisk::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8366{
8367 data << float(InnerRadius);
8368 data << float(InnerRadiusTarget);
8369 data << float(OuterRadius);
8370 data << float(OuterRadiusTarget);
8371 data << float(Height);
8372 data << float(HeightTarget);
8373 data << float(LocationZOffset);
8374 data << float(LocationZOffsetTarget);
8375}
8376
8377void AreaTriggerDisk::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8378{
8379 Mask changesMask = _changesMask;
8380 if (ignoreChangesMask)
8381 changesMask.SetAll();
8382
8383 data.WriteBits(changesMask.GetBlock(0), 9);
8384
8385 data.FlushBits();
8386 if (changesMask[0])
8387 {
8388 if (changesMask[1])
8389 {
8390 data << float(InnerRadius);
8391 }
8392 if (changesMask[2])
8393 {
8394 data << float(InnerRadiusTarget);
8395 }
8396 if (changesMask[3])
8397 {
8398 data << float(OuterRadius);
8399 }
8400 if (changesMask[4])
8401 {
8402 data << float(OuterRadiusTarget);
8403 }
8404 if (changesMask[5])
8405 {
8406 data << float(Height);
8407 }
8408 if (changesMask[6])
8409 {
8410 data << float(HeightTarget);
8411 }
8412 if (changesMask[7])
8413 {
8414 data << float(LocationZOffset);
8415 }
8416 if (changesMask[8])
8417 {
8418 data << float(LocationZOffsetTarget);
8419 }
8420 }
8421}
8422
8435
8436void AreaTriggerBoundedPlane::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8437{
8438 data << *Extents;
8439 data << *ExtentsTarget;
8440}
8441
8442void AreaTriggerBoundedPlane::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8443{
8444 Mask changesMask = _changesMask;
8445 if (ignoreChangesMask)
8446 changesMask.SetAll();
8447
8448 data.WriteBits(changesMask.GetBlock(0), 3);
8449
8450 data.FlushBits();
8451 if (changesMask[0])
8452 {
8453 if (changesMask[1])
8454 {
8455 data << *Extents;
8456 }
8457 if (changesMask[2])
8458 {
8459 data << *ExtentsTarget;
8460 }
8461 }
8462}
8463
8470
8471void AreaTriggerData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8472{
8473 OverrideScaleCurve->WriteCreate(data, receiver, owner);
8474 data << *Caster;
8475 data << uint32(Duration);
8476 data << uint32(TimeToTarget);
8477 data << uint32(TimeToTargetScale);
8479 data << uint32(TimeToTargetPos);
8481 data << int32(SpellID);
8482 data << int32(SpellForVisuals);
8483 SpellVisual->WriteCreate(data, receiver, owner);
8484 data << float(BoundsRadius2D);
8485 data << uint32(DecalPropertiesID);
8486 data << *CreatingEffectGUID;
8487 data << *OrbitPathTarget;
8488 data << *RollPitchYaw;
8489 data << int32(PositionalSoundKitID);
8490 data << uint32(MovementStartTime);
8491 data << uint32(CreationTime);
8492 data << float(ZOffset);
8493 data << uint32(Flags);
8494 data << uint32(ScaleCurveId);
8495 data << uint32(FacingCurveId);
8496 data << uint32(MorphCurveId);
8497 data << uint32(MoveCurveId);
8498 data << float(Facing);
8499 data << int32(PathType);
8500 data << uint8(ShapeType);
8501 PeriodModifier->WriteCreate(data, receiver, owner);
8502 if (PathType == 3)
8503 {
8504 PathData.Get<UF::AreaTriggerMovementScript>()->WriteCreate(data, receiver, owner);
8505 }
8506 if (ShapeType == 0)
8507 {
8508 ShapeData.Get<UF::AreaTriggerSphere>()->WriteCreate(data, receiver, owner);
8509 }
8510 if (ShapeType == 1)
8511 {
8512 ShapeData.Get<UF::AreaTriggerBox>()->WriteCreate(data, receiver, owner);
8513 }
8514 if (ShapeType == 2 || ShapeType == 3 || ShapeType == 5 || ShapeType == 6)
8515 {
8516 ShapeData.Get<UF::AreaTriggerPolygon>()->WriteCreate(data, receiver, owner);
8517 }
8518 if (ShapeType == 4)
8519 {
8520 ShapeData.Get<UF::AreaTriggerCylinder>()->WriteCreate(data, receiver, owner);
8521 }
8522 if (ShapeType == 7)
8523 {
8524 ShapeData.Get<UF::AreaTriggerDisk>()->WriteCreate(data, receiver, owner);
8525 }
8526 if (ShapeType == 8)
8527 {
8528 ShapeData.Get<UF::AreaTriggerBoundedPlane>()->WriteCreate(data, receiver, owner);
8529 }
8530 ExtraScaleCurve->WriteCreate(data, receiver, owner);
8531 data.FlushBits();
8534 OverrideMoveCurveX->WriteCreate(data, receiver, owner);
8536 {
8537 data << *TargetRollPitchYaw;
8538 }
8540 {
8541 ForcedPositionAndRotation->WriteCreate(data, receiver, owner);
8542 }
8543 OverrideMoveCurveY->WriteCreate(data, receiver, owner);
8544 OverrideMoveCurveZ->WriteCreate(data, receiver, owner);
8545 Unk1205Curve->WriteCreate(data, receiver, owner);
8546 VisualAnim->WriteCreate(data, receiver, owner);
8547 if (PathType == 0)
8548 {
8549 PathData.Get<UF::AreaTriggerSplineCalculator>()->WriteCreate(data, receiver, owner);
8550 }
8551 if (PathType == 1)
8552 {
8553 PathData.Get<UF::AreaTriggerOrbit>()->WriteCreate(data, receiver, owner);
8554 }
8555}
8556
8557void AreaTriggerData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const
8558{
8559 WriteUpdate(_changesMask, data, receiver, owner, false);
8560}
8561
8562void AreaTriggerData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner, bool ignoreNestedChangesMask) const
8563{
8564 data << uint32(changesMask.GetBlock(0));
8565 data.WriteBits(changesMask.GetBlock(1), 7);
8566
8567 data.FlushBits();
8568 if (changesMask[0])
8569 {
8570 if (changesMask[1])
8571 {
8572 OverrideScaleCurve->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8573 }
8574 if (changesMask[7])
8575 {
8576 data << *Caster;
8577 }
8578 if (changesMask[8])
8579 {
8580 data << uint32(Duration);
8581 }
8582 if (changesMask[9])
8583 {
8584 data << uint32(TimeToTarget);
8585 }
8586 if (changesMask[10])
8587 {
8588 data << uint32(TimeToTargetScale);
8589 }
8590 if (changesMask[11])
8591 {
8593 }
8594 if (changesMask[12])
8595 {
8596 data << uint32(TimeToTargetPos);
8597 }
8598 if (changesMask[13])
8599 {
8601 }
8602 if (changesMask[14])
8603 {
8604 data << int32(SpellID);
8605 }
8606 if (changesMask[15])
8607 {
8608 data << int32(SpellForVisuals);
8609 }
8610 if (changesMask[16])
8611 {
8612 SpellVisual->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8613 }
8614 if (changesMask[17])
8615 {
8616 data << float(BoundsRadius2D);
8617 }
8618 if (changesMask[18])
8619 {
8620 data << uint32(DecalPropertiesID);
8621 }
8622 if (changesMask[19])
8623 {
8624 data << *CreatingEffectGUID;
8625 }
8626 if (changesMask[20])
8627 {
8628 data << *OrbitPathTarget;
8629 }
8630 if (changesMask[21])
8631 {
8632 data << *RollPitchYaw;
8633 }
8634 if (changesMask[22])
8635 {
8636 data << int32(PositionalSoundKitID);
8637 }
8638 if (changesMask[23])
8639 {
8640 data << uint32(MovementStartTime);
8641 }
8642 if (changesMask[24])
8643 {
8644 data << uint32(CreationTime);
8645 }
8646 if (changesMask[25])
8647 {
8648 data << float(ZOffset);
8649 }
8650 if (changesMask[27])
8651 {
8652 data << uint32(Flags);
8653 }
8654 if (changesMask[29])
8655 {
8656 data << uint32(ScaleCurveId);
8657 }
8658 if (changesMask[30])
8659 {
8660 data << uint32(FacingCurveId);
8661 }
8662 if (changesMask[31])
8663 {
8664 data << uint32(MorphCurveId);
8665 }
8666 }
8667 if (changesMask[32])
8668 {
8669 if (changesMask[33])
8670 {
8671 data << uint32(MoveCurveId);
8672 }
8673 if (changesMask[34])
8674 {
8675 data << float(Facing);
8676 }
8677 if (changesMask[36])
8678 {
8679 data << int32(PathType);
8680 }
8681 if (changesMask[37])
8682 {
8683 data << uint8(ShapeType);
8684 }
8685 if (changesMask[38])
8686 {
8687 PeriodModifier->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8688 }
8689 if (changesMask[36])
8690 {
8691 if (PathType == 3)
8692 {
8693 PathData.Get<UF::AreaTriggerMovementScript>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8694 }
8695 }
8696 if (changesMask[37])
8697 {
8698 if (ShapeType == 0)
8699 {
8700 ShapeData.Get<UF::AreaTriggerSphere>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8701 }
8702 if (ShapeType == 1)
8703 {
8704 ShapeData.Get<UF::AreaTriggerBox>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8705 }
8706 if (ShapeType == 2 || ShapeType == 3 || ShapeType == 5 || ShapeType == 6)
8707 {
8708 ShapeData.Get<UF::AreaTriggerPolygon>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8709 }
8710 if (ShapeType == 4)
8711 {
8712 ShapeData.Get<UF::AreaTriggerCylinder>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8713 }
8714 if (ShapeType == 7)
8715 {
8716 ShapeData.Get<UF::AreaTriggerDisk>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8717 }
8718 if (ShapeType == 8)
8719 {
8720 ShapeData.Get<UF::AreaTriggerBoundedPlane>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8721 }
8722 }
8723 }
8724 if (changesMask[0])
8725 {
8726 if (changesMask[2])
8727 {
8728 ExtraScaleCurve->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8729 }
8730 }
8731 data.FlushBits();
8732 if (changesMask[0])
8733 {
8735 }
8736 if (changesMask[32])
8737 {
8739 }
8740 data.FlushBits();
8741 if (changesMask[0])
8742 {
8743 if (changesMask[3])
8744 {
8745 OverrideMoveCurveX->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8746 }
8747 if (changesMask[26])
8748 {
8750 {
8751 data << *TargetRollPitchYaw;
8752 }
8753 }
8754 }
8755 if (changesMask[32])
8756 {
8757 if (changesMask[35])
8758 {
8760 {
8761 ForcedPositionAndRotation->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8762 }
8763 }
8764 }
8765 if (changesMask[0])
8766 {
8767 if (changesMask[4])
8768 {
8769 OverrideMoveCurveY->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8770 }
8771 if (changesMask[5])
8772 {
8773 OverrideMoveCurveZ->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8774 }
8775 if (changesMask[6])
8776 {
8777 Unk1205Curve->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8778 }
8779 if (changesMask[28])
8780 {
8781 VisualAnim->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8782 }
8783 }
8784 if (changesMask[32])
8785 {
8786 if (changesMask[36])
8787 {
8788 if (PathType == 0)
8789 {
8790 PathData.Get<UF::AreaTriggerSplineCalculator>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8791 }
8792 if (PathType == 1)
8793 {
8794 PathData.Get<UF::AreaTriggerOrbit>()->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
8795 }
8796 }
8797 }
8798}
8799
8801{
8842}
8843
8844void SceneObjectData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
8845{
8846 data << int32(ScriptPackageID);
8847 data << uint32(RndSeedVal);
8848 data << *CreatedBy;
8849 data << uint32(SceneType);
8850}
8851
8852void SceneObjectData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
8853{
8854 WriteUpdate(_changesMask, data, receiver, owner, false);
8855}
8856
8857void SceneObjectData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
8858{
8859 data.WriteBits(changesMask.GetBlock(0), 5);
8860
8861 data.FlushBits();
8862 if (changesMask[0])
8863 {
8864 if (changesMask[1])
8865 {
8866 data << int32(ScriptPackageID);
8867 }
8868 if (changesMask[2])
8869 {
8870 data << uint32(RndSeedVal);
8871 }
8872 if (changesMask[3])
8873 {
8874 data << *CreatedBy;
8875 }
8876 if (changesMask[4])
8877 {
8878 data << uint32(SceneType);
8879 }
8880 }
8881}
8882
8891
8892void ConversationLine::WriteCreate(ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8893{
8894 data << int32(ConversationLineID);
8895 data << int32(BroadcastTextID);
8896 data << uint32(ViewerDependentValue<StartTimeTag>::GetValue(this, receiver, owner));
8897 data << int32(UiCameraID);
8898 data << uint8(ActorIndex);
8899 data << uint8(Flags);
8900 data << uint8(ChatType);
8901}
8902
8903void ConversationLine::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8904{
8905 data << int32(ConversationLineID);
8906 data << int32(BroadcastTextID);
8907 data << uint32(ViewerDependentValue<StartTimeTag>::GetValue(this, receiver, owner));
8908 data << int32(UiCameraID);
8909 data << uint8(ActorIndex);
8910 data << uint8(Flags);
8911 data << uint8(ChatType);
8912}
8913
8915{
8918 && StartTime == right.StartTime
8919 && UiCameraID == right.UiCameraID
8920 && ActorIndex == right.ActorIndex
8921 && Flags == right.Flags
8922 && ChatType == right.ChatType;
8923}
8924
8925void ConversationActor::WriteCreate(ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8926{
8927 data << uint32(CreatureID);
8929 data << ActorGUID;
8930 data << int32(Id);
8931 data.WriteBits(Type, 1);
8932 data.WriteBits(NoActorObject, 1);
8933 data.FlushBits();
8934}
8935
8936void ConversationActor::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8937{
8938 data << uint32(CreatureID);
8940 data << ActorGUID;
8941 data << int32(Id);
8942 data.WriteBits(Type, 1);
8943 data.WriteBits(NoActorObject, 1);
8944 data.FlushBits();
8945}
8946
8948{
8949 return CreatureID == right.CreatureID
8951 && ActorGUID == right.ActorGUID
8952 && Id == right.Id
8953 && Type == right.Type
8954 && NoActorObject == right.NoActorObject;
8955}
8956
8957void ConversationData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8958{
8959 data << uint32(Lines->size());
8960 data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, receiver, owner));
8961 data << uint32(Progress);
8962 for (uint32 i = 0; i < Lines->size(); ++i)
8963 {
8964 (*Lines)[i].WriteCreate(data, receiver, owner);
8965 }
8967 data.WriteBit(Field_33);
8968 data << uint32(Actors.size());
8969 data << uint32(Flags);
8970 for (uint32 i = 0; i < Actors.size(); ++i)
8971 {
8972 Actors[i].WriteCreate(data, receiver, owner);
8973 }
8974 data.FlushBits();
8975}
8976
8977void ConversationData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Conversation const* owner) const
8978{
8979 WriteUpdate(_changesMask, data, receiver, owner, false);
8980}
8981
8982void ConversationData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Conversation const* owner, bool ignoreNestedChangesMask) const
8983{
8984 data.WriteBits(changesMask.GetBlock(0), 8);
8985
8986 if (changesMask[0])
8987 {
8988 if (changesMask[1])
8989 {
8991 }
8992 if (changesMask[2])
8993 {
8994 data.WriteBit(Field_33);
8995 }
8996 if (changesMask[3])
8997 {
8998 data.WriteBits(Lines->size(), 32);
8999 for (uint32 i = 0; i < Lines->size(); ++i)
9000 {
9001 (*Lines)[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9002 }
9003 }
9004 }
9005 data.FlushBits();
9006 if (changesMask[0])
9007 {
9008 if (changesMask[4])
9009 {
9010 if (!ignoreNestedChangesMask)
9011 Actors.WriteUpdateMask(data);
9012 else
9014 }
9015 }
9016 data.FlushBits();
9017 if (changesMask[0])
9018 {
9019 if (changesMask[4])
9020 {
9021 for (uint32 i = 0; i < Actors.size(); ++i)
9022 {
9023 if (Actors.HasChanged(i) || ignoreNestedChangesMask)
9024 {
9025 Actors[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9026 }
9027 }
9028 }
9029 if (changesMask[5])
9030 {
9031 data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, receiver, owner));
9032 }
9033 if (changesMask[6])
9034 {
9035 data << uint32(Progress);
9036 }
9037 if (changesMask[7])
9038 {
9039 data << uint32(Flags);
9040 }
9041 }
9042 data.FlushBits();
9043}
9044
9056
9057void MeshObjectData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9058{
9059 data.WriteBit(IsWMO);
9060 data.WriteBit(IsRoom);
9061 data.WriteBits(Geobox.has_value(), 1);
9062 data << int32(FileDataID);
9063 if (Geobox.has_value())
9064 {
9065 data << *Geobox;
9066 }
9067 data.FlushBits();
9068 data.FlushBits();
9069}
9070
9071void MeshObjectData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9072{
9073 WriteUpdate(_changesMask, data, receiver, owner, false);
9074}
9075
9076void MeshObjectData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
9077{
9078 data.WriteBits(changesMask.GetBlock(0), 5);
9079
9080 if (changesMask[0])
9081 {
9082 if (changesMask[1])
9083 {
9084 data.WriteBit(IsWMO);
9085 }
9086 if (changesMask[2])
9087 {
9088 data.WriteBit(IsRoom);
9089 }
9090 data.WriteBits(Geobox.has_value(), 1);
9091 }
9092 data.FlushBits();
9093 if (changesMask[0])
9094 {
9095 if (changesMask[3])
9096 {
9097 data << int32(FileDataID);
9098 }
9099 if (changesMask[4])
9100 {
9101 if (Geobox.has_value())
9102 {
9103 data << *Geobox;
9104 }
9105 }
9106 }
9107 data.FlushBits();
9108}
9109
9118
9119void VendorData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Creature const* owner) const
9120{
9121 data << int32(Flags);
9122}
9123
9124void VendorData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Creature const* owner) const
9125{
9126 WriteUpdate(_changesMask, data, receiver, owner, false);
9127}
9128
9129void VendorData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Creature const* owner, bool ignoreNestedChangesMask) const
9130{
9131 data.WriteBits(changesMask.GetBlock(0), 2);
9132
9133 data.FlushBits();
9134 if (changesMask[0])
9135 {
9136 if (changesMask[1])
9137 {
9138 data << int32(Flags);
9139 }
9140 }
9141}
9142
9148
9149void DecorDyeSlots::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9150{
9151 for (uint32 i = 0; i < 3; ++i)
9152 {
9153 data << int32(DyeColorID[i]);
9154 }
9155}
9156
9157void DecorDyeSlots::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9158{
9159 for (uint32 i = 0; i < 3; ++i)
9160 {
9161 data << int32(DyeColorID[i]);
9162 }
9163}
9164
9166{
9167 return DyeColorID == right.DyeColorID;
9168}
9169
9170void DecorStoragePersistedData::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9171{
9172 data << *HouseGUID;
9173 data << uint8(SourceType);
9174 data.WriteBits(DyeSlots.has_value(), 1);
9175 data.WriteBits(SourceValue->size() + 1, 24);
9176 data.FlushBits();
9177 if (DyeSlots.has_value())
9178 {
9179 DyeSlots->WriteCreate(data, receiver, owner);
9180 }
9182}
9183
9184void DecorStoragePersistedData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9185{
9186 Mask changesMask = _changesMask;
9187 if (ignoreChangesMask)
9188 changesMask.SetAll();
9189
9190 data.WriteBits(changesMask.GetBlock(0), 4);
9191
9192 data.FlushBits();
9193 if (changesMask[0])
9194 {
9195 data << *HouseGUID;
9196 }
9197 if (changesMask[2])
9198 {
9199 data << uint8(SourceType);
9200 }
9201 data.WriteBits(DyeSlots.has_value(), 1);
9202 if (changesMask[3])
9203 {
9204 data.WriteBits(SourceValue->size() + 1, 24);
9205 }
9206 data.FlushBits();
9207 if (changesMask[1])
9208 {
9209 if (DyeSlots.has_value())
9210 {
9211 DyeSlots->WriteUpdate(ignoreChangesMask, data, receiver, owner);
9212 }
9213 }
9214 if (changesMask[3])
9215 {
9217 }
9218}
9219
9228
9229void HousingDecorData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9230{
9231 data << *DecorGUID;
9232 data << *AttachParentGUID;
9233 data << uint8(Flags);
9234 data << *TargetGameObjectGUID;
9236 data.FlushBits();
9238 {
9239 PersistedData->WriteCreate(data, receiver, owner);
9240 }
9241}
9242
9243void HousingDecorData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9244{
9245 WriteUpdate(_changesMask, data, receiver, owner, false);
9246}
9247
9248void HousingDecorData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
9249{
9250 data.WriteBits(changesMask.GetBlock(0), 6);
9251
9252 data.FlushBits();
9253 if (changesMask[0])
9254 {
9255 if (changesMask[1])
9256 {
9257 data << *DecorGUID;
9258 }
9259 if (changesMask[2])
9260 {
9261 data << *AttachParentGUID;
9262 }
9263 if (changesMask[3])
9264 {
9265 data << uint8(Flags);
9266 }
9267 if (changesMask[5])
9268 {
9269 data << *TargetGameObjectGUID;
9270 }
9272 data.FlushBits();
9273 if (changesMask[4])
9274 {
9276 {
9277 PersistedData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9278 }
9279 }
9280 }
9281}
9282
9292
9293void HousingDoorData::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9294{
9295 data << int32(RoomComponentID);
9296 data << *RoomComponentOffset;
9297 data << uint8(RoomComponentType);
9298 data << *AttachedRoomGUID;
9299}
9300
9301void HousingDoorData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9302{
9303 Mask changesMask = _changesMask;
9304 if (ignoreChangesMask)
9305 changesMask.SetAll();
9306
9307 data.WriteBits(changesMask.GetBlock(0), 5);
9308
9309 data.FlushBits();
9310 if (changesMask[0])
9311 {
9312 if (changesMask[1])
9313 {
9314 data << int32(RoomComponentID);
9315 }
9316 if (changesMask[2])
9317 {
9318 data << *RoomComponentOffset;
9319 }
9320 if (changesMask[3])
9321 {
9322 data << uint8(RoomComponentType);
9323 }
9324 if (changesMask[4])
9325 {
9326 data << *AttachedRoomGUID;
9327 }
9328 }
9329}
9330
9339
9340void HousingRoomData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9341{
9342 data << *HouseGUID;
9343 data << int32(HouseRoomID);
9344 data << int32(Flags);
9345 data << uint32(MeshObjects.size());
9346 data << uint32(Doors.size());
9347 data << int32(FloorIndex);
9348 for (uint32 i = 0; i < MeshObjects.size(); ++i)
9349 {
9350 data << MeshObjects[i];
9351 }
9352 for (uint32 i = 0; i < Doors.size(); ++i)
9353 {
9354 Doors[i].WriteCreate(data, receiver, owner);
9355 }
9356}
9357
9358void HousingRoomData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9359{
9360 WriteUpdate(_changesMask, data, receiver, owner, false);
9361}
9362
9363void HousingRoomData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
9364{
9365 data.WriteBits(changesMask.GetBlock(0), 7);
9366
9367 if (changesMask[0])
9368 {
9369 if (changesMask[1])
9370 {
9371 if (!ignoreNestedChangesMask)
9373 else
9375 }
9376 if (changesMask[2])
9377 {
9378 if (!ignoreNestedChangesMask)
9379 Doors.WriteUpdateMask(data);
9380 else
9382 }
9383 }
9384 data.FlushBits();
9385 if (changesMask[0])
9386 {
9387 if (changesMask[1])
9388 {
9389 for (uint32 i = 0; i < MeshObjects.size(); ++i)
9390 {
9391 if (MeshObjects.HasChanged(i) || ignoreNestedChangesMask)
9392 {
9393 data << MeshObjects[i];
9394 }
9395 }
9396 }
9397 if (changesMask[2])
9398 {
9399 for (uint32 i = 0; i < Doors.size(); ++i)
9400 {
9401 if (Doors.HasChanged(i) || ignoreNestedChangesMask)
9402 {
9403 Doors[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9404 }
9405 }
9406 }
9407 if (changesMask[3])
9408 {
9409 data << *HouseGUID;
9410 }
9411 if (changesMask[4])
9412 {
9413 data << int32(HouseRoomID);
9414 }
9415 if (changesMask[5])
9416 {
9417 data << int32(Flags);
9418 }
9419 if (changesMask[6])
9420 {
9421 data << int32(FloorIndex);
9422 }
9423 }
9424}
9425
9436
9437void HousingRoomComponentMeshData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9438{
9439 data << *RoomGUID;
9441 data << int32(RoomComponentID);
9442 data << uint8(Field_20);
9443 data << uint8(RoomComponentType);
9444 data << int32(Field_24);
9445 data << int32(HouseThemeID);
9448}
9449
9450void HousingRoomComponentMeshData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
9451{
9452 WriteUpdate(_changesMask, data, receiver, owner, false);
9453}
9454
9455void HousingRoomComponentMeshData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
9456{
9457 data.WriteBits(changesMask.GetBlock(0), 10);
9458
9459 data.FlushBits();
9460 if (changesMask[0])
9461 {
9462 if (changesMask[1])
9463 {
9464 data << *RoomGUID;
9465 }
9466 if (changesMask[2])
9467 {
9469 }
9470 if (changesMask[3])
9471 {
9472 data << int32(RoomComponentID);
9473 }
9474 if (changesMask[4])
9475 {
9476 data << uint8(Field_20);
9477 }
9478 if (changesMask[5])
9479 {
9480 data << uint8(RoomComponentType);
9481 }
9482 if (changesMask[6])
9483 {
9484 data << int32(Field_24);
9485 }
9486 if (changesMask[7])
9487 {
9488 data << int32(HouseThemeID);
9489 }
9490 if (changesMask[8])
9491 {
9493 }
9494 if (changesMask[9])
9495 {
9497 }
9498 }
9499}
9500
9514
9515void HousingPlayerHouseData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9516{
9517 data << *BnetAccount;
9518 data << *CosmeticOwner;
9519 data << int32(PlotIndex);
9520 data << uint32(Level);
9521 data << uint64(Favor);
9525 data << uint32(RoomPlacementBudget);
9526 data << *EntityGUID;
9527}
9528
9529void HousingPlayerHouseData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9530{
9531 WriteUpdate(_changesMask, data, receiver, owner, false);
9532}
9533
9534void HousingPlayerHouseData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
9535{
9536 data.WriteBits(changesMask.GetBlock(0), 11);
9537
9538 data.FlushBits();
9539 if (changesMask[0])
9540 {
9541 if (changesMask[1])
9542 {
9543 data << *BnetAccount;
9544 }
9545 if (changesMask[2])
9546 {
9547 data << *CosmeticOwner;
9548 }
9549 if (changesMask[3])
9550 {
9551 data << int32(PlotIndex);
9552 }
9553 if (changesMask[4])
9554 {
9555 data << uint32(Level);
9556 }
9557 if (changesMask[5])
9558 {
9559 data << uint64(Favor);
9560 }
9561 if (changesMask[6])
9562 {
9564 }
9565 if (changesMask[7])
9566 {
9568 }
9569 if (changesMask[8])
9570 {
9572 }
9573 if (changesMask[9])
9574 {
9575 data << uint32(RoomPlacementBudget);
9576 }
9577 if (changesMask[10])
9578 {
9579 data << *EntityGUID;
9580 }
9581 }
9582}
9583
9598
9599void HousingCornerstoneData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, GameObject const* owner) const
9600{
9601 data << uint64(Cost);
9602 data << int32(PlotIndex);
9603}
9604
9605void HousingCornerstoneData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, GameObject const* owner) const
9606{
9607 WriteUpdate(_changesMask, data, receiver, owner, false);
9608}
9609
9610void HousingCornerstoneData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, GameObject const* owner, bool ignoreNestedChangesMask) const
9611{
9612 data.WriteBits(changesMask.GetBlock(0), 3);
9613
9614 data.FlushBits();
9615 if (changesMask[0])
9616 {
9617 if (changesMask[1])
9618 {
9619 data << uint64(Cost);
9620 }
9621 if (changesMask[2])
9622 {
9623 data << int32(PlotIndex);
9624 }
9625 }
9626}
9627
9634
9635void PlayerHouseInfo::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9636{
9637 data << HouseGUID;
9638 data << OwnerGUID;
9639}
9640
9641void PlayerHouseInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9642{
9643 data << HouseGUID;
9644 data << OwnerGUID;
9645}
9646
9648{
9649 return HouseGUID == right.HouseGUID
9650 && OwnerGUID == right.OwnerGUID;
9651}
9652
9653void HousingOwner::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9654{
9655 data << BnetAccountGUID;
9656 data << PlayerGUID;
9657}
9658
9659void HousingOwner::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9660{
9661 data << BnetAccountGUID;
9662 data << PlayerGUID;
9663}
9664
9666{
9667 return BnetAccountGUID == right.BnetAccountGUID
9668 && PlayerGUID == right.PlayerGUID;
9669}
9670
9671void NeighborhoodMirrorData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9672{
9673 data.WriteBits(Name->size() + 1, 8);
9674 data << *OwnerGUID;
9675 data << uint32(Houses.size());
9676 data << uint32(Managers.size());
9678 for (uint32 i = 0; i < Houses.size(); ++i)
9679 {
9680 Houses[i].WriteCreate(data, receiver, owner);
9681 }
9682 for (uint32 i = 0; i < Managers.size(); ++i)
9683 {
9684 Managers[i].WriteCreate(data, receiver, owner);
9685 }
9686}
9687
9688void NeighborhoodMirrorData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9689{
9690 WriteUpdate(_changesMask, data, receiver, owner, false);
9691}
9692
9693void NeighborhoodMirrorData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
9694{
9695 data.WriteBits(changesMask.GetBlock(0), 5);
9696
9697 if (changesMask[0])
9698 {
9699 if (changesMask[1])
9700 {
9701 if (!ignoreNestedChangesMask)
9702 Houses.WriteUpdateMask(data);
9703 else
9705 }
9706 if (changesMask[2])
9707 {
9708 if (!ignoreNestedChangesMask)
9710 else
9712 }
9713 }
9714 data.FlushBits();
9715 if (changesMask[0])
9716 {
9717 if (changesMask[1])
9718 {
9719 for (uint32 i = 0; i < Houses.size(); ++i)
9720 {
9721 if (Houses.HasChanged(i) || ignoreNestedChangesMask)
9722 {
9723 Houses[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9724 }
9725 }
9726 }
9727 if (changesMask[2])
9728 {
9729 for (uint32 i = 0; i < Managers.size(); ++i)
9730 {
9731 if (Managers.HasChanged(i) || ignoreNestedChangesMask)
9732 {
9733 Managers[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9734 }
9735 }
9736 }
9737 }
9738 data.FlushBits();
9739 if (changesMask[0])
9740 {
9741 if (changesMask[3])
9742 {
9743 data.WriteBits(Name->size() + 1, 8);
9744 }
9745 if (changesMask[4])
9746 {
9747 data << *OwnerGUID;
9748 }
9749 if (changesMask[3])
9750 {
9752 }
9753 }
9754}
9755
9764
9765void MirroredMeshObjectData::WriteCreate(ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9766{
9767 data << *AttachParentGUID;
9768 data << *PositionLocalSpace;
9769 data << float(RotationLocalSpace->x);
9770 data << float(RotationLocalSpace->y);
9771 data << float(RotationLocalSpace->z);
9772 data << float(RotationLocalSpace->w);
9773 data << float(ScaleLocalSpace);
9774 data << uint8(AttachmentFlags);
9775}
9776
9777void MirroredMeshObjectData::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9778{
9779 Mask changesMask = _changesMask;
9780 if (ignoreChangesMask)
9781 changesMask.SetAll();
9782
9783 data.WriteBits(changesMask.GetBlock(0), 6);
9784
9785 data.FlushBits();
9786 if (changesMask[0])
9787 {
9788 if (changesMask[1])
9789 {
9790 data << *AttachParentGUID;
9791 }
9792 if (changesMask[2])
9793 {
9794 data << *PositionLocalSpace;
9795 }
9796 if (changesMask[3])
9797 {
9798 data << float(RotationLocalSpace->x);
9799 data << float(RotationLocalSpace->y);
9800 data << float(RotationLocalSpace->z);
9801 data << float(RotationLocalSpace->w);
9802 }
9803 if (changesMask[4])
9804 {
9805 data << float(ScaleLocalSpace);
9806 }
9807 if (changesMask[5])
9808 {
9809 data << uint8(AttachmentFlags);
9810 }
9811 }
9812}
9813
9823
9824void MirroredPositionData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9825{
9826 PositionData->WriteCreate(data, receiver, owner);
9827}
9828
9829void MirroredPositionData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
9830{
9831 WriteUpdate(_changesMask, data, receiver, owner, false);
9832}
9833
9834void MirroredPositionData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
9835{
9836 data.WriteBits(changesMask.GetBlock(0), 2);
9837
9838 data.FlushBits();
9839 if (changesMask[0])
9840 {
9841 if (changesMask[1])
9842 {
9843 PositionData->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
9844 }
9845 }
9846}
9847
9853
9854void PlayerMirrorHouse::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
9855{
9856 data << HouseGUID;
9857 data << NeighborhoodGUID;
9858 data << uint32(Level);
9859 data << uint32(Favor);
9860 data << uint32(InitiativeFavor);
9861 data << int32(MapID);
9862 data << int32(PlotID);
9863}
9864
9865void PlayerMirrorHouse::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
9866{
9867 data << HouseGUID;
9868 data << NeighborhoodGUID;
9869 data << uint32(Level);
9870 data << uint32(Favor);
9871 data << uint32(InitiativeFavor);
9872 data << int32(MapID);
9873 data << int32(PlotID);
9874}
9875
9877{
9878 return HouseGUID == right.HouseGUID
9880 && Level == right.Level
9881 && Favor == right.Favor
9883 && MapID == right.MapID
9884 && PlotID == right.PlotID;
9885}
9886
9887void NeighborhoodCharterSignature::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
9888{
9889 data << Guid;
9890}
9891
9892void NeighborhoodCharterSignature::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
9893{
9894 data << Guid;
9895}
9896
9898{
9899 return Guid == right.Guid;
9900}
9901
9902void NeighborhoodCharter::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
9903{
9904 data << int32(Field_0);
9905 data << int32(Field_4);
9906 data << uint32(Signatures.size());
9907 for (uint32 i = 0; i < Signatures.size(); ++i)
9908 {
9909 Signatures[i].WriteCreate(data, receiver, owner);
9910 }
9911 data.WriteBits(Name.size() + 1, 8);
9913}
9914
9915void NeighborhoodCharter::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
9916{
9917 data << int32(Field_0);
9918 data << int32(Field_4);
9919 data << uint32(Signatures.size());
9920 for (uint32 i = 0; i < Signatures.size(); ++i)
9921 {
9922 Signatures[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
9923 }
9924 data.FlushBits();
9925 data.WriteBits(Name.size() + 1, 8);
9927}
9928
9930{
9931 return Signatures == right.Signatures
9932 && Field_0 == right.Field_0
9933 && Field_4 == right.Field_4
9934 && Name == right.Name;
9935}
9936
9937void NeighborhoodOwnershipTransfer::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
9938{
9939 data << NeighborhoodGUID;
9940 data << CurrentOwnerGUID;
9941 data.WriteBits(NeighborhoodName.size() + 1, 8);
9942 data.FlushBits();
9944}
9945
9946void NeighborhoodOwnershipTransfer::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
9947{
9948 data << NeighborhoodGUID;
9949 data << CurrentOwnerGUID;
9950 data.WriteBits(NeighborhoodName.size() + 1, 8);
9951 data.FlushBits();
9953}
9954
9961
9962void PlayerHouseInfoComponentData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
9963{
9964 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
9965 {
9966 data << uint32(Field_8.size());
9967 }
9968 data << uint32(Houses.size());
9969 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
9970 {
9971 data << uint32(Field_88.size());
9972 data << uint32(Field_C0.size());
9973 data << uint32(Field_F8.size());
9974 data << uint8(EditorMode);
9975 data << *CurrentHouse;
9976 for (uint32 i = 0; i < Field_8.size(); ++i)
9977 {
9978 data << Field_8[i];
9979 }
9980 }
9981 for (uint32 i = 0; i < Houses.size(); ++i)
9982 {
9983 Houses[i].WriteCreate(data, receiver, owner);
9984 }
9985 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
9986 {
9987 for (uint32 i = 0; i < Field_88.size(); ++i)
9988 {
9989 data << Field_88[i];
9990 }
9991 for (uint32 i = 0; i < Field_C0.size(); ++i)
9992 {
9993 data << Field_C0[i];
9994 }
9995 for (uint32 i = 0; i < Field_F8.size(); ++i)
9996 {
9997 data << Field_F8[i];
9998 }
9999 Charter->WriteCreate(data, receiver, owner);
10000 NeighborhoodOwnershipTransfer->WriteCreate(data, receiver, owner);
10001 }
10002}
10003
10005{
10006 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
10007 allowedMaskForTarget |= std::array<uint32, 1>{ 0x000003FAu };
10008}
10009
10011{
10012 PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
10013}
10014
10016{
10017 Mask allowedMaskForTarget({ 0x00000005u });
10018 PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
10019 changesMask &= allowedMaskForTarget;
10020}
10021
10022void PlayerHouseInfoComponentData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
10023{
10024 Mask allowedMaskForTarget({ 0x00000005u });
10025 PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
10026 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
10027}
10028
10029void PlayerHouseInfoComponentData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Player const* owner, bool ignoreNestedChangesMask) const
10030{
10031 data.WriteBits(changesMask.GetBlock(0), 10);
10032
10033 if (changesMask[0])
10034 {
10035 if (changesMask[1])
10036 {
10037 if (!ignoreNestedChangesMask)
10039 else
10041 }
10042 if (changesMask[2])
10043 {
10044 if (!ignoreNestedChangesMask)
10045 Houses.WriteUpdateMask(data);
10046 else
10048 }
10049 if (changesMask[3])
10050 {
10051 if (!ignoreNestedChangesMask)
10053 else
10055 }
10056 if (changesMask[4])
10057 {
10058 if (!ignoreNestedChangesMask)
10060 else
10062 }
10063 if (changesMask[5])
10064 {
10065 if (!ignoreNestedChangesMask)
10067 else
10069 }
10070 }
10071 data.FlushBits();
10072 if (changesMask[0])
10073 {
10074 if (changesMask[1])
10075 {
10076 for (uint32 i = 0; i < Field_8.size(); ++i)
10077 {
10078 if (Field_8.HasChanged(i) || ignoreNestedChangesMask)
10079 {
10080 data << Field_8[i];
10081 }
10082 }
10083 }
10084 if (changesMask[2])
10085 {
10086 for (uint32 i = 0; i < Houses.size(); ++i)
10087 {
10088 if (Houses.HasChanged(i) || ignoreNestedChangesMask)
10089 {
10090 Houses[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
10091 }
10092 }
10093 }
10094 if (changesMask[3])
10095 {
10096 for (uint32 i = 0; i < Field_88.size(); ++i)
10097 {
10098 if (Field_88.HasChanged(i) || ignoreNestedChangesMask)
10099 {
10100 data << Field_88[i];
10101 }
10102 }
10103 }
10104 if (changesMask[4])
10105 {
10106 for (uint32 i = 0; i < Field_C0.size(); ++i)
10107 {
10108 if (Field_C0.HasChanged(i) || ignoreNestedChangesMask)
10109 {
10110 data << Field_C0[i];
10111 }
10112 }
10113 }
10114 if (changesMask[5])
10115 {
10116 for (uint32 i = 0; i < Field_F8.size(); ++i)
10117 {
10118 if (Field_F8.HasChanged(i) || ignoreNestedChangesMask)
10119 {
10120 data << Field_F8[i];
10121 }
10122 }
10123 }
10124 if (changesMask[7])
10125 {
10126 data << uint8(EditorMode);
10127 }
10128 if (changesMask[9])
10129 {
10130 data << *CurrentHouse;
10131 }
10132 if (changesMask[6])
10133 {
10134 Charter->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
10135 }
10136 if (changesMask[8])
10137 {
10138 NeighborhoodOwnershipTransfer->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
10139 }
10140 }
10141}
10142
10156
10157void HousingStorageData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
10158{
10159 WriteMapFieldCreate(Decor, data, receiver, owner);
10160 data << uint32(DecorMaxOwnedCount);
10161}
10162
10163void HousingStorageData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, BaseEntity const* owner) const
10164{
10165 WriteUpdate(_changesMask, data, receiver, owner, false);
10166}
10167
10168void HousingStorageData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, BaseEntity const* owner, bool ignoreNestedChangesMask) const
10169{
10170 data.WriteBits(changesMask.GetBlock(0), 3);
10171
10172 data.FlushBits();
10173 if (changesMask[0])
10174 {
10175 if (changesMask[1])
10176 {
10177 WriteMapFieldUpdate(Decor, ignoreNestedChangesMask, data, receiver, owner);
10178 }
10179 if (changesMask[2])
10180 {
10181 data << uint32(DecorMaxOwnedCount);
10182 }
10183 }
10184}
10185
10192
10193void HousingFixtureData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
10194{
10195 data << int32(ExteriorComponentID);
10198 data << *HouseGUID;
10199 data << *AttachParentGUID;
10200 data << *Guid;
10201 data << *GameObjectGUID;
10203 data << uint8(Field_59);
10204 data << uint8(Size);
10205}
10206
10207void HousingFixtureData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Object const* owner) const
10208{
10209 WriteUpdate(_changesMask, data, receiver, owner, false);
10210}
10211
10212void HousingFixtureData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Object const* owner, bool ignoreNestedChangesMask) const
10213{
10214 data.WriteBits(changesMask.GetBlock(0), 11);
10215
10216 data.FlushBits();
10217 if (changesMask[0])
10218 {
10219 if (changesMask[1])
10220 {
10221 data << int32(ExteriorComponentID);
10222 }
10223 if (changesMask[2])
10224 {
10226 }
10227 if (changesMask[3])
10228 {
10230 }
10231 if (changesMask[4])
10232 {
10233 data << *HouseGUID;
10234 }
10235 if (changesMask[5])
10236 {
10237 data << *AttachParentGUID;
10238 }
10239 if (changesMask[6])
10240 {
10241 data << *Guid;
10242 }
10243 if (changesMask[7])
10244 {
10245 data << *GameObjectGUID;
10246 }
10247 if (changesMask[8])
10248 {
10250 }
10251 if (changesMask[9])
10252 {
10253 data << uint8(Field_59);
10254 }
10255 if (changesMask[10])
10256 {
10257 data << uint8(Size);
10258 }
10259 }
10260}
10261
10276
10277void PlayerInitiativeInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
10278{
10279 data << int64(RemainingDuration);
10280 data << int32(CurrentInitiativeID);
10281 data << int32(CurrentMilestoneID);
10282 data << int32(CurrentCycleID);
10283 data << float(ProgressRequired);
10284 data << float(CurrentProgress);
10285 data << float(PlayerTotalContribution);
10286}
10287
10288void PlayerInitiativeInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
10289{
10290 Mask changesMask = _changesMask;
10291 if (ignoreChangesMask)
10292 changesMask.SetAll();
10293
10294 data.WriteBits(changesMask.GetBlock(0), 7);
10295
10296 data.FlushBits();
10297 if (changesMask[0])
10298 {
10299 data << int64(RemainingDuration);
10300 }
10301 if (changesMask[1])
10302 {
10303 data << int32(CurrentInitiativeID);
10304 }
10305 if (changesMask[2])
10306 {
10307 data << int32(CurrentMilestoneID);
10308 }
10309 if (changesMask[3])
10310 {
10311 data << int32(CurrentCycleID);
10312 }
10313 if (changesMask[4])
10314 {
10315 data << float(ProgressRequired);
10316 }
10317 if (changesMask[5])
10318 {
10319 data << float(CurrentProgress);
10320 }
10321 if (changesMask[6])
10322 {
10323 data << float(PlayerTotalContribution);
10324 }
10325}
10326
10338
10339void PlayerInitiativeTaskInfo::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
10340{
10341 data << int32(TaskID);
10342 data << int32(TimesCompleted);
10343}
10344
10345void PlayerInitiativeTaskInfo::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
10346{
10347 Mask changesMask = _changesMask;
10348 if (ignoreChangesMask)
10349 changesMask.SetAll();
10350
10351 data.WriteBits(changesMask.GetBlock(0), 2);
10352
10353 data.FlushBits();
10354 if (changesMask[0])
10355 {
10356 data << int32(TaskID);
10357 }
10358 if (changesMask[1])
10359 {
10360 data << int32(TimesCompleted);
10361 }
10362}
10363
10370
10371void NICompletedMilestoneEntry::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
10372{
10373 data << int64(AwardDate);
10374 data << uint32(MilestoneID);
10375}
10376
10377void NICompletedMilestoneEntry::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
10378{
10379 data << int64(AwardDate);
10380 data << uint32(MilestoneID);
10381}
10382
10384{
10385 return AwardDate == right.AwardDate
10386 && MilestoneID == right.MilestoneID;
10387}
10388
10389void NICompletedInitiativesEntry::WriteCreate(ByteBuffer& data, Player const* receiver, Player const* owner) const
10390{
10391 data << uint32(InitiativeID);
10392 data << uint32(CompletedMilestones.size());
10393 for (uint32 i = 0; i < CompletedMilestones.size(); ++i)
10394 {
10395 CompletedMilestones[i].WriteCreate(data, receiver, owner);
10396 }
10397 data.WriteBit(Completed);
10398 data.FlushBits();
10399}
10400
10401void NICompletedInitiativesEntry::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, Player const* owner) const
10402{
10403 data << uint32(InitiativeID);
10404 data << uint32(CompletedMilestones.size());
10405 for (uint32 i = 0; i < CompletedMilestones.size(); ++i)
10406 {
10407 CompletedMilestones[i].WriteUpdate(ignoreChangesMask, data, receiver, owner);
10408 }
10409 data.FlushBits();
10410 data.FlushBits();
10411 data.WriteBit(Completed);
10412 data.FlushBits();
10413}
10414
10416{
10417 return Completed == right.Completed
10419 && InitiativeID == right.InitiativeID;
10420}
10421
10422void PlayerInitiativeComponentData::WriteCreate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
10423{
10424 data << *NeighborhoodGUID;
10425 InitiativeInfo->WriteCreate(data, receiver, owner);
10426 data << uint32(CompletedTasks.size());
10427 data << uint32(CompletedInitiatives.size());
10428 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
10429 {
10430 WriteSetFieldCreate(Houses, data, receiver, owner);
10431 }
10432 for (uint32 i = 0; i < CompletedTasks.size(); ++i)
10433 {
10434 CompletedTasks[i].WriteCreate(data, receiver, owner);
10435 }
10436 for (uint32 i = 0; i < CompletedInitiatives.size(); ++i)
10437 {
10438 CompletedInitiatives[i].WriteCreate(data, receiver, owner);
10439 }
10440}
10441
10443{
10444 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
10445 allowedMaskForTarget |= std::array<uint32, 1>{ 0x00000020u };
10446}
10447
10449{
10450 PlayerInitiativeComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
10451}
10452
10454{
10455 Mask allowedMaskForTarget({ 0x0000001Fu });
10456 PlayerInitiativeComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
10457 changesMask &= allowedMaskForTarget;
10458}
10459
10460void PlayerInitiativeComponentData::WriteUpdate(EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, ByteBuffer& data, Player const* receiver, Player const* owner) const
10461{
10462 Mask allowedMaskForTarget({ 0x0000001Fu });
10463 PlayerInitiativeComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
10464 WriteUpdate(_changesMask & allowedMaskForTarget, data, receiver, owner, false);
10465}
10466
10467void PlayerInitiativeComponentData::WriteUpdate(Mask const& changesMask, ByteBuffer& data, Player const* receiver, Player const* owner, bool ignoreNestedChangesMask) const
10468{
10469 data.WriteBits(changesMask.GetBlock(0), 6);
10470
10471 if (changesMask[0])
10472 {
10473 if (changesMask[1])
10474 {
10475 if (!ignoreNestedChangesMask)
10477 else
10479 }
10480 if (changesMask[2])
10481 {
10482 if (!ignoreNestedChangesMask)
10484 else
10486 }
10487 }
10488 data.FlushBits();
10489 if (changesMask[0])
10490 {
10491 if (changesMask[1])
10492 {
10493 for (uint32 i = 0; i < CompletedTasks.size(); ++i)
10494 {
10495 if (CompletedTasks.HasChanged(i) || ignoreNestedChangesMask)
10496 {
10497 CompletedTasks[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
10498 }
10499 }
10500 }
10501 if (changesMask[2])
10502 {
10503 for (uint32 i = 0; i < CompletedInitiatives.size(); ++i)
10504 {
10505 if (CompletedInitiatives.HasChanged(i) || ignoreNestedChangesMask)
10506 {
10507 CompletedInitiatives[i].WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
10508 }
10509 }
10510 }
10511 if (changesMask[3])
10512 {
10513 data << *NeighborhoodGUID;
10514 }
10515 if (changesMask[4])
10516 {
10517 InitiativeInfo->WriteUpdate(ignoreNestedChangesMask, data, receiver, owner);
10518 }
10519 if (changesMask[5])
10520 {
10521 WriteSetFieldUpdate(Houses, ignoreNestedChangesMask, data, receiver, owner);
10522 }
10523 }
10524}
10525
10535
10536}
10537
10538#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
10539#pragma GCC diagnostic pop
10540#else
10541#pragma warning(pop)
10542#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:134
PathType
PlayerFlags
Definition Player.h:519
BagSlotFlags
Definition Player.h:864
PlayerFlagsEx
Definition Player.h:557
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:158
void FlushBits()
Definition ByteBuffer.h:141
void WriteBits(uint64 value, int32 bits)
Definition ByteBuffer.h:185
constexpr bool HasFlag(T flag) const
Definition EnumFlag.h:106
Definition Item.h:179
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:635
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, 102, 111 > WatchedFactionIndex
UpdateField< float, 70, 80 > SpellCritPercentage
UpdateField< uint8, 102, 132 > NumBankSlots
MapUpdateField< int32, UF::TraitConfig, 134, 146 > TraitConfigs
DynamicUpdateField< uint64, 0, 7 > KnownTitles
DynamicUpdateField< UF::PlayerDataElement, 0, 9 > AccountDataElements
DynamicUpdateField< uint32, 0, 15 > HeirloomFlags
UpdateField< bool, 0, 3 > BankAutoSortDisabled
UpdateFieldArray< int32, 32, 332, 333 > CombatRatings
UpdateField< uint16, 102, 108 > TodayHonorableKills
UpdateField< float, 70, 94 > ModPeriodicHealingDonePercent
UpdateField< WorldPackets::MythicPlus::DungeonScoreData, 134, 145 > DungeonScore
UpdateField< float, 70, 90 > PvpPowerHealing
UpdateField< int32, 102, 112 > MaxLevel
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< uint32, 4, 365, 366 > NoReagentCostMask
UpdateField< int32, 134, 141 > TimerunningSeasonID
UpdateFieldArray< DynamicUpdateFieldBase< uint32 >, 1, 52, 53 > ResearchSiteProgress
UpdateField< ObjectGuid, 32, 57 > SummonedBattlePetGUID
UpdateField< uint32, 134, 143 > WeeklyRewardsPeriodSinceOrigin
UpdateField< float, 134, 150 > ItemUpgradeHighFingerWatermark
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
DynamicUpdateField< UF::BankTabSettings, 32, 48 > CharacterBankTabSettings
UpdateField< int32, 134, 142 > TransportServerTime
UpdateField< float, 32, 68 > OffhandExpertise
UpdateField< float, 134, 152 > ItemUpgradeHighTrinketWatermark
DynamicUpdateField< uint32, 0, 28 > HouseTypes
UpdateFieldArray< int32, 7, 271, 279 > ModDamageDoneNeg
UpdateFieldArray< int32, 7, 271, 272 > ModDamageDonePos
UpdateField< uint8, 102, 125 > NumBackpackSlots
DynamicUpdateField< int32, 32, 41 > DisabledSpells
UpdateFieldArray< float, 17, 379, 380 > ItemUpgradeHighWatermark
UpdateField< float, 70, 77 > CritPercentage
UpdateFieldArray< uint32, 12, 307, 308 > BuybackPrice
DynamicUpdateField< uint32, 0, 24 > HouseRooms
UpdateField< UF::TransmogOutfitData, 134, 160 > ViewedOutfit
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
UpdateField< uint64, 134, 153 > LootHistoryInstanceID
UpdateField< float, 102, 118 > UiSpellHitModifier
DynamicUpdateField< int32, 0, 11 > DailyQuestsCompleted
UpdateFieldArray< float, 7, 271, 286 > ModDamageDonePercent
UpdateFieldArray< int64, 12, 307, 320 > BuybackTimestamp
DynamicUpdateField< int32, 0, 12 > Field_1328
UpdateField< bool, 0, 6 > HasPerksProgramPendingReward
UpdateField< uint8, 134, 155 > RequiredMountCapabilityFlags
UpdateField< int32, 70, 92 > ModHealingDonePos
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
UpdateFieldArray< int32, 2, 370, 371 > ProfessionSkillLine
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
UpdateField< UF::SkillInfo, 32, 63 > Skill
UpdateField< int32, 102, 129 > Honor
UpdateField< float, 70, 73 > DodgePercentage
UpdateField< UF::TransmogOutfitMetadata, 134, 161 > TransmogMetadata
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, 134, 148 > ItemUpgradeHighOnehandWeaponItemID
UpdateField< int32, 32, 60 > XP
UpdateField< float, 70, 78 > RangedCritPercentage
UpdateField< float, 102, 120 > ModPetHaste
DynamicUpdateField< uint32, 0, 21 > RuneforgePowers
UpdateField< bool, 0, 4 > SortBagsRightToLeft
DynamicUpdateField< UF::CraftingOrder, 32, 42 > CraftingOrders
UpdateField< uint32, 134, 147 > ActiveCombatTraitConfigID
UpdateField< uint16, 102, 109 > YesterdayHonorableKills
UpdateFieldArray< ObjectGuid, 105, 162, 163 > InvSlots
UpdateField< uint16, 102, 127 > LootSpecID
DynamicUpdateField< UF::RecipeProgressionInfo, 32, 38 > RecipeProgression
UpdateField< float, 70, 76 > ParryPercentageFromAttribute
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
UpdateField< int8, 102, 121 > JailersTowerLevelMax
UpdateField< uint8, 102, 104 > MultiActionBars
DynamicUpdateField< uint32, 0, 22 > TransmogIllusions
DynamicUpdateField< UF::WeeklySpellUse, 32, 46 > WeeklySpellUses
DynamicUpdateField< UF::BankTabSettings, 32, 49 > AccountBankTabSettings
DynamicUpdateField< UF::SpellPctPVPModByLabel, 32, 34 > SpellPctModPVPByLabel
UpdateFieldArray< float, 7, 271, 293 > ModHealingDonePercent
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
UpdateField< int32, 102, 113 > ScalingPlayerLevelDelta
UpdateField< uint32, 102, 110 > LifetimeHonorableKills
DynamicUpdateField< int32, 0, 14 > Heirlooms
UpdateField< float, 70, 98 > OverrideAPBySpellPowerPercent
UpdateField< int32, 134, 140 > UiChromieTimeExpansionID
MapUpdateField< uint32, UF::TransmogOutfitData, 134, 158 > TransmogOutfits
UpdateField< float, 70, 85 > Avoidance
UpdateField< float, 70, 71 > CombatRatingExpertise
UpdateField< int32, 134, 149 > ItemUpgradeHighFingerItemID
UpdateField< uint8, 102, 124 > AuraVision
UpdateField< ObjectGuid, 32, 56 > FarsightObject
UpdateFieldArray< float, 3, 300, 304 > WeaponAtkSpeedMultipliers
UpdateField< int32, 70, 81 > ShieldBlock
UpdateField< uint8, 102, 106 > NumRespecs
UpdateField< float, 32, 67 > MainhandExpertise
UpdateField< bool, 0, 5 > InsertItemsLeftToRight
UpdateField< int32, 102, 119 > HomeRealmTimeOffset
DynamicUpdateField< UF::MultiFloorExplore, 32, 37 > MultiFloorExploration
UpdateField< float, 70, 86 > Sturdiness
UpdateField< int16, 134, 144 > DEBUGSoulbindConduitRank
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
UpdateFieldArray< float, 3, 300, 301 > WeaponDmgMultipliers
UpdateField< int32, 134, 151 > ItemUpgradeHighTrinketItemID
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< TaggedPosition< Position::XY >, 0, 1 > Extents
UpdateField< TaggedPosition< Position::XY >, 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< 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::ScaleCurve, 0, 4 > OverrideMoveCurveY
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< UF::ScaleCurve, 0, 6 > Unk1205Curve
UpdateField< uint32, 0, 27 > Flags
UpdateField< float, 0, 17 > BoundsRadius2D
OptionalUpdateField< UF::ForceSetAreaTriggerPositionAndRotation, 32, 35 > ForcedPositionAndRotation
UpdateField< float, 32, 34 > Facing
UpdateField< UF::ScaleCurve, 0, 5 > OverrideMoveCurveZ
UpdateField< uint8, 32, 37 > ShapeType
UpdateField< uint32, 0, 13 > TimeToTargetUnk1205Curve
UpdateField< uint32, 0, 12 > TimeToTargetPos
UpdateField< float, 0, 25 > ZOffset
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< UF::ScaleCurve, 0, 1 > OverrideScaleCurve
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
UpdateField< UF::ScaleCurve, 0, 3 > OverrideMoveCurveX
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
UpdateField< uint32, 0, 18 > DecalPropertiesID
UpdateField< UF::ScaleCurve, 0, 2 > ExtraScaleCurve
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< 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
UpdateField< bool, 0, 1 > Catmullrom
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
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 WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Item const *owner) 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 WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
uint32 ChromieTimeExpansionMask
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
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 ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< uint32, -1, 4 > Quantity
UpdateField< int32, -1, 5 > ReagentQuality
UpdateField< int32, -1, 3 > ItemID
UpdateField< ObjectGuid, -1, 2 > OwnerGUID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< ObjectGuid, -1, 1 > ItemGUID
OptionalUpdateField< uint8, -1, 6 > DataSlotIndex
UpdateField< uint64, -1, 0 > 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
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 WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
bool operator==(DecorDyeSlots const &right) const
UpdateField< ObjectGuid, -1, 0 > HouseGUID
void WriteCreate(ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
UpdateField< uint8, -1, 2 > SourceType
UpdateField< std::string, -1, 3 > SourceValue
OptionalUpdateField< UF::DecorDyeSlots, -1, 1 > 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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
std::vector< ObjectGuid > PlayersEligibleForRewards
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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AreaTrigger const *owner) const
bool operator==(GameObjectAssistActionData const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, GameObject const *owner) const
void WriteUpdate(bool ignoreChangesMask, 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, 13 > ParentRotation
UpdateField< ObjectGuid, 0, 10 > CreatedBy
UpdateField< uint32, 0, 7 > SpawnTrackingStateAnimID
OptionalUpdateField< UF::GameObjectAssistActionData, 0, 25 > AssistActionData
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, GameObject const *owner) const
UpdateField< uint32, 0, 18 > ArtKit
UpdateField< uint32, 0, 5 > SpellVisualID
UpdateField< ObjectGuid, 0, 11 > GuildGUID
UpdateField< uint32, 0, 22 > UiWidgetItemID
DynamicUpdateField< int32, 0, 3 > WorldEffects
UpdateField< std::vector< uint32 >, 0, 1 > StateWorldEffectIDs
UpdateField< uint32, 0, 24 > UiWidgetItemCount
UpdateField< uint32, 0, 19 > CustomParam
UpdateField< int32, 0, 20 > Level
UpdateField< uint8, 0, 17 > PercentHealth
UpdateField< uint32, 0, 9 > StateWorldEffectsQuestObjectiveID
UpdateField< uint32, 0, 6 > StateSpellVisualID
UpdateField< uint32, 0, 8 > SpawnTrackingStateAnimKitID
UpdateField< uint32, 0, 23 > UiWidgetItemQuality
UpdateField< uint32, 0, 21 > AnimGroupInstance
DynamicUpdateField< int32, 0, 2 > EnableDoodadSets
UpdateField< int8, 0, 15 > State
UpdateField< int32, 0, 14 > FactionTemplate
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, 5 > 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
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 WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
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
UpdateField< int32, 0, 6 > FloorIndex
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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
int64 LeaverExpirationTime
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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
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 WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player 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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(NICompletedMilestoneEntry const &right) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) 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
void WriteUpdate(bool ignoreChangesMask, 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 WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
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 ignoreChangesMask, 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< 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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) 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, 3 > Field_88
UpdateField< uint8, 0, 7 > EditorMode
DynamicUpdateField< ObjectGuid, 0, 4 > Field_C0
UpdateField< ObjectGuid, 0, 9 > CurrentHouse
void WriteCreate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
UpdateField< UF::NeighborhoodCharter, 0, 6 > Charter
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Player const *owner) const
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void WriteCreate(ByteBuffer &data, Player const *receiver, BaseEntity const *owner) const
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) 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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(Research const &right) 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
UpdateField< uint32, 0, 3 > ParameterCurve
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< uint32, 0, 2 > StartTimeOffset
UpdateField< bool, 0, 1 > OverrideActive
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 WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Object 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
bool operator==(SpellFlatModByLabel const &right) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(SpellFlatPVPModByLabel const &right) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
bool operator==(SpellPctModByLabel const &right) 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
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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, 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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
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
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Unit const *owner) const
UpdateField< float, 32, 62 > MaxDamage
UpdateField< bool, 0, 1 > Field_314
UpdateField< int32, 96, 99 > RangedAttackPowerModSupport
UpdateField< int32, 32, 45 > FactionTemplate
UpdateField< uint64, 0, 24 > BattlePetDBID
UpdateField< int32, 96, 115 > BattlePetCompanionExperience
UpdateField< uint8, 64, 85 > SheatheState
UpdateField< std::vector< uint32 >, 0, 2 > StateWorldEffectIDs
UpdateField< uint32, 32, 51 > RangedAttackRoundBaseTime
UpdateField< int32, 96, 102 > RangedWeaponAttackPower
UpdateField< int32, 64, 81 > CreatedBySpell
UpdateField< uint8, 0, 29 > ClassId
UpdateFieldArray< int32, 10, 137, 138 > Power
UpdateFieldArray< int32, 7, 206, 214 > BonusResistanceMods
UpdateField< int32, 64, 82 > EmoteState
UpdateField< float, 32, 53 > CombatReach
UpdateField< uint8, 64, 67 > PetTalentPoints
UpdateField< float, 32, 58 > NativeXDisplayScale
UpdateFieldArray< int32, 10, 137, 148 > MaxPower
UpdateField< float, 96, 108 > MaxHealthModifier
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< int32, 96, 110 > MinItemLevelCutoff
UpdateField< int32, 128, 130 > MaxHealthModifierFlatPos
UpdateField< uint32, 128, 131 > SilencedSchoolMask
UpdateField< uint32, 0, 12 > StateWorldEffectsQuestObjectiveID
UpdateField< int32, 96, 122 > PerksVendorItemID
UpdateField< int32, 32, 43 > ScalingLevelDelta
DynamicUpdateField< int32, 0, 4 > WorldEffects
UpdateField< int32, 64, 83 > BaseMana
UpdateField< uint32, 32, 47 > Flags2
UpdateField< float, 32, 63 > MinOffHandDamage
UpdateField< float, 32, 52 > BoundingRadius
UpdateField< uint8, 64, 86 > PvpFlags
UpdateFieldArray< int32, 5, 185, 201 > StatSupportBuff
UpdateField< int32, 96, 125 > FlightCapabilityID
UpdateFieldArray< uint32, 2, 182, 183 > AttackRoundBaseTime
UpdateField< uint32, 128, 132 > CurrentAreaID
UpdateField< uint8, 32, 56 > OverrideCreatureType
UpdateField< int32, 32, 60 > CosmeticMountDisplayID
DynamicUpdateField< ObjectGuid, 0, 5 > ChannelObjects
UpdateField< uint8, 0, 28 > Race
UpdateField< uint8, 0, 31 > Sex
UpdateField< int32, 64, 93 > AttackPowerModSupport
UpdateField< float, 64, 75 > ModCastingSpeedNeg
UpdateField< int32, 32, 41 > ScalingLevelMin
UpdateField< int32, 96, 112 > MaxItemLevel
UpdateField< int32, 32, 42 > ScalingLevelMax
void WriteUpdate(EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, ByteBuffer &data, Player const *receiver, Unit const *owner) const
UpdateField< ObjectGuid, 0, 18 > SummonedBy
UpdateField< int8, 0, 26 > SpellEmpowerStage
UpdateField< uint32, 0, 10 > StateAnimID
UpdateField< float, 128, 133 > NameplateDistanceMod
UpdateField< int32, 96, 127 > DriveCapabilityID
UpdateField< int32, 128, 129 > MaxHealthModifierFlatNeg
UpdateField< int32, 32, 57 > NativeDisplayID
UpdateField< int32, 64, 90 > AttackPowerModPos
UpdateField< uint32, 64, 72 > PetExperience
UpdateField< float, 96, 104 > Lifesteal
UpdateField< int32, 96, 97 > RangedAttackPowerModNeg
UpdateField< float, 96, 109 > HoverHeight
DynamicUpdateField< UF::PassiveSpellHistory, 0, 3 > PassiveSpells
UpdateField< float, 96, 98 > RangedAttackPowerMultiplier
UpdateField< int32, 64, 89 > AttackPower
UpdateField< int32, 64, 95 > RangedAttackPowerModPos
UpdateField< float, 32, 61 > MinDamage
UpdateField< int32, 96, 117 > InteractSpellID
UpdateField< ObjectGuid, 96, 124 > GuildGUID
UpdateField< int32, 96, 121 > LookAtControllerID
UpdateField< ObjectGuid, 128, 135 > NameplateAttachToGUID
UpdateFieldArray< UF::VisibleItem, 3, 178, 179 > VirtualItems
UpdateField< int32, 96, 101 > OffHandWeaponAttackPower
UpdateField< ObjectGuid, 0, 19 > CreatedBy
UpdateField< uint8, 32, 34 > DisplayPower
UpdateField< UF::UnitChannel, 0, 25 > ChannelData
UpdateField< int32, 96, 119 > LooksLikeMountID
UpdateField< ObjectGuid, 0, 17 > CharmedBy
UpdateField< ObjectGuid, 0, 21 > LookAtControllerTarget
UpdateField< int32, 96, 111 > MinItemLevel
UpdateField< uint8, 0, 30 > PlayerClassId
UpdateField< int32, 64, 84 > BaseHealth
UpdateField< uint32, 96, 116 > BattlePetCompanionNameTimestamp
UpdateField< uint8, 64, 68 > VisFlags
UpdateField< uint8, 32, 44 > ScalingFactionGroup
UpdateField< float, 96, 107 > ManaCostMultiplier
UpdateField< float, 96, 105 > MinRangedDamage
UpdateField< float, 128, 134 > AutoAttackRangeMod
UpdateField< int32, 96, 114 > WildBattlePetLevel
UpdateField< int32, 32, 59 > MountDisplayID
UpdateField< float, 64, 77 > ModHaste
UpdateField< uint32, 32, 35 > OverrideDisplayPowerID
UpdateField< float, 64, 65 > MaxOffHandDamage
UpdateField< int32, 96, 118 > ScaleDuration
UpdateField< ObjectGuid, 0, 15 > Summon
UpdateFieldArray< int32, 7, 206, 207 > Resistances
UpdateField< float, 64, 76 > ModSpellHaste
UpdateField< uint32, 0, 27 > SummonedByHomeRealm
void ClearChangesMask()
UpdateField< int32, 32, 38 > Level
UpdateField< int32, 96, 120 > LooksLikeCreatureID
UpdateField< uint8, 64, 87 > PetFlags
UpdateFieldArray< float, 10, 137, 158 > PowerRegenFlatModifier
UpdateField< uint32, 0, 8 > NpcFlags2
UpdateField< float, 96, 106 > MaxRangedDamage
UpdateField< uint8, 64, 66 > StandState
UpdateField< float, 64, 78 > ModRangedHaste
UpdateFieldArray< int32, 7, 206, 221 > ManaCostModifier
UpdateField< uint32, 64, 73 > PetNextLevelExperience
UpdateField< uint32, 32, 49 > Flags4
UpdateField< float, 64, 80 > ModTimeRate
UpdateField< int32, 32, 40 > ContentTuningID
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< int64, 32, 36 > Health
UpdateField< int32, 0, 13 > SpellOverrideNameID
UpdateField< int64, 32, 37 > MaxHealth
UpdateField< int32, 32, 39 > EffectiveLevel
UpdateField< int32, 64, 91 > AttackPowerModNeg
UpdateField< ObjectGuid, 0, 23 > BattlePetCompanionGUID
UpdateField< uint32, 0, 9 > StateSpellVisualID
UpdateField< float, 64, 92 > AttackPowerMultiplier
UpdateField< float, 96, 126 > GlideEventSpeedDivisor
UpdateFieldArray< int32, 5, 185, 191 > StatPosBuff
UpdateField< uint32, 0, 11 > StateAnimKitID
UpdateField< ObjectGuid, 0, 16 > Critter
UpdateField< uint32, 64, 71 > PetNameTimestamp
UpdateField< ObjectGuid, 0, 22 > Target
UpdateField< uint32, 32, 48 > Flags3
UpdateField< float, 64, 74 > ModCastingSpeed
UpdateField< int32, 96, 113 > AzeriteItemLevel
UpdateField< int32, 96, 103 > SetAttackSpeedAura
UpdateField< float, 64, 79 > ModHasteRegen
UpdateField< uint32, 32, 46 > Flags
UpdateField< int32, 96, 100 > MainHandWeaponAttackPower
UpdateField< ObjectGuid, 0, 20 > DemonCreator
UpdateFieldArray< float, 10, 137, 168 > PowerRegenInterruptedFlatModifier
UpdateField< float, 32, 54 > DisplayScale
UpdateField< int32, 96, 123 > TaxiNodesID
UpdateField< int32, 64, 94 > RangedAttackPower
UpdateField< ObjectGuid, 0, 14 > Charm
UpdateFieldArray< int32, 5, 185, 196 > StatNegBuff
UpdateField< uint32, 0, 7 > NpcFlags
UpdateField< uint32, 32, 50 > AuraState
OptionalUpdateField< UF::UnitAssistActionData, 128, 136 > AssistActionData
UpdateField< uint32, 64, 70 > PetNumber
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, AzeriteItem const *owner) const
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
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< uint32, 0, 4 > AnimProgress
UpdateField< bool, 0, 1 > IsDecay
bool operator==(WalkInData const &right) const
uint32 WalkInInstanceType
void WriteCreate(ByteBuffer &data, Player const *receiver, Player const *owner) const
ObjectGuid WalkInPartyGUID
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
void WriteUpdate(bool ignoreChangesMask, ByteBuffer &data, Player const *receiver, Player const *owner) const
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