TrinityCore
Loading...
Searching...
No Matches
CharacterPackets.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 "CharacterPackets.h"
19#include "ClubUtils.h"
20#include "DB2Stores.h"
21#include "Field.h"
22#include "ObjectMgr.h"
23#include "PacketOperators.h"
24#include "Player.h"
25#include "World.h"
26
27namespace UF
28{
29ByteBuffer& operator<<(ByteBuffer& data, ChrCustomizationChoice const& customizationChoice)
30{
31 data << uint32(customizationChoice.ChrCustomizationOptionID);
32 data << uint32(customizationChoice.ChrCustomizationChoiceID);
33
34 return data;
35}
36
38{
39 data >> customizationChoice.ChrCustomizationOptionID;
40 data >> customizationChoice.ChrCustomizationChoiceID;
41
42 return data;
43}
44}
45
47{
49{
50 std::ranges::sort(customizations, std::ranges::less(), &ChrCustomizationChoice::ChrCustomizationOptionID);
51}
52
53ByteBuffer& operator<<(ByteBuffer& data, CustomTabardInfo const& customTabardInfo)
54{
55 data << int32(customTabardInfo.EmblemStyle);
56 data << int32(customTabardInfo.EmblemColor);
57 data << int32(customTabardInfo.BorderStyle);
58 data << int32(customTabardInfo.BorderColor);
59 data << int32(customTabardInfo.BackgroundColor);
60
61 return data;
62}
63
65{
66 data >> customTabardInfo.EmblemStyle;
67 data >> customTabardInfo.EmblemColor;
68 data >> customTabardInfo.BorderStyle;
69 data >> customTabardInfo.BorderColor;
70 data >> customTabardInfo.BackgroundColor;
71
72 return data;
73}
74
79
81{
82 // 0 1 2 3 4 5
83 // "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.level, "
84 // 6 7 8 9 10
85 // "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, "
86 // 11 12 13 14 15 16
87 // "guild_member.guildid, characters.playerFlags, characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, "
88 // 17 18 19 20 21 22
89 // "character_banned.guid, characters.slot, characters.createTime, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, "
90 // 23 24 25 26 27
91 // "characters.personalTabardEmblemStyle, characters.personalTabardEmblemColor, characters.personalTabardBorderStyle, characters.personalTabardBorderColor, characters.personalTabardBackgroundColor "
92 // 19 * 8 fields of equipment cache...
93 // 180
94 // "character_declinedname.genitive"
95
96 Guid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
99 Name = fields[1].GetStringView();
100 RaceID = fields[2].GetUInt8();
101 ClassID = fields[3].GetUInt8();
102 SexID = fields[4].GetUInt8();
103 ExperienceLevel = fields[5].GetUInt8();
104 ZoneID = int32(fields[6].GetUInt16());
105 MapID = int32(fields[7].GetUInt16());
106 PreloadPos = Position(fields[8].GetFloat(), fields[9].GetFloat(), fields[10].GetFloat());
107
108 if (ObjectGuid::LowType guildId = fields[11].GetUInt64())
109 GuildGUID = ObjectGuid::Create<HighGuid::Guild>(guildId);
110
111 uint32 playerFlags = fields[12].GetUInt32();
112 uint32 atLoginFlags = fields[13].GetUInt16();
113
114 if (playerFlags & PLAYER_FLAGS_RESTING)
116
117 if (atLoginFlags & AT_LOGIN_RESET_TALENTS)
119
120 if (atLoginFlags & AT_LOGIN_RESURRECT)
121 playerFlags &= ~PLAYER_FLAGS_GHOST;
122
123 if (playerFlags & PLAYER_FLAGS_GHOST)
125
126 if (atLoginFlags & AT_LOGIN_RENAME)
128
129 if (fields[17].GetUInt64())
131
132 if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) && !fields[180].GetStringView().empty())
134
135 if (atLoginFlags & AT_LOGIN_CUSTOMIZE)
137 else if (atLoginFlags & AT_LOGIN_CHANGE_FACTION)
139 else if (atLoginFlags & AT_LOGIN_CHANGE_RACE)
141
142 if (playerFlags & PLAYER_FLAGS_NO_XP_GAIN)
144
145 if (playerFlags & PLAYER_FLAGS_LOW_LEVEL_RAID_ENABLED)
147
148 if (playerFlags & PLAYER_FLAGS_AUTO_DECLINE_GUILD)
150
153
154 if (playerFlags & PLAYER_FLAGS_WAR_MODE_DESIRED)
156
157 FirstLogin = (atLoginFlags & AT_LOGIN_FIRST) != 0;
158
159 // show pet at selection character in character list only for non-ghost character
161 {
162 if (CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(fields[14].GetUInt32()))
163 {
164 PetCreatureDisplayID = fields[15].GetUInt32();
165 PetExperienceLevel = fields[16].GetUInt16();
166 PetCreatureFamilyID = creatureInfo->family;
167 }
168 }
169
170 ProfessionIds[0] = 0;
171 ProfessionIds[1] = 0;
172
173 ListPosition = fields[18].GetUInt8();
174 CreateTime = fields[19].GetInt64();
175 LastActiveTime = fields[20].GetInt64();
176 if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(ClassID, fields[21].GetUInt8()))
177 SpecID = spec->ID;
178
179 LastLoginVersion = fields[22].GetUInt32();
180
181 PersonalTabard.EmblemStyle = fields[23].GetInt32();
182 PersonalTabard.EmblemColor = fields[24].GetInt32();
183 PersonalTabard.BorderStyle = fields[25].GetInt32();
184 PersonalTabard.BorderColor = fields[26].GetInt32();
186
187 for (std::size_t slot = 0; slot < VisualItems.size(); ++slot)
188 {
189 constexpr std::size_t equipmentFieldsPerSlot = 8;
190
191 std::size_t visualBase = 28 + slot * equipmentFieldsPerSlot;
192 VisualItems[slot].ItemID = fields[visualBase + 0].GetUInt32();
193 VisualItems[slot].TransmogrifiedItemID = fields[visualBase + 1].GetUInt32();
194 VisualItems[slot].Subclass = fields[visualBase + 2].GetUInt8();
195 VisualItems[slot].InvType = fields[visualBase + 3].GetUInt8();
196 VisualItems[slot].DisplayID = fields[visualBase + 4].GetUInt32();
197 VisualItems[slot].DisplayEnchantID = fields[visualBase + 5].GetUInt32();
198 VisualItems[slot].SecondaryItemModifiedAppearanceID = fields[visualBase + 6].GetInt32();
199 VisualItems[slot].SheatheCategory = fields[visualBase + 7].GetUInt8();
200 }
201}
202
204{
205 data << uint32(visualItem.ItemID);
206 data << uint32(visualItem.TransmogrifiedItemID);
207 data << uint8(visualItem.Subclass);
208 data << uint8(visualItem.InvType);
209 data << uint32(visualItem.DisplayID);
210 data << uint32(visualItem.DisplayEnchantID);
211 data << int32(visualItem.SecondaryItemModifiedAppearanceID);
212 data << uint8(visualItem.SheatheCategory);
213
214 return data;
215}
216
218{
219 data << charInfo.Guid;
220 data << uint32(charInfo.VirtualRealmAddress);
221 data << uint16(charInfo.ListPosition);
222 data << uint8(charInfo.RaceID);
223 data << uint8(charInfo.SexID);
224 data << uint8(charInfo.ClassID);
225 data << int16(charInfo.SpecID);
226 data << Size<uint32>(charInfo.Customizations);
227 data << uint8(charInfo.ExperienceLevel);
228 data << int32(charInfo.MapID);
229 data << int32(charInfo.ZoneID);
230 data << charInfo.PreloadPos;
231 data << uint64(charInfo.GuildClubMemberID);
232 data << charInfo.GuildGUID;
233 data << uint32(charInfo.Flags);
234 data << uint32(charInfo.Flags2);
235 data << uint32(charInfo.Flags3);
236 data << uint32(charInfo.Flags4);
237 data << uint8(charInfo.CantLoginReason);
238
239 data << uint32(charInfo.PetCreatureDisplayID);
240 data << uint32(charInfo.PetExperienceLevel);
241 data << uint32(charInfo.PetCreatureFamilyID);
242
244 data << visualItem;
245
246 data << int32(charInfo.SaveVersion);
247 data << charInfo.CreateTime;
248 data << charInfo.LastActiveTime;
249 data << int32(charInfo.LastLoginVersion);
250 data << charInfo.PersonalTabard;
251
252 data << uint32(charInfo.ProfessionIds[0]);
253 data << uint32(charInfo.ProfessionIds[1]);
254
255 data << int32(charInfo.TimerunningSeasonID);
256 data << uint32(charInfo.OverrideSelectScreenFileDataID);
257 data << uint32(charInfo.RealmQueue);
258
259 for (ChrCustomizationChoice const& customization : charInfo.Customizations)
260 data << customization;
261
262 data << SizedString::BitsSize<6>(charInfo.Name);
263 data << Bits<1>(charInfo.FirstLogin);
264 data << Bits<1>(charInfo.RealmInfoFound);
265 data << Bits<1>(charInfo.IsRealmOffline);
266
267 data.FlushBits();
268
269 data << SizedString::Data(charInfo.Name);
270
271 return data;
272}
273
275{
276 ASSERT(restrictionsAndMails.MailSenders.size() == restrictionsAndMails.MailSenderTypes.size());
277
278 data << Bits<1>(restrictionsAndMails.BoostInProgress);
279 data << Bits<1>(restrictionsAndMails.RpeAvailable);
280 data.FlushBits();
281
282 data << uint32(restrictionsAndMails.RestrictionFlags);
283 data << Size<uint32>(restrictionsAndMails.MailSenders);
284 data << Size<uint32>(restrictionsAndMails.MailSenderTypes);
285
286 if (!restrictionsAndMails.MailSenderTypes.empty())
287 data.append(restrictionsAndMails.MailSenderTypes.data(), restrictionsAndMails.MailSenderTypes.size());
288
289 for (std::string const& str : restrictionsAndMails.MailSenders)
290 data << SizedCString::BitsSize<6>(str);
291
292 data.FlushBits();
293
294 for (std::string const& str : restrictionsAndMails.MailSenders)
295 data << SizedCString::Data(str);
296
297 return data;
298}
299
301{
302 data << charInfo.Basic;
303 data << charInfo.RestrictionsAndMails;
304
305 return data;
306}
307
309{
310 data << charInfo.Basic;
311 data << uint64(charInfo.Money);
312 data << float(charInfo.AvgEquippedItemLevel);
313 data << float(charInfo.CurrentSeasonMythicPlusOverallScore);
314 data << int32(charInfo.CurrentSeasonBestPvpRating);
315 data << int8(charInfo.PvpRatingBracket);
316 data << int16(charInfo.PvpRatingAssociatedSpecID);
317
318 return data;
319}
320
322{
323 data << int8(classUnlock.ClassID);
324 data << uint32(classUnlock.AchievementID);
325 data << Bits<1>(classUnlock.HasUnlockedAchievement);
326 data.FlushBits();
327
328 return data;
329}
330
332{
333 data << int8(raceUnlock.RaceID);
334 data << Size<uint32>(raceUnlock.ClassUnlocks);
335 data << Bits<1>(raceUnlock.HasUnlockedLicense);
336 data << Bits<1>(raceUnlock.HasUnlockedAchievement);
337 data << Bits<1>(raceUnlock.HasHeritageArmorUnlockAchievement);
338 data << Bits<1>(raceUnlock.HideRaceOnClient);
339 data << Bits<1>(raceUnlock.FactionBalanceDisabled);
340 data.FlushBits();
341
342 for (EnumCharactersResult::ClassUnlock const& classUnlock : raceUnlock.ClassUnlocks)
343 data << classUnlock;
344
345 return data;
346}
347
349{
350 data << int32(unlockedConditionalAppearance.AchievementID);
351 data << int32(unlockedConditionalAppearance.ConditionalType);
352
353 return data;
354}
355
357{
358 data << int8(raceLimitDisableInfo.RaceID);
359 data << int8(raceLimitDisableInfo.Reason);
360
361 return data;
362}
363
364ByteBuffer& operator<<(ByteBuffer& data, WarbandGroupMember const& warbandGroupMember)
365{
366 data << uint32(warbandGroupMember.WarbandScenePlacementID);
367 data << int32(warbandGroupMember.Type);
368 data << int32(warbandGroupMember.ContentSetID);
369 if (warbandGroupMember.Type == 0)
370 data << warbandGroupMember.Guid;
371
372 return data;
373}
374
375ByteBuffer& operator<<(ByteBuffer& data, WarbandGroup const& warbandGroup)
376{
377 data << uint64(warbandGroup.GroupID);
378 data << uint8(warbandGroup.OrderIndex);
379 data << uint32(warbandGroup.WarbandSceneID);
380 data << uint32(warbandGroup.Flags);
381 data << int32(warbandGroup.ContentSetID);
382 data << Size<uint32>(warbandGroup.Members);
383
384 for (WarbandGroupMember const& member : warbandGroup.Members)
385 data << member;
386
387 data << SizedString::BitsSize<9>(warbandGroup.Name);
388 data.FlushBits();
389
390 data << SizedString::Data(warbandGroup.Name);
391
392 return data;
393}
394
396{
397}
398
402
404{
405 _worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + RaceUnlockData.size() * sizeof(RaceUnlock));
406
407 _worldPacket << Bits<1>(Success);
408 _worldPacket << Bits<1>(Realmless);
409 _worldPacket << Bits<1>(IsDeletedCharacters);
410 _worldPacket << Bits<1>(IgnoreNewPlayerRestrictions);
411 _worldPacket << Bits<1>(IsRestrictedNewPlayer);
412 _worldPacket << Bits<1>(IsNewcomerChatCompleted);
413 _worldPacket << Bits<1>(IsRestrictedTrial);
414 _worldPacket << Bits<1>(IsAccountLapsedPlayer);
416 _worldPacket << Bits<1>(ForceCharacterListSort);
417 _worldPacket << Size<uint32>(Characters);
418 _worldPacket << Size<uint32>(RegionwideCharacters);
420 _worldPacket << Size<uint32>(RaceUnlockData);
421 _worldPacket << Size<uint32>(UnlockedConditionalAppearances);
422 _worldPacket << Size<uint32>(RaceLimitDisables);
423 _worldPacket << Size<uint32>(WarbandGroups);
424
427
428 for (UnlockedConditionalAppearance const& unlockedConditionalAppearance : UnlockedConditionalAppearances)
429 _worldPacket << unlockedConditionalAppearance;
430
431 for (RaceLimitDisableInfo const& raceLimitDisableInfo : RaceLimitDisables)
432 _worldPacket << raceLimitDisableInfo;
433
434 for (CharacterInfo const& charInfo : Characters)
435 _worldPacket << charInfo;
436
438 _worldPacket << charInfo;
439
440 for (RaceUnlock const& raceUnlock : RaceUnlockData)
441 _worldPacket << raceUnlock;
442
443 for (WarbandGroup const& warbandGroup : WarbandGroups)
444 _worldPacket << warbandGroup;
445
446 return &_worldPacket;
447}
448
450{
451 _worldPacket >> SequenceIndex;
452 _worldPacket >> SizedString::BitsSize<6>(Name);
453
455}
456
458{
459 _worldPacket << uint32(SequenceIndex);
460 _worldPacket << uint32(Result);
461
462 return &_worldPacket;
463}
464
466{
467 CreateInfo = std::make_shared<CharacterCreateInfo>();
468
469 _worldPacket >> SizedString::BitsSize<6>(CreateInfo->Name);
470 _worldPacket >> OptionalInit(CreateInfo->TemplateSet);
471 _worldPacket >> Bits<1>(CreateInfo->IsTrialBoost);
472 _worldPacket >> Bits<1>(CreateInfo->UseNPE);
473 _worldPacket >> Bits<1>(CreateInfo->HardcoreSelfFound);
474 _worldPacket >> CreateInfo->Race;
475 _worldPacket >> CreateInfo->Class;
476 _worldPacket >> CreateInfo->Sex;
477 _worldPacket >> Size<uint32>(CreateInfo->Customizations);
478 _worldPacket >> CreateInfo->TimerunningSeasonID;
479 _worldPacket >> SizedString::Data(CreateInfo->Name);
480 if (CreateInfo->TemplateSet)
481 _worldPacket >> *CreateInfo->TemplateSet;
482
483 for (ChrCustomizationChoice& customization : CreateInfo->Customizations)
484 _worldPacket >> customization;
485
486 SortCustomizations(CreateInfo->Customizations);
487}
488
490{
491 _worldPacket << uint32(Code);
492 _worldPacket << Guid;
493
494 return &_worldPacket;
495}
496
498{
499 _worldPacket >> Guid;
500}
501
503{
504 _worldPacket << uint32(Code);
505
506 return &_worldPacket;
507}
508
510{
511 RenameInfo = std::make_shared<CharacterRenameInfo>();
512
513 _worldPacket >> RenameInfo->Guid;
514 _worldPacket >> SizedString::BitsSize<6>(RenameInfo->NewName);
515
516 _worldPacket >> SizedString::Data(RenameInfo->NewName);
517}
518
520{
521 _worldPacket << uint32(Result);
522 _worldPacket << OptionalInit(Guid);
523 _worldPacket << SizedString::BitsSize<6>(Name);
525
526 if (Guid)
527 _worldPacket << *Guid;
528
530
531 return &_worldPacket;
532}
533
535{
536 CustomizeInfo = std::make_shared<CharCustomizeInfo>();
537
538 _worldPacket >> CustomizeInfo->CharGUID;
539 _worldPacket >> CustomizeInfo->SexID;
540 _worldPacket >> Size<uint32>(CustomizeInfo->Customizations);
541 for (ChrCustomizationChoice& customization : CustomizeInfo->Customizations)
542 _worldPacket >> customization;
543
544 _worldPacket >> SizedString::BitsSize<6>(CustomizeInfo->CharName);
545 _worldPacket >> SizedString::Data(CustomizeInfo->CharName);
546
547 SortCustomizations(CustomizeInfo->Customizations);
548}
549
551 : ServerPacket(SMSG_CHAR_CUSTOMIZE_SUCCESS, 16 + 1 + 1 + 1 + 1 + 1 + 1 + 1), Customizations(info->Customizations)
552{
553 CharGUID = info->CharGUID;
554 SexID = info->SexID;
555 CharName = info->CharName;
556}
557
559{
562 _worldPacket << Size<uint32>(Customizations);
563 for (ChrCustomizationChoice customization : Customizations)
564 _worldPacket << customization;
565
566 _worldPacket << SizedString::BitsSize<6>(CharName);
568
570
571 return &_worldPacket;
572}
573
581
583{
584 RaceOrFactionChangeInfo = std::make_shared<CharRaceOrFactionChangeInfo>();
585
586 _worldPacket >> Bits<1>(RaceOrFactionChangeInfo->FactionChange);
587 _worldPacket >> SizedString::BitsSize<6>(RaceOrFactionChangeInfo->Name);
591 _worldPacket >> RaceOrFactionChangeInfo->InitialRaceID;
592 _worldPacket >> Size<uint32>(RaceOrFactionChangeInfo->Customizations);
594 for (ChrCustomizationChoice& customization : RaceOrFactionChangeInfo->Customizations)
595 _worldPacket >> customization;
596
598}
599
601{
606
607 if (Display)
608 {
609 _worldPacket << SizedString::BitsSize<6>(Display->Name);
610 _worldPacket << uint8(Display->SexID);
611 _worldPacket << uint8(Display->RaceID);
612 _worldPacket << Size<uint32>(*Display->Customizations);
614 for (ChrCustomizationChoice customization : *Display->Customizations)
615 _worldPacket << customization;
616 }
617
618 return &_worldPacket;
619}
620
626
628{
629 _worldPacket << Bits<1>(Success);
630 _worldPacket << SizedString::BitsSize<6>(Name);
632
634
635 return &_worldPacket;
636}
637
641
643{
644 _worldPacket >> BitsSize<9>(Entries);
645 for (ReorderInfo& reorderInfo : Entries)
646 {
647 _worldPacket >> reorderInfo.PlayerGUID;
648 _worldPacket >> reorderInfo.NewPosition;
649 }
650}
651
653{
654 UndeleteInfo = std::make_shared<CharacterUndeleteInfo>();
655
656 _worldPacket >> UndeleteInfo->ClientToken;
657 _worldPacket >> UndeleteInfo->CharacterGuid;
658}
659
670
680
682{
685 _worldPacket >> Bits<1>(RPE);
686}
687
696
698{
700
701 return &_worldPacket;
702}
703
705{
706 _worldPacket >> Bits<1>(IdleLogout);
707}
708
710{
712 _worldPacket << Bits<1>(Instant);
714
715 return &_worldPacket;
716}
717
718ByteBuffer& operator<<(ByteBuffer& data, GameModeData const& gameModeData)
719{
720 data << int32(gameModeData.Unknown_1107_0);
721 data << gameModeData.Guid;
722 data << uint8(gameModeData.GameMode);
723 data << int32(gameModeData.MapID);
724 data << uint8(gameModeData.Unknown_1107_1);
725 data << uint8(gameModeData.Unknown_1107_2);
726 data << uint8(gameModeData.Unknown_1107_3);
727 data << Size<uint32>(gameModeData.Customizations);
728 data << Size<uint32>(gameModeData.Unknown_1107_4);
729
730 for (ChrCustomizationChoice const& customization : gameModeData.Customizations)
731 data << customization;
732
733 for (ChrCustomizationChoice const& customization : gameModeData.Unknown_1107_4)
734 data << customization;
735
736 return data;
737}
738
739ByteBuffer& operator<<(ByteBuffer& data, SwitchGameModeData const& switchGameModeData)
740{
741 data << Bits<1>(switchGameModeData.IsFastLogin);
742 data << switchGameModeData.Current;
743 data << switchGameModeData.New;
744
745 return data;
746}
747
758
760{
762 _worldPacket >> Bits<1>(Showing);
763}
764
772
777
782
784{
787 _worldPacket << Bits<1>(TriggerEvent);
789
790 return &_worldPacket;
791}
792
794{
796}
797
810
812{
814
815 return &_worldPacket;
816}
817
828
830{
832
833 return &_worldPacket;
834}
835
840
845
847{
849 _worldPacket >> Bits<1>(State);
850}
851
856
863
865{
867
868 for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
869 _worldPacket >> SizedString::BitsSize<7>(DeclinedNames.name[i]);
870
871 for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
873}
874
882
888
895}
#define sDB2Manager
Definition DB2Stores.h:569
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
#define ASSERT
Definition Errors.h:80
#define sObjectMgr
Definition ObjectMgr.h:1885
@ SMSG_CHAR_CUSTOMIZE_SUCCESS
Definition Opcodes.h:1311
@ CMSG_ENUM_CHARACTERS
Definition Opcodes.h:345
@ CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT
Definition Opcodes.h:346
@ CMSG_REORDER_CHARACTERS
Definition Opcodes.h:823
@ PLAYER_FLAGS_AUTO_DECLINE_GUILD
Definition Player.h:547
@ PLAYER_FLAGS_HIDE_ACCOUNT_ACHIEVEMENTS
Definition Player.h:543
@ PLAYER_FLAGS_NO_XP_GAIN
Definition Player.h:545
@ PLAYER_FLAGS_RESTING
Definition Player.h:525
@ PLAYER_FLAGS_WAR_MODE_DESIRED
Definition Player.h:531
@ PLAYER_FLAGS_GHOST
Definition Player.h:524
@ PLAYER_FLAGS_LOW_LEVEL_RAID_ENABLED
Definition Player.h:536
@ AT_LOGIN_RESET_TALENTS
Definition Player.h:640
@ AT_LOGIN_FIRST
Definition Player.h:643
@ AT_LOGIN_RESURRECT
Definition Player.h:646
@ AT_LOGIN_CUSTOMIZE
Definition Player.h:641
@ AT_LOGIN_RENAME
Definition Player.h:638
@ AT_LOGIN_CHANGE_RACE
Definition Player.h:645
@ AT_LOGIN_CHANGE_FACTION
Definition Player.h:644
@ CLASS_HUNTER
@ CLASS_WARLOCK
@ CLASS_DEATH_KNIGHT
@ CHARACTER_FLAG_2_LOW_LEVEL_RAID_ENABLED
@ CHARACTER_FLAG_2_AUTO_DECLINE_GUILD
@ CHARACTER_FLAG_2_FACTION_CHANGE
@ CHARACTER_FLAG_2_RACE_CHANGE
@ CHARACTER_FLAG_2_CUSTOMIZE
@ CHARACTER_FLAG_2_NO_XP_GAIN
@ CHARACTER_FLAG_RESTING
@ CHARACTER_FLAG_GHOST
@ CHARACTER_FLAG_DECLINED
@ CHARACTER_FLAG_RESET_TALENTS_ON_LOGIN
@ CHARACTER_FLAG_LOCKED_BY_BILLING
@ CHARACTER_FLAG_RENAME
@ CHARACTER_FLAG_3_HIDE_ACCOUNT_ACHIEVEMENTS
@ CHARACTER_FLAG_3_WAR_MODE_DESIRED
#define MAX_DECLINED_NAME_CASES
void reserve(size_t ressize)
Definition ByteBuffer.h:578
void append(T value)
Definition ByteBuffer.h:130
void FlushBits()
Definition ByteBuffer.h:141
Class used to access individual fields of database query result.
Definition Field.h:94
uint32 GetUInt32() const noexcept
Definition Field.cpp:57
uint16 GetUInt16() const noexcept
Definition Field.cpp:43
std::string_view GetStringView() const noexcept
Definition Field.cpp:118
uint8 GetUInt8() const noexcept
Definition Field.cpp:29
int32 GetInt32() const noexcept
Definition Field.cpp:64
int64 GetInt64() const noexcept
Definition Field.cpp:78
uint64 LowType
Definition ObjectGuid.h:321
Array< ChrCustomizationChoice, 250 > Customizations
Array< ChrCustomizationChoice, 250 > const & Customizations
CharCustomizeSuccess(CharCustomizeInfo const *customizeInfo)
Optional< CharFactionChangeDisplayInfo > Display
std::shared_ptr< CharRaceOrFactionChangeInfo > RaceOrFactionChangeInfo
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< CharacterInfo > Characters
all characters on the list
bool IgnoreNewPlayerRestrictions
allows client to skip new player restrictions
std::vector< RegionwideCharacterListEntry > RegionwideCharacters
bool IsDeletedCharacters
used for character undelete list
std::vector< RaceLimitDisableInfo > RaceLimitDisables
bool IsNewcomerChatCompleted
forbids hero classes and allied races
std::vector< UnlockedConditionalAppearance > UnlockedConditionalAppearances
bool IsRestrictedNewPlayer
forbids using level boost and class trials
WorldPacket const * Write() override
WorldPacket const * Write() override
TaggedPosition< Position::XYZO > Pos
WorldPacket const * Write() override
std::unique_ptr< SwitchGameModeData > SwitchGameMode
WorldPacket const * Write() override
WorldPacket const * Write() override
float FarClip
Visibility distance (for terrain)
ObjectGuid Guid
Guid of the player that is logging in.
WorldPacket const * Write() override
std::shared_ptr< CharacterUndeleteInfo > UndeleteInfo
uint32 CurrentCooldown
Current cooldown until next free character restoration. (in sec)
uint32 MaxCooldown
Max. cooldown until next free character restoration. Displayed in undelete confirm message....
OpcodeClient GetOpcode() const
Definition Packet.h:68
WorldPacket _worldPacket
Definition Packet.h:43
#define sWorld
Definition World.h:916
uint32 GetVirtualRealmAddress()
Definition World.cpp:3526
@ CONFIG_DECLINED_NAMES_USED
Definition World.h:136
uint64 CreateClubMemberId(ObjectGuid guid)
Definition ClubUtils.cpp:21
ByteBuffer & operator>>(ByteBuffer &data, ChrCustomizationChoice &customizationChoice)
ByteBuffer & operator<<(ByteBuffer &data, ChrCustomizationChoice const &customizationChoice)
ByteBuffer & operator<<(ByteBuffer &data, CustomTabardInfo const &customTabardInfo)
void SortCustomizations(Array< ChrCustomizationChoice, 250 > &customizations)
ByteBuffer & operator>>(ByteBuffer &data, CustomTabardInfo &customTabardInfo)
DataWriter< Container > Data(Container const &value)
DataWriter< Container > Data(Container const &value)
OptionalInitWriter< T > OptionalInit(Optional< T > const &value)
STL namespace.
std::string name[MAX_DECLINED_NAME_CASES]
ObjectGuid CharacterGuid
User specified variables.
uint64 GuildClubMemberID
same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (t...
Array< ChrCustomizationChoice, 250 > Customizations
Array< ChrCustomizationChoice, 250 > Unknown_1107_4
std::vector< WarbandGroupMember > Members
uint32 Flags
enum WarbandGroupFlags { Collapsed = 1 }