Core/Players: Define all character flags used in SMSG_ENUM_CHARACTERS_RESULT

Port From (https://github.com/TrinityCore/TrinityCore/commit/171003639293b7c08d491849374ed5a88998a46b)
This commit is contained in:
Hondacrx
2025-08-11 20:03:52 -04:00
parent d7fc5db8a3
commit 2bded05e95
3 changed files with 156 additions and 65 deletions
+126 -53
View File
@@ -385,41 +385,134 @@ namespace Framework.Constants
UnlockedAoeLoot = 0x0200 UnlockedAoeLoot = 0x0200
} }
public enum CharacterFlags : uint public enum CharacterFlags
{ {
None = 0x00000000, None = 0x00000000,
Unk1 = 0x00000001, InvisGod = 0x00000001, // Player Has God Invis Enabled
Resting = 0x00000002, Resting = 0x00000002, // Player Is Currently Earning Rest Experience
CharacterLockedForTransfer = 0x00000004, LockedForTransfer = 0x00000004, // Player Is Locked - For Paid Character Transfer
Unk4 = 0x00000008, Silenced = 0x00000008, // Player's Chat Is Silenced (Can Talk To Gms)
Unk5 = 0x00000010, UberinvisGod = 0x00000010, // Player Has God Uberinvis Enabled
Unk6 = 0x00000020, Beastmaster = 0x00000020, // Beastmaster Is On
Unk7 = 0x00000040, PvpEnabled = 0x00000040, // Pvp Enabled
Unk8 = 0x00000080, PortAfterResurrect = 0x00000080, // World Port After Resurrect
Unk9 = 0x00000100, ResetTalentsOnLogin = 0x00000100, // Clear Talents On Login
Unk10 = 0x00000200, HasPvpRank = 0x00000200, // Player Has A Pvp Rank
HideHelm = 0x00000400, HideHelm = 0x00000400, // Hide Helm
HideCloak = 0x00000800, HideCloak = 0x00000800, // Hide Cloak
Unk13 = 0x00001000, Skinnable = 0x00001000, // Player Is Skinnable
Ghost = 0x00002000, Ghost = 0x00002000, // Player Is A Ghost
Rename = 0x00004000, Rename = 0x00004000, // Set To Force A Rename
Unk16 = 0x00008000, RenameNeedsGmReview = 0x00008000, // Flag Is Set After Rename For Gm Review
Unk17 = 0x00010000, PvpDesired = 0x00010000, // Pvp Desired Flag
Unk18 = 0x00020000, GmMode = 0x00020000, // Gm Mode Enabled
Unk19 = 0x00040000, DeletedByTransfer = 0x00040000, // Deleted By A Character Transfer
Unk20 = 0x00080000, OnUnsafeTransport = 0x00080000, // On Unsafe Transport (Port To Safe Loc On Log In)
Unk21 = 0x00100000, RenameFailed = 0x00100000, // Player Unable To Rename Character
Unk22 = 0x00200000, MountUpgraded = 0x00200000, // Mount Has Been Upgraded
Unk23 = 0x00400000, FriendsListNeedsRepair = 0x00400000, // Friends List Requires A Repair
Unk24 = 0x00800000, ExplorationDataFixed = 0x00800000, // Character Had Their Exploration Data Fixed
LockedByBilling = 0x01000000, LockedByBilling = 0x01000000, // Locked Due To Billing
Declined = 0x02000000, Declined = 0x02000000, // Player Has Russian Declined Name Forms
Unk27 = 0x04000000, Commentator = 0x04000000, // Commentator Mode Enabled
Unk28 = 0x08000000, UberCommentator = 0x08000000, // Uber Commentator Mode Enabled
Unk29 = 0x10000000, XpFixed = 0x10000000, // Player's Xp Has Been Fixed (2.2.X->2.3.0)
Unk30 = 0x20000000, LogPackets = 0x20000000, // Log Player Packets
Unk31 = 0x40000000, CompensateForSpells = 0x40000000 // Compensate For Spells
Unk32 = 0x80000000 }
public enum CharacterFlags2
{
None = 0x00000000,
Customize = 0x00000001, // Player Has Paid For A Character Re-Customization
GmSupporterProxy = 0x00000002, // Gmsupportserver Proxy, Not For Gmtool Use
CanLoadOnNonShipTranport = 0x00000004, // Character Has Been Saved At Least Once Since Saving On Non-Ship Transports Was Added
BattleMasterMiscIsTaxiId = 0x00000008, // Battle Master Misc Field Is A Taxi Id
TempPetAutocastSpell1 = 0x00000010, // Temp Pet Autocast Spell 1
TempPetAutocastSpell2 = 0x00000020, // Temp Pet Autocast Spell 2
TempPetAutocastSpell3 = 0x00000040, // Temp Pet Autocast Spell 3
TempPetAutocastSpell4 = 0x00000080, // Temp Pet Autocast Spell 4
TempPetAggressive = 0x00000100, // Temp Pet Aggressive
TempPetPassive = 0x00000200, // Temp Pet Passive
CanInteractWithOtherRealmsInSite = 0x00000400, // Characters Can Interact With Other Realms In The Site
CanInteractWithOtherRealmsInRegion = 0x00000800, // Characters Can Interact With Other Realms In The Region
BattleMasterMiscIsAreaId = 0x00001000, // Battle Master Misc Field Is An Area Id
ReevaluateAccountItemLicenses = 0x00002000, // Account Item Licenses Must Be Reevaluated On Next Login
BattleMasterMiscIsTransport = 0x00004000, // Battle Master Misc Field Is A Transport
TalentsResetUsingTalentGroupData = 0x00008000, // Players Talents Have Been Reset Using Talent Group Data
FactionChange = 0x00010000, // This Character Is Eligible To Change His Faction
HasChangedRaceOrFaction = 0x00020000, // This Character Has Changed His Race/Faction And Now Requires The World Server To Repair Him
NoXpGain = 0x00040000, // This Character Has Chosen To Not Gain Xp By Any Means
RecastOnResummon = 0x00080000, // Recast On Resummon
RaceChange = 0x00100000, // This Character Is Eligible To Change His Race
ChangedTempPetAutocastSpell1 = 0x00200000, // Player Has Changed Temp Pet Autocast Spell 1
ChangedTempPetAutocastSpell2 = 0x00400000, // Player Has Changed Temp Pet Autocast Spell 2
ChangedTempPetAutocastSpell3 = 0x00800000, // Player Has Changed Temp Pet Autocast Spell 3
ChangedTempPetAutocastSpell4 = 0x01000000, // Player Has Changed Temp Pet Autocast Spell 4
ChangedGuildDuringCharacterTransfer = 0x02000000, // Player Has Transferred Guilds During A Pct
CanUseVoidStorageFeature = 0x04000000, // Player Is Allowed To Use The Void Storage Feature
BattlePetsConverted = 0x08000000, // Battle Pets Converted
QuestsFixed = 0x10000000, // Player Has Had His Quests Fixed
LowLevelRaidEnabled = 0x20000000, // The Player Can Join Raids Even If He's Below The Min Raid Level
AutoDeclineGuild = 0x40000000 // The Player Will Automatically Decline Guild Invites
}
public enum CharacterFlags3
{
None = 0x00000000,
IsBattlePetTraier = 0x00000001, // Player Is A Battle Pet Trainer
HideAccountAchievements = 0x00000002, // Player Has Opted To Hide His Account And Merged Achievements
BattlePetsConvertedAndLocked = 0x00000004, // Battle Pet Conversion Complete But Pets Still Locked
TransferredBetweenBnetAccounts = 0x00000008, // Player Has Performed A Pct Between Two Bnet Accounts
UpgradeInProgress = 0x00000010, // Character Upgrade In Progress
BattleMasterMiscIsLfgDungeon = 0x00000020, // Battle Master Misc Field Is A Lfgdungeons Rec Id
NewPlayerGuide = 0x00000040, // New Player Guide
LockedByRevokedCharacterUpgrade = 0x00000080, // Character Locked Due To Revoked Upgrade
NeedsFirstTimeFixup = 0x00000100, // Character Needs First Time Fix Up
WasBoostedAndHasLimitedSpells = 0x00000200, // Character Was Upgraded And Has Limited Access To Spells
DidQuestItemCleanup = 0x00000400, // Did Quest Item Cleanup
ReagentBankUnlocked = 0x00000800, // Reagent Bank Unlocked
PetBeastmaster = 0x00001000, // Pet Beastmaster Is On
RechargeOnLogin = 0x00002000, // Recharge On Login
FixupWodFactionChangeBug = 0x00004000, // Fixup Wod Faction Change Bug
FixupWodXp = 0x00008000, // Fixup Wod Xp To Set To 0 For Level 90
CheckForRestorableData = 0x00010000, // Check For Restorable Data
HasBnetToken = 0x00020000, // Has A Battle.Net Token
BnetTokenTransactionInProgress = 0x00040000, // Battle.Net Token Transaction In Progress
LevelWasScaled = 0x00080000, // Player's Level Was Scaled At Last Save
LockedByRevokedVasTransaction = 0x00100000, // Character Locked Due To Revoked Vas Purchase
VasProductApplicationInProgress = 0x00200000, // Character Vas Product Application In Progress
WasRecentlyBoosted = 0x00400000, // Character Was Recently Boosted
CurrentlyProcessingVasPurchase = 0x00800000, // Character Is Currently Processing A Vas Purchase (Disables Web Purchases)
LegionSpecWeaponFixedUp = 0x01000000, // Legion Spec Weapon Fixed Up
SentAchievementHistoryToBi = 0x02000000, // Sent Achievement History To Bi
GrantedLevelsFromRaf = 0x04000000, // Character Has Been Granted At Least One Single Level Boost From Recruit A Friend System
WarModeDesired = 0x08000000, // Character Has Opted-In To Warmode
HonorConvertedToAccountWide = 0x10000000, // Honor Has Been Converted To Account Wide
KeystoneFixedUpForLegionRollover = 0x20000000, // Keystone Has Been Fixed-Up For Legion Rollover
MythicPlusSeason1AchievementFixedUp = 0x40000000, // Mythic+ Season 1 Achievement Has Been Fixed-Up
}
public enum CharacterFlags4
{
None = 0x00000000,
UsedRpeReset = 0x00000001, // Character Has Used A Rpe Reset Recently
OnlyRpeResetOrTimerunningEndBoost = 0x00000002, // Character Has Only Ever Used An Rpe Reset Boost Or Timerunning-Season-End Boost
SelfFound = 0x00000004, // Character Is Self-Found, And Cannot Trade, Use The Auction House, Or Use Most Mail Functions
TimerunningConversionDone = 0x00000008, // Character Has Been Updated To Normal Characters From A Timerunning Season
LoggedInByCrawlerOverridingLocks = 0x00000010, // Character Is Being Logged In By Crawler Overriding Locks.
ProcessedForWarbands = 0x00000020, // Character Has Had Their Information Added To Account-Wide Warband Tracking
LoggedOutWhileLorewalking = 0x00000040, // Character Last Logged Out While Actively Lorewalking
NoNeighborhoodInvites = 0x00000080, // Character Does Not Accept Neighborhood Invites
CheckedFor2ndWaveAccountWideFactions = 0x00000100, // Character Has Been Checked For 2nd Wave Of Account Wide Factions
WillBeResurrectedInHardcore = 0x00000200, // Character Will Be Resurrected Overriding Hardcore Game Rule
}
public enum CharacterRestrictionFlags
{
CharacterRestrictionFlagTrialBoost = 0x00000080,
CharacterRestrictionFlagTrialBoostLocked = 0x00040000,
CharacterRestrictionFlagExpansionTrial = 0x00080000,
} }
public enum PlayerLocalFlags public enum PlayerLocalFlags
@@ -470,26 +563,6 @@ namespace Framework.Constants
RAFLinked = 6 RAFLinked = 6
} }
public enum CharacterCustomizeFlags
{
None = 0x00,
Customize = 0x01, // Name, Gender, Etc...
Faction = 0x10000, // Name, Gender, Faction, Etc...
Race = 0x100000 // Name, Gender, Race, Etc...
}
public enum CharacterFlags3 : uint
{
LockedByRevokedVasTransaction = 0x100000,
LockedByRevokedCharacterUpgrade = 0x80000000,
}
public enum CharacterFlags4
{
TrialBoost = 0x80,
TrialBoostLocked = 0x40000,
}
public enum TextureSection // TODO: Find a better name. Used in CharSections.dbc public enum TextureSection // TODO: Find a better name. Used in CharSections.dbc
{ {
BaseSkin = 0, BaseSkin = 0,
+3 -3
View File
@@ -89,18 +89,18 @@ namespace Game
charInfo.Customizations.Clear(); charInfo.Customizations.Clear();
if (!charInfo.Flags2.HasAnyFlag(CharacterCustomizeFlags.Customize | CharacterCustomizeFlags.Faction | CharacterCustomizeFlags.Race)) if (!charInfo.Flags2.HasAnyFlag(CharacterFlags2.Customize | CharacterFlags2.FactionChange | CharacterFlags2.RaceChange))
{ {
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG); PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG);
stmt.AddValue(0, (ushort)AtLoginFlags.Customize); stmt.AddValue(0, (ushort)AtLoginFlags.Customize);
stmt.AddValue(1, charInfo.Guid.GetCounter()); stmt.AddValue(1, charInfo.Guid.GetCounter());
DB.Characters.Execute(stmt); DB.Characters.Execute(stmt);
charInfo.Flags2 = CharacterCustomizeFlags.Customize; charInfo.Flags2 = CharacterFlags2.Customize;
} }
} }
// Do not allow locked characters to login // Do not allow locked characters to login
if (!charInfo.Flags.HasAnyFlag(CharacterFlags.CharacterLockedForTransfer | CharacterFlags.LockedByBilling)) if (!charInfo.Flags.HasAnyFlag(CharacterFlags.LockedForTransfer | CharacterFlags.LockedByBilling))
_legitCharacters.Add(charInfo.Guid); _legitCharacters.Add(charInfo.Guid);
} }
@@ -106,9 +106,12 @@ namespace Game.Networking.Packets
PlayerFlags playerFlags = (PlayerFlags)fields.Read<uint>(12); PlayerFlags playerFlags = (PlayerFlags)fields.Read<uint>(12);
AtLoginFlags atLoginFlags = (AtLoginFlags)fields.Read<ushort>(13); AtLoginFlags atLoginFlags = (AtLoginFlags)fields.Read<ushort>(13);
if (playerFlags.HasFlag(PlayerFlags.Resting)) if (playerFlags.HasAnyFlag(PlayerFlags.Resting))
Flags |= CharacterFlags.Resting; Flags |= CharacterFlags.Resting;
if (atLoginFlags.HasAnyFlag(AtLoginFlags.ResetTalents))
Flags |= CharacterFlags.ResetTalentsOnLogin;
if (atLoginFlags.HasAnyFlag(AtLoginFlags.Resurrect)) if (atLoginFlags.HasAnyFlag(AtLoginFlags.Resurrect))
playerFlags &= ~PlayerFlags.Ghost; playerFlags &= ~PlayerFlags.Ghost;
@@ -125,11 +128,26 @@ namespace Game.Networking.Packets
Flags |= CharacterFlags.Declined; Flags |= CharacterFlags.Declined;
if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize)) if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize))
Flags2 = CharacterCustomizeFlags.Customize; Flags2 = CharacterFlags2.Customize;
else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeFaction)) else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeFaction))
Flags2 = CharacterCustomizeFlags.Faction; Flags2 = CharacterFlags2.FactionChange;
else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeRace)) else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeRace))
Flags2 = CharacterCustomizeFlags.Race; Flags2 = CharacterFlags2.RaceChange;
if (playerFlags.HasAnyFlag(PlayerFlags.NoXPGain))
Flags2 |= CharacterFlags2.NoXpGain;
if (playerFlags.HasAnyFlag(PlayerFlags.LowLevelRaidEnabled))
Flags2 |= CharacterFlags2.LowLevelRaidEnabled;
if (playerFlags.HasAnyFlag(PlayerFlags.AutoDeclineGuild))
Flags2 |= CharacterFlags2.AutoDeclineGuild;
if (playerFlags.HasAnyFlag(PlayerFlags.HidAccountAchievements))
Flags3 |= CharacterFlags3.HideAccountAchievements;
if (playerFlags.HasAnyFlag(PlayerFlags.WarModeDesired))
Flags3 |= CharacterFlags3.WarModeDesired;
FirstLogin = atLoginFlags.HasAnyFlag(AtLoginFlags.FirstLogin); FirstLogin = atLoginFlags.HasAnyFlag(AtLoginFlags.FirstLogin);
@@ -196,8 +214,8 @@ namespace Game.Networking.Packets
data.WritePackedGuid(GuildGuid); data.WritePackedGuid(GuildGuid);
data.WriteUInt32((uint)Flags); data.WriteUInt32((uint)Flags);
data.WriteUInt32((uint)Flags2); data.WriteUInt32((uint)Flags2);
data.WriteUInt32(Flags3); data.WriteUInt32((uint)Flags3);
data.WriteUInt32(Flags4); data.WriteUInt32((uint)Flags4);
data.WriteUInt8(CantLoginReason); data.WriteUInt8(CantLoginReason);
data.WriteUInt32(PetCreatureDisplayId); data.WriteUInt32(PetCreatureDisplayId);
@@ -249,9 +267,9 @@ namespace Game.Networking.Packets
public Vector3 PreloadPos; public Vector3 PreloadPos;
public ObjectGuid GuildGuid; public ObjectGuid GuildGuid;
public CharacterFlags Flags; // Character flag @see enum CharacterFlags public CharacterFlags Flags; // Character flag @see enum CharacterFlags
public CharacterCustomizeFlags Flags2; // Character customization flags @see enum CharacterCustomizeFlags public CharacterFlags2 Flags2; // Character flag2 @see enum CharacterFlags2
public uint Flags3; // Character flags 3 @todo research public CharacterFlags3 Flags3; // Character flag3 @see enum CharacterFlags3
public uint Flags4; ///< Character flags 4 @todo research public CharacterFlags4 Flags4; // Character flag4 @see enum CharacterFlags4
public bool FirstLogin; public bool FirstLogin;
public byte CantLoginReason; public byte CantLoginReason;
public long LastActiveTime; public long LastActiveTime;