TrinityCore
Loading...
Searching...
No Matches
MiscPackets.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 "MiscPackets.h"
19#include "PacketOperators.h"
20#include "Player.h"
21
23{
32
34{
36
37 return &_worldPacket;
38}
39
50
52{
56 _worldPacket << Size<uint32>(Toasts);
57
58 for (Item::UiEventToast const& toast : Toasts)
59 _worldPacket << toast;
60
65 _worldPacket << Bits<1>(SuppressChatLog);
74
77
80
81 if (MaxQuantity)
83
84 if (TotalEarned)
86
89
92
95
98
101
104
107
108 return &_worldPacket;
109}
110
112{
114 _worldPacket >> As<uint8>(Flags);
115}
116
121
123{
124 _worldPacket << Size<uint32>(Data);
125
126 for (Record const& data : Data)
127 {
128 _worldPacket << int32(data.Type);
129 _worldPacket << int32(data.Quantity);
130 _worldPacket << uint8(data.Flags);
131
132 _worldPacket << OptionalInit(data.WeeklyQuantity);
133 _worldPacket << OptionalInit(data.MaxWeeklyQuantity);
134 _worldPacket << OptionalInit(data.TrackedQuantity);
135 _worldPacket << OptionalInit(data.MaxQuantity);
136 _worldPacket << OptionalInit(data.TotalEarned);
137 _worldPacket << OptionalInit(data.NextRechargeTime);
138 _worldPacket << OptionalInit(data.RechargeCycleStartTime);
140
141 if (data.WeeklyQuantity)
142 _worldPacket << uint32(*data.WeeklyQuantity);
143 if (data.MaxWeeklyQuantity)
144 _worldPacket << uint32(*data.MaxWeeklyQuantity);
145 if (data.TrackedQuantity)
146 _worldPacket << uint32(*data.TrackedQuantity);
147 if (data.MaxQuantity)
148 _worldPacket << int32(*data.MaxQuantity);
149 if (data.TotalEarned)
150 _worldPacket << int32(*data.TotalEarned);
151 if (data.NextRechargeTime)
152 _worldPacket << *data.NextRechargeTime;
153 if (data.RechargeCycleStartTime)
154 _worldPacket << *data.RechargeCycleStartTime;
155 }
156
157 return &_worldPacket;
158}
159
164
171
177
179{
181
182 return &_worldPacket;
183}
184
186{
188
189 return &_worldPacket;
190}
191
199
206
208{
209 _worldPacket >> Bits<2>(Action);
210
213}
214
241
246
252
259
267
269{
271
272 return &_worldPacket;
273}
274
276{
278 _worldPacket << Loc;
279
280 return &_worldPacket;
281}
282
284{
286
287 return &_worldPacket;
288}
289
294
296{
297 _worldPacket >> Bits<1>(CheckInstance);
298}
299
301{
302 _worldPacket << Bits<1>(IsGossipTriggered);
304
305 _worldPacket << Size<uint32>(CemeteryID);
306 for (uint32 cemetery : CemeteryID)
307 _worldPacket << cemetery;
308
309 return &_worldPacket;
310}
311
317
319{
321 _worldPacket << float(Intensity);
322 _worldPacket << Bits<1>(Abrupt);
324
325 return &_worldPacket;
326}
327
329{
330 _worldPacket >> As<uint8>(StandState);
331}
332
334{
335 _worldPacket << As<uint8>(State);
337
338 return &_worldPacket;
339}
340
342{
346
347 return &_worldPacket;
348}
349
351{
354
355 return &_worldPacket;
356}
357
359{
365 _worldPacket << Bits<1>(Paused);
367
368 return &_worldPacket;
369}
370
372{
374 _worldPacket << Bits<1>(Paused);
376
377 return &_worldPacket;
378}
379
381{
383
384 return &_worldPacket;
385}
386
394
396{
399
400 for (int32 power : PowerDelta)
401 _worldPacket << power;
402
403 for (int32 stat : StatDelta)
404 _worldPacket << stat;
405
408
409 return &_worldPacket;
410}
411
413{
415
416 return &_worldPacket;
417}
418
427
438
445
446ByteBuffer& operator<<(ByteBuffer& data, PhaseShiftDataPhase const& phaseShiftDataPhase)
447{
448 data << uint32(phaseShiftDataPhase.PhaseFlags);
449 data << uint16(phaseShiftDataPhase.Id);
450
451 return data;
452}
453
454ByteBuffer& operator<<(ByteBuffer& data, PhaseShiftData const& phaseShiftData)
455{
456 data << uint32(phaseShiftData.PhaseShiftFlags);
457 data << WorldPackets::Size<uint32>(phaseShiftData.Phases);
458 data << phaseShiftData.PersonalGUID;
459 for (PhaseShiftDataPhase const& phaseShiftDataPhase : phaseShiftData.Phases)
460 data << phaseShiftDataPhase;
461
462 return data;
463}
464
466{
469 _worldPacket << uint32(VisibleMapIDs.size() * 2); // size in bytes
470 for (uint16 visibleMapId : VisibleMapIDs)
471 _worldPacket << uint16(visibleMapId); // Active terrain swap map id
472
473 _worldPacket << uint32(PreloadMapIDs.size() * 2); // size in bytes
474 for (uint16 preloadMapId : PreloadMapIDs)
475 _worldPacket << uint16(preloadMapId); // Inactive terrain swap map id
476
477 _worldPacket << uint32(UiMapPhaseIDs.size() * 2); // size in bytes
478 for (uint16 uiMapPhaseId : UiMapPhaseIDs)
479 _worldPacket << uint16(uiMapPhaseId); // phase id, controls only map display (visible on all maps)
480
481 return &_worldPacket;
482}
483
485{
487
488 return &_worldPacket;
489}
490
497
502
507
518
527
535
542
544{
545 _worldPacket >> Bits<1>(Enable);
546}
547
549{
550 _worldPacket >> Size<uint32>(CUFProfiles);
551 for (std::unique_ptr<CUFProfile>& cufProfile : CUFProfiles)
552 {
553 cufProfile = std::make_unique<CUFProfile>();
554
555 _worldPacket >> SizedString::BitsSize<7>(cufProfile->ProfileName);
556
557 // Bool Options
558 for (uint8 option = 0; option < CUF_BOOL_OPTIONS_COUNT; option++)
559 cufProfile->BoolOptions.set(option, _worldPacket.ReadBit());
560
561 // Other Options
562 _worldPacket >> cufProfile->FrameHeight;
563 _worldPacket >> cufProfile->FrameWidth;
564
565 _worldPacket >> cufProfile->SortBy;
566 _worldPacket >> cufProfile->HealthText;
567
568 _worldPacket >> cufProfile->TopPoint;
569 _worldPacket >> cufProfile->BottomPoint;
570 _worldPacket >> cufProfile->LeftPoint;
571
572 _worldPacket >> cufProfile->TopOffset;
573 _worldPacket >> cufProfile->BottomOffset;
574 _worldPacket >> cufProfile->LeftOffset;
575
576 _worldPacket >> SizedString::Data(cufProfile->ProfileName);
577 }
578}
579
581{
582 _worldPacket << Size<uint32>(CUFProfiles);
583
584 for (CUFProfile const* cufProfile : CUFProfiles)
585 {
586 _worldPacket << SizedString::BitsSize<7>(cufProfile->ProfileName);
587
588 // Bool Options
589 for (uint8 option = 0; option < CUF_BOOL_OPTIONS_COUNT; option++)
590 _worldPacket.WriteBit(cufProfile->BoolOptions[option]);
591
592 // Other Options
593 _worldPacket << uint16(cufProfile->FrameHeight);
594 _worldPacket << uint16(cufProfile->FrameWidth);
595
596 _worldPacket << uint8(cufProfile->SortBy);
597 _worldPacket << uint8(cufProfile->HealthText);
598
599 _worldPacket << uint8(cufProfile->TopPoint);
600 _worldPacket << uint8(cufProfile->BottomPoint);
601 _worldPacket << uint8(cufProfile->LeftPoint);
602
603 _worldPacket << uint16(cufProfile->TopOffset);
604 _worldPacket << uint16(cufProfile->BottomOffset);
605 _worldPacket << uint16(cufProfile->LeftOffset);
606
607 _worldPacket << SizedString::Data(cufProfile->ProfileName);
608 }
609
610 return &_worldPacket;
611}
612
620
622{
625
626 return &_worldPacket;
627}
628
636
644
646{
648 _worldPacket << Bits<1>(PlayHoverAnim);
650
651 return &_worldPacket;
652}
653
655{
656 _worldPacket >> Bits<1>(EnablePVP);
657}
658
660{
661 _worldPacket >> Bits<1>(Enable);
662}
663
665{
666 _worldPacket << Bits<1>(IsFullUpdate);
668
670
671 // both lists have to have the same size
672 _worldPacket << Size<uint32>(*Heirlooms);
673 _worldPacket << Size<uint32>(*Heirlooms);
674
675 for (auto const& [itemId, _] : *Heirlooms)
676 _worldPacket << int32(itemId);
677
678 for (auto const& [_, data] : *Heirlooms)
679 _worldPacket << uint32(data.flags);
680
681 return &_worldPacket;
682}
683
685{
686 _worldPacket >> Size<uint32>(SpellVisualKitIDs);
688 for (int32& spellVisualKitId : SpellVisualKitIDs)
689 _worldPacket >> spellVisualKitId;
690}
691
693{
695 _worldPacket << Size<uint32>(SpellVisualKitIDs);
697 if (!SpellVisualKitIDs.empty())
699
700 return &_worldPacket;
701}
702
711
713{
714 _worldPacket >> Bits<1>(Enable);
715}
716
725
727{
732
733 if (Arg)
735
736 if (Arg2)
738
739 return &_worldPacket;
740}
741
743{
744 _worldPacket << Bits<1>(IsFullUpdate);
745 _worldPacket << Size<uint32>(*Mounts);
746
747 for (auto const& [spellId, flags] : *Mounts)
748 {
749 _worldPacket << int32(spellId);
750 _worldPacket << Bits<4>(flags);
751 }
752
754
755 return &_worldPacket;
756}
757
763
768
782
784{
785 _worldPacket >> As<int32>(TimerType);
786}
787
793
800
802{
804 _worldPacket << As<uint8>(DisplayToastMethod);
806
807 _worldPacket << Bits<1>(Mailed);
808 _worldPacket << Bits<2>(Type);
809 _worldPacket << Bits<1>(IsSecondaryResult);
810
811 switch (Type)
812 {
814 _worldPacket << Bits<1>(BonusRoll);
815 _worldPacket << Bits<1>(ForceToast);
819 break;
822 break;
823 default:
824 break;
825 }
826
828
829 return &_worldPacket;
830}
831
833{
834 _worldPacket << Bits<1>(IsFullUpdate);
835 _worldPacket << Size<uint32>(*WarbandScenes);
836 _worldPacket << Size<uint32>(*WarbandScenes);
837 _worldPacket << Size<uint32>(*WarbandScenes);
838
839 for (auto const& [warbandSceneId, _] : *WarbandScenes)
840 _worldPacket << uint32(warbandSceneId);
841
842 for (auto const& [_, data] : *WarbandScenes)
843 _worldPacket << Bits<1>(data.Flags.HasFlag(WarbandSceneCollectionFlags::Favorite));
844
845 for (auto const& [_, data] : *WarbandScenes)
846 _worldPacket << Bits<1>(data.Flags.HasFlag(WarbandSceneCollectionFlags::HasFanfare));
847
849
850 return &_worldPacket;
851}
852}
@ CUF_BOOL_OPTIONS_COUNT
Definition CUFProfile.h:59
ItemCollectionType
Definition DBCEnums.h:1299
uint8_t uint8
Definition Define.h:156
int16_t int16
Definition Define.h:151
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
uint16 flags
DisplayToastMethod
Definition Player.h:1098
Gender
@ TUTORIAL_ACTION_UPDATE
Action
void append(T value)
Definition ByteBuffer.h:130
bool WriteBit(bool bit)
Definition ByteBuffer.h:158
void FlushBits()
Definition ByteBuffer.h:141
bool ReadBit()
Definition ByteBuffer.h:174
WorldPacket const * Write() override
std::map< uint32, HeirloomData > const * Heirlooms
WorldPacket const * Write() override
WarbandSceneCollectionContainer const * WarbandScenes
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > BindPosition
Definition MiscPackets.h:52
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > Loc
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
bool ForceToast
Ignores ITEM_FLAG3_DO_NOT_TOAST.
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
std::array< int32, MAX_POWERS_PER_CLASS > PowerDelta
std::array< int32, MAX_STATS > StatDelta
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< CUFProfile const * > CUFProfiles
WorldPacket const * Write() override
Array< int32, 2 > SpellVisualKitIDs
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< uint16 > VisibleMapIDs
std::vector< uint16 > UiMapPhaseIDs
std::vector< uint16 > PreloadMapIDs
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
TaggedPosition<::Position::XYZ > Position
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
Array< std::unique_ptr< CUFProfile >, MAX_CUF_PROFILES > CUFProfiles
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
Optional< CurrencyDestroyReason > QuantityLostSource
Optional< int32 > QuantityChange
Optional< CurrencyGainSource > QuantityGainSource
std::vector< Item::UiEventToast > Toasts
Optional< uint32 > FirstCraftOperationID
Optional< int32 > WeeklyQuantity
Optional< Timestamp<> > RechargeCycleStartTime
Optional< int32 > TrackedQuantity
Optional< int32 > OverflownCurrencyID
Optional< Timestamp<> > NextRechargeTime
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< int32 > SpellVisualKitIDs
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
Duration< Seconds > TotalTime
WorldPacket const * Write() override
Optional< ObjectGuid > PlayerGuid
Duration< Seconds > TimeLeft
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
std::array< uint32, MAX_ACCOUNT_TUTORIAL_VALUES > TutorialData
int8 ViolenceLvl
0 - no combat effects, 1 - display some combat effects, 2 - blood, 3 - bloody, 4 - bloodier,...
WorldPacket const * Write() override
Optional< uint64 > RestrictedAccountMaxMoney
Optional< uint32 > RestrictedAccountMaxLevel
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket _worldPacket
Definition Packet.h:43
ByteBuffer & operator<<(ByteBuffer &data, PhaseShiftDataPhase const &phaseShiftDataPhase)
DataWriter< Container > Data(Container const &value)
OptionalInitWriter< T > OptionalInit(Optional< T > const &value)
Represents a CompactUnitFrame profile.
Definition CUFProfile.h:64
std::vector< PhaseShiftDataPhase > Phases