TrinityCore
UpdateFields.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "UpdateFields.h"
19#include "AreaTrigger.h"
20#include "ByteBuffer.h"
21#include "Corpse.h"
22#include "DynamicObject.h"
23#include "Player.h"
25
26// This file is automatically generated, DO NOT EDIT
27
28#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
29#pragma GCC diagnostic push
30#pragma GCC diagnostic ignored "-Wunused-parameter"
31#else
32#pragma warning(push)
33#pragma warning(disable: 4100)
34#endif
35
36namespace UF
37{
38void ObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
39{
40 data << int32(ViewerDependentValue<EntryIDTag>::GetValue(this, owner, receiver));
41 data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(this, owner, receiver));
42 data << float(Scale);
43}
44
45void ObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
46{
47 WriteUpdate(data, _changesMask, false, owner, receiver);
48}
49
50void ObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const
51{
52 data.WriteBits(changesMask.GetBlock(0), 4);
53
54 data.FlushBits();
55 if (changesMask[0])
56 {
57 if (changesMask[1])
58 {
59 data << int32(ViewerDependentValue<EntryIDTag>::GetValue(this, owner, receiver));
60 }
61 if (changesMask[2])
62 {
63 data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(this, owner, receiver));
64 }
65 if (changesMask[3])
66 {
67 data << float(Scale);
68 }
69 }
70}
71
73{
78}
79
80void ItemEnchantment::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
81{
82 data << int32(ID);
83 data << uint32(Duration);
84 data << int16(Charges);
85 data << uint16(Inactive);
86}
87
88void ItemEnchantment::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
89{
90 Mask changesMask = _changesMask;
91 if (ignoreChangesMask)
92 changesMask.SetAll();
93
94 data.WriteBits(changesMask.GetBlock(0), 5);
95
96 data.FlushBits();
97 if (changesMask[0])
98 {
99 if (changesMask[1])
100 {
101 data << int32(ID);
102 }
103 if (changesMask[2])
104 {
105 data << uint32(Duration);
106 }
107 if (changesMask[3])
108 {
109 data << int16(Charges);
110 }
111 if (changesMask[4])
112 {
113 data << uint16(Inactive);
114 }
115 }
116}
117
119{
125}
126
127void ItemMod::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
128{
129 data << uint8(Type);
130 data << int32(Value);
131}
132
133void ItemMod::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
134{
135 data << uint8(Type);
136 data << int32(Value);
137}
138
139bool ItemMod::operator==(ItemMod const& right) const
140{
141 return Type == right.Type
142 && Value == right.Value;
143}
144
145void ItemModList::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
146{
147 data.WriteBits(Values.size(), 6);
148 for (uint32 i = 0; i < Values.size(); ++i)
149 {
150 Values[i].WriteCreate(data, owner, receiver);
151 }
152 data.FlushBits();
153}
154
155void ItemModList::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
156{
157 Mask changesMask = _changesMask;
158 if (ignoreChangesMask)
159 changesMask.SetAll();
160
161 data.WriteBits(changesMask.GetBlock(0), 1);
162
163 if (changesMask[0])
164 {
165 if (!ignoreChangesMask)
166 Values.WriteUpdateMask(data, 6);
167 else
169 }
170 data.FlushBits();
171 if (changesMask[0])
172 {
173 for (uint32 i = 0; i < Values.size(); ++i)
174 {
175 if (Values.HasChanged(i) || ignoreChangesMask)
176 {
177 Values[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
178 }
179 }
180 }
181 data.FlushBits();
182}
183
185{
188}
189
190void ArtifactPower::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
191{
192 data << int16(ArtifactPowerID);
193 data << uint8(PurchasedRank);
195}
196
197void ArtifactPower::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
198{
199 data << int16(ArtifactPowerID);
200 data << uint8(PurchasedRank);
202}
203
205{
206 return ArtifactPowerID == right.ArtifactPowerID
207 && PurchasedRank == right.PurchasedRank
209}
210
211void SocketedGem::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
212{
213 data << int32(ItemID);
214 for (uint32 i = 0; i < 16; ++i)
215 {
216 data << uint16(BonusListIDs[i]);
217 }
218 data << uint8(Context);
219}
220
221void SocketedGem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
222{
223 Mask changesMask = _changesMask;
224 if (ignoreChangesMask)
225 changesMask.SetAll();
226
227 data.WriteBits(changesMask.GetBlocksMask(0), 1);
228 if (changesMask.GetBlock(0))
229 data.WriteBits(changesMask.GetBlock(0), 32);
230
231 data.FlushBits();
232 if (changesMask[0])
233 {
234 if (changesMask[1])
235 {
236 data << int32(ItemID);
237 }
238 if (changesMask[2])
239 {
240 data << uint8(Context);
241 }
242 }
243 if (changesMask[3])
244 {
245 for (uint32 i = 0; i < 16; ++i)
246 {
247 if (changesMask[4 + i])
248 {
249 data << uint16(BonusListIDs[i]);
250 }
251 }
252 }
253}
254
256{
261}
262
263void ItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
264{
265 data << *Owner;
266 data << *ContainedIn;
267 data << *Creator;
268 data << *GiftCreator;
269 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
270 {
271 data << uint32(StackCount);
272 data << uint32(Expiration);
273 for (uint32 i = 0; i < 5; ++i)
274 {
275 data << int32(SpellCharges[i]);
276 }
277 }
278 data << uint32(DynamicFlags);
279 for (uint32 i = 0; i < 13; ++i)
280 {
281 Enchantment[i].WriteCreate(data, owner, receiver);
282 }
283 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
284 {
285 data << uint32(Durability);
286 data << uint32(MaxDurability);
287 }
288 data << uint32(CreatePlayedTime);
289 data << uint8(Context);
290 data << int64(CreateTime);
291 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
292 {
293 data << uint64(ArtifactXP);
294 data << uint8(ItemAppearanceModID);
295 }
296 data << uint32(ArtifactPowers.size());
297 data << uint32(Gems.size());
298 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
299 {
300 data << uint32(ZoneFlags);
301 }
302 data << *ItemBonusKey;
303 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
304 {
305 data << uint16(DEBUGItemLevel);
306 }
307 for (uint32 i = 0; i < ArtifactPowers.size(); ++i)
308 {
309 ArtifactPowers[i].WriteCreate(data, owner, receiver);
310 }
311 for (uint32 i = 0; i < Gems.size(); ++i)
312 {
313 Gems[i].WriteCreate(data, owner, receiver);
314 }
315 Modifiers->WriteCreate(data, owner, receiver);
316}
317
318void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
319{
320 Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
321 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
322 WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
323}
324
325void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
326{
327 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
328 allowedMaskForTarget |= std::array<uint32, 2>{ 0x07F58D80u, 0x00000000u };
329}
330
332{
333 Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
334 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
335 changesMask &= allowedMaskForTarget;
336}
337
338void ItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Item const* owner, Player const* receiver) const
339{
340 data.WriteBits(changesMask.GetBlocksMask(0), 2);
341 for (uint32 i = 0; i < 2; ++i)
342 if (changesMask.GetBlock(i))
343 data.WriteBits(changesMask.GetBlock(i), 32);
344
345 if (changesMask[0])
346 {
347 if (changesMask[1])
348 {
349 if (!ignoreNestedChangesMask)
351 else
353 }
354 if (changesMask[2])
355 {
356 if (!ignoreNestedChangesMask)
357 Gems.WriteUpdateMask(data);
358 else
360 }
361 }
362 data.FlushBits();
363 if (changesMask[0])
364 {
365 if (changesMask[1])
366 {
367 for (uint32 i = 0; i < ArtifactPowers.size(); ++i)
368 {
369 if (ArtifactPowers.HasChanged(i) || ignoreNestedChangesMask)
370 {
371 ArtifactPowers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
372 }
373 }
374 }
375 if (changesMask[2])
376 {
377 for (uint32 i = 0; i < Gems.size(); ++i)
378 {
379 if (Gems.HasChanged(i) || ignoreNestedChangesMask)
380 {
381 Gems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
382 }
383 }
384 }
385 if (changesMask[3])
386 {
387 data << *Owner;
388 }
389 if (changesMask[4])
390 {
391 data << *ContainedIn;
392 }
393 if (changesMask[5])
394 {
395 data << *Creator;
396 }
397 if (changesMask[6])
398 {
399 data << *GiftCreator;
400 }
401 if (changesMask[7])
402 {
403 data << uint32(StackCount);
404 }
405 if (changesMask[8])
406 {
407 data << uint32(Expiration);
408 }
409 if (changesMask[9])
410 {
411 data << uint32(DynamicFlags);
412 }
413 if (changesMask[10])
414 {
415 data << uint32(Durability);
416 }
417 if (changesMask[11])
418 {
419 data << uint32(MaxDurability);
420 }
421 if (changesMask[12])
422 {
423 data << uint32(CreatePlayedTime);
424 }
425 if (changesMask[13])
426 {
427 data << uint8(Context);
428 }
429 if (changesMask[14])
430 {
431 data << int64(CreateTime);
432 }
433 if (changesMask[15])
434 {
435 data << uint64(ArtifactXP);
436 }
437 if (changesMask[16])
438 {
439 data << uint8(ItemAppearanceModID);
440 }
441 if (changesMask[18])
442 {
443 data << uint32(ZoneFlags);
444 }
445 if (changesMask[19])
446 {
447 data << *ItemBonusKey;
448 }
449 if (changesMask[20])
450 {
451 data << uint16(DEBUGItemLevel);
452 }
453 if (changesMask[17])
454 {
455 Modifiers->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
456 }
457 }
458 if (changesMask[21])
459 {
460 for (uint32 i = 0; i < 5; ++i)
461 {
462 if (changesMask[22 + i])
463 {
464 data << int32(SpellCharges[i]);
465 }
466 }
467 }
468 if (changesMask[27])
469 {
470 for (uint32 i = 0; i < 13; ++i)
471 {
472 if (changesMask[28 + i])
473 {
474 Enchantment[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
475 }
476 }
477 }
478}
479
481{
505}
506
507void ContainerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const
508{
509 for (uint32 i = 0; i < 98; ++i)
510 {
511 data << Slots[i];
512 }
513 data << uint32(NumSlots);
514}
515
516void ContainerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const
517{
518 WriteUpdate(data, _changesMask, false, owner, receiver);
519}
520
521void ContainerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Bag const* owner, Player const* receiver) const
522{
523 data.WriteBits(changesMask.GetBlocksMask(0), 4);
524 for (uint32 i = 0; i < 4; ++i)
525 if (changesMask.GetBlock(i))
526 data.WriteBits(changesMask.GetBlock(i), 32);
527
528 data.FlushBits();
529 if (changesMask[0])
530 {
531 if (changesMask[1])
532 {
533 data << uint32(NumSlots);
534 }
535 }
536 if (changesMask[2])
537 {
538 for (uint32 i = 0; i < 98; ++i)
539 {
540 if (changesMask[3 + i])
541 {
542 data << Slots[i];
543 }
544 }
545 }
546}
547
549{
553}
554
555void AzeriteEmpoweredItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const
556{
557 for (uint32 i = 0; i < 5; ++i)
558 {
559 data << int32(Selections[i]);
560 }
561}
562
563void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const
564{
565 WriteUpdate(data, _changesMask, false, owner, receiver);
566}
567
568void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteEmpoweredItem const* owner, Player const* receiver) const
569{
570 data.WriteBits(changesMask.GetBlocksMask(0), 1);
571 if (changesMask.GetBlock(0))
572 data.WriteBits(changesMask.GetBlock(0), 32);
573
574 data.FlushBits();
575 if (changesMask[0])
576 {
577 for (uint32 i = 0; i < 5; ++i)
578 {
579 if (changesMask[1 + i])
580 {
581 data << int32(Selections[i]);
582 }
583 }
584 }
585}
586
588{
591}
592
593void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const
594{
595 data << uint32(AzeriteEssenceID);
596 data << uint32(Rank);
597}
598
599void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const
600{
601 data << uint32(AzeriteEssenceID);
602 data << uint32(Rank);
603}
604
606{
607 return AzeriteEssenceID == right.AzeriteEssenceID
608 && Rank == right.Rank;
609}
610
611void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const
612{
613 for (uint32 i = 0; i < 4; ++i)
614 {
615 data << uint32(AzeriteEssenceID[i]);
616 }
617 data << uint32(SpecializationID);
618 data.WriteBit(Enabled);
619 data.FlushBits();
620}
621
622void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const
623{
624 Mask changesMask = _changesMask;
625 if (ignoreChangesMask)
626 changesMask.SetAll();
627
628 data.WriteBits(changesMask.GetBlocksMask(0), 1);
629 if (changesMask.GetBlock(0))
630 data.WriteBits(changesMask.GetBlock(0), 32);
631
632 if (changesMask[0])
633 {
634 if (changesMask[1])
635 {
636 data.WriteBit(Enabled);
637 }
638 }
639 data.FlushBits();
640 if (changesMask[0])
641 {
642 if (changesMask[2])
643 {
644 data << uint32(SpecializationID);
645 }
646 }
647 if (changesMask[3])
648 {
649 for (uint32 i = 0; i < 4; ++i)
650 {
651 if (changesMask[4 + i])
652 {
653 data << uint32(AzeriteEssenceID[i]);
654 }
655 }
656 }
657 data.FlushBits();
658}
659
661{
666}
667
668void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const
669{
670 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
671 {
672 data << uint64(Xp);
673 data << uint32(Level);
674 data << uint32(AuraLevel);
675 data << uint32(KnowledgeLevel);
676 data << int32(DEBUGknowledgeWeek);
677 }
678 data << uint32(UnlockedEssences.size());
679 data << uint32(SelectedEssences.size());
681 for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
682 {
683 UnlockedEssences[i].WriteCreate(data, owner, receiver);
684 }
685 for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
686 {
688 }
689 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
690 {
691 data.WriteBit(Enabled);
692 }
693 for (uint32 i = 0; i < SelectedEssences.size(); ++i)
694 {
695 SelectedEssences[i].WriteCreate(data, owner, receiver);
696 }
697 data.FlushBits();
698}
699
700void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const
701{
702 Mask allowedMaskForTarget({ 0x0000001Du });
703 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
704 WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
705}
706
707void AzeriteItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
708{
709 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
710 allowedMaskForTarget |= std::array<uint32, 1>{ 0x000003E2u };
711}
712
714{
715 Mask allowedMaskForTarget({ 0x0000001Du });
716 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
717 changesMask &= allowedMaskForTarget;
718}
719
720void AzeriteItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteItem const* owner, Player const* receiver) const
721{
722 data.WriteBits(changesMask.GetBlock(0), 10);
723
724 if (changesMask[0])
725 {
726 if (changesMask[1])
727 {
728 data.WriteBit(Enabled);
729 }
730 if (changesMask[2])
731 {
732 if (!ignoreNestedChangesMask)
734 else
736 }
737 if (changesMask[3])
738 {
739 if (!ignoreNestedChangesMask)
741 else
743 }
744 if (changesMask[4])
745 {
746 if (!ignoreNestedChangesMask)
748 else
750 }
751 }
752 data.FlushBits();
753 if (changesMask[0])
754 {
755 if (changesMask[2])
756 {
757 for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
758 {
759 if (UnlockedEssences.HasChanged(i) || ignoreNestedChangesMask)
760 {
761 UnlockedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
762 }
763 }
764 }
765 if (changesMask[4])
766 {
767 for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
768 {
769 if (UnlockedEssenceMilestones.HasChanged(i) || ignoreNestedChangesMask)
770 {
772 }
773 }
774 }
775 if (changesMask[3])
776 {
777 for (uint32 i = 0; i < SelectedEssences.size(); ++i)
778 {
779 if (SelectedEssences.HasChanged(i) || ignoreNestedChangesMask)
780 {
781 SelectedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
782 }
783 }
784 }
785 if (changesMask[5])
786 {
787 data << uint64(Xp);
788 }
789 if (changesMask[6])
790 {
791 data << uint32(Level);
792 }
793 if (changesMask[7])
794 {
795 data << uint32(AuraLevel);
796 }
797 if (changesMask[8])
798 {
799 data << uint32(KnowledgeLevel);
800 }
801 if (changesMask[9])
802 {
803 data << int32(DEBUGknowledgeWeek);
804 }
805 }
806 data.FlushBits();
807}
808
810{
821}
822
823void SpellCastVisual::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const
824{
825 data << int32(SpellXSpellVisualID);
826 data << int32(ScriptVisualID);
827}
828
829void SpellCastVisual::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const
830{
831 data << int32(SpellXSpellVisualID);
832 data << int32(ScriptVisualID);
833}
834
836{
838 && ScriptVisualID == right.ScriptVisualID;
839}
840
841void UnitChannel::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
842{
843 data << int32(SpellID);
844 SpellVisual.WriteCreate(data, owner, receiver);
845}
846
847void UnitChannel::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const
848{
849 data << int32(SpellID);
850 SpellVisual.WriteUpdate(data, ignoreChangesMask, owner, receiver);
851}
852
853bool UnitChannel::operator==(UnitChannel const& right) const
854{
855 return SpellID == right.SpellID
856 && SpellVisual == right.SpellVisual;
857}
858
859void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
860{
861 data << int32(ItemID);
865 data << uint16(ItemVisual);
866}
867
868void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const
869{
870 Mask changesMask = _changesMask;
871 if (ignoreChangesMask)
872 changesMask.SetAll();
873
874 data.WriteBits(changesMask.GetBlock(0), 6);
875
876 data.FlushBits();
877 if (changesMask[0])
878 {
879 if (changesMask[1])
880 {
881 data << int32(ItemID);
882 }
883 if (changesMask[2])
884 {
886 }
887 if (changesMask[3])
888 {
890 }
891 if (changesMask[4])
892 {
894 }
895 if (changesMask[5])
896 {
897 data << uint16(ItemVisual);
898 }
899 }
900}
901
903{
910}
911
912void PassiveSpellHistory::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
913{
914 data << int32(SpellID);
915 data << int32(AuraSpellID);
916}
917
918void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const
919{
920 data << int32(SpellID);
921 data << int32(AuraSpellID);
922}
923
925{
926 return SpellID == right.SpellID
927 && AuraSpellID == right.AuraSpellID;
928}
929
930void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
931{
933
934 data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
935 data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, owner, receiver));
936 data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, owner, receiver));
938 data << uint32(ViewerDependentValue<StateAnimIDTag>::GetValue(this, owner, receiver));
939 data << uint32(ViewerDependentValue<StateAnimKitIDTag>::GetValue(this, owner, receiver));
940 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver);
941 data << uint32(stateWorldEffectIDs->size());
943 data << int32(SpellOverrideNameID);
944 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
945 {
946 data << uint32((*stateWorldEffectIDs)[i]);
947 }
948 data << *Charm;
949 data << *Summon;
950 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
951 {
952 data << *Critter;
953 }
954 data << *CharmedBy;
955 data << *SummonedBy;
956 data << *CreatedBy;
957 data << *DemonCreator;
958 data << *LookAtControllerTarget;
959 data << *Target;
960 data << *BattlePetCompanionGUID;
961 data << uint64(BattlePetDBID);
962 ChannelData->WriteCreate(data, owner, receiver);
963 data << int8(SpellEmpowerStage);
965 data << uint8(Race);
966 data << uint8(ClassId);
967 data << uint8(PlayerClassId);
968 data << uint8(Sex);
969 data << uint8(DisplayPower);
971 data << int64(Health);
972 for (uint32 i = 0; i < 10; ++i)
973 {
974 data << int32(Power[i]);
975 data << int32(MaxPower[i]);
976 }
977 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::UnitAll))
978 {
979 for (uint32 i = 0; i < 10; ++i)
980 {
981 data << float(PowerRegenFlatModifier[i]);
982 data << float(PowerRegenInterruptedFlatModifier[i]);
983 }
984 }
985 data << int64(MaxHealth);
986 data << int32(Level);
987 data << int32(EffectiveLevel);
988 data << int32(ContentTuningID);
989 data << int32(ScalingLevelMin);
990 data << int32(ScalingLevelMax);
991 data << int32(ScalingLevelDelta);
992 data << uint8(ScalingFactionGroup);
993 data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver));
994 for (uint32 i = 0; i < 3; ++i)
995 {
996 VirtualItems[i].WriteCreate(data, owner, receiver);
997 }
998 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
999 data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, owner, receiver));
1000 data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver));
1001 data << uint32(ViewerDependentValue<Flags4Tag>::GetValue(this, owner, receiver));
1002 data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver));
1003 for (uint32 i = 0; i < 2; ++i)
1004 {
1005 data << uint32(AttackRoundBaseTime[i]);
1006 }
1007 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1008 {
1010 }
1011 data << float(BoundingRadius);
1012 data << float(CombatReach);
1013 data << float(DisplayScale);
1014 data << int32(CreatureFamily);
1015 data << uint8(CreatureType);
1016 data << int32(NativeDisplayID);
1017 data << float(NativeXDisplayScale);
1018 data << int32(MountDisplayID);
1020 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
1021 {
1022 data << float(MinDamage);
1023 data << float(MaxDamage);
1024 data << float(MinOffHandDamage);
1025 data << float(MaxOffHandDamage);
1026 }
1027 data << uint8(StandState);
1028 data << uint8(PetTalentPoints);
1029 data << uint8(VisFlags);
1030 data << uint8(AnimTier);
1031 data << uint32(PetNumber);
1032 data << uint32(PetNameTimestamp);
1033 data << uint32(PetExperience);
1035 data << float(ModCastingSpeed);
1036 data << float(ModCastingSpeedNeg);
1037 data << float(ModSpellHaste);
1038 data << float(ModHaste);
1039 data << float(ModRangedHaste);
1040 data << float(ModHasteRegen);
1041 data << float(ModTimeRate);
1042 data << int32(CreatedBySpell);
1043 data << int32(EmoteState);
1044 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1045 {
1046 for (uint32 i = 0; i < 4; ++i)
1047 {
1048 data << int32(Stats[i]);
1049 data << int32(StatPosBuff[i]);
1050 data << int32(StatNegBuff[i]);
1051 data << int32(StatSupportBuff[i]);
1052 }
1053 }
1054 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
1055 {
1056 for (uint32 i = 0; i < 7; ++i)
1057 {
1058 data << int32(Resistances[i]);
1059 }
1060 }
1061 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1062 {
1063 for (uint32 i = 0; i < 7; ++i)
1064 {
1065 data << int32(BonusResistanceMods[i]);
1066 data << int32(ManaCostModifier[i]);
1067 }
1068 }
1069 data << int32(BaseMana);
1070 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1071 {
1072 data << int32(BaseHealth);
1073 }
1074 data << uint8(SheatheState);
1075 data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver));
1076 data << uint8(PetFlags);
1077 data << uint8(ShapeshiftForm);
1078 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1079 {
1080 data << int32(AttackPower);
1081 data << int32(AttackPowerModPos);
1082 data << int32(AttackPowerModNeg);
1083 data << float(AttackPowerMultiplier);
1085 data << int32(RangedAttackPower);
1088 data << float(RangedAttackPowerMultiplier);
1093 data << int32(SetAttackSpeedAura);
1094 data << float(Lifesteal);
1095 data << float(MinRangedDamage);
1096 data << float(MaxRangedDamage);
1097 data << float(ManaCostMultiplier);
1098 }
1099 data << float(MaxHealthModifier);
1100 data << float(HoverHeight);
1101 data << int32(MinItemLevelCutoff);
1102 data << int32(MinItemLevel);
1103 data << int32(MaxItemLevel);
1104 data << int32(AzeriteItemLevel);
1105 data << int32(WildBattlePetLevel);
1108 data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver));
1109 data << int32(ScaleDuration);
1110 data << int32(LooksLikeMountID);
1111 data << int32(LooksLikeCreatureID);
1112 data << int32(LookAtControllerID);
1113 data << int32(PerksVendorItemID);
1114 data << int32(TaxiNodesID);
1115 data << *GuildGUID;
1116 data << uint32(PassiveSpells.size());
1117 data << uint32(WorldEffects.size());
1118 data << uint32(ChannelObjects.size());
1119 data << int32(FlightCapabilityID);
1120 data << float(GlideEventSpeedDivisor);
1121 data << int32(DriveCapabilityID);
1124 data << uint32(SilencedSchoolMask);
1125 data << uint32(CurrentAreaID);
1126 data << float(Field_31C);
1127 data << float(Field_320);
1128 data << *NameplateAttachToGUID;
1129 for (uint32 i = 0; i < PassiveSpells.size(); ++i)
1130 {
1131 PassiveSpells[i].WriteCreate(data, owner, receiver);
1132 }
1133 for (uint32 i = 0; i < WorldEffects.size(); ++i)
1134 {
1135 data << int32(WorldEffects[i]);
1136 }
1137 for (uint32 i = 0; i < ChannelObjects.size(); ++i)
1138 {
1139 data << ChannelObjects[i];
1140 }
1141 data.WriteBit(Field_314);
1142 data.FlushBits();
1143}
1144
1145void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
1146{
1147 Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x0FFFFFFFu, 0x007F0000u, 0x00000000u });
1148 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1149 WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
1150}
1151
1152void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
1153{
1154 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
1155 allowedMaskForTarget |= std::array<uint32, 7>{ 0x00010000u, 0xF0040000u, 0xFF080000u, 0x000007FEu, 0xF0000080u, 0xFF80FFFFu, 0x3FFFFFFFu };
1156 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
1157 allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xF0000080u, 0x0000FFFFu, 0x00000000u };
1158 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
1159 allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0xF0000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0000FF00u };
1160}
1161
1163{
1164 Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x0FFFFFFFu, 0x007F0000u, 0x00000000u });
1165 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
1166 changesMask &= allowedMaskForTarget;
1167}
1168
1169void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Unit const* owner, Player const* receiver) const
1170{
1171 data.WriteBits(changesMask.GetBlocksMask(0), 7);
1172 for (uint32 i = 0; i < 7; ++i)
1173 if (changesMask.GetBlock(i))
1174 data.WriteBits(changesMask.GetBlock(i), 32);
1175
1177
1178 if (changesMask[0])
1179 {
1180 if (changesMask[1])
1181 {
1182 data.WriteBit(Field_314);
1183 }
1184 if (changesMask[2])
1185 {
1186 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver);
1187 data.WriteBits(stateWorldEffectIDs->size(), 32);
1188 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
1189 {
1190 data << uint32((*stateWorldEffectIDs)[i]);
1191 }
1192 }
1193 }
1194 data.FlushBits();
1195 if (changesMask[0])
1196 {
1197 if (changesMask[3])
1198 {
1199 if (!ignoreNestedChangesMask)
1201 else
1203 }
1204 if (changesMask[4])
1205 {
1206 if (!ignoreNestedChangesMask)
1208 else
1210 }
1211 if (changesMask[5])
1212 {
1213 if (!ignoreNestedChangesMask)
1215 else
1217 }
1218 }
1219 data.FlushBits();
1220 if (changesMask[0])
1221 {
1222 if (changesMask[3])
1223 {
1224 for (uint32 i = 0; i < PassiveSpells.size(); ++i)
1225 {
1226 if (PassiveSpells.HasChanged(i) || ignoreNestedChangesMask)
1227 {
1228 PassiveSpells[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
1229 }
1230 }
1231 }
1232 if (changesMask[4])
1233 {
1234 for (uint32 i = 0; i < WorldEffects.size(); ++i)
1235 {
1236 if (WorldEffects.HasChanged(i) || ignoreNestedChangesMask)
1237 {
1238 data << int32(WorldEffects[i]);
1239 }
1240 }
1241 }
1242 if (changesMask[5])
1243 {
1244 for (uint32 i = 0; i < ChannelObjects.size(); ++i)
1245 {
1246 if (ChannelObjects.HasChanged(i) || ignoreNestedChangesMask)
1247 {
1248 data << ChannelObjects[i];
1249 }
1250 }
1251 }
1252 if (changesMask[6])
1253 {
1254 data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
1255 }
1256 if (changesMask[7])
1257 {
1258 data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, owner, receiver));
1259 }
1260 if (changesMask[8])
1261 {
1262 data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, owner, receiver));
1263 }
1264 if (changesMask[9])
1265 {
1266 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, owner, receiver));
1267 }
1268 if (changesMask[10])
1269 {
1270 data << uint32(ViewerDependentValue<StateAnimIDTag>::GetValue(this, owner, receiver));
1271 }
1272 if (changesMask[11])
1273 {
1274 data << uint32(ViewerDependentValue<StateAnimKitIDTag>::GetValue(this, owner, receiver));
1275 }
1276 if (changesMask[12])
1277 {
1279 }
1280 if (changesMask[13])
1281 {
1282 data << int32(SpellOverrideNameID);
1283 }
1284 if (changesMask[14])
1285 {
1286 data << *Charm;
1287 }
1288 if (changesMask[15])
1289 {
1290 data << *Summon;
1291 }
1292 if (changesMask[16])
1293 {
1294 data << *Critter;
1295 }
1296 if (changesMask[17])
1297 {
1298 data << *CharmedBy;
1299 }
1300 if (changesMask[18])
1301 {
1302 data << *SummonedBy;
1303 }
1304 if (changesMask[19])
1305 {
1306 data << *CreatedBy;
1307 }
1308 if (changesMask[20])
1309 {
1310 data << *DemonCreator;
1311 }
1312 if (changesMask[21])
1313 {
1314 data << *LookAtControllerTarget;
1315 }
1316 if (changesMask[22])
1317 {
1318 data << *Target;
1319 }
1320 if (changesMask[23])
1321 {
1322 data << *BattlePetCompanionGUID;
1323 }
1324 if (changesMask[24])
1325 {
1326 data << uint64(BattlePetDBID);
1327 }
1328 if (changesMask[25])
1329 {
1330 ChannelData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
1331 }
1332 if (changesMask[26])
1333 {
1334 data << int8(SpellEmpowerStage);
1335 }
1336 if (changesMask[27])
1337 {
1338 data << uint32(SummonedByHomeRealm);
1339 }
1340 if (changesMask[28])
1341 {
1342 data << uint8(Race);
1343 }
1344 if (changesMask[29])
1345 {
1346 data << uint8(ClassId);
1347 }
1348 if (changesMask[30])
1349 {
1350 data << uint8(PlayerClassId);
1351 }
1352 if (changesMask[31])
1353 {
1354 data << uint8(Sex);
1355 }
1356 }
1357 if (changesMask[32])
1358 {
1359 if (changesMask[33])
1360 {
1361 data << uint8(DisplayPower);
1362 }
1363 if (changesMask[34])
1364 {
1366 }
1367 if (changesMask[35])
1368 {
1369 data << int64(Health);
1370 }
1371 if (changesMask[36])
1372 {
1373 data << int64(MaxHealth);
1374 }
1375 if (changesMask[37])
1376 {
1377 data << int32(Level);
1378 }
1379 if (changesMask[38])
1380 {
1381 data << int32(EffectiveLevel);
1382 }
1383 if (changesMask[39])
1384 {
1385 data << int32(ContentTuningID);
1386 }
1387 if (changesMask[40])
1388 {
1389 data << int32(ScalingLevelMin);
1390 }
1391 if (changesMask[41])
1392 {
1393 data << int32(ScalingLevelMax);
1394 }
1395 if (changesMask[42])
1396 {
1397 data << int32(ScalingLevelDelta);
1398 }
1399 if (changesMask[43])
1400 {
1401 data << uint8(ScalingFactionGroup);
1402 }
1403 if (changesMask[44])
1404 {
1405 data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver));
1406 }
1407 if (changesMask[45])
1408 {
1409 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
1410 }
1411 if (changesMask[46])
1412 {
1413 data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, owner, receiver));
1414 }
1415 if (changesMask[47])
1416 {
1417 data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver));
1418 }
1419 if (changesMask[48])
1420 {
1421 data << uint32(ViewerDependentValue<Flags4Tag>::GetValue(this, owner, receiver));
1422 }
1423 if (changesMask[49])
1424 {
1425 data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver));
1426 }
1427 if (changesMask[50])
1428 {
1430 }
1431 if (changesMask[51])
1432 {
1433 data << float(BoundingRadius);
1434 }
1435 if (changesMask[52])
1436 {
1437 data << float(CombatReach);
1438 }
1439 if (changesMask[53])
1440 {
1441 data << float(DisplayScale);
1442 }
1443 if (changesMask[54])
1444 {
1445 data << int32(CreatureFamily);
1446 }
1447 if (changesMask[55])
1448 {
1449 data << uint8(CreatureType);
1450 }
1451 if (changesMask[56])
1452 {
1453 data << int32(NativeDisplayID);
1454 }
1455 if (changesMask[57])
1456 {
1457 data << float(NativeXDisplayScale);
1458 }
1459 if (changesMask[58])
1460 {
1461 data << int32(MountDisplayID);
1462 }
1463 if (changesMask[59])
1464 {
1466 }
1467 if (changesMask[60])
1468 {
1469 data << float(MinDamage);
1470 }
1471 if (changesMask[61])
1472 {
1473 data << float(MaxDamage);
1474 }
1475 if (changesMask[62])
1476 {
1477 data << float(MinOffHandDamage);
1478 }
1479 if (changesMask[63])
1480 {
1481 data << float(MaxOffHandDamage);
1482 }
1483 }
1484 if (changesMask[64])
1485 {
1486 if (changesMask[65])
1487 {
1488 data << uint8(StandState);
1489 }
1490 if (changesMask[66])
1491 {
1492 data << uint8(PetTalentPoints);
1493 }
1494 if (changesMask[67])
1495 {
1496 data << uint8(VisFlags);
1497 }
1498 if (changesMask[68])
1499 {
1500 data << uint8(AnimTier);
1501 }
1502 if (changesMask[69])
1503 {
1504 data << uint32(PetNumber);
1505 }
1506 if (changesMask[70])
1507 {
1508 data << uint32(PetNameTimestamp);
1509 }
1510 if (changesMask[71])
1511 {
1512 data << uint32(PetExperience);
1513 }
1514 if (changesMask[72])
1515 {
1517 }
1518 if (changesMask[73])
1519 {
1520 data << float(ModCastingSpeed);
1521 }
1522 if (changesMask[74])
1523 {
1524 data << float(ModCastingSpeedNeg);
1525 }
1526 if (changesMask[75])
1527 {
1528 data << float(ModSpellHaste);
1529 }
1530 if (changesMask[76])
1531 {
1532 data << float(ModHaste);
1533 }
1534 if (changesMask[77])
1535 {
1536 data << float(ModRangedHaste);
1537 }
1538 if (changesMask[78])
1539 {
1540 data << float(ModHasteRegen);
1541 }
1542 if (changesMask[79])
1543 {
1544 data << float(ModTimeRate);
1545 }
1546 if (changesMask[80])
1547 {
1548 data << int32(CreatedBySpell);
1549 }
1550 if (changesMask[81])
1551 {
1552 data << int32(EmoteState);
1553 }
1554 if (changesMask[82])
1555 {
1556 data << int32(BaseMana);
1557 }
1558 if (changesMask[83])
1559 {
1560 data << int32(BaseHealth);
1561 }
1562 if (changesMask[84])
1563 {
1564 data << uint8(SheatheState);
1565 }
1566 if (changesMask[85])
1567 {
1568 data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver));
1569 }
1570 if (changesMask[86])
1571 {
1572 data << uint8(PetFlags);
1573 }
1574 if (changesMask[87])
1575 {
1576 data << uint8(ShapeshiftForm);
1577 }
1578 if (changesMask[88])
1579 {
1580 data << int32(AttackPower);
1581 }
1582 if (changesMask[89])
1583 {
1584 data << int32(AttackPowerModPos);
1585 }
1586 if (changesMask[90])
1587 {
1588 data << int32(AttackPowerModNeg);
1589 }
1590 if (changesMask[91])
1591 {
1592 data << float(AttackPowerMultiplier);
1593 }
1594 if (changesMask[92])
1595 {
1597 }
1598 if (changesMask[93])
1599 {
1600 data << int32(RangedAttackPower);
1601 }
1602 if (changesMask[94])
1603 {
1605 }
1606 if (changesMask[95])
1607 {
1609 }
1610 }
1611 if (changesMask[96])
1612 {
1613 if (changesMask[97])
1614 {
1615 data << float(RangedAttackPowerMultiplier);
1616 }
1617 if (changesMask[98])
1618 {
1620 }
1621 if (changesMask[99])
1622 {
1624 }
1625 if (changesMask[100])
1626 {
1628 }
1629 if (changesMask[101])
1630 {
1632 }
1633 if (changesMask[102])
1634 {
1635 data << int32(SetAttackSpeedAura);
1636 }
1637 if (changesMask[103])
1638 {
1639 data << float(Lifesteal);
1640 }
1641 if (changesMask[104])
1642 {
1643 data << float(MinRangedDamage);
1644 }
1645 if (changesMask[105])
1646 {
1647 data << float(MaxRangedDamage);
1648 }
1649 if (changesMask[106])
1650 {
1651 data << float(ManaCostMultiplier);
1652 }
1653 if (changesMask[107])
1654 {
1655 data << float(MaxHealthModifier);
1656 }
1657 if (changesMask[108])
1658 {
1659 data << float(HoverHeight);
1660 }
1661 if (changesMask[109])
1662 {
1663 data << int32(MinItemLevelCutoff);
1664 }
1665 if (changesMask[110])
1666 {
1667 data << int32(MinItemLevel);
1668 }
1669 if (changesMask[111])
1670 {
1671 data << int32(MaxItemLevel);
1672 }
1673 if (changesMask[112])
1674 {
1675 data << int32(AzeriteItemLevel);
1676 }
1677 if (changesMask[113])
1678 {
1679 data << int32(WildBattlePetLevel);
1680 }
1681 if (changesMask[114])
1682 {
1684 }
1685 if (changesMask[115])
1686 {
1688 }
1689 if (changesMask[116])
1690 {
1691 data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver));
1692 }
1693 if (changesMask[117])
1694 {
1695 data << int32(ScaleDuration);
1696 }
1697 if (changesMask[118])
1698 {
1699 data << int32(LooksLikeMountID);
1700 }
1701 if (changesMask[119])
1702 {
1703 data << int32(LooksLikeCreatureID);
1704 }
1705 if (changesMask[120])
1706 {
1707 data << int32(LookAtControllerID);
1708 }
1709 if (changesMask[121])
1710 {
1711 data << int32(PerksVendorItemID);
1712 }
1713 if (changesMask[122])
1714 {
1715 data << int32(TaxiNodesID);
1716 }
1717 if (changesMask[123])
1718 {
1719 data << *GuildGUID;
1720 }
1721 if (changesMask[124])
1722 {
1723 data << int32(FlightCapabilityID);
1724 }
1725 if (changesMask[125])
1726 {
1727 data << float(GlideEventSpeedDivisor);
1728 }
1729 if (changesMask[126])
1730 {
1731 data << int32(DriveCapabilityID);
1732 }
1733 if (changesMask[127])
1734 {
1736 }
1737 }
1738 if (changesMask[128])
1739 {
1740 if (changesMask[129])
1741 {
1743 }
1744 if (changesMask[130])
1745 {
1746 data << uint32(SilencedSchoolMask);
1747 }
1748 if (changesMask[131])
1749 {
1750 data << uint32(CurrentAreaID);
1751 }
1752 if (changesMask[132])
1753 {
1754 data << float(Field_31C);
1755 }
1756 if (changesMask[133])
1757 {
1758 data << float(Field_320);
1759 }
1760 if (changesMask[134])
1761 {
1762 data << *NameplateAttachToGUID;
1763 }
1764 }
1765 if (changesMask[135])
1766 {
1767 for (uint32 i = 0; i < 10; ++i)
1768 {
1769 if (changesMask[136 + i])
1770 {
1771 data << int32(Power[i]);
1772 }
1773 if (changesMask[146 + i])
1774 {
1775 data << int32(MaxPower[i]);
1776 }
1777 if (changesMask[156 + i])
1778 {
1779 data << float(PowerRegenFlatModifier[i]);
1780 }
1781 if (changesMask[166 + i])
1782 {
1783 data << float(PowerRegenInterruptedFlatModifier[i]);
1784 }
1785 }
1786 }
1787 if (changesMask[176])
1788 {
1789 for (uint32 i = 0; i < 3; ++i)
1790 {
1791 if (changesMask[177 + i])
1792 {
1793 VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
1794 }
1795 }
1796 }
1797 if (changesMask[180])
1798 {
1799 for (uint32 i = 0; i < 2; ++i)
1800 {
1801 if (changesMask[181 + i])
1802 {
1803 data << uint32(AttackRoundBaseTime[i]);
1804 }
1805 }
1806 }
1807 if (changesMask[183])
1808 {
1809 for (uint32 i = 0; i < 4; ++i)
1810 {
1811 if (changesMask[184 + i])
1812 {
1813 data << int32(Stats[i]);
1814 }
1815 if (changesMask[188 + i])
1816 {
1817 data << int32(StatPosBuff[i]);
1818 }
1819 if (changesMask[192 + i])
1820 {
1821 data << int32(StatNegBuff[i]);
1822 }
1823 if (changesMask[196 + i])
1824 {
1825 data << int32(StatSupportBuff[i]);
1826 }
1827 }
1828 }
1829 if (changesMask[200])
1830 {
1831 for (uint32 i = 0; i < 7; ++i)
1832 {
1833 if (changesMask[201 + i])
1834 {
1835 data << int32(Resistances[i]);
1836 }
1837 if (changesMask[208 + i])
1838 {
1839 data << int32(BonusResistanceMods[i]);
1840 }
1841 if (changesMask[215 + i])
1842 {
1843 data << int32(ManaCostModifier[i]);
1844 }
1845 }
1846 }
1847 data.FlushBits();
1848}
1849
1851{
1996}
1997
1998void ChrCustomizationChoice::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const
1999{
2002}
2003
2004void ChrCustomizationChoice::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const
2005{
2008}
2009
2011{
2014}
2015
2016void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2017{
2018 data << int64(EndTime);
2019 data << int32(QuestID);
2020 data << uint32(StateFlags);
2021 data << uint32(ObjectiveFlags);
2022 for (uint32 i = 0; i < 24; ++i)
2023 {
2024 data << int16(ObjectiveProgress[i]);
2025 }
2026}
2027
2028void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2029{
2030 Mask changesMask = _changesMask;
2031 if (ignoreChangesMask)
2032 changesMask.SetAll();
2033
2034 data.WriteBits(changesMask.GetBlocksMask(0), 1);
2035 if (changesMask.GetBlock(0))
2036 data.WriteBits(changesMask.GetBlock(0), 32);
2037
2038 data.FlushBits();
2039 if (changesMask[0])
2040 {
2041 if (changesMask[1])
2042 {
2043 data << int64(EndTime);
2044 }
2045 if (changesMask[2])
2046 {
2047 data << int32(QuestID);
2048 }
2049 if (changesMask[3])
2050 {
2051 data << uint32(StateFlags);
2052 }
2053 if (changesMask[4])
2054 {
2055 data << uint32(ObjectiveFlags);
2056 }
2057 }
2058 if (changesMask[5])
2059 {
2060 for (uint32 i = 0; i < 24; ++i)
2061 {
2062 if (changesMask[6 + i])
2063 {
2064 data << int16(ObjectiveProgress[i]);
2065 }
2066 }
2067 }
2068}
2069
2071{
2078}
2079
2080void ArenaCooldown::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2081{
2082 data << int32(SpellID);
2083 data << int32(Charges);
2084 data << uint32(Flags);
2085 data << uint32(StartTime);
2086 data << uint32(EndTime);
2087 data << uint32(NextChargeTime);
2088 data << uint8(MaxCharges);
2089}
2090
2091void ArenaCooldown::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2092{
2093 Mask changesMask = _changesMask;
2094 if (ignoreChangesMask)
2095 changesMask.SetAll();
2096
2097 data.WriteBits(changesMask.GetBlock(0), 8);
2098
2099 data.FlushBits();
2100 if (changesMask[0])
2101 {
2102 if (changesMask[1])
2103 {
2104 data << int32(SpellID);
2105 }
2106 if (changesMask[2])
2107 {
2108 data << int32(Charges);
2109 }
2110 if (changesMask[3])
2111 {
2112 data << uint32(Flags);
2113 }
2114 if (changesMask[4])
2115 {
2116 data << uint32(StartTime);
2117 }
2118 if (changesMask[5])
2119 {
2120 data << uint32(EndTime);
2121 }
2122 if (changesMask[6])
2123 {
2124 data << uint32(NextChargeTime);
2125 }
2126 if (changesMask[7])
2127 {
2128 data << uint8(MaxCharges);
2129 }
2130 }
2131}
2132
2134{
2143}
2144
2145void ZonePlayerForcedReaction::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2146{
2147 data << int32(FactionID);
2148 data << int32(Reaction);
2149}
2150
2151void ZonePlayerForcedReaction::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2152{
2153 Mask changesMask = _changesMask;
2154 if (ignoreChangesMask)
2155 changesMask.SetAll();
2156
2157 data.WriteBits(changesMask.GetBlock(0), 3);
2158
2159 data.FlushBits();
2160 if (changesMask[0])
2161 {
2162 if (changesMask[1])
2163 {
2164 data << int32(FactionID);
2165 }
2166 if (changesMask[2])
2167 {
2168 data << int32(Reaction);
2169 }
2170 }
2171}
2172
2174{
2178}
2179
2180void PetCreatureName::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2181{
2182 data << uint32(CreatureID);
2183 data.WriteBits(Name->size(), 8);
2184 data.WriteString(Name);
2185 data.FlushBits();
2186}
2187
2188void PetCreatureName::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2189{
2190 Mask changesMask = _changesMask;
2191 if (ignoreChangesMask)
2192 changesMask.SetAll();
2193
2194 data.WriteBits(changesMask.GetBlock(0), 3);
2195
2196 data.FlushBits();
2197 if (changesMask[0])
2198 {
2199 if (changesMask[1])
2200 {
2201 data << uint32(CreatureID);
2202 }
2203 if (changesMask[2])
2204 {
2205 data.WriteBits(Name->size(), 8);
2206 data.WriteString(Name);
2207 }
2208 }
2209 data.FlushBits();
2210}
2211
2213{
2217}
2218
2219void CTROptions::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2220{
2221 data << uint32(ConditionalFlags);
2222 data << uint8(FactionGroup);
2224}
2225
2226void CTROptions::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2227{
2228 data << uint32(ConditionalFlags);
2229 data << uint8(FactionGroup);
2231}
2232
2233bool CTROptions::operator==(CTROptions const& right) const
2234{
2235 return ConditionalFlags == right.ConditionalFlags
2236 && FactionGroup == right.FactionGroup
2238}
2239
2240void DeclinedNames::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2241{
2242 for (uint32 i = 0; i < 5; ++i)
2243 {
2244 data.WriteBits(Name[i].size(), 10);
2245 }
2246 data.FlushBits();
2247 for (uint32 i = 0; i < 5; ++i)
2248 {
2249 data.WriteString(Name[i]);
2250 }
2251 data.FlushBits();
2252}
2253
2254void DeclinedNames::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2255{
2256 Mask changesMask = _changesMask;
2257 if (ignoreChangesMask)
2258 changesMask.SetAll();
2259
2260 data.WriteBits(changesMask.GetBlocksMask(0), 1);
2261 if (changesMask.GetBlock(0))
2262 data.WriteBits(changesMask.GetBlock(0), 32);
2263
2264 data.FlushBits();
2265 if (changesMask[0])
2266 {
2267 for (uint32 i = 0; i < 5; ++i)
2268 {
2269 if (changesMask[1 + i])
2270 {
2271 data.WriteBits(Name[i].size(), 10);
2272 }
2273 }
2274 }
2275 data.FlushBits();
2276 if (changesMask[0])
2277 {
2278 for (uint32 i = 0; i < 5; ++i)
2279 {
2280 if (changesMask[1 + i])
2281 {
2282 data.WriteString(Name[i]);
2283 }
2284 }
2285 }
2286 data.FlushBits();
2287}
2288
2290{
2293}
2294
2295void CustomTabardInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2296{
2297 data << int32(EmblemStyle);
2298 data << int32(EmblemColor);
2299 data << int32(BorderStyle);
2300 data << int32(BorderColor);
2301 data << int32(BackgroundColor);
2302}
2303
2304void CustomTabardInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2305{
2306 Mask changesMask = _changesMask;
2307 if (ignoreChangesMask)
2308 changesMask.SetAll();
2309
2310 data.WriteBits(changesMask.GetBlock(0), 6);
2311
2312 data.FlushBits();
2313 if (changesMask[0])
2314 {
2315 if (changesMask[1])
2316 {
2317 data << int32(EmblemStyle);
2318 }
2319 if (changesMask[2])
2320 {
2321 data << int32(EmblemColor);
2322 }
2323 if (changesMask[3])
2324 {
2325 data << int32(BorderStyle);
2326 }
2327 if (changesMask[4])
2328 {
2329 data << int32(BorderColor);
2330 }
2331 if (changesMask[5])
2332 {
2333 data << int32(BackgroundColor);
2334 }
2335 }
2336}
2337
2339{
2346}
2347
2348void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
2349{
2350 data << *DuelArbiter;
2351 data << *WowAccount;
2352 data << *BnetAccount;
2353 data << uint64(GuildClubMemberID);
2354 data << *LootTargetGUID;
2355 data << uint32(PlayerFlags);
2356 data << uint32(PlayerFlagsEx);
2357 data << uint32(GuildRankID);
2358 data << uint32(GuildDeleteDate);
2359 data << int32(GuildLevel);
2360 data << uint32(Customizations.size());
2361 data << uint32(QaCustomizations.size());
2362 for (uint32 i = 0; i < 2; ++i)
2363 {
2364 data << uint8(PartyType[i]);
2365 }
2366 data << uint8(NativeSex);
2367 data << uint8(Inebriation);
2368 data << uint8(PvpTitle);
2369 data << uint8(ArenaFaction);
2370 data << uint32(DuelTeam);
2371 data << int32(GuildTimeStamp);
2372 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2373 {
2374 for (uint32 i = 0; i < 175; ++i)
2375 {
2376 QuestLog[i].WriteCreate(data, owner, receiver);
2377 }
2378 data << uint32(QuestSessionQuestLog.size());
2379 }
2380 for (uint32 i = 0; i < 19; ++i)
2381 {
2382 VisibleItems[i].WriteCreate(data, owner, receiver);
2383 }
2384 data << int32(PlayerTitle);
2385 data << int32(FakeInebriation);
2386 data << uint32(VirtualPlayerRealm);
2387 data << uint32(CurrentSpecID);
2388 data << int32(TaxiMountAnimKitID);
2389 for (uint32 i = 0; i < 6; ++i)
2390 {
2391 data << float(AvgItemLevel[i]);
2392 }
2394 data << int32(HonorLevel);
2395 data << int64(LogoutTime);
2396 data << uint32(ArenaCooldowns.size());
2397 for (uint32 i = 0; i < 32; ++i)
2398 {
2399 ForcedReactions[i].WriteCreate(data, owner, receiver);
2400 }
2401 data << int32(Field_1AC);
2402 data << int32(Field_1B0);
2404 data << uint32(PetNames.size());
2405 CtrOptions->WriteCreate(data, owner, receiver);
2406 data << int32(CovenantID);
2407 data << int32(SoulbindID);
2408 data << *SpectateTarget;
2409 data << int32(Field_200);
2411 for (uint32 i = 0; i < 19; ++i)
2412 {
2413 data << uint32(Field_3120[i]);
2414 }
2415 PersonalTabard->WriteCreate(data, owner, receiver);
2416 for (uint32 i = 0; i < Customizations.size(); ++i)
2417 {
2418 Customizations[i].WriteCreate(data, owner, receiver);
2419 }
2420 for (uint32 i = 0; i < QaCustomizations.size(); ++i)
2421 {
2422 QaCustomizations[i].WriteCreate(data, owner, receiver);
2423 }
2424 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2425 {
2426 for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
2427 {
2428 QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
2429 }
2430 }
2431 for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
2432 {
2433 ArenaCooldowns[i].WriteCreate(data, owner, receiver);
2434 }
2435 for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
2436 {
2437 data << int32(VisualItemReplacements[i]);
2438 }
2439 data.FlushBits();
2440 data.WriteBits(Name->size(), 6);
2441 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2442 {
2444 }
2445 data.WriteBit(HasLevelLink);
2446 data.WriteBits(DeclinedNames.has_value(), 1);
2447 data << *DungeonScore;
2448 data.WriteString(Name);
2449 for (uint32 i = 0; i < 16; ++i)
2450 {
2451 data << VisibleEquipableSpells[i];
2452 }
2453 for (uint32 i = 0; i < PetNames.size(); ++i)
2454 {
2455 PetNames[i].WriteCreate(data, owner, receiver);
2456 }
2457 if (DeclinedNames.has_value())
2458 {
2459 DeclinedNames->WriteCreate(data, owner, receiver);
2460 }
2461 data.FlushBits();
2462}
2463
2464void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
2465{
2466 Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000003u });
2467 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2468 WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
2469}
2470
2471void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
2472{
2473 if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
2474 allowedMaskForTarget |= std::array<uint32, 11>{ 0x00000022u, 0xFFFE0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u };
2475}
2476
2478{
2479 Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000003u });
2480 AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
2481 changesMask &= allowedMaskForTarget;
2482}
2483
2484void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const
2485{
2486 data.WriteBits(changesMask.GetBlocksMask(0), 11);
2487 for (uint32 i = 0; i < 11; ++i)
2488 if (changesMask.GetBlock(i))
2489 data.WriteBits(changesMask.GetBlock(i), 32);
2490
2491 bool noQuestLogChangesMask = data.WriteBit(IsQuestLogChangesMaskSkipped());
2492 if (changesMask[0])
2493 {
2494 if (changesMask[1])
2495 {
2497 }
2498 if (changesMask[2])
2499 {
2500 data.WriteBit(HasLevelLink);
2501 }
2502 if (changesMask[3])
2503 {
2504 if (!ignoreNestedChangesMask)
2506 else
2508 }
2509 if (changesMask[4])
2510 {
2511 if (!ignoreNestedChangesMask)
2513 else
2515 }
2516 if (changesMask[5])
2517 {
2518 if (!ignoreNestedChangesMask)
2520 else
2522 }
2523 if (changesMask[6])
2524 {
2525 if (!ignoreNestedChangesMask)
2527 else
2529 }
2530 if (changesMask[7])
2531 {
2532 if (!ignoreNestedChangesMask)
2534 else
2536 }
2537 if (changesMask[8])
2538 {
2539 if (!ignoreNestedChangesMask)
2541 else
2543 }
2544 }
2545 data.FlushBits();
2546 if (changesMask[0])
2547 {
2548 if (changesMask[3])
2549 {
2550 for (uint32 i = 0; i < Customizations.size(); ++i)
2551 {
2552 if (Customizations.HasChanged(i) || ignoreNestedChangesMask)
2553 {
2554 Customizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2555 }
2556 }
2557 }
2558 if (changesMask[4])
2559 {
2560 for (uint32 i = 0; i < QaCustomizations.size(); ++i)
2561 {
2562 if (QaCustomizations.HasChanged(i) || ignoreNestedChangesMask)
2563 {
2564 QaCustomizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2565 }
2566 }
2567 }
2568 if (changesMask[5])
2569 {
2570 for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
2571 {
2572 if (QuestSessionQuestLog.HasChanged(i) || ignoreNestedChangesMask)
2573 {
2574 if (noQuestLogChangesMask)
2575 QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
2576 else
2577 QuestSessionQuestLog[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2578 }
2579 }
2580 }
2581 if (changesMask[6])
2582 {
2583 for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
2584 {
2585 if (ArenaCooldowns.HasChanged(i) || ignoreNestedChangesMask)
2586 {
2587 ArenaCooldowns[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2588 }
2589 }
2590 }
2591 if (changesMask[8])
2592 {
2593 for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
2594 {
2595 if (VisualItemReplacements.HasChanged(i) || ignoreNestedChangesMask)
2596 {
2597 data << int32(VisualItemReplacements[i]);
2598 }
2599 }
2600 }
2601 if (changesMask[7])
2602 {
2603 for (uint32 i = 0; i < PetNames.size(); ++i)
2604 {
2605 if (PetNames.HasChanged(i) || ignoreNestedChangesMask)
2606 {
2607 PetNames[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2608 }
2609 }
2610 }
2611 if (changesMask[9])
2612 {
2613 data << *DuelArbiter;
2614 }
2615 if (changesMask[10])
2616 {
2617 data << *WowAccount;
2618 }
2619 if (changesMask[11])
2620 {
2621 data << *BnetAccount;
2622 }
2623 if (changesMask[12])
2624 {
2625 data << uint64(GuildClubMemberID);
2626 }
2627 if (changesMask[13])
2628 {
2629 data << *LootTargetGUID;
2630 }
2631 if (changesMask[14])
2632 {
2633 data << uint32(PlayerFlags);
2634 }
2635 if (changesMask[15])
2636 {
2637 data << uint32(PlayerFlagsEx);
2638 }
2639 if (changesMask[16])
2640 {
2641 data << uint32(GuildRankID);
2642 }
2643 if (changesMask[17])
2644 {
2645 data << uint32(GuildDeleteDate);
2646 }
2647 if (changesMask[18])
2648 {
2649 data << int32(GuildLevel);
2650 }
2651 if (changesMask[19])
2652 {
2653 data << uint8(NativeSex);
2654 }
2655 if (changesMask[20])
2656 {
2657 data << uint8(Inebriation);
2658 }
2659 if (changesMask[21])
2660 {
2661 data << uint8(PvpTitle);
2662 }
2663 if (changesMask[22])
2664 {
2665 data << uint8(ArenaFaction);
2666 }
2667 if (changesMask[23])
2668 {
2669 data << uint32(DuelTeam);
2670 }
2671 if (changesMask[24])
2672 {
2673 data << int32(GuildTimeStamp);
2674 }
2675 if (changesMask[25])
2676 {
2677 data << int32(PlayerTitle);
2678 }
2679 if (changesMask[26])
2680 {
2681 data << int32(FakeInebriation);
2682 }
2683 if (changesMask[27])
2684 {
2685 data << uint32(VirtualPlayerRealm);
2686 }
2687 if (changesMask[28])
2688 {
2689 data << uint32(CurrentSpecID);
2690 }
2691 if (changesMask[29])
2692 {
2693 data << int32(TaxiMountAnimKitID);
2694 }
2695 if (changesMask[30])
2696 {
2698 }
2699 if (changesMask[31])
2700 {
2701 data << int32(HonorLevel);
2702 }
2703 }
2704 if (changesMask[32])
2705 {
2706 if (changesMask[33])
2707 {
2708 data << int64(LogoutTime);
2709 }
2710 if (changesMask[35])
2711 {
2712 data << int32(Field_1AC);
2713 }
2714 if (changesMask[36])
2715 {
2716 data << int32(Field_1B0);
2717 }
2718 if (changesMask[37])
2719 {
2721 }
2722 if (changesMask[38])
2723 {
2724 CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2725 }
2726 if (changesMask[39])
2727 {
2728 data << int32(CovenantID);
2729 }
2730 if (changesMask[40])
2731 {
2732 data << int32(SoulbindID);
2733 }
2734 if (changesMask[42])
2735 {
2736 data << *SpectateTarget;
2737 }
2738 if (changesMask[43])
2739 {
2740 data << int32(Field_200);
2741 }
2742 if (changesMask[45])
2743 {
2744 PersonalTabard->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2745 }
2746 if (changesMask[34])
2747 {
2748 data.WriteBits(Name->size(), 6);
2749 }
2750 data.WriteBits(DeclinedNames.has_value(), 1);
2751 data.FlushBits();
2752 if (changesMask[41])
2753 {
2754 data << *DungeonScore;
2755 }
2756 if (changesMask[34])
2757 {
2758 data.WriteString(Name);
2759 }
2760 if (changesMask[44])
2761 {
2762 if (DeclinedNames.has_value())
2763 {
2764 DeclinedNames->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2765 }
2766 }
2767 }
2768 if (changesMask[46])
2769 {
2770 for (uint32 i = 0; i < 2; ++i)
2771 {
2772 if (changesMask[47 + i])
2773 {
2774 data << uint8(PartyType[i]);
2775 }
2776 }
2777 }
2778 if (changesMask[49])
2779 {
2780 for (uint32 i = 0; i < 175; ++i)
2781 {
2782 if (changesMask[50 + i])
2783 {
2784 if (noQuestLogChangesMask)
2785 QuestLog[i].WriteCreate(data, owner, receiver);
2786 else
2787 QuestLog[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2788 }
2789 }
2790 }
2791 if (changesMask[225])
2792 {
2793 for (uint32 i = 0; i < 19; ++i)
2794 {
2795 if (changesMask[226 + i])
2796 {
2797 VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2798 }
2799 }
2800 }
2801 if (changesMask[245])
2802 {
2803 for (uint32 i = 0; i < 6; ++i)
2804 {
2805 if (changesMask[246 + i])
2806 {
2807 data << float(AvgItemLevel[i]);
2808 }
2809 }
2810 }
2811 if (changesMask[252])
2812 {
2813 for (uint32 i = 0; i < 32; ++i)
2814 {
2815 if (changesMask[253 + i])
2816 {
2817 ForcedReactions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
2818 }
2819 }
2820 }
2821 if (changesMask[302])
2822 {
2823 for (uint32 i = 0; i < 19; ++i)
2824 {
2825 if (changesMask[303 + i])
2826 {
2827 data << uint32(Field_3120[i]);
2828 }
2829 }
2830 }
2831 if (changesMask[285])
2832 {
2833 for (uint32 i = 0; i < 16; ++i)
2834 {
2835 if (changesMask[286 + i])
2836 {
2837 data << VisibleEquipableSpells[i];
2838 }
2839 }
2840 }
2841 data.FlushBits();
2842}
2843
2845{
2898}
2899
2900void SkillInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2901{
2902 for (uint32 i = 0; i < 256; ++i)
2903 {
2904 data << uint16(SkillLineID[i]);
2905 data << uint16(SkillStep[i]);
2906 data << uint16(SkillRank[i]);
2907 data << uint16(SkillStartingRank[i]);
2908 data << uint16(SkillMaxRank[i]);
2909 data << int16(SkillTempBonus[i]);
2910 data << uint16(SkillPermBonus[i]);
2911 }
2912}
2913
2914void SkillInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2915{
2916 Mask changesMask = _changesMask;
2917 if (ignoreChangesMask)
2918 changesMask.SetAll();
2919
2920 for (uint32 i = 0; i < 1; ++i)
2921 data << uint32(changesMask.GetBlocksMask(i));
2922 data.WriteBits(changesMask.GetBlocksMask(1), 25);
2923 for (uint32 i = 0; i < 57; ++i)
2924 if (changesMask.GetBlock(i))
2925 data.WriteBits(changesMask.GetBlock(i), 32);
2926
2927 data.FlushBits();
2928 if (changesMask[0])
2929 {
2930 for (uint32 i = 0; i < 256; ++i)
2931 {
2932 if (changesMask[1 + i])
2933 {
2934 data << uint16(SkillLineID[i]);
2935 }
2936 if (changesMask[257 + i])
2937 {
2938 data << uint16(SkillStep[i]);
2939 }
2940 if (changesMask[513 + i])
2941 {
2942 data << uint16(SkillRank[i]);
2943 }
2944 if (changesMask[769 + i])
2945 {
2946 data << uint16(SkillStartingRank[i]);
2947 }
2948 if (changesMask[1025 + i])
2949 {
2950 data << uint16(SkillMaxRank[i]);
2951 }
2952 if (changesMask[1281 + i])
2953 {
2954 data << int16(SkillTempBonus[i]);
2955 }
2956 if (changesMask[1537 + i])
2957 {
2958 data << uint16(SkillPermBonus[i]);
2959 }
2960 }
2961 }
2962}
2963
2965{
2974}
2975
2976void BitVector::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
2977{
2978 data << uint32(Values.size());
2979 for (uint32 i = 0; i < Values.size(); ++i)
2980 {
2981 data << uint64(Values[i]);
2982 }
2983}
2984
2985void BitVector::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
2986{
2987 Mask changesMask = _changesMask;
2988 if (ignoreChangesMask)
2989 changesMask.SetAll();
2990
2991 data.WriteBits(changesMask.GetBlock(0), 2);
2992
2993 if (changesMask[0])
2994 {
2995 if (changesMask[1])
2996 {
2997 if (!ignoreChangesMask)
2998 Values.WriteUpdateMask(data);
2999 else
3001 }
3002 }
3003 data.FlushBits();
3004 if (changesMask[0])
3005 {
3006 if (changesMask[1])
3007 {
3008 for (uint32 i = 0; i < Values.size(); ++i)
3009 {
3010 if (Values.HasChanged(i) || ignoreChangesMask)
3011 {
3012 data << uint64(Values[i]);
3013 }
3014 }
3015 }
3016 }
3017}
3018
3020{
3023}
3024
3025void BitVectors::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3026{
3027 for (uint32 i = 0; i < 13; ++i)
3028 {
3029 Values[i].WriteCreate(data, owner, receiver);
3030 }
3031}
3032
3033void BitVectors::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3034{
3035 Mask changesMask = _changesMask;
3036 if (ignoreChangesMask)
3037 changesMask.SetAll();
3038
3039 data.WriteBits(changesMask.GetBlocksMask(0), 1);
3040 if (changesMask.GetBlock(0))
3041 data.WriteBits(changesMask.GetBlock(0), 32);
3042
3043 data.FlushBits();
3044 if (changesMask[0])
3045 {
3046 for (uint32 i = 0; i < 13; ++i)
3047 {
3048 if (changesMask[1 + i])
3049 {
3050 Values[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
3051 }
3052 }
3053 }
3054}
3055
3057{
3060}
3061
3062void PlayerDataElement::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3063{
3064 data << uint32(Type);
3065 if (Type == 1)
3066 {
3067 data << float(FloatValue);
3068 }
3069 if (Type == 0)
3070 {
3071 data << int64(Int64Value);
3072 }
3073}
3074
3075void PlayerDataElement::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3076{
3077 data << uint32(Type);
3078 if (Type == 1)
3079 {
3080 data << float(FloatValue);
3081 }
3082 if (Type == 0)
3083 {
3084 data << int64(Int64Value);
3085 }
3086}
3087
3089{
3090 return Type == right.Type
3091 && FloatValue == right.FloatValue
3092 && Int64Value == right.Int64Value;
3093}
3094
3095void RestInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3096{
3097 data << uint32(Threshold);
3098 data << uint8(StateID);
3099}
3100
3101void RestInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3102{
3103 Mask changesMask = _changesMask;
3104 if (ignoreChangesMask)
3105 changesMask.SetAll();
3106
3107 data.WriteBits(changesMask.GetBlock(0), 3);
3108
3109 data.FlushBits();
3110 if (changesMask[0])
3111 {
3112 if (changesMask[1])
3113 {
3114 data << uint32(Threshold);
3115 }
3116 if (changesMask[2])
3117 {
3118 data << uint8(StateID);
3119 }
3120 }
3121}
3122
3124{
3128}
3129
3130void PVPInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3131{
3132 data << int8(Bracket);
3133 data << int32(PvpRatingID);
3134 data << uint32(WeeklyPlayed);
3135 data << uint32(WeeklyWon);
3136 data << uint32(SeasonPlayed);
3137 data << uint32(SeasonWon);
3138 data << uint32(Rating);
3139 data << uint32(WeeklyBestRating);
3140 data << uint32(SeasonBestRating);
3141 data << uint32(PvpTierID);
3143 data << uint32(Field_28);
3144 data << uint32(Field_2C);
3145 data << uint32(WeeklyRoundsPlayed);
3146 data << uint32(WeeklyRoundsWon);
3147 data << uint32(SeasonRoundsPlayed);
3148 data << uint32(SeasonRoundsWon);
3149 data.WriteBit(Disqualified);
3150 data.FlushBits();
3151}
3152
3153void PVPInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3154{
3155 Mask changesMask = _changesMask;
3156 if (ignoreChangesMask)
3157 changesMask.SetAll();
3158
3159 data.WriteBits(changesMask.GetBlock(0), 19);
3160
3161 if (changesMask[0])
3162 {
3163 if (changesMask[1])
3164 {
3165 data.WriteBit(Disqualified);
3166 }
3167 }
3168 data.FlushBits();
3169 if (changesMask[0])
3170 {
3171 if (changesMask[2])
3172 {
3173 data << int8(Bracket);
3174 }
3175 if (changesMask[3])
3176 {
3177 data << int32(PvpRatingID);
3178 }
3179 if (changesMask[4])
3180 {
3181 data << uint32(WeeklyPlayed);
3182 }
3183 if (changesMask[5])
3184 {
3185 data << uint32(WeeklyWon);
3186 }
3187 if (changesMask[6])
3188 {
3189 data << uint32(SeasonPlayed);
3190 }
3191 if (changesMask[7])
3192 {
3193 data << uint32(SeasonWon);
3194 }
3195 if (changesMask[8])
3196 {
3197 data << uint32(Rating);
3198 }
3199 if (changesMask[9])
3200 {
3201 data << uint32(WeeklyBestRating);
3202 }
3203 if (changesMask[10])
3204 {
3205 data << uint32(SeasonBestRating);
3206 }
3207 if (changesMask[11])
3208 {
3209 data << uint32(PvpTierID);
3210 }
3211 if (changesMask[12])
3212 {
3214 }
3215 if (changesMask[13])
3216 {
3217 data << uint32(Field_28);
3218 }
3219 if (changesMask[14])
3220 {
3221 data << uint32(Field_2C);
3222 }
3223 if (changesMask[15])
3224 {
3225 data << uint32(WeeklyRoundsPlayed);
3226 }
3227 if (changesMask[16])
3228 {
3229 data << uint32(WeeklyRoundsWon);
3230 }
3231 if (changesMask[17])
3232 {
3233 data << uint32(SeasonRoundsPlayed);
3234 }
3235 if (changesMask[18])
3236 {
3237 data << uint32(SeasonRoundsWon);
3238 }
3239 }
3240 data.FlushBits();
3241}
3242
3244{
3264}
3265
3266void CharacterRestriction::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3267{
3268 data << int32(Field_0);
3269 data << int32(Field_4);
3270 data << int32(Field_8);
3271 data.WriteBits(Type, 5);
3272 data.FlushBits();
3273}
3274
3275void CharacterRestriction::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3276{
3277 data << int32(Field_0);
3278 data << int32(Field_4);
3279 data << int32(Field_8);
3280 data.WriteBits(Type, 5);
3281 data.FlushBits();
3282}
3283
3285{
3286 return Field_0 == right.Field_0
3287 && Field_4 == right.Field_4
3288 && Field_8 == right.Field_8
3289 && Type == right.Type;
3290}
3291
3292void SpellPctModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3293{
3294 data << int32(ModIndex);
3295 data << float(ModifierValue);
3296 data << int32(LabelID);
3297}
3298
3299void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3300{
3301 data << int32(ModIndex);
3302 data << float(ModifierValue);
3303 data << int32(LabelID);
3304}
3305
3307{
3308 return ModIndex == right.ModIndex
3309 && ModifierValue == right.ModifierValue
3310 && LabelID == right.LabelID;
3311}
3312
3313void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3314{
3315 data << int32(ModIndex);
3316 data << int32(ModifierValue);
3317 data << int32(LabelID);
3318}
3319
3320void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3321{
3322 data << int32(ModIndex);
3323 data << int32(ModifierValue);
3324 data << int32(LabelID);
3325}
3326
3328{
3329 return ModIndex == right.ModIndex
3330 && ModifierValue == right.ModifierValue
3331 && LabelID == right.LabelID;
3332}
3333
3334void CompletedProject::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3335{
3336 data << uint32(ProjectID);
3337 data << int64(FirstCompleted);
3338 data << uint32(CompletionCount);
3339}
3340
3341void CompletedProject::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3342{
3343 Mask changesMask = _changesMask;
3344 if (ignoreChangesMask)
3345 changesMask.SetAll();
3346
3347 data.WriteBits(changesMask.GetBlock(0), 4);
3348
3349 data.FlushBits();
3350 if (changesMask[0])
3351 {
3352 if (changesMask[1])
3353 {
3354 data << uint32(ProjectID);
3355 }
3356 if (changesMask[2])
3357 {
3358 data << int64(FirstCompleted);
3359 }
3360 if (changesMask[3])
3361 {
3362 data << uint32(CompletionCount);
3363 }
3364 }
3365}
3366
3368{
3373}
3374
3375void ResearchHistory::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3376{
3377 data << uint32(CompletedProjects.size());
3378 for (uint32 i = 0; i < CompletedProjects.size(); ++i)
3379 {
3380 CompletedProjects[i].WriteCreate(data, owner, receiver);
3381 }
3382}
3383
3384void ResearchHistory::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3385{
3386 Mask changesMask = _changesMask;
3387 if (ignoreChangesMask)
3388 changesMask.SetAll();
3389
3390 data.WriteBits(changesMask.GetBlock(0), 2);
3391
3392 if (changesMask[0])
3393 {
3394 if (changesMask[1])
3395 {
3396 if (!ignoreChangesMask)
3398 else
3400 }
3401 }
3402 data.FlushBits();
3403 if (changesMask[0])
3404 {
3405 if (changesMask[1])
3406 {
3407 for (uint32 i = 0; i < CompletedProjects.size(); ++i)
3408 {
3409 if (CompletedProjects.HasChanged(i) || ignoreChangesMask)
3410 {
3411 CompletedProjects[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
3412 }
3413 }
3414 }
3415 }
3416}
3417
3419{
3422}
3423
3424void MawPower::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3425{
3426 data << int32(SpellID);
3427 data << int32(MawPowerID);
3428 data << int32(Stacks);
3429}
3430
3431void MawPower::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3432{
3433 data << int32(SpellID);
3434 data << int32(MawPowerID);
3435 data << int32(Stacks);
3436}
3437
3438bool MawPower::operator==(MawPower const& right) const
3439{
3440 return SpellID == right.SpellID
3441 && MawPowerID == right.MawPowerID
3442 && Stacks == right.Stacks;
3443}
3444
3445void MultiFloorExplore::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3446{
3447 data << uint32(WorldMapOverlayIDs.size());
3448 for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i)
3449 {
3450 data << int32(WorldMapOverlayIDs[i]);
3451 }
3452}
3453
3454void MultiFloorExplore::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3455{
3456 data << uint32(WorldMapOverlayIDs.size());
3457 for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i)
3458 {
3459 data << int32(WorldMapOverlayIDs[i]);
3460 }
3461 data.FlushBits();
3462}
3463
3465{
3466 return WorldMapOverlayIDs == right.WorldMapOverlayIDs;
3467}
3468
3469void RecipeProgressionInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3470{
3472 data << uint16(Experience);
3473}
3474
3475void RecipeProgressionInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3476{
3478 data << uint16(Experience);
3479}
3480
3482{
3484 && Experience == right.Experience;
3485}
3486
3487void ActivePlayerUnk901::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3488{
3489 data << *Field_0;
3490 data << int32(Field_10);
3491}
3492
3493void ActivePlayerUnk901::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3494{
3495 Mask changesMask = _changesMask;
3496 if (ignoreChangesMask)
3497 changesMask.SetAll();
3498
3499 data.WriteBits(changesMask.GetBlock(0), 3);
3500
3501 data.FlushBits();
3502 if (changesMask[0])
3503 {
3504 if (changesMask[1])
3505 {
3506 data << *Field_0;
3507 }
3508 if (changesMask[2])
3509 {
3510 data << int32(Field_10);
3511 }
3512 }
3513}
3514
3516{
3520}
3521
3522void QuestSession::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3523{
3524 data << *Owner;
3525 QuestCompleted->WriteCreate(data, owner, receiver);
3526}
3527
3528void QuestSession::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3529{
3530 Mask changesMask = _changesMask;
3531 if (ignoreChangesMask)
3532 changesMask.SetAll();
3533
3534 data.WriteBits(changesMask.GetBlock(0), 3);
3535
3536 data.FlushBits();
3537 if (changesMask[0])
3538 {
3539 if (changesMask[1])
3540 {
3541 data << *Owner;
3542 }
3543 if (changesMask[2])
3544 {
3545 QuestCompleted->WriteUpdate(data, ignoreChangesMask, owner, receiver);
3546 }
3547 }
3548}
3549
3551{
3555}
3556
3557void ReplayedQuest::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3558{
3559 data << int32(QuestID);
3560 data << uint32(ReplayTime);
3561}
3562
3563void ReplayedQuest::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3564{
3565 Mask changesMask = _changesMask;
3566 if (ignoreChangesMask)
3567 changesMask.SetAll();
3568
3569 data.WriteBits(changesMask.GetBlock(0), 3);
3570
3571 data.FlushBits();
3572 if (changesMask[0])
3573 {
3574 if (changesMask[1])
3575 {
3576 data << int32(QuestID);
3577 }
3578 if (changesMask[2])
3579 {
3580 data << uint32(ReplayTime);
3581 }
3582 }
3583}
3584
3586{
3590}
3591
3592void TraitEntry::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3593{
3594 data << int32(TraitNodeID);
3595 data << int32(TraitNodeEntryID);
3596 data << int32(Rank);
3597 data << int32(GrantedRanks);
3598}
3599
3600void TraitEntry::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3601{
3602 data << int32(TraitNodeID);
3603 data << int32(TraitNodeEntryID);
3604 data << int32(Rank);
3605 data << int32(GrantedRanks);
3606}
3607
3608bool TraitEntry::operator==(TraitEntry const& right) const
3609{
3610 return TraitNodeID == right.TraitNodeID
3612 && Rank == right.Rank
3613 && GrantedRanks == right.GrantedRanks;
3614}
3615
3616void TraitSubTreeCache::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3617{
3618 data << int32(TraitSubTreeID);
3619 data << uint32(Entries.size());
3620 for (uint32 i = 0; i < Entries.size(); ++i)
3621 {
3622 Entries[i].WriteCreate(data, owner, receiver);
3623 }
3624 data.WriteBits(Active, 1);
3625 data.FlushBits();
3626}
3627
3628void TraitSubTreeCache::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3629{
3630 data << int32(TraitSubTreeID);
3631 data << uint32(Entries.size());
3632 for (uint32 i = 0; i < Entries.size(); ++i)
3633 {
3634 Entries[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
3635 }
3636 data.FlushBits();
3637 data.WriteBits(Active, 1);
3638 data.FlushBits();
3639}
3640
3642{
3643 return Entries == right.Entries
3644 && TraitSubTreeID == right.TraitSubTreeID
3645 && Active == right.Active;
3646}
3647
3648void TraitConfig::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3649{
3650 data << int32(ID);
3651 data << int32(Type);
3652 data << uint32(Entries.size());
3653 data << uint32(SubTrees.size());
3654 if (Type == 2)
3655 {
3656 data << int32(SkillLineID);
3657 }
3658 if (Type == 1)
3659 {
3660 data << int32(ChrSpecializationID);
3661 data << int32(CombatConfigFlags);
3662 data << int32(LocalIdentifier);
3663 }
3664 if (Type == 3)
3665 {
3666 data << int32(TraitSystemID);
3667 }
3668 for (uint32 i = 0; i < Entries.size(); ++i)
3669 {
3670 Entries[i].WriteCreate(data, owner, receiver);
3671 }
3672 data.WriteBits(Name->size(), 9);
3673 for (uint32 i = 0; i < SubTrees.size(); ++i)
3674 {
3675 SubTrees[i].WriteCreate(data, owner, receiver);
3676 }
3677 data.WriteString(Name);
3678 data.FlushBits();
3679}
3680
3681void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3682{
3683 Mask changesMask = _changesMask;
3684 if (ignoreChangesMask)
3685 changesMask.SetAll();
3686
3687 data.WriteBits(changesMask.GetBlock(0), 14);
3688
3689 if (changesMask[0])
3690 {
3691 if (changesMask[1])
3692 {
3693 if (!ignoreChangesMask)
3694 Entries.WriteUpdateMask(data);
3695 else
3697 }
3698 if (changesMask[2])
3699 {
3700 if (!ignoreChangesMask)
3702 else
3704 }
3705 }
3706 data.FlushBits();
3707 if (changesMask[0])
3708 {
3709 if (changesMask[1])
3710 {
3711 for (uint32 i = 0; i < Entries.size(); ++i)
3712 {
3713 if (Entries.HasChanged(i) || ignoreChangesMask)
3714 {
3715 Entries[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
3716 }
3717 }
3718 }
3719 if (changesMask[2])
3720 {
3721 for (uint32 i = 0; i < SubTrees.size(); ++i)
3722 {
3723 if (SubTrees.HasChanged(i) || ignoreChangesMask)
3724 {
3725 SubTrees[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
3726 }
3727 }
3728 }
3729 if (changesMask[3])
3730 {
3731 data << int32(ID);
3732 }
3733 }
3734 if (changesMask[4])
3735 {
3736 if (changesMask[6])
3737 {
3738 data << int32(Type);
3739 }
3740 if (changesMask[7])
3741 {
3742 if (Type == 2)
3743 {
3744 data << int32(SkillLineID);
3745 }
3746 }
3747 }
3748 if (changesMask[8])
3749 {
3750 if (changesMask[9])
3751 {
3752 if (Type == 1)
3753 {
3754 data << int32(ChrSpecializationID);
3755 }
3756 }
3757 if (changesMask[10])
3758 {
3759 if (Type == 1)
3760 {
3761 data << int32(CombatConfigFlags);
3762 }
3763 }
3764 if (changesMask[11])
3765 {
3766 if (Type == 1)
3767 {
3768 data << int32(LocalIdentifier);
3769 }
3770 }
3771 }
3772 if (changesMask[12])
3773 {
3774 if (changesMask[13])
3775 {
3776 if (Type == 3)
3777 {
3778 data << int32(TraitSystemID);
3779 }
3780 }
3781 }
3782 if (changesMask[4])
3783 {
3784 if (changesMask[5])
3785 {
3786 data.WriteBits(Name->size(), 9);
3787 data.WriteString(Name);
3788 }
3789 }
3790 data.FlushBits();
3791}
3792
3794{
3806}
3807
3808void CraftingOrderItem::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3809{
3810 data << uint64(Field_0);
3811 data << *ItemGUID;
3812 data << *OwnerGUID;
3813 data << int32(ItemID);
3814 data << uint32(Quantity);
3815 data << int32(ReagentQuality);
3817 data.FlushBits();
3819 {
3820 data << uint8(DataSlotIndex);
3821 }
3822}
3823
3824void CraftingOrderItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3825{
3826 Mask changesMask = _changesMask;
3827 if (ignoreChangesMask)
3828 changesMask.SetAll();
3829
3830 data.WriteBits(changesMask.GetBlock(0), 7);
3831
3832 data.FlushBits();
3833 if (changesMask[0])
3834 {
3835 data << uint64(Field_0);
3836 }
3837 if (changesMask[1])
3838 {
3839 data << *ItemGUID;
3840 }
3841 if (changesMask[2])
3842 {
3843 data << *OwnerGUID;
3844 }
3845 if (changesMask[3])
3846 {
3847 data << int32(ItemID);
3848 }
3849 if (changesMask[4])
3850 {
3851 data << uint32(Quantity);
3852 }
3853 if (changesMask[5])
3854 {
3855 data << int32(ReagentQuality);
3856 }
3858 data.FlushBits();
3859 if (changesMask[6])
3860 {
3862 {
3863 data << uint8(DataSlotIndex);
3864 }
3865 }
3866}
3867
3869{
3878}
3879
3880void CraftingOrderCustomer::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3881{
3882 data << *CustomerGUID;
3883 data << *CustomerAccountGUID;
3884}
3885
3886void CraftingOrderCustomer::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3887{
3888 Mask changesMask = _changesMask;
3889 if (ignoreChangesMask)
3890 changesMask.SetAll();
3891
3892 data.WriteBits(changesMask.GetBlock(0), 2);
3893
3894 data.FlushBits();
3895 if (changesMask[0])
3896 {
3897 data << *CustomerGUID;
3898 }
3899 if (changesMask[1])
3900 {
3901 data << *CustomerAccountGUID;
3902 }
3903}
3904
3906{
3910}
3911
3912void CraftingOrderNpcCustomer::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3913{
3915 data << int32(Field_8);
3916}
3917
3918void CraftingOrderNpcCustomer::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3919{
3920 Mask changesMask = _changesMask;
3921 if (ignoreChangesMask)
3922 changesMask.SetAll();
3923
3924 data.WriteBits(changesMask.GetBlock(0), 2);
3925
3926 data.FlushBits();
3927 if (changesMask[0])
3928 {
3930 }
3931 if (changesMask[1])
3932 {
3933 data << int32(Field_8);
3934 }
3935}
3936
3938{
3942}
3943
3944void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
3945{
3946 data << int32(Field_0);
3947 data << uint64(OrderID);
3948 data << int32(SkillLineAbilityID);
3949 data << uint8(OrderState);
3950 data << uint8(OrderType);
3951 data << uint8(MinQuality);
3952 data << int64(ExpirationTime);
3953 data << int64(ClaimEndTime);
3954 data << int64(TipAmount);
3955 data << int64(ConsortiumCut);
3956 data << uint32(Flags);
3957 data << *CrafterGUID;
3958 data << *PersonalCrafterGUID;
3960 data << int32(NpcTreasureID);
3961 data << uint32(Reagents.size());
3962 data.WriteBits(CustomerNotes->size(), 10);
3963 data.WriteBits(Customer.has_value(), 1);
3964 data.WriteBits(NpcCustomer.has_value(), 1);
3965 data.WriteBits(OutputItem.has_value(), 1);
3967 data.FlushBits();
3968 for (uint32 i = 0; i < Reagents.size(); ++i)
3969 {
3970 Reagents[i].WriteCreate(data, owner, receiver);
3971 }
3973 if (Customer.has_value())
3974 {
3975 Customer->WriteCreate(data, owner, receiver);
3976 }
3977 if (NpcCustomer.has_value())
3978 {
3979 NpcCustomer->WriteCreate(data, owner, receiver);
3980 }
3981 if (OutputItem.has_value())
3982 {
3983 OutputItem->WriteCreate(data, owner, receiver);
3984 }
3986 {
3987 data << *OutputItemData;
3988 }
3989 data.FlushBits();
3990}
3991
3992void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
3993{
3994 Mask changesMask = _changesMask;
3995 if (ignoreChangesMask)
3996 changesMask.SetAll();
3997
3998 data.WriteBits(changesMask.GetBlock(0), 26);
3999
4000 if (changesMask[0])
4001 {
4002 if (changesMask[1])
4003 {
4004 if (!ignoreChangesMask)
4006 else
4008 }
4009 }
4010 data.FlushBits();
4011 if (changesMask[0])
4012 {
4013 if (changesMask[1])
4014 {
4015 for (uint32 i = 0; i < Reagents.size(); ++i)
4016 {
4017 if (Reagents.HasChanged(i) || ignoreChangesMask)
4018 {
4019 Reagents[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
4020 }
4021 }
4022 }
4023 if (changesMask[2])
4024 {
4025 data << int32(Field_0);
4026 }
4027 if (changesMask[3])
4028 {
4029 data << uint64(OrderID);
4030 }
4031 if (changesMask[4])
4032 {
4033 data << int32(SkillLineAbilityID);
4034 }
4035 if (changesMask[5])
4036 {
4037 data << uint8(OrderState);
4038 }
4039 }
4040 if (changesMask[6])
4041 {
4042 if (changesMask[7])
4043 {
4044 data << uint8(OrderType);
4045 }
4046 if (changesMask[8])
4047 {
4048 data << uint8(MinQuality);
4049 }
4050 if (changesMask[9])
4051 {
4052 data << int64(ExpirationTime);
4053 }
4054 if (changesMask[10])
4055 {
4056 data << int64(ClaimEndTime);
4057 }
4058 if (changesMask[11])
4059 {
4060 data << int64(TipAmount);
4061 }
4062 }
4063 if (changesMask[12])
4064 {
4065 if (changesMask[13])
4066 {
4067 data << int64(ConsortiumCut);
4068 }
4069 if (changesMask[14])
4070 {
4071 data << uint32(Flags);
4072 }
4073 if (changesMask[15])
4074 {
4075 data << *CrafterGUID;
4076 }
4077 if (changesMask[16])
4078 {
4079 data << *PersonalCrafterGUID;
4080 }
4081 if (changesMask[17])
4082 {
4084 }
4085 }
4086 if (changesMask[18])
4087 {
4088 if (changesMask[19])
4089 {
4090 data << int32(NpcTreasureID);
4091 }
4092 if (changesMask[20])
4093 {
4094 data.WriteBits(CustomerNotes->size(), 10);
4095 }
4096 data.WriteBits(Customer.has_value(), 1);
4097 data.WriteBits(NpcCustomer.has_value(), 1);
4098 data.WriteBits(OutputItem.has_value(), 1);
4099 }
4100 if (changesMask[24])
4101 {
4103 }
4104 if (changesMask[18])
4105 {
4106 if (changesMask[20])
4107 {
4109 }
4110 if (changesMask[21])
4111 {
4112 if (Customer.has_value())
4113 {
4114 Customer->WriteUpdate(data, ignoreChangesMask, owner, receiver);
4115 }
4116 }
4117 if (changesMask[22])
4118 {
4119 if (NpcCustomer.has_value())
4120 {
4121 NpcCustomer->WriteUpdate(data, ignoreChangesMask, owner, receiver);
4122 }
4123 }
4124 if (changesMask[23])
4125 {
4126 if (OutputItem.has_value())
4127 {
4128 OutputItem->WriteUpdate(data, ignoreChangesMask, owner, receiver);
4129 }
4130 }
4131 }
4132 if (changesMask[24])
4133 {
4134 if (changesMask[25])
4135 {
4137 {
4138 data << *OutputItemData;
4139 }
4140 }
4141 }
4142 data.FlushBits();
4143}
4144
4146{
4169}
4170
4171void CraftingOrder::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4172{
4173 Data->WriteCreate(data, owner, receiver);
4175 data.WriteBits(Enchantments.size(), 4);
4176 data.WriteBits(Gems.size(), 2);
4177 data.FlushBits();
4179 {
4180 data << *RecraftItemInfo;
4181 }
4182 for (uint32 i = 0; i < Enchantments.size(); ++i)
4183 {
4184 data << Enchantments[i];
4185 }
4186 for (uint32 i = 0; i < Gems.size(); ++i)
4187 {
4188 data << Gems[i];
4189 }
4190 data.FlushBits();
4191}
4192
4193void CraftingOrder::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4194{
4195 Mask changesMask = _changesMask;
4196 if (ignoreChangesMask)
4197 changesMask.SetAll();
4198
4199 data.WriteBits(changesMask.GetBlock(0), 4);
4200
4201 if (changesMask[0])
4202 {
4203 if (!ignoreChangesMask)
4205 else
4207 }
4208 if (changesMask[1])
4209 {
4210 if (!ignoreChangesMask)
4211 Gems.WriteUpdateMask(data, 2);
4212 else
4214 }
4215 data.FlushBits();
4216 if (changesMask[0])
4217 {
4218 for (uint32 i = 0; i < Enchantments.size(); ++i)
4219 {
4220 if (Enchantments.HasChanged(i) || ignoreChangesMask)
4221 {
4222 data << Enchantments[i];
4223 }
4224 }
4225 }
4226 if (changesMask[1])
4227 {
4228 for (uint32 i = 0; i < Gems.size(); ++i)
4229 {
4230 if (Gems.HasChanged(i) || ignoreChangesMask)
4231 {
4232 data << Gems[i];
4233 }
4234 }
4235 }
4236 if (changesMask[2])
4237 {
4238 Data->WriteUpdate(data, ignoreChangesMask, owner, receiver);
4239 }
4241 data.FlushBits();
4242 if (changesMask[3])
4243 {
4245 {
4246 data << *RecraftItemInfo;
4247 }
4248 }
4249 data.FlushBits();
4250}
4251
4253{
4259}
4260
4261void PersonalCraftingOrderCount::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4262{
4263 data << int32(ProfessionID);
4264 data << uint32(Count);
4265}
4266
4267void PersonalCraftingOrderCount::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4268{
4269 Mask changesMask = _changesMask;
4270 if (ignoreChangesMask)
4271 changesMask.SetAll();
4272
4273 data.WriteBits(changesMask.GetBlock(0), 2);
4274
4275 data.FlushBits();
4276 if (changesMask[0])
4277 {
4278 data << int32(ProfessionID);
4279 }
4280 if (changesMask[1])
4281 {
4282 data << uint32(Count);
4283 }
4284}
4285
4287{
4291}
4292
4293void NPCCraftingOrderInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4294{
4295 data << uint64(OrderID);
4297 data << int32(NpcTreasureID);
4299}
4300
4301void NPCCraftingOrderInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4302{
4303 Mask changesMask = _changesMask;
4304 if (ignoreChangesMask)
4305 changesMask.SetAll();
4306
4307 data.WriteBits(changesMask.GetBlock(0), 4);
4308
4309 data.FlushBits();
4310 if (changesMask[0])
4311 {
4312 data << uint64(OrderID);
4313 }
4314 if (changesMask[1])
4315 {
4317 }
4318 if (changesMask[2])
4319 {
4320 data << int32(NpcTreasureID);
4321 }
4322 if (changesMask[3])
4323 {
4325 }
4326}
4327
4329{
4335}
4336
4337void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4338{
4339 data << int32(SpellCategoryID);
4340 data << int32(ModCooldown);
4341}
4342
4343void CategoryCooldownMod::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4344{
4345 data << int32(SpellCategoryID);
4346 data << int32(ModCooldown);
4347}
4348
4350{
4351 return SpellCategoryID == right.SpellCategoryID
4352 && ModCooldown == right.ModCooldown;
4353}
4354
4355void WeeklySpellUse::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4356{
4357 data << int32(SpellCategoryID);
4358 data << uint8(Uses);
4359}
4360
4361void WeeklySpellUse::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4362{
4363 data << int32(SpellCategoryID);
4364 data << uint8(Uses);
4365}
4366
4368{
4369 return SpellCategoryID == right.SpellCategoryID
4370 && Uses == right.Uses;
4371}
4372
4373void StablePetInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4374{
4375 data << uint32(PetSlot);
4376 data << uint32(PetNumber);
4377 data << uint32(CreatureID);
4378 data << uint32(DisplayID);
4379 data << uint32(ExperienceLevel);
4380 data << uint8(PetFlags);
4381 data << uint32(Specialization);
4382 data.WriteBits(Name->size(), 8);
4383 data.WriteString(Name);
4384 data.FlushBits();
4385}
4386
4387void StablePetInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4388{
4389 Mask changesMask = _changesMask;
4390 if (ignoreChangesMask)
4391 changesMask.SetAll();
4392
4393 data.WriteBits(changesMask.GetBlock(0), 9);
4394
4395 data.FlushBits();
4396 if (changesMask[0])
4397 {
4398 if (changesMask[1])
4399 {
4400 data << uint32(PetSlot);
4401 }
4402 if (changesMask[2])
4403 {
4404 data << uint32(PetNumber);
4405 }
4406 if (changesMask[3])
4407 {
4408 data << uint32(CreatureID);
4409 }
4410 if (changesMask[4])
4411 {
4412 data << uint32(DisplayID);
4413 }
4414 if (changesMask[5])
4415 {
4416 data << uint32(ExperienceLevel);
4417 }
4418 if (changesMask[7])
4419 {
4420 data << uint8(PetFlags);
4421 }
4422 if (changesMask[8])
4423 {
4424 data << uint32(Specialization);
4425 }
4426 if (changesMask[6])
4427 {
4428 data.WriteBits(Name->size(), 8);
4429 data.WriteString(Name);
4430 }
4431 }
4432 data.FlushBits();
4433}
4434
4436{
4446}
4447
4448void StableInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4449{
4450 data << uint32(Pets.size());
4451 data << *StableMaster;
4452 for (uint32 i = 0; i < Pets.size(); ++i)
4453 {
4454 Pets[i].WriteCreate(data, owner, receiver);
4455 }
4456}
4457
4458void StableInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4459{
4460 Mask changesMask = _changesMask;
4461 if (ignoreChangesMask)
4462 changesMask.SetAll();
4463
4464 data.WriteBits(changesMask.GetBlock(0), 3);
4465
4466 if (changesMask[0])
4467 {
4468 if (changesMask[1])
4469 {
4470 if (!ignoreChangesMask)
4471 Pets.WriteUpdateMask(data);
4472 else
4474 }
4475 }
4476 data.FlushBits();
4477 if (changesMask[0])
4478 {
4479 if (changesMask[1])
4480 {
4481 for (uint32 i = 0; i < Pets.size(); ++i)
4482 {
4483 if (Pets.HasChanged(i) || ignoreChangesMask)
4484 {
4485 Pets[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
4486 }
4487 }
4488 }
4489 if (changesMask[2])
4490 {
4491 data << *StableMaster;
4492 }
4493 }
4494}
4495
4497{
4501}
4502
4503void CollectableSourceTrackedData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4504{
4505 data << int32(TargetType);
4506 data << int32(TargetID);
4508}
4509
4510void CollectableSourceTrackedData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4511{
4512 Mask changesMask = _changesMask;
4513 if (ignoreChangesMask)
4514 changesMask.SetAll();
4515
4516 data.WriteBits(changesMask.GetBlock(0), 4);
4517
4518 data.FlushBits();
4519 if (changesMask[0])
4520 {
4521 if (changesMask[1])
4522 {
4523 data << int32(TargetType);
4524 }
4525 if (changesMask[2])
4526 {
4527 data << int32(TargetID);
4528 }
4529 if (changesMask[3])
4530 {
4532 }
4533 }
4534}
4535
4537{
4542}
4543
4544void BankTabSettings::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4545{
4546 data.WriteBits(Name->size(), 7);
4547 data.WriteBits(Icon->size(), 9);
4548 data.WriteBits(Description->size(), 14);
4549 data << int32(DepositFlags);
4550 data.WriteString(Name);
4551 data.WriteString(Icon);
4553 data.FlushBits();
4554}
4555
4556void BankTabSettings::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4557{
4558 Mask changesMask = _changesMask;
4559 if (ignoreChangesMask)
4560 changesMask.SetAll();
4561
4562 data.WriteBits(changesMask.GetBlock(0), 4);
4563
4564 data.FlushBits();
4565 if (changesMask[0])
4566 {
4567 data.WriteBits(Name->size(), 7);
4568 }
4569 if (changesMask[1])
4570 {
4571 data.WriteBits(Icon->size(), 9);
4572 }
4573 if (changesMask[2])
4574 {
4575 data.WriteBits(Description->size(), 14);
4576 }
4577 if (changesMask[3])
4578 {
4579 data << int32(DepositFlags);
4580 }
4581 if (changesMask[0])
4582 {
4583 data.WriteString(Name);
4584 }
4585 if (changesMask[1])
4586 {
4587 data.WriteString(Icon);
4588 }
4589 if (changesMask[2])
4590 {
4592 }
4593 data.FlushBits();
4594}
4595
4597{
4603}
4604
4605void WalkInData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4606{
4607 data << int32(MapID);
4608 data << int64(Field_8);
4609 data << Field_18;
4610 data.WriteBits(Type, 1);
4611 data.FlushBits();
4612}
4613
4614void WalkInData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4615{
4616 data << int32(MapID);
4617 data << int64(Field_8);
4618 data << Field_18;
4619 data.WriteBits(Type, 1);
4620 data.FlushBits();
4621}
4622
4623bool WalkInData::operator==(WalkInData const& right) const
4624{
4625 return MapID == right.MapID
4626 && Field_8 == right.Field_8
4627 && Type == right.Type
4628 && Field_18 == right.Field_18;
4629}
4630
4631void DelveData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4632{
4633 data << int32(Field_0);
4634 data << uint64(Field_8);
4635 data << int32(Field_10);
4636 data << int32(SpellID);
4637 data << uint32(Owners.size());
4638 for (uint32 i = 0; i < Owners.size(); ++i)
4639 {
4640 data << Owners[i];
4641 }
4642 data.WriteBits(Started, 1);
4643 data.FlushBits();
4644}
4645
4646void DelveData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4647{
4648 data.FlushBits();
4649 data << int32(Field_0);
4650 data << uint64(Field_8);
4651 data << int32(Field_10);
4652 data << int32(SpellID);
4653 data << uint32(Owners.size());
4654 for (uint32 i = 0; i < Owners.size(); ++i)
4655 {
4656 data << Owners[i];
4657 }
4658 data.WriteBits(Started, 1);
4659 data.FlushBits();
4660}
4661
4662bool DelveData::operator==(DelveData const& right) const
4663{
4664 return Owners == right.Owners
4665 && Field_0 == right.Field_0
4666 && Field_8 == right.Field_8
4667 && Field_10 == right.Field_10
4668 && SpellID == right.SpellID
4669 && Started == right.Started;
4670}
4671
4672void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
4673{
4674 data << int16(ResearchProjectID);
4675}
4676
4677void Research::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
4678{
4679 data << int16(ResearchProjectID);
4680}
4681
4682bool Research::operator==(Research const& right) const
4683{
4684 return ResearchProjectID == right.ResearchProjectID;
4685}
4686
4687void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
4688{
4689 for (uint32 i = 0; i < 232; ++i)
4690 {
4691 data << InvSlots[i];
4692 }
4693 data << *FarsightObject;
4694 data << *SummonedBattlePetGUID;
4695 data << uint32(KnownTitles.size());
4696 data << uint64(Coinage);
4697 data << uint64(AccountBankCoinage);
4698 data << int32(XP);
4699 data << int32(NextLevelXP);
4700 data << int32(TrialXP);
4701 Skill->WriteCreate(data, owner, receiver);
4702 data << int32(CharacterPoints);
4703 data << int32(MaxTalentTiers);
4704 data << uint32(TrackCreatureMask);
4705 data << float(MainhandExpertise);
4706 data << float(OffhandExpertise);
4707 data << float(RangedExpertise);
4708 data << float(CombatRatingExpertise);
4709 data << float(BlockPercentage);
4710 data << float(DodgePercentage);
4711 data << float(DodgePercentageFromAttribute);
4712 data << float(ParryPercentage);
4713 data << float(ParryPercentageFromAttribute);
4714 data << float(CritPercentage);
4715 data << float(RangedCritPercentage);
4716 data << float(OffhandCritPercentage);
4717 data << float(SpellCritPercentage);
4718 data << int32(ShieldBlock);
4719 data << float(ShieldBlockCritPercentage);
4720 data << float(Mastery);
4721 data << float(Speed);
4722 data << float(Avoidance);
4723 data << float(Sturdiness);
4724 data << int32(Versatility);
4725 data << float(VersatilityBonus);
4726 data << float(PvpPowerDamage);
4727 data << float(PvpPowerHealing);
4728 BitVectors->WriteCreate(data, owner, receiver);
4730 data << uint32(AccountDataElements.size());
4731 for (uint32 i = 0; i < 2; ++i)
4732 {
4733 RestInfo[i].WriteCreate(data, owner, receiver);
4734 }
4735 for (uint32 i = 0; i < 7; ++i)
4736 {
4737 data << int32(ModDamageDonePos[i]);
4738 data << int32(ModDamageDoneNeg[i]);
4739 data << float(ModDamageDonePercent[i]);
4740 data << float(ModHealingDonePercent[i]);
4741 }
4742 data << int32(ModHealingDonePos);
4743 data << float(ModHealingPercent);
4744 data << float(ModPeriodicHealingDonePercent);
4745 for (uint32 i = 0; i < 3; ++i)
4746 {
4747 data << float(WeaponDmgMultipliers[i]);
4748 data << float(WeaponAtkSpeedMultipliers[i]);
4749 }
4750 data << float(ModSpellPowerPercent);
4751 data << float(ModResiliencePercent);
4752 data << float(OverrideSpellPowerByAPPercent);
4753 data << float(OverrideAPBySpellPowerPercent);
4754 data << int32(ModTargetResistance);
4756 data << uint32(LocalFlags);
4757 data << uint8(GrantableLevels);
4758 data << uint8(MultiActionBars);
4759 data << uint8(LifetimeMaxRank);
4760 data << uint8(NumRespecs);
4761 data << uint32(PvpMedals);
4762 for (uint32 i = 0; i < 12; ++i)
4763 {
4764 data << uint32(BuybackPrice[i]);
4765 data << int64(BuybackTimestamp[i]);
4766 }
4767 data << uint16(TodayHonorableKills);
4770 data << int32(WatchedFactionIndex);
4771 for (uint32 i = 0; i < 32; ++i)
4772 {
4773 data << int32(CombatRatings[i]);
4774 }
4775 data << uint32(PvpInfo.size());
4776 data << int32(MaxLevel);
4779 for (uint32 i = 0; i < 4; ++i)
4780 {
4781 data << uint32(NoReagentCostMask[i]);
4782 }
4783 data << int32(PetSpellPower);
4784 for (uint32 i = 0; i < 2; ++i)
4785 {
4786 data << int32(ProfessionSkillLine[i]);
4787 }
4788 data << float(UiHitModifier);
4789 data << float(UiSpellHitModifier);
4790 data << int32(HomeRealmTimeOffset);
4791 data << float(ModPetHaste);
4792 data << int8(JailersTowerLevelMax);
4793 data << int8(JailersTowerLevel);
4794 data << uint8(LocalRegenFlags);
4795 data << uint8(AuraVision);
4796 data << uint8(NumBackpackSlots);
4797 data << int32(OverrideSpellsID);
4798 data << uint16(LootSpecID);
4799 data << uint32(OverrideZonePVPType);
4800 for (uint32 i = 0; i < 5; ++i)
4801 {
4802 data << uint32(BagSlotFlags[i]);
4803 }
4804 for (uint32 i = 0; i < 7; ++i)
4805 {
4806 data << uint32(BankBagSlotFlags[i]);
4807 }
4808 data << int32(Honor);
4809 data << int32(HonorNextLevel);
4810 data << int32(PerksProgramCurrency);
4811 data << uint8(NumBankSlots);
4812 data << uint8(NumAccountBankTabs);
4813 for (uint32 i = 0; i < 1; ++i)
4814 {
4815 data << uint32(ResearchSites[i].size());
4816 data << uint32(ResearchSiteProgress[i].size());
4817 data << uint32(Research[i].size());
4818 for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
4819 {
4820 data << uint16(ResearchSites[i][j]);
4821 }
4822 for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
4823 {
4824 data << uint32(ResearchSiteProgress[i][j]);
4825 }
4826 for (uint32 j = 0; j < Research[i].size(); ++j)
4827 {
4828 Research[i][j].WriteCreate(data, owner, receiver);
4829 }
4830 }
4831 data << uint32(DailyQuestsCompleted.size());
4832 data << uint32(Field_1328.size());
4834 data << uint32(Heirlooms.size());
4835 data << uint32(HeirloomFlags.size());
4836 data << uint32(Toys.size());
4837 data << uint32(ToyFlags.size());
4838 data << uint32(Transmog.size());
4839 data << uint32(ConditionalTransmog.size());
4840 data << uint32(SelfResSpells.size());
4841 data << uint32(RuneforgePowers.size());
4842 data << uint32(TransmogIllusions.size());
4843 data << uint32(WarbandScenes.size());
4845 data << uint32(SpellPctModByLabel.size());
4846 data << uint32(SpellFlatModByLabel.size());
4847 data << uint32(MawPowers.size());
4849 data << uint32(RecipeProgression.size());
4850 data << uint32(ReplayedQuests.size());
4851 data << uint32(TaskQuests.size());
4852 data << uint32(DisabledSpells.size());
4854 data << int32(TimerunningSeasonID);
4855 data << int32(TransportServerTime);
4858 data << uint32(TraitConfigs.size());
4860 data << uint32(CraftingOrders.size());
4862 data << uint32(NpcCraftingOrders.size());
4863 data << uint32(CategoryCooldownMods.size());
4864 data << uint32(WeeklySpellUses.size());
4865 for (uint32 i = 0; i < 17; ++i)
4866 {
4867 data << float(ItemUpgradeHighWatermark[i]);
4868 }
4871 data << float(ItemUpgradeHighFingerWatermark);
4873 data << float(ItemUpgradeHighTrinketWatermark);
4877 for (uint32 i = 0; i < KnownTitles.size(); ++i)
4878 {
4879 data << uint64(KnownTitles[i]);
4880 }
4881 for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
4882 {
4883 CharacterDataElements[i].WriteCreate(data, owner, receiver);
4884 }
4885 for (uint32 i = 0; i < AccountDataElements.size(); ++i)
4886 {
4887 AccountDataElements[i].WriteCreate(data, owner, receiver);
4888 }
4889 for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
4890 {
4891 data << int32(DailyQuestsCompleted[i]);
4892 }
4893 for (uint32 i = 0; i < Field_1328.size(); ++i)
4894 {
4895 data << int32(Field_1328[i]);
4896 }
4897 for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
4898 {
4900 }
4901 for (uint32 i = 0; i < Heirlooms.size(); ++i)
4902 {
4903 data << int32(Heirlooms[i]);
4904 }
4905 for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
4906 {
4907 data << uint32(HeirloomFlags[i]);
4908 }
4909 for (uint32 i = 0; i < Toys.size(); ++i)
4910 {
4911 data << int32(Toys[i]);
4912 }
4913 for (uint32 i = 0; i < ToyFlags.size(); ++i)
4914 {
4915 data << uint32(ToyFlags[i]);
4916 }
4917 for (uint32 i = 0; i < Transmog.size(); ++i)
4918 {
4919 data << uint32(Transmog[i]);
4920 }
4921 for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
4922 {
4923 data << int32(ConditionalTransmog[i]);
4924 }
4925 for (uint32 i = 0; i < SelfResSpells.size(); ++i)
4926 {
4927 data << int32(SelfResSpells[i]);
4928 }
4929 for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
4930 {
4931 data << uint32(RuneforgePowers[i]);
4932 }
4933 for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
4934 {
4935 data << uint32(TransmogIllusions[i]);
4936 }
4937 for (uint32 i = 0; i < WarbandScenes.size(); ++i)
4938 {
4939 data << uint32(WarbandScenes[i]);
4940 }
4941 for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
4942 {
4943 SpellPctModByLabel[i].WriteCreate(data, owner, receiver);
4944 }
4945 for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
4946 {
4947 SpellFlatModByLabel[i].WriteCreate(data, owner, receiver);
4948 }
4949 for (uint32 i = 0; i < MawPowers.size(); ++i)
4950 {
4951 MawPowers[i].WriteCreate(data, owner, receiver);
4952 }
4953 for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
4954 {
4955 MultiFloorExploration[i].WriteCreate(data, owner, receiver);
4956 }
4957 for (uint32 i = 0; i < RecipeProgression.size(); ++i)
4958 {
4959 RecipeProgression[i].WriteCreate(data, owner, receiver);
4960 }
4961 for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
4962 {
4963 ReplayedQuests[i].WriteCreate(data, owner, receiver);
4964 }
4965 for (uint32 i = 0; i < TaskQuests.size(); ++i)
4966 {
4967 TaskQuests[i].WriteCreate(data, owner, receiver);
4968 }
4969 for (uint32 i = 0; i < DisabledSpells.size(); ++i)
4970 {
4971 data << int32(DisabledSpells[i]);
4972 }
4973 for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
4974 {
4975 PersonalCraftingOrderCounts[i].WriteCreate(data, owner, receiver);
4976 }
4977 for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i)
4978 {
4979 NpcCraftingOrders[i].WriteCreate(data, owner, receiver);
4980 }
4981 for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
4982 {
4983 CategoryCooldownMods[i].WriteCreate(data, owner, receiver);
4984 }
4985 for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
4986 {
4987 WeeklySpellUses[i].WriteCreate(data, owner, receiver);
4988 }
4989 for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
4990 {
4991 TrackedCollectableSources[i].WriteCreate(data, owner, receiver);
4992 }
4993 data.FlushBits();
5000 data.WriteBits(QuestSession.has_value(), 1);
5001 data.WriteBits(PetStable.has_value(), 1);
5003 data.WriteBits(WalkInData.has_value(), 1);
5004 data.WriteBits(DelveData.has_value(), 1);
5005 data.FlushBits();
5006 ResearchHistory->WriteCreate(data, owner, receiver);
5007 if (QuestSession.has_value())
5008 {
5009 QuestSession->WriteCreate(data, owner, receiver);
5010 }
5011 data << *FrozenPerksVendorItem;
5012 Field_1410->WriteCreate(data, owner, receiver);
5013 data << *DungeonScore;
5014 for (uint32 i = 0; i < PvpInfo.size(); ++i)
5015 {
5016 PvpInfo[i].WriteCreate(data, owner, receiver);
5017 }
5018 for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
5019 {
5020 CharacterRestrictions[i].WriteCreate(data, owner, receiver);
5021 }
5022 for (uint32 i = 0; i < TraitConfigs.size(); ++i)
5023 {
5024 TraitConfigs[i].WriteCreate(data, owner, receiver);
5025 }
5026 for (uint32 i = 0; i < CraftingOrders.size(); ++i)
5027 {
5028 CraftingOrders[i].WriteCreate(data, owner, receiver);
5029 }
5030 if (PetStable.has_value())
5031 {
5032 PetStable->WriteCreate(data, owner, receiver);
5033 }
5034 for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
5035 {
5036 AccountBankTabSettings[i].WriteCreate(data, owner, receiver);
5037 }
5038 if (WalkInData.has_value())
5039 {
5040 WalkInData->WriteCreate(data, owner, receiver);
5041 }
5042 if (DelveData.has_value())
5043 {
5044 DelveData->WriteCreate(data, owner, receiver);
5045 }
5046 data.FlushBits();
5047}
5048
5049void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
5050{
5051 WriteUpdate(data, _changesMask, false, owner, receiver);
5052}
5053
5054void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const
5055{
5056 data.WriteBits(changesMask.GetBlocksMask(0), 17);
5057 for (uint32 i = 0; i < 17; ++i)
5058 if (changesMask.GetBlock(i))
5059 data.WriteBits(changesMask.GetBlock(i), 32);
5060
5061 if (changesMask[0])
5062 {
5063 if (changesMask[1])
5064 {
5066 }
5067 if (changesMask[2])
5068 {
5070 }
5071 if (changesMask[3])
5072 {
5074 }
5075 if (changesMask[4])
5076 {
5078 }
5079 if (changesMask[5])
5080 {
5082 }
5083 if (changesMask[6])
5084 {
5086 }
5087 if (changesMask[7])
5088 {
5089 if (!ignoreNestedChangesMask)
5091 else
5093 }
5094 if (changesMask[8])
5095 {
5096 if (!ignoreNestedChangesMask)
5098 else
5100 }
5101 if (changesMask[9])
5102 {
5103 if (!ignoreNestedChangesMask)
5105 else
5107 }
5108 if (changesMask[10])
5109 {
5110 if (!ignoreNestedChangesMask)
5112 else
5114 }
5115 }
5116 if (changesMask[42])
5117 {
5118 for (uint32 i = 0; i < 1; ++i)
5119 {
5120 if (changesMask[43])
5121 {
5122 if (!ignoreNestedChangesMask)
5123 ResearchSites[i].WriteUpdateMask(data);
5124 else
5126 }
5127 }
5128 }
5129 if (changesMask[44])
5130 {
5131 for (uint32 i = 0; i < 1; ++i)
5132 {
5133 if (changesMask[45])
5134 {
5135 if (!ignoreNestedChangesMask)
5136 ResearchSiteProgress[i].WriteUpdateMask(data);
5137 else
5139 }
5140 }
5141 }
5142 if (changesMask[46])
5143 {
5144 for (uint32 i = 0; i < 1; ++i)
5145 {
5146 if (changesMask[47])
5147 {
5148 if (!ignoreNestedChangesMask)
5149 Research[i].WriteUpdateMask(data);
5150 else
5152 }
5153 }
5154 }
5155 if (changesMask[42])
5156 {
5157 for (uint32 i = 0; i < 1; ++i)
5158 {
5159 if (changesMask[43])
5160 {
5161 for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
5162 {
5163 if (ResearchSites[i].HasChanged(j) || ignoreNestedChangesMask)
5164 {
5165 data << uint16(ResearchSites[i][j]);
5166 }
5167 }
5168 }
5169 }
5170 }
5171 if (changesMask[44])
5172 {
5173 for (uint32 i = 0; i < 1; ++i)
5174 {
5175 if (changesMask[45])
5176 {
5177 for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
5178 {
5179 if (ResearchSiteProgress[i].HasChanged(j) || ignoreNestedChangesMask)
5180 {
5181 data << uint32(ResearchSiteProgress[i][j]);
5182 }
5183 }
5184 }
5185 }
5186 }
5187 if (changesMask[46])
5188 {
5189 for (uint32 i = 0; i < 1; ++i)
5190 {
5191 if (changesMask[47])
5192 {
5193 for (uint32 j = 0; j < Research[i].size(); ++j)
5194 {
5195 if (Research[i].HasChanged(j) || ignoreNestedChangesMask)
5196 {
5197 Research[i][j].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5198 }
5199 }
5200 }
5201 }
5202 }
5203 data.FlushBits();
5204 if (changesMask[0])
5205 {
5206 if (changesMask[11])
5207 {
5208 if (!ignoreNestedChangesMask)
5210 else
5212 }
5213 if (changesMask[12])
5214 {
5215 if (!ignoreNestedChangesMask)
5217 else
5219 }
5220 if (changesMask[13])
5221 {
5222 if (!ignoreNestedChangesMask)
5224 else
5226 }
5227 if (changesMask[14])
5228 {
5229 if (!ignoreNestedChangesMask)
5231 else
5233 }
5234 if (changesMask[15])
5235 {
5236 if (!ignoreNestedChangesMask)
5238 else
5240 }
5241 if (changesMask[16])
5242 {
5243 if (!ignoreNestedChangesMask)
5244 Toys.WriteUpdateMask(data);
5245 else
5247 }
5248 if (changesMask[17])
5249 {
5250 if (!ignoreNestedChangesMask)
5251 ToyFlags.WriteUpdateMask(data);
5252 else
5254 }
5255 if (changesMask[18])
5256 {
5257 if (!ignoreNestedChangesMask)
5259 else
5261 }
5262 if (changesMask[19])
5263 {
5264 if (!ignoreNestedChangesMask)
5266 else
5268 }
5269 if (changesMask[20])
5270 {
5271 if (!ignoreNestedChangesMask)
5273 else
5275 }
5276 if (changesMask[21])
5277 {
5278 if (!ignoreNestedChangesMask)
5280 else
5282 }
5283 if (changesMask[22])
5284 {
5285 if (!ignoreNestedChangesMask)
5287 else
5289 }
5290 if (changesMask[23])
5291 {
5292 if (!ignoreNestedChangesMask)
5294 else
5296 }
5297 if (changesMask[24])
5298 {
5299 if (!ignoreNestedChangesMask)
5301 else
5303 }
5304 if (changesMask[25])
5305 {
5306 if (!ignoreNestedChangesMask)
5307 SpellPctModByLabel.WriteUpdateMask(data);
5308 else
5310 }
5311 if (changesMask[26])
5312 {
5313 if (!ignoreNestedChangesMask)
5314 SpellFlatModByLabel.WriteUpdateMask(data);
5315 else
5317 }
5318 if (changesMask[27])
5319 {
5320 if (!ignoreNestedChangesMask)
5322 else
5324 }
5325 if (changesMask[28])
5326 {
5327 if (!ignoreNestedChangesMask)
5329 else
5331 }
5332 if (changesMask[29])
5333 {
5334 if (!ignoreNestedChangesMask)
5336 else
5338 }
5339 if (changesMask[30])
5340 {
5341 if (!ignoreNestedChangesMask)
5343 else
5345 }
5346 if (changesMask[31])
5347 {
5348 if (!ignoreNestedChangesMask)
5350 else
5352 }
5353 }
5354 if (changesMask[32])
5355 {
5356 if (changesMask[33])
5357 {
5358 if (!ignoreNestedChangesMask)
5360 else
5362 }
5363 if (changesMask[34])
5364 {
5365 if (!ignoreNestedChangesMask)
5367 else
5369 }
5370 if (changesMask[35])
5371 {
5372 if (!ignoreNestedChangesMask)
5374 else
5376 }
5377 if (changesMask[36])
5378 {
5379 if (!ignoreNestedChangesMask)
5381 else
5383 }
5384 if (changesMask[37])
5385 {
5386 if (!ignoreNestedChangesMask)
5388 else
5390 }
5391 if (changesMask[38])
5392 {
5393 if (!ignoreNestedChangesMask)
5395 else
5397 }
5398 if (changesMask[39])
5399 {
5400 if (!ignoreNestedChangesMask)
5402 else
5404 }
5405 if (changesMask[40])
5406 {
5407 if (!ignoreNestedChangesMask)
5409 else
5411 }
5412 }
5413 data.FlushBits();
5414 if (changesMask[0])
5415 {
5416 if (changesMask[7])
5417 {
5418 for (uint32 i = 0; i < KnownTitles.size(); ++i)
5419 {
5420 if (KnownTitles.HasChanged(i) || ignoreNestedChangesMask)
5421 {
5422 data << uint64(KnownTitles[i]);
5423 }
5424 }
5425 }
5426 if (changesMask[8])
5427 {
5428 for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
5429 {
5430 if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask)
5431 {
5432 CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5433 }
5434 }
5435 }
5436 if (changesMask[9])
5437 {
5438 for (uint32 i = 0; i < AccountDataElements.size(); ++i)
5439 {
5440 if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask)
5441 {
5442 AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5443 }
5444 }
5445 }
5446 if (changesMask[11])
5447 {
5448 for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
5449 {
5450 if (DailyQuestsCompleted.HasChanged(i) || ignoreNestedChangesMask)
5451 {
5452 data << int32(DailyQuestsCompleted[i]);
5453 }
5454 }
5455 }
5456 if (changesMask[12])
5457 {
5458 for (uint32 i = 0; i < Field_1328.size(); ++i)
5459 {
5460 if (Field_1328.HasChanged(i) || ignoreNestedChangesMask)
5461 {
5462 data << int32(Field_1328[i]);
5463 }
5464 }
5465 }
5466 if (changesMask[13])
5467 {
5468 for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
5469 {
5470 if (AvailableQuestLineXQuestIDs.HasChanged(i) || ignoreNestedChangesMask)
5471 {
5473 }
5474 }
5475 }
5476 if (changesMask[14])
5477 {
5478 for (uint32 i = 0; i < Heirlooms.size(); ++i)
5479 {
5480 if (Heirlooms.HasChanged(i) || ignoreNestedChangesMask)
5481 {
5482 data << int32(Heirlooms[i]);
5483 }
5484 }
5485 }
5486 if (changesMask[15])
5487 {
5488 for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
5489 {
5490 if (HeirloomFlags.HasChanged(i) || ignoreNestedChangesMask)
5491 {
5492 data << uint32(HeirloomFlags[i]);
5493 }
5494 }
5495 }
5496 if (changesMask[16])
5497 {
5498 for (uint32 i = 0; i < Toys.size(); ++i)
5499 {
5500 if (Toys.HasChanged(i) || ignoreNestedChangesMask)
5501 {
5502 data << int32(Toys[i]);
5503 }
5504 }
5505 }
5506 if (changesMask[17])
5507 {
5508 for (uint32 i = 0; i < ToyFlags.size(); ++i)
5509 {
5510 if (ToyFlags.HasChanged(i) || ignoreNestedChangesMask)
5511 {
5512 data << uint32(ToyFlags[i]);
5513 }
5514 }
5515 }
5516 if (changesMask[18])
5517 {
5518 for (uint32 i = 0; i < Transmog.size(); ++i)
5519 {
5520 if (Transmog.HasChanged(i) || ignoreNestedChangesMask)
5521 {
5522 data << uint32(Transmog[i]);
5523 }
5524 }
5525 }
5526 if (changesMask[19])
5527 {
5528 for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
5529 {
5530 if (ConditionalTransmog.HasChanged(i) || ignoreNestedChangesMask)
5531 {
5532 data << int32(ConditionalTransmog[i]);
5533 }
5534 }
5535 }
5536 if (changesMask[20])
5537 {
5538 for (uint32 i = 0; i < SelfResSpells.size(); ++i)
5539 {
5540 if (SelfResSpells.HasChanged(i) || ignoreNestedChangesMask)
5541 {
5542 data << int32(SelfResSpells[i]);
5543 }
5544 }
5545 }
5546 if (changesMask[21])
5547 {
5548 for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
5549 {
5550 if (RuneforgePowers.HasChanged(i) || ignoreNestedChangesMask)
5551 {
5552 data << uint32(RuneforgePowers[i]);
5553 }
5554 }
5555 }
5556 if (changesMask[22])
5557 {
5558 for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
5559 {
5560 if (TransmogIllusions.HasChanged(i) || ignoreNestedChangesMask)
5561 {
5562 data << uint32(TransmogIllusions[i]);
5563 }
5564 }
5565 }
5566 if (changesMask[23])
5567 {
5568 for (uint32 i = 0; i < WarbandScenes.size(); ++i)
5569 {
5570 if (WarbandScenes.HasChanged(i) || ignoreNestedChangesMask)
5571 {
5572 data << uint32(WarbandScenes[i]);
5573 }
5574 }
5575 }
5576 if (changesMask[25])
5577 {
5578 for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
5579 {
5580 if (SpellPctModByLabel.HasChanged(i) || ignoreNestedChangesMask)
5581 {
5582 SpellPctModByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5583 }
5584 }
5585 }
5586 if (changesMask[26])
5587 {
5588 for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
5589 {
5590 if (SpellFlatModByLabel.HasChanged(i) || ignoreNestedChangesMask)
5591 {
5592 SpellFlatModByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5593 }
5594 }
5595 }
5596 if (changesMask[27])
5597 {
5598 for (uint32 i = 0; i < MawPowers.size(); ++i)
5599 {
5600 if (MawPowers.HasChanged(i) || ignoreNestedChangesMask)
5601 {
5602 MawPowers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5603 }
5604 }
5605 }
5606 if (changesMask[28])
5607 {
5608 for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
5609 {
5610 if (MultiFloorExploration.HasChanged(i) || ignoreNestedChangesMask)
5611 {
5612 MultiFloorExploration[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5613 }
5614 }
5615 }
5616 if (changesMask[29])
5617 {
5618 for (uint32 i = 0; i < RecipeProgression.size(); ++i)
5619 {
5620 if (RecipeProgression.HasChanged(i) || ignoreNestedChangesMask)
5621 {
5622 RecipeProgression[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5623 }
5624 }
5625 }
5626 if (changesMask[30])
5627 {
5628 for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
5629 {
5630 if (ReplayedQuests.HasChanged(i) || ignoreNestedChangesMask)
5631 {
5632 ReplayedQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5633 }
5634 }
5635 }
5636 if (changesMask[31])
5637 {
5638 for (uint32 i = 0; i < TaskQuests.size(); ++i)
5639 {
5640 if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask)
5641 {
5642 TaskQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5643 }
5644 }
5645 }
5646 }
5647 if (changesMask[32])
5648 {
5649 if (changesMask[33])
5650 {
5651 for (uint32 i = 0; i < DisabledSpells.size(); ++i)
5652 {
5653 if (DisabledSpells.HasChanged(i) || ignoreNestedChangesMask)
5654 {
5655 data << int32(DisabledSpells[i]);
5656 }
5657 }
5658 }
5659 if (changesMask[36])
5660 {
5661 for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
5662 {
5663 if (PersonalCraftingOrderCounts.HasChanged(i) || ignoreNestedChangesMask)
5664 {
5665 PersonalCraftingOrderCounts[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5666 }
5667 }
5668 }
5669 if (changesMask[37])
5670 {
5671 for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i)
5672 {
5673 if (NpcCraftingOrders.HasChanged(i) || ignoreNestedChangesMask)
5674 {
5675 NpcCraftingOrders[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5676 }
5677 }
5678 }
5679 if (changesMask[38])
5680 {
5681 for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
5682 {
5683 if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask)
5684 {
5685 CategoryCooldownMods[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5686 }
5687 }
5688 }
5689 if (changesMask[39])
5690 {
5691 for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
5692 {
5693 if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask)
5694 {
5695 WeeklySpellUses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5696 }
5697 }
5698 }
5699 if (changesMask[40])
5700 {
5701 for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
5702 {
5703 if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask)
5704 {
5705 TrackedCollectableSources[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5706 }
5707 }
5708 }
5709 if (changesMask[41])
5710 {
5711 if (!ignoreNestedChangesMask)
5713 else
5715 }
5716 }
5717 if (changesMask[0])
5718 {
5719 if (changesMask[10])
5720 {
5721 for (uint32 i = 0; i < PvpInfo.size(); ++i)
5722 {
5723 if (PvpInfo.HasChanged(i) || ignoreNestedChangesMask)
5724 {
5725 PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5726 }
5727 }
5728 }
5729 if (changesMask[24])
5730 {
5731 for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
5732 {
5733 if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask)
5734 {
5735 CharacterRestrictions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5736 }
5737 }
5738 }
5739 }
5740 if (changesMask[32])
5741 {
5742 if (changesMask[34])
5743 {
5744 for (uint32 i = 0; i < TraitConfigs.size(); ++i)
5745 {
5746 if (TraitConfigs.HasChanged(i) || ignoreNestedChangesMask)
5747 {
5748 TraitConfigs[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5749 }
5750 }
5751 }
5752 if (changesMask[35])
5753 {
5754 for (uint32 i = 0; i < CraftingOrders.size(); ++i)
5755 {
5756 if (CraftingOrders.HasChanged(i) || ignoreNestedChangesMask)
5757 {
5758 CraftingOrders[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5759 }
5760 }
5761 }
5762 if (changesMask[41])
5763 {
5764 for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
5765 {
5766 if (AccountBankTabSettings.HasChanged(i) || ignoreNestedChangesMask)
5767 {
5768 AccountBankTabSettings[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5769 }
5770 }
5771 }
5772 if (changesMask[48])
5773 {
5774 data << *FarsightObject;
5775 }
5776 if (changesMask[49])
5777 {
5778 data << *SummonedBattlePetGUID;
5779 }
5780 if (changesMask[50])
5781 {
5782 data << uint64(Coinage);
5783 }
5784 if (changesMask[51])
5785 {
5786 data << uint64(AccountBankCoinage);
5787 }
5788 if (changesMask[52])
5789 {
5790 data << int32(XP);
5791 }
5792 if (changesMask[53])
5793 {
5794 data << int32(NextLevelXP);
5795 }
5796 if (changesMask[54])
5797 {
5798 data << int32(TrialXP);
5799 }
5800 if (changesMask[55])
5801 {
5802 Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5803 }
5804 if (changesMask[56])
5805 {
5806 data << int32(CharacterPoints);
5807 }
5808 if (changesMask[57])
5809 {
5810 data << int32(MaxTalentTiers);
5811 }
5812 if (changesMask[58])
5813 {
5814 data << uint32(TrackCreatureMask);
5815 }
5816 if (changesMask[59])
5817 {
5818 data << float(MainhandExpertise);
5819 }
5820 if (changesMask[60])
5821 {
5822 data << float(OffhandExpertise);
5823 }
5824 if (changesMask[61])
5825 {
5826 data << float(RangedExpertise);
5827 }
5828 if (changesMask[62])
5829 {
5830 data << float(CombatRatingExpertise);
5831 }
5832 if (changesMask[63])
5833 {
5834 data << float(BlockPercentage);
5835 }
5836 if (changesMask[64])
5837 {
5838 data << float(DodgePercentage);
5839 }
5840 if (changesMask[65])
5841 {
5842 data << float(DodgePercentageFromAttribute);
5843 }
5844 if (changesMask[66])
5845 {
5846 data << float(ParryPercentage);
5847 }
5848 if (changesMask[67])
5849 {
5850 data << float(ParryPercentageFromAttribute);
5851 }
5852 if (changesMask[68])
5853 {
5854 data << float(CritPercentage);
5855 }
5856 if (changesMask[69])
5857 {
5858 data << float(RangedCritPercentage);
5859 }
5860 }
5861 if (changesMask[70])
5862 {
5863 if (changesMask[71])
5864 {
5865 data << float(OffhandCritPercentage);
5866 }
5867 if (changesMask[72])
5868 {
5869 data << float(SpellCritPercentage);
5870 }
5871 if (changesMask[73])
5872 {
5873 data << int32(ShieldBlock);
5874 }
5875 if (changesMask[74])
5876 {
5877 data << float(ShieldBlockCritPercentage);
5878 }
5879 if (changesMask[75])
5880 {
5881 data << float(Mastery);
5882 }
5883 if (changesMask[76])
5884 {
5885 data << float(Speed);
5886 }
5887 if (changesMask[77])
5888 {
5889 data << float(Avoidance);
5890 }
5891 if (changesMask[78])
5892 {
5893 data << float(Sturdiness);
5894 }
5895 if (changesMask[79])
5896 {
5897 data << int32(Versatility);
5898 }
5899 if (changesMask[80])
5900 {
5901 data << float(VersatilityBonus);
5902 }
5903 if (changesMask[81])
5904 {
5905 data << float(PvpPowerDamage);
5906 }
5907 if (changesMask[82])
5908 {
5909 data << float(PvpPowerHealing);
5910 }
5911 if (changesMask[83])
5912 {
5913 BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
5914 }
5915 if (changesMask[84])
5916 {
5917 data << int32(ModHealingDonePos);
5918 }
5919 if (changesMask[85])
5920 {
5921 data << float(ModHealingPercent);
5922 }
5923 if (changesMask[86])
5924 {
5925 data << float(ModPeriodicHealingDonePercent);
5926 }
5927 if (changesMask[87])
5928 {
5929 data << float(ModSpellPowerPercent);
5930 }
5931 if (changesMask[88])
5932 {
5933 data << float(ModResiliencePercent);
5934 }
5935 if (changesMask[89])
5936 {
5937 data << float(OverrideSpellPowerByAPPercent);
5938 }
5939 if (changesMask[90])
5940 {
5941 data << float(OverrideAPBySpellPowerPercent);
5942 }
5943 if (changesMask[91])
5944 {
5945 data << int32(ModTargetResistance);
5946 }
5947 if (changesMask[92])
5948 {
5950 }
5951 if (changesMask[93])
5952 {
5953 data << uint32(LocalFlags);
5954 }
5955 if (changesMask[94])
5956 {
5957 data << uint8(GrantableLevels);
5958 }
5959 if (changesMask[95])
5960 {
5961 data << uint8(MultiActionBars);
5962 }
5963 if (changesMask[96])
5964 {
5965 data << uint8(LifetimeMaxRank);
5966 }
5967 if (changesMask[97])
5968 {
5969 data << uint8(NumRespecs);
5970 }
5971 if (changesMask[98])
5972 {
5973 data << uint32(PvpMedals);
5974 }
5975 if (changesMask[99])
5976 {
5977 data << uint16(TodayHonorableKills);
5978 }
5979 if (changesMask[100])
5980 {
5982 }
5983 if (changesMask[101])
5984 {
5986 }
5987 }
5988 if (changesMask[102])
5989 {
5990 if (changesMask[103])
5991 {
5992 data << int32(WatchedFactionIndex);
5993 }
5994 if (changesMask[104])
5995 {
5996 data << int32(MaxLevel);
5997 }
5998 if (changesMask[105])
5999 {
6001 }
6002 if (changesMask[106])
6003 {
6005 }
6006 if (changesMask[107])
6007 {
6008 data << int32(PetSpellPower);
6009 }
6010 if (changesMask[108])
6011 {
6012 data << float(UiHitModifier);
6013 }
6014 if (changesMask[109])
6015 {
6016 data << float(UiSpellHitModifier);
6017 }
6018 if (changesMask[110])
6019 {
6020 data << int32(HomeRealmTimeOffset);
6021 }
6022 if (changesMask[111])
6023 {
6024 data << float(ModPetHaste);
6025 }
6026 if (changesMask[112])
6027 {
6028 data << int8(JailersTowerLevelMax);
6029 }
6030 if (changesMask[113])
6031 {
6032 data << int8(JailersTowerLevel);
6033 }
6034 if (changesMask[114])
6035 {
6036 data << uint8(LocalRegenFlags);
6037 }
6038 if (changesMask[115])
6039 {
6040 data << uint8(AuraVision);
6041 }
6042 if (changesMask[116])
6043 {
6044 data << uint8(NumBackpackSlots);
6045 }
6046 if (changesMask[117])
6047 {
6048 data << int32(OverrideSpellsID);
6049 }
6050 if (changesMask[118])
6051 {
6052 data << uint16(LootSpecID);
6053 }
6054 if (changesMask[119])
6055 {
6056 data << uint32(OverrideZonePVPType);
6057 }
6058 if (changesMask[120])
6059 {
6060 data << int32(Honor);
6061 }
6062 if (changesMask[121])
6063 {
6064 data << int32(HonorNextLevel);
6065 }
6066 if (changesMask[122])
6067 {
6068 data << int32(PerksProgramCurrency);
6069 }
6070 if (changesMask[123])
6071 {
6072 data << uint8(NumBankSlots);
6073 }
6074 if (changesMask[124])
6075 {
6076 data << uint8(NumAccountBankTabs);
6077 }
6078 if (changesMask[129])
6079 {
6081 }
6082 if (changesMask[130])
6083 {
6084 data << int32(TimerunningSeasonID);
6085 }
6086 if (changesMask[131])
6087 {
6088 data << int32(TransportServerTime);
6089 }
6090 if (changesMask[132])
6091 {
6093 }
6094 if (changesMask[133])
6095 {
6097 }
6098 }
6099 if (changesMask[134])
6100 {
6101 if (changesMask[136])
6102 {
6104 }
6105 if (changesMask[137])
6106 {
6108 }
6109 if (changesMask[138])
6110 {
6112 }
6113 if (changesMask[139])
6114 {
6115 data << float(ItemUpgradeHighFingerWatermark);
6116 }
6117 if (changesMask[140])
6118 {
6120 }
6121 if (changesMask[141])
6122 {
6123 data << float(ItemUpgradeHighTrinketWatermark);
6124 }
6125 if (changesMask[142])
6126 {
6128 }
6129 if (changesMask[144])
6130 {
6132 }
6133 }
6134 if (changesMask[102])
6135 {
6136 data.WriteBits(QuestSession.has_value(), 1);
6137 }
6138 if (changesMask[134])
6139 {
6140 data.WriteBits(PetStable.has_value(), 1);
6141 data.WriteBits(WalkInData.has_value(), 1);
6142 data.WriteBits(DelveData.has_value(), 1);
6143 }
6144 data.FlushBits();
6145 if (changesMask[102])
6146 {
6147 if (changesMask[125])
6148 {
6149 ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6150 }
6151 if (changesMask[127])
6152 {
6153 if (QuestSession.has_value())
6154 {
6155 QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6156 }
6157 }
6158 if (changesMask[126])
6159 {
6160 data << *FrozenPerksVendorItem;
6161 }
6162 if (changesMask[128])
6163 {
6164 Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6165 }
6166 }
6167 if (changesMask[134])
6168 {
6169 if (changesMask[135])
6170 {
6171 data << *DungeonScore;
6172 }
6173 if (changesMask[143])
6174 {
6175 if (PetStable.has_value())
6176 {
6177 PetStable->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6178 }
6179 }
6180 if (changesMask[145])
6181 {
6182 if (WalkInData.has_value())
6183 {
6184 WalkInData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6185 }
6186 }
6187 if (changesMask[146])
6188 {
6189 if (DelveData.has_value())
6190 {
6191 DelveData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6192 }
6193 }
6194 }
6195 if (changesMask[147])
6196 {
6197 for (uint32 i = 0; i < 232; ++i)
6198 {
6199 if (changesMask[148 + i])
6200 {
6201 data << InvSlots[i];
6202 }
6203 }
6204 }
6205 if (changesMask[380])
6206 {
6207 for (uint32 i = 0; i < 2; ++i)
6208 {
6209 if (changesMask[381 + i])
6210 {
6211 RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6212 }
6213 }
6214 }
6215 if (changesMask[383])
6216 {
6217 for (uint32 i = 0; i < 7; ++i)
6218 {
6219 if (changesMask[384 + i])
6220 {
6221 data << int32(ModDamageDonePos[i]);
6222 }
6223 if (changesMask[391 + i])
6224 {
6225 data << int32(ModDamageDoneNeg[i]);
6226 }
6227 if (changesMask[398 + i])
6228 {
6229 data << float(ModDamageDonePercent[i]);
6230 }
6231 if (changesMask[405 + i])
6232 {
6233 data << float(ModHealingDonePercent[i]);
6234 }
6235 }
6236 }
6237 if (changesMask[412])
6238 {
6239 for (uint32 i = 0; i < 3; ++i)
6240 {
6241 if (changesMask[413 + i])
6242 {
6243 data << float(WeaponDmgMultipliers[i]);
6244 }
6245 if (changesMask[416 + i])
6246 {
6247 data << float(WeaponAtkSpeedMultipliers[i]);
6248 }
6249 }
6250 }
6251 if (changesMask[419])
6252 {
6253 for (uint32 i = 0; i < 12; ++i)
6254 {
6255 if (changesMask[420 + i])
6256 {
6257 data << uint32(BuybackPrice[i]);
6258 }
6259 if (changesMask[432 + i])
6260 {
6261 data << int64(BuybackTimestamp[i]);
6262 }
6263 }
6264 }
6265 if (changesMask[444])
6266 {
6267 for (uint32 i = 0; i < 32; ++i)
6268 {
6269 if (changesMask[445 + i])
6270 {
6271 data << int32(CombatRatings[i]);
6272 }
6273 }
6274 }
6275 if (changesMask[477])
6276 {
6277 for (uint32 i = 0; i < 4; ++i)
6278 {
6279 if (changesMask[478 + i])
6280 {
6281 data << uint32(NoReagentCostMask[i]);
6282 }
6283 }
6284 }
6285 if (changesMask[482])
6286 {
6287 for (uint32 i = 0; i < 2; ++i)
6288 {
6289 if (changesMask[483 + i])
6290 {
6291 data << int32(ProfessionSkillLine[i]);
6292 }
6293 }
6294 }
6295 if (changesMask[485])
6296 {
6297 for (uint32 i = 0; i < 5; ++i)
6298 {
6299 if (changesMask[486 + i])
6300 {
6301 data << uint32(BagSlotFlags[i]);
6302 }
6303 }
6304 }
6305 if (changesMask[491])
6306 {
6307 for (uint32 i = 0; i < 7; ++i)
6308 {
6309 if (changesMask[492 + i])
6310 {
6311 data << uint32(BankBagSlotFlags[i]);
6312 }
6313 }
6314 }
6315 if (changesMask[499])
6316 {
6317 for (uint32 i = 0; i < 17; ++i)
6318 {
6319 if (changesMask[500 + i])
6320 {
6321 data << float(ItemUpgradeHighWatermark[i]);
6322 }
6323 }
6324 }
6325 data.FlushBits();
6326}
6327
6329{
6486}
6487
6488void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const
6489{
6491
6492 data << int32(DisplayID);
6493 data << uint32(SpellVisualID);
6494 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, owner, receiver));
6497 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver);
6498 data << uint32(stateWorldEffectIDs->size());
6500 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
6501 {
6502 data << uint32((*stateWorldEffectIDs)[i]);
6503 }
6504 data << *CreatedBy;
6505 data << *GuildGUID;
6506 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
6507 data << float(ParentRotation->x);
6508 data << float(ParentRotation->y);
6509 data << float(ParentRotation->z);
6510 data << float(ParentRotation->w);
6511 data << int32(FactionTemplate);
6512 data << int8(ViewerDependentValue<StateTag>::GetValue(this, owner, receiver));
6513 data << int8(TypeID);
6514 data << uint8(PercentHealth);
6515 data << uint32(ArtKit);
6516 data << uint32(EnableDoodadSets.size());
6517 data << uint32(CustomParam);
6518 data << int32(Level);
6519 data << uint32(AnimGroupInstance);
6520 data << uint32(UiWidgetItemID);
6521 data << uint32(UiWidgetItemQuality);
6523 data << uint32(WorldEffects.size());
6524 for (uint32 i = 0; i < EnableDoodadSets.size(); ++i)
6525 {
6526 data << int32(EnableDoodadSets[i]);
6527 }
6528 for (uint32 i = 0; i < WorldEffects.size(); ++i)
6529 {
6530 data << int32(WorldEffects[i]);
6531 }
6532}
6533
6534void GameObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const
6535{
6536 WriteUpdate(data, _changesMask, false, owner, receiver);
6537}
6538
6539void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, GameObject const* owner, Player const* receiver) const
6540{
6541 data.WriteBits(changesMask.GetBlock(0), 25);
6542
6544
6545 if (changesMask[0])
6546 {
6547 if (changesMask[1])
6548 {
6549 stateWorldEffectIDs = ViewerDependentValue<StateWorldEffectIDsTag>::GetValue(this, owner, receiver);
6550 data.WriteBits(stateWorldEffectIDs->size(), 32);
6551 for (uint32 i = 0; i < stateWorldEffectIDs->size(); ++i)
6552 {
6553 data << uint32((*stateWorldEffectIDs)[i]);
6554 }
6555 }
6556 }
6557 data.FlushBits();
6558 if (changesMask[0])
6559 {
6560 if (changesMask[2])
6561 {
6562 if (!ignoreNestedChangesMask)
6564 else
6566 }
6567 if (changesMask[3])
6568 {
6569 if (!ignoreNestedChangesMask)
6571 else
6573 }
6574 }
6575 data.FlushBits();
6576 if (changesMask[0])
6577 {
6578 if (changesMask[2])
6579 {
6580 for (uint32 i = 0; i < EnableDoodadSets.size(); ++i)
6581 {
6582 if (EnableDoodadSets.HasChanged(i) || ignoreNestedChangesMask)
6583 {
6584 data << int32(EnableDoodadSets[i]);
6585 }
6586 }
6587 }
6588 if (changesMask[3])
6589 {
6590 for (uint32 i = 0; i < WorldEffects.size(); ++i)
6591 {
6592 if (WorldEffects.HasChanged(i) || ignoreNestedChangesMask)
6593 {
6594 data << int32(WorldEffects[i]);
6595 }
6596 }
6597 }
6598 if (changesMask[4])
6599 {
6600 data << int32(DisplayID);
6601 }
6602 if (changesMask[5])
6603 {
6604 data << uint32(SpellVisualID);
6605 }
6606 if (changesMask[6])
6607 {
6608 data << uint32(ViewerDependentValue<StateSpellVisualIDTag>::GetValue(this, owner, receiver));
6609 }
6610 if (changesMask[7])
6611 {
6613 }
6614 if (changesMask[8])
6615 {
6617 }
6618 if (changesMask[9])
6619 {
6621 }
6622 if (changesMask[10])
6623 {
6624 data << *CreatedBy;
6625 }
6626 if (changesMask[11])
6627 {
6628 data << *GuildGUID;
6629 }
6630 if (changesMask[12])
6631 {
6632 data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
6633 }
6634 if (changesMask[13])
6635 {
6636 data << float(ParentRotation->x);
6637 data << float(ParentRotation->y);
6638 data << float(ParentRotation->z);
6639 data << float(ParentRotation->w);
6640 }
6641 if (changesMask[14])
6642 {
6643 data << int32(FactionTemplate);
6644 }
6645 if (changesMask[15])
6646 {
6647 data << int8(ViewerDependentValue<StateTag>::GetValue(this, owner, receiver));
6648 }
6649 if (changesMask[16])
6650 {
6651 data << int8(TypeID);
6652 }
6653 if (changesMask[17])
6654 {
6655 data << uint8(PercentHealth);
6656 }
6657 if (changesMask[18])
6658 {
6659 data << uint32(ArtKit);
6660 }
6661 if (changesMask[19])
6662 {
6663 data << uint32(CustomParam);
6664 }
6665 if (changesMask[20])
6666 {
6667 data << int32(Level);
6668 }
6669 if (changesMask[21])
6670 {
6671 data << uint32(AnimGroupInstance);
6672 }
6673 if (changesMask[22])
6674 {
6675 data << uint32(UiWidgetItemID);
6676 }
6677 if (changesMask[23])
6678 {
6679 data << uint32(UiWidgetItemQuality);
6680 }
6681 if (changesMask[24])
6682 {
6684 }
6685 }
6686}
6687
6689{
6715}
6716
6717void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const
6718{
6719 data << *Caster;
6720 data << uint8(Type);
6721 SpellVisual->WriteCreate(data, owner, receiver);
6722 data << int32(SpellID);
6723 data << float(Radius);
6724 data << uint32(CastTime);
6725}
6726
6727void DynamicObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const
6728{
6729 WriteUpdate(data, _changesMask, false, owner, receiver);
6730}
6731
6732void DynamicObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, DynamicObject const* owner, Player const* receiver) const
6733{
6734 data.WriteBits(changesMask.GetBlock(0), 7);
6735
6736 data.FlushBits();
6737 if (changesMask[0])
6738 {
6739 if (changesMask[1])
6740 {
6741 data << *Caster;
6742 }
6743 if (changesMask[2])
6744 {
6745 data << uint8(Type);
6746 }
6747 if (changesMask[3])
6748 {
6749 SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6750 }
6751 if (changesMask[4])
6752 {
6753 data << int32(SpellID);
6754 }
6755 if (changesMask[5])
6756 {
6757 data << float(Radius);
6758 }
6759 if (changesMask[6])
6760 {
6761 data << uint32(CastTime);
6762 }
6763 }
6764}
6765
6767{
6775}
6776
6777void CorpseData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const
6778{
6779 data << uint32(DynamicFlags);
6780 data << *Owner;
6781 data << *PartyGUID;
6782 data << *GuildGUID;
6783 data << uint32(DisplayID);
6784 for (uint32 i = 0; i < 19; ++i)
6785 {
6786 data << uint32(Items[i]);
6787 }
6788 data << uint8(RaceID);
6789 data << uint8(Sex);
6790 data << uint8(Class);
6791 data << uint32(Customizations.size());
6792 data << uint32(Flags);
6793 data << int32(FactionTemplate);
6795 for (uint32 i = 0; i < Customizations.size(); ++i)
6796 {
6797 Customizations[i].WriteCreate(data, owner, receiver);
6798 }
6799}
6800
6801void CorpseData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const
6802{
6803 WriteUpdate(data, _changesMask, false, owner, receiver);
6804}
6805
6806void CorpseData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Corpse const* owner, Player const* receiver) const
6807{
6808 data.WriteBits(changesMask.GetBlocksMask(0), 2);
6809 for (uint32 i = 0; i < 2; ++i)
6810 if (changesMask.GetBlock(i))
6811 data.WriteBits(changesMask.GetBlock(i), 32);
6812
6813 if (changesMask[0])
6814 {
6815 if (changesMask[1])
6816 {
6817 if (!ignoreNestedChangesMask)
6819 else
6821 }
6822 }
6823 data.FlushBits();
6824 if (changesMask[0])
6825 {
6826 if (changesMask[1])
6827 {
6828 for (uint32 i = 0; i < Customizations.size(); ++i)
6829 {
6830 if (Customizations.HasChanged(i) || ignoreNestedChangesMask)
6831 {
6832 Customizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
6833 }
6834 }
6835 }
6836 if (changesMask[2])
6837 {
6838 data << uint32(DynamicFlags);
6839 }
6840 if (changesMask[3])
6841 {
6842 data << *Owner;
6843 }
6844 if (changesMask[4])
6845 {
6846 data << *PartyGUID;
6847 }
6848 if (changesMask[5])
6849 {
6850 data << *GuildGUID;
6851 }
6852 if (changesMask[6])
6853 {
6854 data << uint32(DisplayID);
6855 }
6856 if (changesMask[7])
6857 {
6858 data << uint8(RaceID);
6859 }
6860 if (changesMask[8])
6861 {
6862 data << uint8(Sex);
6863 }
6864 if (changesMask[9])
6865 {
6866 data << uint8(Class);
6867 }
6868 if (changesMask[10])
6869 {
6870 data << uint32(Flags);
6871 }
6872 if (changesMask[11])
6873 {
6874 data << int32(FactionTemplate);
6875 }
6876 if (changesMask[12])
6877 {
6879 }
6880 }
6881 if (changesMask[13])
6882 {
6883 for (uint32 i = 0; i < 19; ++i)
6884 {
6885 if (changesMask[14 + i])
6886 {
6887 data << uint32(Items[i]);
6888 }
6889 }
6890 }
6891}
6892
6894{
6909}
6910
6911void ScaleCurve::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
6912{
6913 data << uint32(StartTimeOffset);
6914 for (uint32 i = 0; i < 2; ++i)
6915 {
6916 data << Points[i];
6917 }
6918 data << uint32(ParameterCurve);
6920 data.FlushBits();
6921}
6922
6923void ScaleCurve::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
6924{
6925 Mask changesMask = _changesMask;
6926 if (ignoreChangesMask)
6927 changesMask.SetAll();
6928
6929 data.WriteBits(changesMask.GetBlock(0), 7);
6930
6931 if (changesMask[0])
6932 {
6933 if (changesMask[1])
6934 {
6936 }
6937 }
6938 data.FlushBits();
6939 if (changesMask[0])
6940 {
6941 if (changesMask[2])
6942 {
6943 data << uint32(StartTimeOffset);
6944 }
6945 if (changesMask[3])
6946 {
6947 data << uint32(ParameterCurve);
6948 }
6949 }
6950 if (changesMask[4])
6951 {
6952 for (uint32 i = 0; i < 2; ++i)
6953 {
6954 if (changesMask[5 + i])
6955 {
6956 data << Points[i];
6957 }
6958 }
6959 }
6960 data.FlushBits();
6961}
6962
6964{
6970}
6971
6972void VisualAnim::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
6973{
6974 data << uint32(AnimationDataID);
6975 data << uint32(AnimKitID);
6976 data << uint32(AnimProgress);
6977 data.WriteBit(IsDecay);
6978 data.FlushBits();
6979}
6980
6981void VisualAnim::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
6982{
6983 Mask changesMask = _changesMask;
6984 if (ignoreChangesMask)
6985 changesMask.SetAll();
6986
6987 data.WriteBits(changesMask.GetBlock(0), 5);
6988
6989 if (changesMask[0])
6990 {
6991 if (changesMask[1])
6992 {
6993 data.WriteBit(IsDecay);
6994 }
6995 }
6996 data.FlushBits();
6997 if (changesMask[0])
6998 {
6999 if (changesMask[2])
7000 {
7001 data << uint32(AnimationDataID);
7002 }
7003 if (changesMask[3])
7004 {
7005 data << uint32(AnimKitID);
7006 }
7007 if (changesMask[4])
7008 {
7009 data << uint32(AnimProgress);
7010 }
7011 }
7012 data.FlushBits();
7013}
7014
7016{
7022}
7023
7024void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
7025{
7026 OverrideScaleCurve->WriteCreate(data, owner, receiver);
7027 data << *Caster;
7028 data << uint32(Duration);
7029 data << uint32(TimeToTarget);
7030 data << uint32(TimeToTargetScale);
7032 data << uint32(TimeToTargetPos);
7033 data << int32(SpellID);
7034 data << int32(SpellForVisuals);
7035 SpellVisual->WriteCreate(data, owner, receiver);
7036 data << float(BoundsRadius2D);
7037 data << uint32(DecalPropertiesID);
7038 data << *CreatingEffectGUID;
7039 data << uint32(NumUnitsInside);
7040 data << uint32(NumPlayersInside);
7041 data << *OrbitPathTarget;
7042 data << *RollPitchYaw;
7043 data << int32(PositionalSoundKitID);
7044 ExtraScaleCurve->WriteCreate(data, owner, receiver);
7045 data.FlushBits();
7047 data.WriteBit(Field_261);
7048 OverrideMoveCurveX->WriteCreate(data, owner, receiver);
7049 OverrideMoveCurveY->WriteCreate(data, owner, receiver);
7050 OverrideMoveCurveZ->WriteCreate(data, owner, receiver);
7051 VisualAnim->WriteCreate(data, owner, receiver);
7052 data.FlushBits();
7053}
7054
7055void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
7056{
7057 WriteUpdate(data, _changesMask, false, owner, receiver);
7058}
7059
7060void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const
7061{
7062 data.WriteBits(changesMask.GetBlock(0), 26);
7063
7064 if (changesMask[0])
7065 {
7066 if (changesMask[1])
7067 {
7069 }
7070 if (changesMask[2])
7071 {
7072 data.WriteBit(Field_261);
7073 }
7074 }
7075 data.FlushBits();
7076 if (changesMask[0])
7077 {
7078 if (changesMask[3])
7079 {
7080 OverrideScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
7081 }
7082 if (changesMask[8])
7083 {
7084 data << *Caster;
7085 }
7086 if (changesMask[9])
7087 {
7088 data << uint32(Duration);
7089 }
7090 if (changesMask[10])
7091 {
7092 data << uint32(TimeToTarget);
7093 }
7094 if (changesMask[11])
7095 {
7096 data << uint32(TimeToTargetScale);
7097 }
7098 if (changesMask[12])
7099 {
7101 }
7102 if (changesMask[13])
7103 {
7104 data << uint32(TimeToTargetPos);
7105 }
7106 if (changesMask[14])
7107 {
7108 data << int32(SpellID);
7109 }
7110 if (changesMask[15])
7111 {
7112 data << int32(SpellForVisuals);
7113 }
7114 if (changesMask[16])
7115 {
7116 SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
7117 }
7118 if (changesMask[17])
7119 {
7120 data << float(BoundsRadius2D);
7121 }
7122 if (changesMask[18])
7123 {
7124 data << uint32(DecalPropertiesID);
7125 }
7126 if (changesMask[19])
7127 {
7128 data << *CreatingEffectGUID;
7129 }
7130 if (changesMask[20])
7131 {
7132 data << uint32(NumUnitsInside);
7133 }
7134 if (changesMask[21])
7135 {
7136 data << uint32(NumPlayersInside);
7137 }
7138 if (changesMask[22])
7139 {
7140 data << *OrbitPathTarget;
7141 }
7142 if (changesMask[23])
7143 {
7144 data << *RollPitchYaw;
7145 }
7146 if (changesMask[24])
7147 {
7148 data << int32(PositionalSoundKitID);
7149 }
7150 if (changesMask[4])
7151 {
7152 ExtraScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
7153 }
7154 if (changesMask[5])
7155 {
7156 OverrideMoveCurveX->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
7157 }
7158 if (changesMask[6])
7159 {
7160 OverrideMoveCurveY->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
7161 }
7162 if (changesMask[7])
7163 {
7164 OverrideMoveCurveZ->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
7165 }
7166 if (changesMask[25])
7167 {
7168 VisualAnim->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
7169 }
7170 }
7171 data.FlushBits();
7172}
7173
7175{
7202}
7203
7204void SceneObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
7205{
7206 data << int32(ScriptPackageID);
7207 data << uint32(RndSeedVal);
7208 data << *CreatedBy;
7209 data << uint32(SceneType);
7210}
7211
7212void SceneObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const
7213{
7214 WriteUpdate(data, _changesMask, false, owner, receiver);
7215}
7216
7217void SceneObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const
7218{
7219 data.WriteBits(changesMask.GetBlock(0), 5);
7220
7221 data.FlushBits();
7222 if (changesMask[0])
7223 {
7224 if (changesMask[1])
7225 {
7226 data << int32(ScriptPackageID);
7227 }
7228 if (changesMask[2])
7229 {
7230 data << uint32(RndSeedVal);
7231 }
7232 if (changesMask[3])
7233 {
7234 data << *CreatedBy;
7235 }
7236 if (changesMask[4])
7237 {
7238 data << uint32(SceneType);
7239 }
7240 }
7241}
7242
7244{
7250}
7251
7252void ConversationLine::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
7253{
7254 data << int32(ConversationLineID);
7255 data << int32(BroadcastTextID);
7256 data << uint32(ViewerDependentValue<StartTimeTag>::GetValue(this, owner, receiver));
7257 data << int32(UiCameraID);
7258 data << uint8(ActorIndex);
7259 data << uint8(Flags);
7260 data << uint8(ChatType);
7261}
7262
7263void ConversationLine::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const
7264{
7265 data << int32(ConversationLineID);
7266 data << int32(BroadcastTextID);
7267 data << uint32(ViewerDependentValue<StartTimeTag>::GetValue(this, owner, receiver));
7268 data << int32(UiCameraID);
7269 data << uint8(ActorIndex);
7270 data << uint8(Flags);
7271 data << uint8(ChatType);
7272}
7273
7275{
7278 && StartTime == right.StartTime
7279 && UiCameraID == right.UiCameraID
7280 && ActorIndex == right.ActorIndex
7281 && Flags == right.Flags
7282 && ChatType == right.ChatType;
7283}
7284
7285void ConversationActor::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
7286{
7287 data << uint32(CreatureID);
7289 data << ActorGUID;
7290 data << int32(Id);
7291 data.WriteBits(Type, 1);
7292 data.WriteBits(NoActorObject, 1);
7293 data.FlushBits();
7294}
7295
7296void ConversationActor::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const
7297{
7298 data << uint32(CreatureID);
7300 data << ActorGUID;
7301 data << int32(Id);
7302 data.WriteBits(Type, 1);
7303 data.WriteBits(NoActorObject, 1);
7304 data.FlushBits();
7305}
7306
7308{
7309 return CreatureID == right.CreatureID
7311 && ActorGUID == right.ActorGUID
7312 && Id == right.Id
7313 && Type == right.Type
7314 && NoActorObject == right.NoActorObject;
7315}
7316
7317void ConversationData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
7318{
7319 data << uint32(Lines->size());
7320 data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, owner, receiver));
7321 data << uint32(Progress);
7322 for (uint32 i = 0; i < Lines->size(); ++i)
7323 {
7324 (*Lines)[i].WriteCreate(data, owner, receiver);
7325 }
7327 data << uint32(Actors.size());
7328 data << uint32(Flags);
7329 for (uint32 i = 0; i < Actors.size(); ++i)
7330 {
7331 Actors[i].WriteCreate(data, owner, receiver);
7332 }
7333 data.FlushBits();
7334}
7335
7336void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
7337{
7338 WriteUpdate(data, _changesMask, false, owner, receiver);
7339}
7340
7341void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Conversation const* owner, Player const* receiver) const
7342{
7343 data.WriteBits(changesMask.GetBlock(0), 7);
7344
7345 if (changesMask[0])
7346 {
7347 if (changesMask[1])
7348 {
7350 }
7351 if (changesMask[2])
7352 {
7353 data.WriteBits(Lines->size(), 32);
7354 for (uint32 i = 0; i < Lines->size(); ++i)
7355 {
7356 (*Lines)[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
7357 }
7358 }
7359 }
7360 data.FlushBits();
7361 if (changesMask[0])
7362 {
7363 if (changesMask[3])
7364 {
7365 if (!ignoreNestedChangesMask)
7366 Actors.WriteUpdateMask(data);
7367 else
7369 }
7370 }
7371 data.FlushBits();
7372 if (changesMask[0])
7373 {
7374 if (changesMask[3])
7375 {
7376 for (uint32 i = 0; i < Actors.size(); ++i)
7377 {
7378 if (Actors.HasChanged(i) || ignoreNestedChangesMask)
7379 {
7380 Actors[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
7381 }
7382 }
7383 }
7384 if (changesMask[4])
7385 {
7386 data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, owner, receiver));
7387 }
7388 if (changesMask[5])
7389 {
7390 data << uint32(Progress);
7391 }
7392 if (changesMask[6])
7393 {
7394 data << uint32(Flags);
7395 }
7396 }
7397 data.FlushBits();
7398}
7399
7401{
7409}
7410
7411void VendorData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Creature const* owner, Player const* receiver) const
7412{
7413 data << int32(Flags);
7414}
7415
7416void VendorData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Creature const* owner, Player const* receiver) const
7417{
7418 WriteUpdate(data, _changesMask, false, owner, receiver);
7419}
7420
7421void VendorData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Creature const* owner, Player const* receiver) const
7422{
7423 data.WriteBits(changesMask.GetBlock(0), 2);
7424
7425 data.FlushBits();
7426 if (changesMask[0])
7427 {
7428 if (changesMask[1])
7429 {
7430 data << int32(Flags);
7431 }
7432 }
7433}
7434
7436{
7439}
7440
7441}
7442
7443#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
7444#pragma GCC diagnostic pop
7445#else
7446#pragma warning(pop)
7447#endif
ToyFlags
Definition: CollectionMgr.h:69
uint8_t uint8
Definition: Define.h:150
int64_t int64
Definition: Define.h:143
int16_t int16
Definition: Define.h:145
int8_t int8
Definition: Define.h:146
int32_t int32
Definition: Define.h:144
uint64_t uint64
Definition: Define.h:147
uint16_t uint16
Definition: Define.h:149
uint32_t uint32
Definition: Define.h:148
TypeID
Definition: ObjectGuid.h:36
ChatType
Definition: ObjectMgr.h:132
PlayerFlags
Definition: Player.h:460
BagSlotFlags
Definition: Player.h:810
PlayerFlagsEx
Definition: Player.h:498
std::map< uint32, ReputationRank > ForcedReactions
Definition: ReputationMgr.h:64
SceneType
Definition: SceneObject.h:27
CreatureFamily
CreatureType
Stats
ShapeshiftForm
AnimTier
Definition: UnitDefines.h:69
Definition: Bag.h:27
void WriteString(std::string const &str)
Definition: ByteBuffer.h:541
bool WriteBit(bool bit)
Definition: ByteBuffer.h:158
void FlushBits()
Definition: ByteBuffer.h:141
void WriteBits(uint64 value, int32 bits)
Definition: ByteBuffer.h:185
Definition: Corpse.h:53
constexpr bool HasFlag(T flag) const
Definition: EnumFlag.h:106
Definition: Item.h:163
Definition: Object.h:186
bool HasChanged(uint32 index) const
Definition: UpdateField.h:852
void WriteUpdateMask(ByteBuffer &data, int32 bitsForSize=32) const
Definition: UpdateField.h:857
std::size_t size() const
Definition: UpdateField.h:823
static void ClearChangesMask(UpdateField< T, BlockBit, Bit > &field)
Definition: UpdateField.h:618
UpdateMask< Bits > Mask
Definition: UpdateField.h:483
Definition: Unit.h:632
constexpr uint32 GetBlock(uint32 index) const
Definition: UpdateMask.h:59
constexpr void ResetAll()
Definition: UpdateMask.h:84
constexpr void SetAll()
Definition: UpdateMask.h:97
constexpr uint32 GetBlocksMask(uint32 index) const
Definition: UpdateMask.h:54
TargetType
Definition: hyjalAI.h:104
Definition: Object.h:111
constexpr std::size_t size()
Definition: UpdateField.h:769
void WriteCompleteDynamicFieldUpdateMask(std::size_t size, ByteBuffer &data, int32 bitsForSize=32)
Definition: UpdateField.cpp:43
UpdateField< float, 70, 82 > PvpPowerHealing
UpdateField< WorldPackets::PerksProgram::PerksVendorItem, 102, 126 > FrozenPerksVendorItem
UpdateField< int32, 102, 107 > PetSpellPower
UpdateField< uint32, 32, 58 > TrackCreatureMask
UpdateField< uint16, 102, 118 > LootSpecID
UpdateField< float, 32, 60 > OffhandExpertise
UpdateField< int32, 32, 56 > CharacterPoints
UpdateField< float, 70, 85 > ModHealingPercent
UpdateField< WorldPackets::MythicPlus::DungeonScoreData, 134, 135 > DungeonScore
UpdateField< uint32, 134, 136 > ActiveCombatTraitConfigID
DynamicUpdateField< uint64, 0, 7 > KnownTitles
DynamicUpdateField< UF::PlayerDataElement, 0, 9 > AccountDataElements
DynamicUpdateField< uint32, 0, 15 > HeirloomFlags
UpdateField< bool, 0, 3 > BankAutoSortDisabled
UpdateField< int32, 102, 105 > ScalingPlayerLevelDelta
UpdateField< float, 32, 68 > CritPercentage
UpdateField< float, 32, 69 > RangedCritPercentage
UpdateField< int32, 102, 117 > OverrideSpellsID
UpdateField< float, 134, 141 > ItemUpgradeHighTrinketWatermark
UpdateField< bool, 0, 2 > BackpackSellJunkDisabled
UpdateField< int32, 32, 53 > NextLevelXP
UpdateField< uint32, 70, 98 > PvpMedals
UpdateField< uint32, 70, 93 > LocalFlags
DynamicUpdateField< UF::CraftingOrder, 32, 35 > CraftingOrders
UpdateFieldArray< DynamicUpdateFieldBase< uint16 >, 1, 42, 43 > ResearchSites
UpdateField< int32, 70, 84 > ModHealingDonePos
UpdateField< uint8, 102, 114 > LocalRegenFlags
UpdateField< uint32, 102, 119 > OverrideZonePVPType
UpdateField< uint64, 32, 50 > Coinage
UpdateField< int32, 102, 106 > MaxCreatureScalingLevel
UpdateField< float, 102, 108 > UiHitModifier
UpdateField< int32, 70, 79 > Versatility
UpdateFieldArray< float, 7, 383, 405 > ModHealingDonePercent
UpdateField< float, 70, 90 > OverrideAPBySpellPowerPercent
DynamicUpdateField< UF::BankTabSettings, 32, 41 > AccountBankTabSettings
UpdateField< uint8, 70, 97 > NumRespecs
UpdateFieldArray< float, 17, 499, 500 > ItemUpgradeHighWatermark
UpdateFieldArray< float, 3, 412, 413 > WeaponDmgMultipliers
UpdateField< uint8, 70, 94 > GrantableLevels
DynamicUpdateField< UF::NPCCraftingOrderInfo, 32, 37 > NpcCraftingOrders
DynamicUpdateField< int32, 0, 19 > ConditionalTransmog
UpdateField< int32, 70, 73 > ShieldBlock
DynamicUpdateField< uint32, 0, 23 > WarbandScenes
UpdateField< int8, 102, 112 > JailersTowerLevelMax
UpdateField< uint8, 70, 95 > MultiActionBars
UpdateField< UF::SkillInfo, 32, 55 > Skill
UpdateField< float, 70, 76 > Speed
UpdateField< float, 134, 139 > ItemUpgradeHighFingerWatermark
UpdateField< uint32, 102, 132 > WeeklyRewardsPeriodSinceOrigin
UpdateField< float, 70, 75 > Mastery
DynamicUpdateField< int32, 0, 11 > DailyQuestsCompleted
DynamicUpdateField< int32, 0, 12 > Field_1328
UpdateField< int32, 102, 120 > Honor
UpdateField< bool, 0, 6 > HasPerksProgramPendingReward
UpdateField< int32, 70, 91 > ModTargetResistance
DynamicUpdateField< UF::CollectableSourceTrackedData, 32, 40 > TrackedCollectableSources
UpdateField< int32, 102, 130 > TimerunningSeasonID
UpdateField< float, 70, 78 > Sturdiness
DynamicUpdateField< UF::WeeklySpellUse, 32, 39 > WeeklySpellUses
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Player const *owner, Player const *receiver) const
UpdateField< uint16, 70, 99 > TodayHonorableKills
UpdateField< int32, 134, 137 > ItemUpgradeHighOnehandWeaponItemID
DynamicUpdateField< int32, 0, 13 > AvailableQuestLineXQuestIDs
DynamicUpdateField< int32, 0, 16 > Toys
UpdateField< uint16, 70, 100 > YesterdayHonorableKills
UpdateField< int32, 102, 131 > TransportServerTime
UpdateField< float, 32, 62 > CombatRatingExpertise
UpdateField< float, 70, 88 > ModResiliencePercent
DynamicUpdateField< int32, 32, 33 > DisabledSpells
DynamicUpdateField< UF::PersonalCraftingOrderCount, 32, 36 > PersonalCraftingOrderCounts
UpdateField< float, 32, 61 > RangedExpertise
DynamicUpdateField< uint32, 0, 18 > Transmog
DynamicUpdateField< UF::MultiFloorExplore, 0, 28 > MultiFloorExploration
UpdateFieldArray< DynamicUpdateFieldBase< uint32 >, 1, 44, 45 > ResearchSiteProgress
DynamicUpdateField< UF::ReplayedQuest, 0, 30 > ReplayedQuests
UpdateField< uint8, 70, 96 > LifetimeMaxRank
UpdateField< float, 32, 65 > DodgePercentageFromAttribute
UpdateField< float, 70, 87 > ModSpellPowerPercent
UpdateField< UF::ActivePlayerUnk901, 102, 128 > Field_1410
DynamicUpdateField< UF::PVPInfo, 0, 10 > PvpInfo
UpdateField< uint8, 102, 116 > NumBackpackSlots
UpdateFieldArray< int32, 2, 482, 483 > ProfessionSkillLine
UpdateFieldArray< uint32, 7, 491, 492 > BankBagSlotFlags
UpdateField< uint8, 102, 115 > AuraVision
UpdateFieldArray< int32, 7, 383, 391 > ModDamageDoneNeg
DynamicUpdateField< UF::TraitConfig, 32, 34 > TraitConfigs
UpdateField< uint64, 134, 142 > LootHistoryInstanceID
UpdateField< int32, 102, 104 > MaxLevel
UpdateFieldArray< uint32, 12, 419, 420 > BuybackPrice
UpdateField< uint32, 70, 101 > LifetimeHonorableKills
UpdateField< int32, 102, 129 > UiChromieTimeExpansionID
DynamicUpdateField< uint32, 0, 21 > RuneforgePowers
UpdateField< bool, 0, 4 > SortBagsRightToLeft
UpdateFieldArray< int32, 7, 383, 384 > ModDamageDonePos
UpdateField< int32, 32, 54 > TrialXP
DynamicUpdateField< UF::QuestLog, 0, 31 > TaskQuests
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Player const *owner, Player const *receiver) const
UpdateField< float, 70, 86 > ModPeriodicHealingDonePercent
UpdateField< uint8, 102, 124 > NumAccountBankTabs
UpdateField< ObjectGuid, 32, 48 > FarsightObject
UpdateField< int32, 102, 122 > PerksProgramCurrency
UpdateField< float, 32, 66 > ParryPercentage
UpdateField< float, 32, 67 > ParryPercentageFromAttribute
UpdateField< float, 70, 71 > OffhandCritPercentage
UpdateField< float, 32, 64 > DodgePercentage
UpdateField< bool, 0, 1 > BackpackAutoSortDisabled
UpdateField< float, 32, 59 > MainhandExpertise
DynamicUpdateField< uint32, 0, 22 > TransmogIllusions
UpdateFieldArray< uint32, 4, 477, 478 > NoReagentCostMask
UpdateField< uint8, 134, 144 > RequiredMountCapabilityFlags
UpdateField< int16, 102, 133 > DEBUGSoulbindConduitRank
UpdateField< int32, 102, 110 > HomeRealmTimeOffset
UpdateField< uint8, 102, 123 > NumBankSlots
UpdateField< float, 102, 109 > UiSpellHitModifier
UpdateField< int32, 32, 57 > MaxTalentTiers
UpdateFieldArray< ObjectGuid, 232, 147, 148 > InvSlots
UpdateField< float, 70, 74 > ShieldBlockCritPercentage
UpdateField< float, 70, 80 > VersatilityBonus
UpdateField< float, 70, 81 > PvpPowerDamage
DynamicUpdateField< int32, 0, 14 > Heirlooms
DynamicUpdateField< UF::RecipeProgressionInfo, 0, 29 > RecipeProgression
UpdateField< int32, 70, 92 > ModTargetPhysicalResistance
DynamicUpdateField< UF::MawPower, 0, 27 > MawPowers
UpdateField< float, 102, 111 > ModPetHaste
UpdateField< int32, 134, 140 > ItemUpgradeHighTrinketItemID
UpdateFieldArray< int32, 32, 444, 445 > CombatRatings
UpdateFieldArray< float, 3, 412, 416 > WeaponAtkSpeedMultipliers
UpdateFieldArray< int64, 12, 419, 432 > BuybackTimestamp
UpdateField< bool, 0, 5 > InsertItemsLeftToRight
UpdateField< float, 70, 72 > SpellCritPercentage
UpdateField< int32, 102, 121 > HonorNextLevel
UpdateField< float, 32, 63 > BlockPercentage
DynamicUpdateField< int32, 0, 20 > SelfResSpells
UpdateField< uint64, 32, 51 > AccountBankCoinage
UpdateField< float, 70, 77 > Avoidance
UpdateFieldArray< float, 7, 383, 398 > ModDamageDonePercent
UpdateField< float, 70, 89 > OverrideSpellPowerByAPPercent
UpdateField< int8, 102, 113 > JailersTowerLevel
UpdateField< int32, 134, 138 > ItemUpgradeHighFingerItemID
UpdateField< int32, 32, 52 > XP
UpdateField< int32, 102, 103 > WatchedFactionIndex
DynamicUpdateField< UF::CategoryCooldownMod, 32, 38 > CategoryCooldownMods
DynamicUpdateField< UF::CharacterRestriction, 0, 24 > CharacterRestrictions
UpdateField< ObjectGuid, 32, 49 > SummonedBattlePetGUID
DynamicUpdateField< UF::PlayerDataElement, 0, 8 > CharacterDataElements
UpdateField< ObjectGuid, 0, 1 > Field_0
Definition: UpdateFields.h:759
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 2 > Field_10
Definition: UpdateFields.h:760
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< UF::ScaleCurve, 0, 3 > OverrideScaleCurve
UpdateField< UF::ScaleCurve, 0, 7 > OverrideMoveCurveZ
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AreaTrigger const *owner, Player const *receiver) const
UpdateField< uint32, 0, 12 > TimeToTargetExtraScale
UpdateField< ObjectGuid, 0, 22 > OrbitPathTarget
UpdateField< ObjectGuid, 0, 8 > Caster
UpdateField< UF::SpellCastVisual, 0, 16 > SpellVisual
UpdateField< TaggedPosition< Position::XYZ >, 0, 23 > RollPitchYaw
UpdateField< bool, 0, 1 > HeightIgnoresScale
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AreaTrigger const *owner, Player const *receiver) const
UpdateField< float, 0, 17 > BoundsRadius2D
UpdateField< int32, 0, 24 > PositionalSoundKitID
UpdateField< uint32, 0, 13 > TimeToTargetPos
UpdateField< uint32, 0, 11 > TimeToTargetScale
UpdateField< UF::ScaleCurve, 0, 6 > OverrideMoveCurveY
UpdateField< int32, 0, 15 > SpellForVisuals
UpdateField< bool, 0, 2 > Field_261
UpdateField< uint32, 0, 18 > DecalPropertiesID
UpdateField< uint32, 0, 21 > NumPlayersInside
UpdateField< UF::ScaleCurve, 0, 5 > OverrideMoveCurveX
UpdateField< int32, 0, 14 > SpellID
UpdateField< uint32, 0, 10 > TimeToTarget
UpdateField< ObjectGuid, 0, 19 > CreatingEffectGUID
UpdateField< uint32, 0, 9 > Duration
UpdateField< uint32, 0, 20 > NumUnitsInside
UpdateField< UF::ScaleCurve, 0, 4 > ExtraScaleCurve
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 3 > Flags
Definition: UpdateFields.h:458
UpdateField< uint32, 0, 4 > StartTime
Definition: UpdateFields.h:459
UpdateField< int32, 0, 2 > Charges
Definition: UpdateFields.h:457
UpdateField< uint8, 0, 7 > MaxCharges
Definition: UpdateFields.h:462
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 5 > EndTime
Definition: UpdateFields.h:460
UpdateField< uint32, 0, 6 > NextChargeTime
Definition: UpdateFields.h:461
UpdateField< int32, 0, 1 > SpellID
Definition: UpdateFields.h:456
bool operator==(ArtifactPower const &right) const
uint8 CurrentRankWithBonus
Definition: UpdateFields.h:100
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AzeriteEmpoweredItem const *owner, Player const *receiver) const
UpdateFieldArray< int32, 5, 0, 1 > Selections
Definition: UpdateFields.h:165
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AzeriteEmpoweredItem const *owner, Player const *receiver) const
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< uint32, 0, 8 > KnowledgeLevel
Definition: UpdateFields.h:204
UpdateField< uint64, 0, 5 > Xp
Definition: UpdateFields.h:201
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AzeriteItem const *owner, Player const *receiver) const
DynamicUpdateField< UF::SelectedAzeriteEssences, 0, 3 > SelectedEssences
Definition: UpdateFields.h:200
UpdateField< uint32, 0, 7 > AuraLevel
Definition: UpdateFields.h:203
DynamicUpdateField< UF::UnlockedAzeriteEssence, 0, 2 > UnlockedEssences
Definition: UpdateFields.h:198
DynamicUpdateField< uint32, 0, 4 > UnlockedEssenceMilestones
Definition: UpdateFields.h:199
UpdateField< bool, 0, 1 > Enabled
Definition: UpdateFields.h:197
UpdateField< uint32, 0, 6 > Level
Definition: UpdateFields.h:202
UpdateField< int32, 0, 9 > DEBUGknowledgeWeek
Definition: UpdateFields.h:205
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, AzeriteItem const *owner, Player const *receiver) const
UpdateField< int32, -1, 3 > DepositFlags
Definition: UpdateFields.h:992
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< std::string, -1, 1 > Icon
Definition: UpdateFields.h:990
UpdateField< std::string, -1, 2 > Description
Definition: UpdateFields.h:991
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< std::string, -1, 0 > Name
Definition: UpdateFields.h:989
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void ClearChangesMask()
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
DynamicUpdateField< uint64, 0, 1 > Values
Definition: UpdateFields.h:603
UpdateFieldArray< UF::BitVector, 13, 0, 1 > Values
Definition: UpdateFields.h:612
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
uint32 ConditionalFlags
Definition: UpdateFields.h:491
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(CTROptions const &right) const
uint32 ChromieTimeExpansionMask
Definition: UpdateFields.h:493
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(CategoryCooldownMod const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
bool operator==(CharacterRestriction const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Object const *owner, Player const *receiver) const
bool operator==(ChrCustomizationChoice const &right) const
void WriteCreate(ByteBuffer &data, Object const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 3 > CollectableSourceInfoID
Definition: UpdateFields.h:980
UpdateField< int32, 0, 2 > TargetID
Definition: UpdateFields.h:979
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 1 > ProjectID
Definition: UpdateFields.h:706
UpdateField< int64, 0, 2 > FirstCompleted
Definition: UpdateFields.h:707
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 3 > CompletionCount
Definition: UpdateFields.h:708
UpdateField< uint32, 0, 1 > NumSlots
Definition: UpdateFields.h:154
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Bag const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Bag const *owner, Player const *receiver) const
UpdateFieldArray< ObjectGuid, 98, 2, 3 > Slots
Definition: UpdateFields.h:155
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Conversation const *owner, Player const *receiver) const
bool operator==(ConversationActor const &right) const
void WriteCreate(ByteBuffer &data, Conversation const *owner, Player const *receiver) const
UpdateField< uint32, 0, 6 > Flags
UpdateField< bool, 0, 1 > DontPlayBroadcastTextSounds
DynamicUpdateField< UF::ConversationActor, 0, 3 > Actors
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Conversation const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Conversation const *owner, Player const *receiver) const
UpdateField< std::vector< UF::ConversationLine >, 0, 2 > Lines
UpdateField< uint32, 0, 5 > Progress
UpdateField< int32, 0, 4 > LastLineEndTime
void WriteCreate(ByteBuffer &data, Conversation const *owner, Player const *receiver) const
bool operator==(ConversationLine const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Conversation const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Corpse const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Corpse const *owner, Player const *receiver) const
UpdateField< uint32, 0, 6 > DisplayID
UpdateField< uint32, 0, 12 > StateSpellVisualKitID
UpdateField< uint8, 0, 7 > RaceID
UpdateField< uint8, 0, 9 > Class
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 1 > Customizations
UpdateField< uint32, 0, 10 > Flags
UpdateField< ObjectGuid, 0, 4 > PartyGUID
UpdateField< ObjectGuid, 0, 3 > Owner
UpdateField< uint8, 0, 8 > Sex
UpdateField< int32, 0, 11 > FactionTemplate
UpdateField< uint32, 0, 2 > DynamicFlags
UpdateField< ObjectGuid, 0, 5 > GuildGUID
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< ObjectGuid, -1, 1 > CustomerAccountGUID
Definition: UpdateFields.h:848
UpdateField< ObjectGuid, -1, 0 > CustomerGUID
Definition: UpdateFields.h:847
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint8, 6, 7 > OrderType
Definition: UpdateFields.h:872
OptionalUpdateField< UF::CraftingOrderCustomer, 18, 21 > Customer
Definition: UpdateFields.h:884
UpdateField< int64, 6, 9 > ExpirationTime
Definition: UpdateFields.h:874
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 2 > Field_0
Definition: UpdateFields.h:868
UpdateField< std::string, 18, 20 > CustomerNotes
Definition: UpdateFields.h:883
UpdateField< ObjectGuid, 12, 16 > PersonalCrafterGUID
Definition: UpdateFields.h:880
UpdateField< ObjectGuid, 12, 15 > CrafterGUID
Definition: UpdateFields.h:879
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int64, 6, 10 > ClaimEndTime
Definition: UpdateFields.h:875
UpdateField< uint32, 12, 14 > Flags
Definition: UpdateFields.h:878
UpdateField< int32, 12, 17 > NpcCraftingOrderSetID
Definition: UpdateFields.h:881
OptionalUpdateField< UF::CraftingOrderItem, 18, 23 > OutputItem
Definition: UpdateFields.h:886
UpdateField< int64, 6, 11 > TipAmount
Definition: UpdateFields.h:876
UpdateField< int32, 0, 4 > SkillLineAbilityID
Definition: UpdateFields.h:870
OptionalUpdateField< UF::CraftingOrderNpcCustomer, 18, 22 > NpcCustomer
Definition: UpdateFields.h:885
UpdateField< uint8, 0, 5 > OrderState
Definition: UpdateFields.h:871
UpdateField< int32, 18, 19 > NpcTreasureID
Definition: UpdateFields.h:882
UpdateField< uint8, 6, 8 > MinQuality
Definition: UpdateFields.h:873
UpdateField< uint64, 0, 3 > OrderID
Definition: UpdateFields.h:869
UpdateField< int64, 12, 13 > ConsortiumCut
Definition: UpdateFields.h:877
OptionalUpdateField< WorldPackets::Item::ItemInstance, 24, 25 > OutputItemData
Definition: UpdateFields.h:887
DynamicUpdateField< UF::CraftingOrderItem, 0, 1 > Reagents
Definition: UpdateFields.h:867
UpdateField< uint32, -1, 4 > Quantity
Definition: UpdateFields.h:836
UpdateField< int32, -1, 5 > ReagentQuality
Definition: UpdateFields.h:837
UpdateField< int32, -1, 3 > ItemID
Definition: UpdateFields.h:835
UpdateField< ObjectGuid, -1, 2 > OwnerGUID
Definition: UpdateFields.h:834
UpdateField< uint64, -1, 0 > Field_0
Definition: UpdateFields.h:832
UpdateField< ObjectGuid, -1, 1 > ItemGUID
Definition: UpdateFields.h:833
OptionalUpdateField< uint8, -1, 6 > DataSlotIndex
Definition: UpdateFields.h:838
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int64, -1, 0 > NpcCraftingOrderCustomerID
Definition: UpdateFields.h:857
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int32, -1, 1 > Field_8
Definition: UpdateFields.h:858
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
DynamicUpdateField< WorldPackets::Item::ItemGemData, -1, 1 > Gems
Definition: UpdateFields.h:897
OptionalUpdateField< WorldPackets::Item::ItemInstance, -1, 3 > RecraftItemInfo
Definition: UpdateFields.h:899
DynamicUpdateField< WorldPackets::Item::ItemEnchantData, -1, 0 > Enchantments
Definition: UpdateFields.h:896
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 5 > BackgroundColor
Definition: UpdateFields.h:516
UpdateField< int32, 0, 2 > EmblemColor
Definition: UpdateFields.h:513
UpdateField< int32, 0, 3 > BorderStyle
Definition: UpdateFields.h:514
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 4 > BorderColor
Definition: UpdateFields.h:515
UpdateField< int32, 0, 1 > EmblemStyle
Definition: UpdateFields.h:512
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateFieldArray< std::string, 5, 0, 1 > Name
Definition: UpdateFields.h:503
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
std::vector< ObjectGuid > Owners
bool operator==(DelveData const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 1 > Caster
UpdateField< uint8, 0, 2 > Type
UpdateField< uint32, 0, 6 > CastTime
UpdateField< float, 0, 5 > Radius
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, DynamicObject const *owner, Player const *receiver) const
UpdateField< UF::SpellCastVisual, 0, 3 > SpellVisual
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, DynamicObject const *owner, Player const *receiver) const
UpdateField< int32, 0, 4 > SpellID
UpdateField< int32, 0, 4 > DisplayID
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, GameObject const *owner, Player const *receiver) const
UpdateField< uint32, 0, 12 > Flags
UpdateField< QuaternionData, 0, 13 > ParentRotation
UpdateField< ObjectGuid, 0, 10 > CreatedBy
UpdateField< uint32, 0, 7 > SpawnTrackingStateAnimID
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, GameObject const *owner, Player const *receiver) const
UpdateField< uint32, 0, 18 > ArtKit
UpdateField< uint32, 0, 5 > SpellVisualID
UpdateField< ObjectGuid, 0, 11 > GuildGUID
UpdateField< uint32, 0, 22 > UiWidgetItemID
UpdateField< uint32, 0, 24 > UiWidgetItemUnknown1000
DynamicUpdateField< int32, 0, 3 > WorldEffects
UpdateField< std::vector< uint32 >, 0, 1 > StateWorldEffectIDs
UpdateField< uint32, 0, 19 > CustomParam
UpdateField< int32, 0, 20 > Level
UpdateField< uint8, 0, 17 > PercentHealth
UpdateField< uint32, 0, 9 > StateWorldEffectsQuestObjectiveID
UpdateField< uint32, 0, 6 > StateSpellVisualID
UpdateField< uint32, 0, 8 > SpawnTrackingStateAnimKitID
UpdateField< uint32, 0, 23 > UiWidgetItemQuality
UpdateField< uint32, 0, 21 > AnimGroupInstance
DynamicUpdateField< int32, 0, 2 > EnableDoodadSets
UpdateField< int8, 0, 15 > State
UpdateField< int32, 0, 14 > FactionTemplate
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Item const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 6 > GiftCreator
Definition: UpdateFields.h:126
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateFieldArray< UF::ItemEnchantment, 13, 27, 28 > Enchantment
Definition: UpdateFields.h:142
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
void ClearChangesMask()
UpdateField< UF::ItemModList, 0, 17 > Modifiers
Definition: UpdateFields.h:137
UpdateField< ObjectGuid, 0, 5 > Creator
Definition: UpdateFields.h:125
DynamicUpdateField< UF::SocketedGem, 0, 2 > Gems
Definition: UpdateFields.h:122
UpdateField< uint32, 0, 10 > Durability
Definition: UpdateFields.h:130
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Item const *owner, Player const *receiver) const
UpdateField< WorldPackets::Item::ItemBonusKey, 0, 19 > ItemBonusKey
Definition: UpdateFields.h:139
UpdateField< uint32, 0, 11 > MaxDurability
Definition: UpdateFields.h:131
UpdateField< uint32, 0, 9 > DynamicFlags
Definition: UpdateFields.h:129
UpdateFieldArray< int32, 5, 21, 22 > SpellCharges
Definition: UpdateFields.h:141
UpdateField< int64, 0, 14 > CreateTime
Definition: UpdateFields.h:134
UpdateField< uint8, 0, 16 > ItemAppearanceModID
Definition: UpdateFields.h:136
UpdateField< uint64, 0, 15 > ArtifactXP
Definition: UpdateFields.h:135
UpdateField< ObjectGuid, 0, 3 > Owner
Definition: UpdateFields.h:123
UpdateField< uint32, 0, 8 > Expiration
Definition: UpdateFields.h:128
UpdateField< ObjectGuid, 0, 4 > ContainedIn
Definition: UpdateFields.h:124
UpdateField< uint8, 0, 13 > Context
Definition: UpdateFields.h:133
UpdateField< uint32, 0, 7 > StackCount
Definition: UpdateFields.h:127
UpdateField< uint16, 0, 20 > DEBUGItemLevel
Definition: UpdateFields.h:140
UpdateField< uint32, 0, 12 > CreatePlayedTime
Definition: UpdateFields.h:132
DynamicUpdateField< UF::ArtifactPower, 0, 1 > ArtifactPowers
Definition: UpdateFields.h:121
UpdateField< uint32, 0, 18 > ZoneFlags
Definition: UpdateFields.h:138
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
UpdateField< int16, 0, 3 > Charges
Definition: UpdateFields.h:68
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
UpdateField< int32, 0, 1 > ID
Definition: UpdateFields.h:66
UpdateField< uint16, 0, 4 > Inactive
Definition: UpdateFields.h:69
UpdateField< uint32, 0, 2 > Duration
Definition: UpdateFields.h:67
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
DynamicUpdateField< UF::ItemMod, -1, 0 > Values
Definition: UpdateFields.h:89
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
bool operator==(ItemMod const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
int32 MawPowerID
Definition: UpdateFields.h:727
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
bool operator==(MawPower const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
std::vector< int32 > WorldMapOverlayIDs
Definition: UpdateFields.h:738
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(MultiFloorExplore const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, -1, 2 > NpcTreasureID
Definition: UpdateFields.h:920
UpdateField< int32, -1, 3 > NpcCraftingOrderCustomerID
Definition: UpdateFields.h:921
UpdateField< uint64, -1, 0 > OrderID
Definition: UpdateFields.h:918
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< int32, -1, 1 > NpcCraftingOrderSetID
Definition: UpdateFields.h:919
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Object const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Object const *owner, Player const *receiver) const
UpdateField< uint32, 0, 2 > DynamicFlags
Definition: UpdateFields.h:54
void ClearChangesMask()
UpdateField< int32, 0, 1 > EntryID
Definition: UpdateFields.h:52
UpdateField< float, 0, 3 > Scale
Definition: UpdateFields.h:56
UpdateField< int8, 0, 2 > Bracket
Definition: UpdateFields.h:644
UpdateField< uint32, 0, 15 > WeeklyRoundsPlayed
Definition: UpdateFields.h:657
UpdateField< bool, 0, 1 > Disqualified
Definition: UpdateFields.h:643
UpdateField< uint32, 0, 11 > PvpTierID
Definition: UpdateFields.h:653
void ClearChangesMask()
UpdateField< uint32, 0, 8 > Rating
Definition: UpdateFields.h:650
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 18 > SeasonRoundsWon
Definition: UpdateFields.h:660
UpdateField< uint32, 0, 5 > WeeklyWon
Definition: UpdateFields.h:647
UpdateField< uint32, 0, 16 > WeeklyRoundsWon
Definition: UpdateFields.h:658
UpdateField< uint32, 0, 17 > SeasonRoundsPlayed
Definition: UpdateFields.h:659
UpdateField< uint32, 0, 7 > SeasonWon
Definition: UpdateFields.h:649
UpdateField< uint32, 0, 4 > WeeklyPlayed
Definition: UpdateFields.h:646
UpdateField< uint32, 0, 12 > WeeklyBestWinPvpTierID
Definition: UpdateFields.h:654
UpdateField< int32, 0, 3 > PvpRatingID
Definition: UpdateFields.h:645
UpdateField< uint32, 0, 10 > SeasonBestRating
Definition: UpdateFields.h:652
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 9 > WeeklyBestRating
Definition: UpdateFields.h:651
UpdateField< uint32, 0, 13 > Field_28
Definition: UpdateFields.h:655
UpdateField< uint32, 0, 14 > Field_2C
Definition: UpdateFields.h:656
UpdateField< uint32, 0, 6 > SeasonPlayed
Definition: UpdateFields.h:648
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Unit const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Unit const *owner, Player const *receiver) const
bool operator==(PassiveSpellHistory const &right) const
UpdateField< int32, -1, 0 > ProfessionID
Definition: UpdateFields.h:908
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< uint32, -1, 1 > Count
Definition: UpdateFields.h:909
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 1 > CreatureID
Definition: UpdateFields.h:481
UpdateField< std::string, 0, 2 > Name
Definition: UpdateFields.h:482
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
bool operator==(PlayerDataElement const &right) const
UpdateField< int32, 0, 31 > HonorLevel
Definition: UpdateFields.h:555
UpdateField< ObjectGuid, 0, 11 > BnetAccount
Definition: UpdateFields.h:535
DynamicUpdateField< UF::PetCreatureName, 0, 7 > PetNames
Definition: UpdateFields.h:532
UpdateField< ObjectGuid, 0, 13 > LootTargetGUID
Definition: UpdateFields.h:537
UpdateField< bool, 0, 2 > HasLevelLink
Definition: UpdateFields.h:526
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< uint64, 0, 12 > GuildClubMemberID
Definition: UpdateFields.h:536
UpdateField< UF::CTROptions, 32, 38 > CtrOptions
Definition: UpdateFields.h:561
UpdateField< int32, 32, 35 > Field_1AC
Definition: UpdateFields.h:558
UpdateField< int32, 0, 29 > TaxiMountAnimKitID
Definition: UpdateFields.h:553
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Player const *owner, Player const *receiver) const
UpdateField< int32, 32, 40 > SoulbindID
Definition: UpdateFields.h:563
UpdateField< int32, 0, 18 > GuildLevel
Definition: UpdateFields.h:542
UpdateField< WorldPackets::MythicPlus::DungeonScoreSummary, 32, 41 > DungeonScore
Definition: UpdateFields.h:564
UpdateField< uint8, 0, 30 > CurrentBattlePetBreedQuality
Definition: UpdateFields.h:554
UpdateField< uint32, 0, 27 > VirtualPlayerRealm
Definition: UpdateFields.h:551
UpdateField< int32, 32, 43 > Field_200
Definition: UpdateFields.h:566
DynamicUpdateField< UF::ArenaCooldown, 0, 6 > ArenaCooldowns
Definition: UpdateFields.h:530
UpdateField< int32, 0, 26 > FakeInebriation
Definition: UpdateFields.h:550
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 3 > Customizations
Definition: UpdateFields.h:527
DynamicUpdateField< UF::QuestLog, 0, 5 > QuestSessionQuestLog
Definition: UpdateFields.h:529
UpdateField< ObjectGuid, 32, 42 > SpectateTarget
Definition: UpdateFields.h:565
UpdateField< int32, 32, 36 > Field_1B0
Definition: UpdateFields.h:559
UpdateField< uint32, 0, 28 > CurrentSpecID
Definition: UpdateFields.h:552
UpdateField< uint8, 0, 21 > PvpTitle
Definition: UpdateFields.h:545
UpdateField< ObjectGuid, 0, 9 > DuelArbiter
Definition: UpdateFields.h:533
UpdateFieldArray< UF::VisibleItem, 19, 225, 226 > VisibleItems
Definition: UpdateFields.h:571
UpdateFieldArray< WorldPackets::Item::ItemInstance, 16, 285, 286 > VisibleEquipableSpells
Definition: UpdateFields.h:574
UpdateField< uint8, 0, 22 > ArenaFaction
Definition: UpdateFields.h:546
UpdateField< int32, 0, 24 > GuildTimeStamp
Definition: UpdateFields.h:548
UpdateFieldArray< uint8, 2, 46, 47 > PartyType
Definition: UpdateFields.h:569
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 25 > PlayerTitle
Definition: UpdateFields.h:549
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 4 > QaCustomizations
Definition: UpdateFields.h:528
DynamicUpdateField< int32, 0, 8 > VisualItemReplacements
Definition: UpdateFields.h:531
UpdateField< uint32, 0, 16 > GuildRankID
Definition: UpdateFields.h:540
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateFieldArray< uint32, 19, 302, 303 > Field_3120
Definition: UpdateFields.h:575
UpdateField< ObjectGuid, 0, 10 > WowAccount
Definition: UpdateFields.h:534
UpdateField< bool, 0, 1 > HasQuestSession
Definition: UpdateFields.h:525
UpdateField< int32, 32, 39 > CovenantID
Definition: UpdateFields.h:562
UpdateField< uint32, 0, 17 > GuildDeleteDate
Definition: UpdateFields.h:541
UpdateField< uint8, 0, 20 > Inebriation
Definition: UpdateFields.h:544
bool IsQuestLogChangesMaskSkipped() const
Definition: UpdateFields.h:583
UpdateField< uint32, 0, 23 > DuelTeam
Definition: UpdateFields.h:547
UpdateField< int64, 32, 33 > LogoutTime
Definition: UpdateFields.h:556
UpdateField< UF::CustomTabardInfo, 32, 45 > PersonalTabard
Definition: UpdateFields.h:568
UpdateFieldArray< float, 6, 245, 246 > AvgItemLevel
Definition: UpdateFields.h:572
UpdateField< std::string, 32, 34 > Name
Definition: UpdateFields.h:557
UpdateField< uint8, 0, 19 > NativeSex
Definition: UpdateFields.h:543
UpdateField< int32, 32, 37 > CurrentBattlePetSpeciesID
Definition: UpdateFields.h:560
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 2 > QuestID
Definition: UpdateFields.h:444
UpdateField< uint32, 0, 3 > StateFlags
Definition: UpdateFields.h:445
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateFieldArray< int16, 24, 5, 6 > ObjectiveProgress
Definition: UpdateFields.h:447
void ClearChangesMask()
UpdateField< uint32, 0, 4 > ObjectiveFlags
Definition: UpdateFields.h:446
UpdateField< int64, 0, 1 > EndTime
Definition: UpdateFields.h:443
UpdateField< UF::BitVector, 0, 2 > QuestCompleted
Definition: UpdateFields.h:770
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 1 > Owner
Definition: UpdateFields.h:769
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
bool operator==(RecipeProgressionInfo const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint32, 0, 2 > ReplayTime
Definition: UpdateFields.h:780
UpdateField< int32, 0, 1 > QuestID
Definition: UpdateFields.h:779
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
DynamicUpdateField< UF::CompletedProject, 0, 1 > CompletedProjects
Definition: UpdateFields.h:717
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
int16 ResearchProjectID
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(Research const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void ClearChangesMask()
UpdateField< uint32, 0, 1 > Threshold
Definition: UpdateFields.h:633
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< uint8, 0, 2 > StateID
Definition: UpdateFields.h:634
UpdateField< uint32, 0, 3 > ParameterCurve
UpdateField< uint32, 0, 2 > StartTimeOffset
void WriteCreate(ByteBuffer &data, AreaTrigger const *owner, Player const *receiver) const
UpdateField< bool, 0, 1 > OverrideActive
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, AreaTrigger const *owner, Player const *receiver) const
UpdateField< int32, 0, 1 > ScriptPackageID
UpdateField< ObjectGuid, 0, 3 > CreatedBy
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Object const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Object const *owner, Player const *receiver) const
UpdateField< uint32, 0, 2 > RndSeedVal
UpdateFieldArray< uint32, 4, 3, 4 > AzeriteEssenceID
Definition: UpdateFields.h:188
UpdateField< bool, 0, 1 > Enabled
Definition: UpdateFields.h:186
UpdateField< uint32, 0, 2 > SpecializationID
Definition: UpdateFields.h:187
void WriteCreate(ByteBuffer &data, AzeriteItem const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, AzeriteItem const *owner, Player const *receiver) const
UpdateFieldArray< uint16, 256, 0, 1537 > SkillPermBonus
Definition: UpdateFields.h:594
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateFieldArray< uint16, 256, 0, 769 > SkillStartingRank
Definition: UpdateFields.h:591
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateFieldArray< uint16, 256, 0, 257 > SkillStep
Definition: UpdateFields.h:589
UpdateFieldArray< uint16, 256, 0, 1025 > SkillMaxRank
Definition: UpdateFields.h:592
void ClearChangesMask()
UpdateFieldArray< int16, 256, 0, 1281 > SkillTempBonus
Definition: UpdateFields.h:593
UpdateFieldArray< uint16, 256, 0, 513 > SkillRank
Definition: UpdateFields.h:590
UpdateFieldArray< uint16, 256, 0, 1 > SkillLineID
Definition: UpdateFields.h:588
UpdateFieldArray< uint16, 16, 3, 4 > BonusListIDs
Definition: UpdateFields.h:112
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Item const *owner, Player const *receiver) const
UpdateField< uint8, 0, 2 > Context
Definition: UpdateFields.h:111
UpdateField< int32, 0, 1 > ItemID
Definition: UpdateFields.h:110
void WriteCreate(ByteBuffer &data, Item const *owner, Player const *receiver) const
bool operator==(SpellCastVisual const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Object const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Object const *owner, Player const *receiver) const
bool operator==(SpellFlatModByLabel const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
bool operator==(SpellPctModByLabel const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 2 > StableMaster
Definition: UpdateFields.h:969
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
DynamicUpdateField< UF::StablePetInfo, 0, 1 > Pets
Definition: UpdateFields.h:968
UpdateField< uint32, 0, 5 > ExperienceLevel
Definition: UpdateFields.h:956
UpdateField< uint32, 0, 2 > PetNumber
Definition: UpdateFields.h:953
UpdateField< uint32, 0, 1 > PetSlot
Definition: UpdateFields.h:952
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< std::string, 0, 6 > Name
Definition: UpdateFields.h:957
UpdateField< uint8, 0, 7 > PetFlags
Definition: UpdateFields.h:958
UpdateField< uint32, 0, 4 > DisplayID
Definition: UpdateFields.h:955
UpdateField< uint32, 0, 3 > CreatureID
Definition: UpdateFields.h:954
UpdateField< uint32, 0, 8 > Specialization
Definition: UpdateFields.h:959
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, 12, 13 > TraitSystemID
Definition: UpdateFields.h:823
UpdateField< int32, 4, 6 > Type
Definition: UpdateFields.h:818
UpdateField< int32, 0, 3 > ID
Definition: UpdateFields.h:816
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
UpdateField< std::string, 4, 5 > Name
Definition: UpdateFields.h:817
UpdateField< int32, 4, 7 > SkillLineID
Definition: UpdateFields.h:819
DynamicUpdateField< UF::TraitSubTreeCache, 0, 2 > SubTrees
Definition: UpdateFields.h:815
UpdateField< int32, 8, 10 > CombatConfigFlags
Definition: UpdateFields.h:821
UpdateField< int32, 8, 9 > ChrSpecializationID
Definition: UpdateFields.h:820
UpdateField< int32, 8, 11 > LocalIdentifier
Definition: UpdateFields.h:822
int32 TraitNodeEntryID
Definition: UpdateFields.h:790
bool operator==(TraitEntry const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(TraitSubTreeCache const &right) const
std::vector< UF::TraitEntry > Entries
Definition: UpdateFields.h:802
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, Unit const *owner, Player const *receiver) const
bool operator==(UnitChannel const &right) const
UF::SpellCastVisual SpellVisual
Definition: UpdateFields.h:229
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Unit const *owner, Player const *receiver) const
UpdateField< int32, 32, 38 > EffectiveLevel
Definition: UpdateFields.h:306
UpdateField< int32, 32, 44 > FactionTemplate
Definition: UpdateFields.h:312
UpdateField< int32, 32, 40 > ScalingLevelMin
Definition: UpdateFields.h:308
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Unit const *owner, Player const *receiver) const
UpdateField< bool, 0, 1 > Field_314
Definition: UpdateFields.h:263
UpdateField< float, 32, 52 > CombatReach
Definition: UpdateFields.h:326
UpdateField< float, 64, 91 > AttackPowerMultiplier
Definition: UpdateFields.h:365
UpdateField< uint64, 0, 24 > BattlePetDBID
Definition: UpdateFields.h:293
UpdateField< float, 64, 77 > ModRangedHaste
Definition: UpdateFields.h:350
UpdateField< std::vector< uint32 >, 0, 2 > StateWorldEffectIDs
Definition: UpdateFields.h:264
UpdateField< uint8, 0, 29 > ClassId
Definition: UpdateFields.h:298
UpdateField< float, 96, 104 > MinRangedDamage
Definition: UpdateFields.h:377
UpdateField< uint8, 64, 65 > StandState
Definition: UpdateFields.h:338
UpdateField< uint32, 32, 49 > AuraState
Definition: UpdateFields.h:322
UpdateField< int32, 32, 39 > ContentTuningID
Definition: UpdateFields.h:307
UpdateField< int32, 96, 99 > MainHandWeaponAttackPower
Definition: UpdateFields.h:372
UpdateField< int32, 96, 109 > MinItemLevelCutoff
Definition: UpdateFields.h:382
UpdateField< float, 96, 125 > GlideEventSpeedDivisor
Definition: UpdateFields.h:399
UpdateFieldArray< int32, 4, 183, 192 > StatNegBuff
Definition: UpdateFields.h:416
UpdateField< ObjectGuid, 128, 134 > NameplateAttachToGUID
Definition: UpdateFields.h:407
UpdateField< int32, 32, 58 > MountDisplayID
Definition: UpdateFields.h:332
UpdateFieldArray< int32, 4, 183, 188 > StatPosBuff
Definition: UpdateFields.h:415
static void AppendAllowedFieldsMaskForFlag(Mask &allowedMaskForTarget, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< int32, 96, 121 > PerksVendorItemID
Definition: UpdateFields.h:395
UpdateField< uint32, 0, 12 > StateWorldEffectsQuestObjectiveID
Definition: UpdateFields.h:281
UpdateField< float, 96, 97 > RangedAttackPowerMultiplier
Definition: UpdateFields.h:370
UpdateField< uint8, 32, 43 > ScalingFactionGroup
Definition: UpdateFields.h:311
UpdateField< float, 64, 73 > ModCastingSpeed
Definition: UpdateFields.h:346
UpdateFieldArray< int32, 10, 135, 136 > Power
Definition: UpdateFields.h:408
UpdateField< int32, 32, 37 > Level
Definition: UpdateFields.h:305
UpdateField< uint8, 32, 33 > DisplayPower
Definition: UpdateFields.h:301
DynamicUpdateField< int32, 0, 4 > WorldEffects
Definition: UpdateFields.h:267
UpdateField< int64, 32, 35 > Health
Definition: UpdateFields.h:303
UpdateField< uint32, 64, 72 > PetNextLevelExperience
Definition: UpdateFields.h:345
UpdateFieldArray< int32, 7, 200, 208 > BonusResistanceMods
Definition: UpdateFields.h:419
UpdateField< float, 32, 63 > MaxOffHandDamage
Definition: UpdateFields.h:337
UpdateField< float, 32, 57 > NativeXDisplayScale
Definition: UpdateFields.h:331
UpdateField< int32, 64, 89 > AttackPowerModPos
Definition: UpdateFields.h:363
UpdateField< int32, 96, 124 > FlightCapabilityID
Definition: UpdateFields.h:398
UpdateField< int32, 96, 101 > RangedWeaponAttackPower
Definition: UpdateFields.h:374
DynamicUpdateField< ObjectGuid, 0, 5 > ChannelObjects
Definition: UpdateFields.h:268
UpdateFieldArray< UF::VisibleItem, 3, 176, 177 > VirtualItems
Definition: UpdateFields.h:412
UpdateField< float, 32, 61 > MaxDamage
Definition: UpdateFields.h:335
UpdateField< uint8, 0, 28 > Race
Definition: UpdateFields.h:297
UpdateField< uint8, 0, 31 > Sex
Definition: UpdateFields.h:300
UpdateField< int32, 96, 118 > LooksLikeMountID
Definition: UpdateFields.h:392
UpdateField< int64, 32, 36 > MaxHealth
Definition: UpdateFields.h:304
UpdateField< float, 64, 75 > ModSpellHaste
Definition: UpdateFields.h:348
UpdateField< int32, 96, 100 > OffHandWeaponAttackPower
Definition: UpdateFields.h:373
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Unit const *owner, Player const *receiver) const
UpdateField< ObjectGuid, 0, 18 > SummonedBy
Definition: UpdateFields.h:287
UpdateField< int8, 0, 26 > SpellEmpowerStage
Definition: UpdateFields.h:295
UpdateField< uint32, 0, 10 > StateAnimID
Definition: UpdateFields.h:277
UpdateField< uint32, 32, 45 > Flags
Definition: UpdateFields.h:314
UpdateField< uint8, 64, 66 > PetTalentPoints
Definition: UpdateFields.h:339
UpdateField< int32, 96, 116 > InteractSpellID
Definition: UpdateFields.h:389
UpdateField< int32, 32, 42 > ScalingLevelDelta
Definition: UpdateFields.h:310
UpdateField< int32, 64, 82 > BaseMana
Definition: UpdateFields.h:355
UpdateFieldArray< int32, 7, 200, 215 > ManaCostModifier
Definition: UpdateFields.h:420
DynamicUpdateField< UF::PassiveSpellHistory, 0, 3 > PassiveSpells
Definition: UpdateFields.h:266
UpdateField< int32, 96, 113 > WildBattlePetLevel
Definition: UpdateFields.h:386
UpdateField< uint32, 32, 50 > RangedAttackRoundBaseTime
Definition: UpdateFields.h:324
UpdateField< int32, 128, 129 > MaxHealthModifierFlatPos
Definition: UpdateFields.h:402
UpdateField< uint8, 64, 86 > PetFlags
Definition: UpdateFields.h:360
UpdateField< float, 128, 132 > Field_31C
Definition: UpdateFields.h:405
UpdateField< uint32, 64, 71 > PetExperience
Definition: UpdateFields.h:344
UpdateField< float, 64, 79 > ModTimeRate
Definition: UpdateFields.h:352
UpdateField< int32, 64, 94 > RangedAttackPowerModPos
Definition: UpdateFields.h:368
UpdateField< uint32, 64, 70 > PetNameTimestamp
Definition: UpdateFields.h:343
UpdateField< uint8, 64, 84 > SheatheState
Definition: UpdateFields.h:357
UpdateField< int32, 96, 122 > TaxiNodesID
Definition: UpdateFields.h:396
UpdateField< float, 96, 107 > MaxHealthModifier
Definition: UpdateFields.h:380
UpdateField< float, 32, 60 > MinDamage
Definition: UpdateFields.h:334
UpdateField< ObjectGuid, 0, 19 > CreatedBy
Definition: UpdateFields.h:288
UpdateField< float, 96, 105 > MaxRangedDamage
Definition: UpdateFields.h:378
UpdateField< UF::UnitChannel, 0, 25 > ChannelData
Definition: UpdateFields.h:294
UpdateField< ObjectGuid, 0, 17 > CharmedBy
Definition: UpdateFields.h:286
UpdateField< ObjectGuid, 0, 21 > LookAtControllerTarget
Definition: UpdateFields.h:290
UpdateField< uint8, 0, 30 > PlayerClassId
Definition: UpdateFields.h:299
UpdateField< uint8, 64, 85 > PvpFlags
Definition: UpdateFields.h:358
UpdateField< float, 96, 106 > ManaCostMultiplier
Definition: UpdateFields.h:379
UpdateFieldArray< int32, 10, 135, 146 > MaxPower
Definition: UpdateFields.h:409
UpdateFieldArray< float, 10, 135, 166 > PowerRegenInterruptedFlatModifier
Definition: UpdateFields.h:411
UpdateField< int32, 32, 59 > CosmeticMountDisplayID
Definition: UpdateFields.h:333
UpdateField< int32, 64, 95 > RangedAttackPowerModNeg
Definition: UpdateFields.h:369
UpdateField< int32, 96, 110 > MinItemLevel
Definition: UpdateFields.h:383
UpdateField< int32, 96, 117 > ScaleDuration
Definition: UpdateFields.h:391
UpdateField< ObjectGuid, 0, 15 > Summon
Definition: UpdateFields.h:284
UpdateField< int32, 64, 81 > EmoteState
Definition: UpdateFields.h:354
UpdateFieldArray< float, 10, 135, 156 > PowerRegenFlatModifier
Definition: UpdateFields.h:410
UpdateField< uint32, 0, 27 > SummonedByHomeRealm
Definition: UpdateFields.h:296
UpdateField< float, 64, 74 > ModCastingSpeedNeg
Definition: UpdateFields.h:347
UpdateField< ObjectGuid, 96, 123 > GuildGUID
Definition: UpdateFields.h:397
UpdateField< float, 32, 62 > MinOffHandDamage
Definition: UpdateFields.h:336
void ClearChangesMask()
UpdateField< float, 64, 78 > ModHasteRegen
Definition: UpdateFields.h:351
UpdateField< uint32, 96, 115 > BattlePetCompanionNameTimestamp
Definition: UpdateFields.h:388
UpdateField< int32, 32, 56 > NativeDisplayID
Definition: UpdateFields.h:330
UpdateField< float, 96, 108 > HoverHeight
Definition: UpdateFields.h:381
UpdateField< uint32, 0, 8 > NpcFlags2
Definition: UpdateFields.h:273
UpdateField< float, 128, 133 > Field_320
Definition: UpdateFields.h:406
UpdateField< float, 64, 76 > ModHaste
Definition: UpdateFields.h:349
UpdateField< int32, 96, 120 > LookAtControllerID
Definition: UpdateFields.h:394
UpdateField< int32, 64, 92 > AttackPowerModSupport
Definition: UpdateFields.h:366
UpdateField< int32, 32, 41 > ScalingLevelMax
Definition: UpdateFields.h:309
UpdateField< int32, 96, 111 > MaxItemLevel
Definition: UpdateFields.h:384
UpdateFieldArray< int32, 7, 200, 201 > Resistances
Definition: UpdateFields.h:418
UpdateField< int32, 64, 90 > AttackPowerModNeg
Definition: UpdateFields.h:364
static void FilterDisallowedFieldsMaskForFlag(Mask &changesMask, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags)
UpdateField< uint32, 32, 34 > OverrideDisplayPowerID
Definition: UpdateFields.h:302
UpdateField< int32, 64, 83 > BaseHealth
Definition: UpdateFields.h:356
UpdateField< int32, 0, 6 > DisplayID
Definition: UpdateFields.h:269
UpdateField< uint32, 64, 69 > PetNumber
Definition: UpdateFields.h:342
UpdateField< int32, 0, 13 > SpellOverrideNameID
Definition: UpdateFields.h:282
UpdateField< uint32, 32, 47 > Flags3
Definition: UpdateFields.h:318
UpdateField< ObjectGuid, 0, 23 > BattlePetCompanionGUID
Definition: UpdateFields.h:292
UpdateField< uint32, 0, 9 > StateSpellVisualID
Definition: UpdateFields.h:275
UpdateField< int32, 96, 114 > BattlePetCompanionExperience
Definition: UpdateFields.h:387
UpdateField< int32, 96, 112 > AzeriteItemLevel
Definition: UpdateFields.h:385
UpdateField< int32, 96, 126 > DriveCapabilityID
Definition: UpdateFields.h:400
UpdateField< uint32, 0, 11 > StateAnimKitID
Definition: UpdateFields.h:279
UpdateField< ObjectGuid, 0, 16 > Critter
Definition: UpdateFields.h:285
UpdateField< uint32, 128, 131 > CurrentAreaID
Definition: UpdateFields.h:404
UpdateFieldArray< int32, 4, 183, 196 > StatSupportBuff
Definition: UpdateFields.h:417
UpdateField< int32, 64, 93 > RangedAttackPower
Definition: UpdateFields.h:367
UpdateField< float, 96, 103 > Lifesteal
Definition: UpdateFields.h:376
UpdateField< ObjectGuid, 0, 22 > Target
Definition: UpdateFields.h:291
UpdateField< uint32, 32, 48 > Flags4
Definition: UpdateFields.h:320
UpdateField< float, 32, 53 > DisplayScale
Definition: UpdateFields.h:327
UpdateField< int32, 96, 119 > LooksLikeCreatureID
Definition: UpdateFields.h:393
UpdateField< int32, 96, 98 > RangedAttackPowerModSupport
Definition: UpdateFields.h:371
UpdateField< int32, 96, 102 > SetAttackSpeedAura
Definition: UpdateFields.h:375
UpdateField< ObjectGuid, 0, 20 > DemonCreator
Definition: UpdateFields.h:289
UpdateField< int32, 64, 80 > CreatedBySpell
Definition: UpdateFields.h:353
UpdateField< uint32, 32, 46 > Flags2
Definition: UpdateFields.h:316
UpdateField< float, 32, 51 > BoundingRadius
Definition: UpdateFields.h:325
UpdateField< int32, 64, 88 > AttackPower
Definition: UpdateFields.h:362
UpdateField< ObjectGuid, 0, 14 > Charm
Definition: UpdateFields.h:283
UpdateField< uint8, 64, 67 > VisFlags
Definition: UpdateFields.h:340
UpdateField< int32, 96, 127 > MaxHealthModifierFlatNeg
Definition: UpdateFields.h:401
UpdateField< uint32, 0, 7 > NpcFlags
Definition: UpdateFields.h:271
UpdateFieldArray< uint32, 2, 180, 181 > AttackRoundBaseTime
Definition: UpdateFields.h:413
UpdateField< uint32, 128, 130 > SilencedSchoolMask
Definition: UpdateFields.h:403
void WriteCreate(ByteBuffer &data, AzeriteItem const *owner, Player const *receiver) const
bool operator==(UnlockedAzeriteEssence const &right) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, AzeriteItem const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Creature const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, EnumFlag< UpdateFieldFlag > fieldVisibilityFlags, Creature const *owner, Player const *receiver) const
UpdateField< int32, 0, 1 > Flags
void WriteCreate(ByteBuffer &data, Unit const *owner, Player const *receiver) const
UpdateField< uint16, 0, 4 > ItemAppearanceModID
Definition: UpdateFields.h:242
UpdateField< int32, 0, 2 > SecondaryItemModifiedAppearanceID
Definition: UpdateFields.h:240
UpdateField< uint16, 0, 5 > ItemVisual
Definition: UpdateFields.h:243
UpdateField< int32, 0, 3 > ConditionalItemAppearanceID
Definition: UpdateFields.h:241
UpdateField< int32, 0, 1 > ItemID
Definition: UpdateFields.h:239
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Unit const *owner, Player const *receiver) const
UpdateField< uint32, 0, 3 > AnimKitID
UpdateField< uint32, 0, 4 > AnimProgress
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, AreaTrigger const *owner, Player const *receiver) const
void WriteCreate(ByteBuffer &data, AreaTrigger const *owner, Player const *receiver) const
UpdateField< uint32, 0, 2 > AnimationDataID
UpdateField< bool, 0, 1 > IsDecay
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(WalkInData const &right) const
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
ObjectGuid Field_18
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const
bool operator==(WeeklySpellUse const &right) const
UpdateField< int32, 0, 1 > FactionID
Definition: UpdateFields.h:471
void WriteCreate(ByteBuffer &data, Player const *owner, Player const *receiver) const
UpdateField< int32, 0, 2 > Reaction
Definition: UpdateFields.h:472
void WriteUpdate(ByteBuffer &data, bool ignoreChangesMask, Player const *owner, Player const *receiver) const