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 data << uint32(restrictionsAndMails.NoRpeReason);
286
287 if (!restrictionsAndMails.MailSenderTypes.empty())
288 data.append(restrictionsAndMails.MailSenderTypes.data(), restrictionsAndMails.MailSenderTypes.size());
289
290 for (std::string const& str : restrictionsAndMails.MailSenders)
291 data << SizedCString::BitsSize<6>(str);
292
293 data.FlushBits();
294
295 for (std::string const& str : restrictionsAndMails.MailSenders)
296 data << SizedCString::Data(str);
297
298 return data;
299}
300
302{
303 data << charInfo.Basic;
304 data << charInfo.RestrictionsAndMails;
305
306 return data;
307}
308
310{
311 data << charInfo.Basic;
312 data << uint64(charInfo.Money);
313 data << float(charInfo.AvgEquippedItemLevel);
314 data << float(charInfo.CurrentSeasonMythicPlusOverallScore);
315 data << int32(charInfo.CurrentSeasonBestPvpRating);
316 data << int8(charInfo.PvpRatingBracket);
317 data << int16(charInfo.PvpRatingAssociatedSpecID);
318
319 return data;
320}
321
323{
324 data << int8(classUnlock.ClassID);
325 data << uint32(classUnlock.AchievementID);
326 data << Bits<1>(classUnlock.HasExpansion);
327 data << Bits<1>(classUnlock.HasUnlockedAchievement);
328 data << Bits<1>(classUnlock.HasEntitlement);
329 data.FlushBits();
330
331 return data;
332}
333
335{
336 data << int8(raceUnlock.RaceID);
337 data << Size<uint32>(raceUnlock.ClassUnlocks);
338
339 for (EnumCharactersResult::ClassUnlock const& classUnlock : raceUnlock.ClassUnlocks)
340 data << classUnlock;
341
342 data << Bits<1>(raceUnlock.HasUnlockedLicense);
343 data << Bits<1>(raceUnlock.HasUnlockedAchievement);
344 data << Bits<1>(raceUnlock.HasHeritageArmorUnlockAchievement);
345 data << Bits<1>(raceUnlock.HasEntitlement);
346 data << Bits<1>(raceUnlock.HideRaceOnClient);
347 data << Bits<1>(raceUnlock.FactionBalanceDisabled);
348 data << Bits<1>(raceUnlock.DoesNotHaveAvailableClasses);
349 data.FlushBits();
350
351 return data;
352}
353
355{
356 data << int32(unlockedConditionalAppearance.AchievementID);
357 data << int32(unlockedConditionalAppearance.ConditionalType);
358
359 return data;
360}
361
363{
364 data << int8(raceLimitDisableInfo.RaceID);
365 data << int8(raceLimitDisableInfo.Reason);
366
367 return data;
368}
369
370ByteBuffer& operator<<(ByteBuffer& data, WarbandGroupMember const& warbandGroupMember)
371{
372 data << uint32(warbandGroupMember.WarbandScenePlacementID);
373 data << int32(warbandGroupMember.Type);
374 data << int32(warbandGroupMember.ContentSetID);
375 if (warbandGroupMember.Type == 0)
376 data << warbandGroupMember.Guid;
377
378 return data;
379}
380
381ByteBuffer& operator<<(ByteBuffer& data, WarbandGroup const& warbandGroup)
382{
383 data << uint64(warbandGroup.GroupID);
384 data << uint8(warbandGroup.OrderIndex);
385 data << uint32(warbandGroup.WarbandSceneID);
386 data << uint32(warbandGroup.Flags);
387 data << int32(warbandGroup.ContentSetID);
388 data << Size<uint32>(warbandGroup.Members);
389
390 for (WarbandGroupMember const& member : warbandGroup.Members)
391 data << member;
392
393 data << SizedString::BitsSize<9>(warbandGroup.Name);
394 data.FlushBits();
395
396 data << SizedString::Data(warbandGroup.Name);
397
398 return data;
399}
400
402{
403}
404
408
410{
411 _worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + RaceUnlockData.size() * sizeof(RaceUnlock));
412
413 _worldPacket << Bits<1>(Success);
414 _worldPacket << Bits<1>(Realmless);
415 _worldPacket << Bits<1>(IsDeletedCharacters);
416 _worldPacket << Bits<1>(IgnoreNewPlayerRestrictions);
417 _worldPacket << Bits<1>(IsRestrictedNewPlayer);
418 _worldPacket << Bits<1>(IsNewcomerChatCompleted);
419 _worldPacket << Bits<1>(IsRestrictedTrial);
420 _worldPacket << Bits<1>(IsAccountLapsedPlayer);
422 _worldPacket << Bits<1>(ForceCharacterListSort);
423 _worldPacket << Size<uint32>(Characters);
424 _worldPacket << Size<uint32>(RegionwideCharacters);
426 _worldPacket << Size<uint32>(RaceUnlockData);
427 _worldPacket << Size<uint32>(UnlockedConditionalAppearances);
428 _worldPacket << Size<uint32>(RaceLimitDisables);
429 _worldPacket << Size<uint32>(WarbandGroups);
430
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 (UnlockedConditionalAppearance const& unlockedConditionalAppearance : UnlockedConditionalAppearances)
444 _worldPacket << unlockedConditionalAppearance;
445
446 for (RaceLimitDisableInfo const& raceLimitDisableInfo : RaceLimitDisables)
447 _worldPacket << raceLimitDisableInfo;
448
449 for (WarbandGroup const& warbandGroup : WarbandGroups)
450 _worldPacket << warbandGroup;
451
452 return &_worldPacket;
453}
454
456{
457 _worldPacket >> SequenceIndex;
458 _worldPacket >> SizedString::BitsSize<6>(Name);
459
461}
462
464{
465 _worldPacket << uint32(SequenceIndex);
466 _worldPacket << uint32(Result);
467
468 return &_worldPacket;
469}
470
472{
473 CreateInfo = std::make_shared<CharacterCreateInfo>();
474
475 _worldPacket >> SizedString::BitsSize<6>(CreateInfo->Name);
476 _worldPacket >> OptionalInit(CreateInfo->TemplateSet);
477 _worldPacket >> Bits<1>(CreateInfo->IsTrialBoost);
478 _worldPacket >> Bits<1>(CreateInfo->UseNPE);
479 _worldPacket >> Bits<1>(CreateInfo->HardcoreSelfFound);
480 _worldPacket >> CreateInfo->Race;
481 _worldPacket >> CreateInfo->Class;
482 _worldPacket >> CreateInfo->Sex;
483 _worldPacket >> Size<uint32>(CreateInfo->Customizations);
484 _worldPacket >> CreateInfo->TimerunningSeasonID;
485 _worldPacket >> SizedString::Data(CreateInfo->Name);
486 if (CreateInfo->TemplateSet)
487 _worldPacket >> *CreateInfo->TemplateSet;
488
489 for (ChrCustomizationChoice& customization : CreateInfo->Customizations)
490 _worldPacket >> customization;
491
492 SortCustomizations(CreateInfo->Customizations);
493}
494
496{
497 _worldPacket << uint32(Code);
498 _worldPacket << Guid;
499
500 return &_worldPacket;
501}
502
504{
505 _worldPacket >> Guid;
506}
507
509{
510 _worldPacket << uint32(Code);
511
512 return &_worldPacket;
513}
514
516{
517 RenameInfo = std::make_shared<CharacterRenameInfo>();
518
519 _worldPacket >> RenameInfo->Guid;
520 _worldPacket >> SizedString::BitsSize<6>(RenameInfo->NewName);
521
522 _worldPacket >> SizedString::Data(RenameInfo->NewName);
523}
524
526{
527 _worldPacket << uint32(Result);
528 _worldPacket << OptionalInit(Guid);
529 _worldPacket << SizedString::BitsSize<6>(Name);
531
532 if (Guid)
533 _worldPacket << *Guid;
534
536
537 return &_worldPacket;
538}
539
541{
542 CustomizeInfo = std::make_shared<CharCustomizeInfo>();
543
544 _worldPacket >> CustomizeInfo->CharGUID;
545 _worldPacket >> CustomizeInfo->SexID;
546 _worldPacket >> Size<uint32>(CustomizeInfo->Customizations);
547 for (ChrCustomizationChoice& customization : CustomizeInfo->Customizations)
548 _worldPacket >> customization;
549
550 _worldPacket >> SizedString::BitsSize<6>(CustomizeInfo->CharName);
551 _worldPacket >> SizedString::Data(CustomizeInfo->CharName);
552
553 SortCustomizations(CustomizeInfo->Customizations);
554}
555
557 : ServerPacket(SMSG_CHAR_CUSTOMIZE_SUCCESS, 16 + 1 + 1 + 1 + 1 + 1 + 1 + 1), Customizations(info->Customizations)
558{
559 CharGUID = info->CharGUID;
560 SexID = info->SexID;
561 CharName = info->CharName;
562}
563
565{
568 _worldPacket << Size<uint32>(Customizations);
569 for (ChrCustomizationChoice customization : Customizations)
570 _worldPacket << customization;
571
572 _worldPacket << SizedString::BitsSize<6>(CharName);
574
576
577 return &_worldPacket;
578}
579
587
589{
590 RaceOrFactionChangeInfo = std::make_shared<CharRaceOrFactionChangeInfo>();
591
592 _worldPacket >> Bits<1>(RaceOrFactionChangeInfo->FactionChange);
593 _worldPacket >> SizedString::BitsSize<6>(RaceOrFactionChangeInfo->Name);
597 _worldPacket >> RaceOrFactionChangeInfo->InitialRaceID;
598 _worldPacket >> Size<uint32>(RaceOrFactionChangeInfo->Customizations);
600 for (ChrCustomizationChoice& customization : RaceOrFactionChangeInfo->Customizations)
601 _worldPacket >> customization;
602
604}
605
607{
612
613 if (Display)
614 {
615 _worldPacket << SizedString::BitsSize<6>(Display->Name);
616 _worldPacket << uint8(Display->SexID);
617 _worldPacket << uint8(Display->RaceID);
618 _worldPacket << Size<uint32>(*Display->Customizations);
620 for (ChrCustomizationChoice customization : *Display->Customizations)
621 _worldPacket << customization;
622 }
623
624 return &_worldPacket;
625}
626
632
634{
635 _worldPacket << Bits<1>(Success);
636 _worldPacket << SizedString::BitsSize<6>(Name);
638
640
641 return &_worldPacket;
642}
643
647
649{
650 _worldPacket >> BitsSize<9>(Entries);
651 for (ReorderInfo& reorderInfo : Entries)
652 {
653 _worldPacket >> reorderInfo.PlayerGUID;
654 _worldPacket >> reorderInfo.NewPosition;
655 }
656}
657
659{
660 UndeleteInfo = std::make_shared<CharacterUndeleteInfo>();
661
662 _worldPacket >> UndeleteInfo->ClientToken;
663 _worldPacket >> UndeleteInfo->CharacterGuid;
664}
665
676
686
688{
691 _worldPacket >> Bits<1>(RPE);
692}
693
702
704{
706
707 return &_worldPacket;
708}
709
711{
712 _worldPacket >> Bits<1>(IdleLogout);
713}
714
716{
718 _worldPacket << Bits<1>(Instant);
720
721 return &_worldPacket;
722}
723
724ByteBuffer& operator<<(ByteBuffer& data, GameModeData const& gameModeData)
725{
726 data << int32(gameModeData.Unknown_1107_0);
727 data << gameModeData.Guid;
728 data << uint8(gameModeData.GameMode);
729 data << int32(gameModeData.MapID);
730 data << uint8(gameModeData.Unknown_1107_1);
731 data << uint8(gameModeData.Unknown_1107_2);
732 data << uint8(gameModeData.Unknown_1107_3);
733 data << Size<uint32>(gameModeData.Customizations);
734 data << Size<uint32>(gameModeData.Unknown_1107_4);
735
736 for (ChrCustomizationChoice const& customization : gameModeData.Customizations)
737 data << customization;
738
739 for (ChrCustomizationChoice const& customization : gameModeData.Unknown_1107_4)
740 data << customization;
741
742 return data;
743}
744
745ByteBuffer& operator<<(ByteBuffer& data, SwitchGameModeData const& switchGameModeData)
746{
747 data << Bits<1>(switchGameModeData.IsFastLogin);
748 data << switchGameModeData.Current;
749 data << switchGameModeData.New;
750
751 return data;
752}
753
764
766{
768 _worldPacket >> Bits<1>(Showing);
769}
770
778
783
788
790{
793 _worldPacket << Bits<1>(TriggerEvent);
795
796 return &_worldPacket;
797}
798
800{
802}
803
816
818{
820
821 return &_worldPacket;
822}
823
834
836{
838
839 return &_worldPacket;
840}
841
846
851
853{
855 _worldPacket >> Bits<1>(State);
856}
857
862
869
871{
873
874 for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
875 _worldPacket >> SizedString::BitsSize<7>(DeclinedNames.name[i]);
876
877 for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
879}
880
888
894
901}
#define sDB2Manager
Definition DB2Stores.h:579
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:72
#define sObjectMgr
Definition ObjectMgr.h:1873
@ SMSG_CHAR_CUSTOMIZE_SUCCESS
Definition Opcodes.h:1332
@ CMSG_ENUM_CHARACTERS
Definition Opcodes.h:351
@ CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT
Definition Opcodes.h:352
@ CMSG_REORDER_CHARACTERS
Definition Opcodes.h:841
@ PLAYER_FLAGS_AUTO_DECLINE_GUILD
Definition Player.h:539
@ PLAYER_FLAGS_HIDE_ACCOUNT_ACHIEVEMENTS
Definition Player.h:535
@ PLAYER_FLAGS_NO_XP_GAIN
Definition Player.h:537
@ PLAYER_FLAGS_RESTING
Definition Player.h:517
@ PLAYER_FLAGS_WAR_MODE_DESIRED
Definition Player.h:523
@ PLAYER_FLAGS_GHOST
Definition Player.h:516
@ PLAYER_FLAGS_LOW_LEVEL_RAID_ENABLED
Definition Player.h:528
@ AT_LOGIN_RESET_TALENTS
Definition Player.h:623
@ AT_LOGIN_FIRST
Definition Player.h:626
@ AT_LOGIN_RESURRECT
Definition Player.h:629
@ AT_LOGIN_CUSTOMIZE
Definition Player.h:624
@ AT_LOGIN_RENAME
Definition Player.h:621
@ AT_LOGIN_CHANGE_RACE
Definition Player.h:628
@ AT_LOGIN_CHANGE_FACTION
Definition Player.h:627
@ 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:590
void append(T value)
Definition ByteBuffer.h:131
void FlushBits()
Definition ByteBuffer.h:142
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:919
uint32 GetVirtualRealmAddress()
Definition World.cpp:3500
@ 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 }