diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index ec51d3f9f3..029336b855 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -408,7 +408,7 @@ enum PlayerFlags PLAYER_FLAGS_GM = 0x00000008, PLAYER_FLAGS_GHOST = 0x00000010, PLAYER_FLAGS_RESTING = 0x00000020, - PLAYER_FLAGS_UNK6 = 0x00000040, + PLAYER_FLAGS_VOICE_CHAT = 0x00000040, PLAYER_FLAGS_UNK7 = 0x00000080, // pre-3.0.3 PLAYER_FLAGS_FFA_PVP flag for FFA PVP state PLAYER_FLAGS_CONTESTED_PVP = 0x00000100, // Player has been involved in a PvP combat and will be attacked by contested guards PLAYER_FLAGS_IN_PVP = 0x00000200, @@ -418,7 +418,7 @@ enum PlayerFlags PLAYER_FLAGS_PLAYED_TOO_LONG = 0x00002000, // played too long time PLAYER_FLAGS_IS_OUT_OF_BOUNDS = 0x00004000, PLAYER_FLAGS_DEVELOPER = 0x00008000, // prefix for something? - PLAYER_FLAGS_UNK16 = 0x00010000, // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary + PLAYER_FLAGS_LOW_LEVEL_RAID_ENABLED = 0x00010000, // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary PLAYER_FLAGS_TAXI_BENCHMARK = 0x00020000, // taxi benchmark mode (on/off) (2.0.1) PLAYER_FLAGS_PVP_TIMER = 0x00040000, // 3.0.2, pvp timer active (after you disable pvp manually) PLAYER_FLAGS_UBER = 0x00080000, @@ -432,8 +432,8 @@ enum PlayerFlags PLAYER_FLAGS_AUTO_DECLINE_GUILD = 0x08000000, // Automatically declines guild invites PLAYER_FLAGS_GUILD_LEVEL_ENABLED = 0x10000000, // Lua_GetGuildLevelEnabled() - enables guild leveling related UI PLAYER_FLAGS_VOID_UNLOCKED = 0x20000000, // void storage - PLAYER_FLAGS_UNK30 = 0x40000000, - PLAYER_FLAGS_UNK31 = 0x80000000 + PLAYER_FLAGS_TIMEWALKING = 0x40000000, + PLAYER_FLAGS_COMMENTATOR_CAMERA = 0x80000000 }; enum PlayerBytesOffsets diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 5618d0b785..1ca11ab6a1 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -269,13 +269,13 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result) charInfo.HairColor = 0; charInfo.FacialHair = 0; - if (!(charInfo.Flags2 == CHAR_CUSTOMIZE_FLAG_CUSTOMIZE)) + if (!(charInfo.Flags2 == CHARACTER_FLAG_2_CUSTOMIZE)) { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG); stmt->setUInt16(0, uint16(AT_LOGIN_CUSTOMIZE)); stmt->setUInt32(1, charInfo.Guid.GetCounter()); CharacterDatabase.Execute(stmt); - charInfo.Flags2 = CHAR_CUSTOMIZE_FLAG_CUSTOMIZE; + charInfo.Flags2 = CHARACTER_FLAG_2_CUSTOMIZE; } } diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 8c2eb46b8e..840045c344 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -56,6 +56,12 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel uint32 playerFlags = fields[17].GetUInt32(); uint32 atLoginFlags = fields[18].GetUInt16(); + if (playerFlags & PLAYER_FLAGS_RESTING) + Flags |= CHARACTER_FLAG_RESTING; + + if (atLoginFlags & AT_LOGIN_RESET_TALENTS) + Flags |= CHARACTER_FLAG_RESET_TALENTS_ON_LOGIN; + if (atLoginFlags & AT_LOGIN_RESURRECT) playerFlags &= ~PLAYER_FLAGS_GHOST; @@ -72,11 +78,20 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel Flags |= CHARACTER_FLAG_DECLINED; if (atLoginFlags & AT_LOGIN_CUSTOMIZE) - Flags2 = CHAR_CUSTOMIZE_FLAG_CUSTOMIZE; + Flags2 = CHARACTER_FLAG_2_CUSTOMIZE; else if (atLoginFlags & AT_LOGIN_CHANGE_FACTION) - Flags2 = CHAR_CUSTOMIZE_FLAG_FACTION; + Flags2 = CHARACTER_FLAG_2_FACTION_CHANGE; else if (atLoginFlags & AT_LOGIN_CHANGE_RACE) - Flags2 = CHAR_CUSTOMIZE_FLAG_RACE; + Flags2 = CHARACTER_FLAG_2_RACE_CHANGE; + + if (playerFlags & PLAYER_FLAGS_NO_XP_GAIN) + Flags2 |= CHARACTER_FLAG_2_NO_XP_GAIN; + + if (playerFlags & PLAYER_FLAGS_LOW_LEVEL_RAID_ENABLED) + Flags2 |= CHARACTER_FLAG_2_LOW_LEVEL_RAID_ENABLED; + + if (playerFlags & PLAYER_FLAGS_AUTO_DECLINE_GUILD) + Flags2 |= CHARACTER_FLAG_2_AUTO_DECLINE_GUILD; FirstLogin = (atLoginFlags & AT_LOGIN_FIRST) != 0; diff --git a/src/server/shared/SharedDefines.h b/src/server/shared/SharedDefines.h index 4eb157007a..ffe5e80646 100644 --- a/src/server/shared/SharedDefines.h +++ b/src/server/shared/SharedDefines.h @@ -795,49 +795,76 @@ enum SheathTypes #define MAX_SHEATHETYPE 8 -enum CharacterFlags +enum CharacterFlags : int32 { - CHARACTER_FLAG_NONE = 0x00000000, - CHARACTER_FLAG_UNK1 = 0x00000001, - CHARACTER_FLAG_UNK2 = 0x00000002, - CHARACTER_FLAG_LOCKED_FOR_TRANSFER = 0x00000004, - CHARACTER_FLAG_UNK4 = 0x00000008, - CHARACTER_FLAG_UNK5 = 0x00000010, - CHARACTER_FLAG_UNK6 = 0x00000020, - CHARACTER_FLAG_UNK7 = 0x00000040, - CHARACTER_FLAG_UNK8 = 0x00000080, - CHARACTER_FLAG_UNK9 = 0x00000100, - CHARACTER_FLAG_UNK10 = 0x00000200, - CHARACTER_FLAG_HIDE_HELM = 0x00000400, - CHARACTER_FLAG_HIDE_CLOAK = 0x00000800, - CHARACTER_FLAG_UNK13 = 0x00001000, - CHARACTER_FLAG_GHOST = 0x00002000, - CHARACTER_FLAG_RENAME = 0x00004000, - CHARACTER_FLAG_UNK16 = 0x00008000, - CHARACTER_FLAG_UNK17 = 0x00010000, - CHARACTER_FLAG_UNK18 = 0x00020000, - CHARACTER_FLAG_UNK19 = 0x00040000, - CHARACTER_FLAG_UNK20 = 0x00080000, - CHARACTER_FLAG_UNK21 = 0x00100000, - CHARACTER_FLAG_UNK22 = 0x00200000, - CHARACTER_FLAG_UNK23 = 0x00400000, - CHARACTER_FLAG_UNK24 = 0x00800000, - CHARACTER_FLAG_LOCKED_BY_BILLING = 0x01000000, - CHARACTER_FLAG_DECLINED = 0x02000000, - CHARACTER_FLAG_UNK27 = 0x04000000, - CHARACTER_FLAG_UNK28 = 0x08000000, - CHARACTER_FLAG_UNK29 = 0x10000000, - CHARACTER_FLAG_UNK30 = 0x20000000, - CHARACTER_FLAG_UNK31 = 0x40000000, - CHARACTER_FLAG_UNK32 = 0x80000000 + CHARACTER_FLAG_NONE = 0x00000000, + CHARACTER_FLAG_INVIS_GOD = 0x00000001, // Player has God Invis enabled + CHARACTER_FLAG_RESTING = 0x00000002, // Player is currently earning rest experience + CHARACTER_FLAG_LOCKED_FOR_TRANSFER = 0x00000004, // Player is locked - for paid character transfer + CHARACTER_FLAG_SILENCED = 0x00000008, // Player's chat is silenced (can talk to GMs) + CHARACTER_FLAG_UBERINVIS_GOD = 0x00000010, // Player has God Uberinvis enabled + CHARACTER_FLAG_BEASTMASTER = 0x00000020, // Beastmaster is on + CHARACTER_FLAG_PVP_ENABLED = 0x00000040, // PvP Enabled + CHARACTER_FLAG_PORT_AFTER_RESURRECT = 0x00000080, // World port after resurrect + CHARACTER_FLAG_RESET_TALENTS_ON_LOGIN = 0x00000100, // Clear Talents on login + CHARACTER_FLAG_HAS_PVP_RANK = 0x00000200, // Player has a PvP Rank + CHARACTER_FLAG_HIDE_HELM = 0x00000400, // Hide Helm + CHARACTER_FLAG_HIDE_CLOAK = 0x00000800, // Hide Cloak + CHARACTER_FLAG_SKINNABLE = 0x00001000, // Player is skinnable + CHARACTER_FLAG_GHOST = 0x00002000, // Player is a ghost + CHARACTER_FLAG_RENAME = 0x00004000, // Set to force a rename + CHARACTER_FLAG_RENAME_NEEDS_GM_REVIEW = 0x00008000, // Flag is set after rename for GM review + CHARACTER_FLAG_PVP_DESIRED = 0x00010000, // PvP desired flag + CHARACTER_FLAG_GM_MODE = 0x00020000, // GM Mode enabled + CHARACTER_FLAG_DELETED_BY_TRANSFER = 0x00040000, // Deleted by a character transfer + CHARACTER_FLAG_ON_UNSAFE_TRANSPORT = 0x00080000, // On unsafe transport (port to safe loc on log in) + CHARACTER_FLAG_RENAME_FAILED = 0x00100000, // Player unable to rename character + CHARACTER_FLAG_MOUNT_UPGRADED = 0x00200000, // Mount has been upgraded + CHARACTER_FLAG_FRIENDS_LIST_NEEDS_REPAIR = 0x00400000, // Friends list requires a repair + CHARACTER_FLAG_EXPLORATION_DATA_FIXED = 0x00800000, // character had their exploration data fixed + CHARACTER_FLAG_LOCKED_BY_BILLING = 0x01000000, // Locked due to billing + CHARACTER_FLAG_DECLINED = 0x02000000, // Player has Russian declined name forms + CHARACTER_FLAG_COMMENTATOR = 0x04000000, // Commentator mode enabled + CHARACTER_FLAG_UBER_COMMENTATOR = 0x08000000, // Uber Commentator mode enabled + CHARACTER_FLAG_XP_FIXED = 0x10000000, // Player's XP has been fixed (2.2.x->2.3.0) + CHARACTER_FLAG_LOG_PACKETS = 0x20000000, // Log player packets + CHARACTER_FLAG_COMPENSATE_FOR_SPELLS = 0x40000000 // Compensate for spells }; -enum CharacterCustomizeFlags +enum CharacterFlags2 : int32 { - CHAR_CUSTOMIZE_FLAG_NONE = 0x00000000, - CHAR_CUSTOMIZE_FLAG_CUSTOMIZE = 0x00000001, // name, gender, etc... - CHAR_CUSTOMIZE_FLAG_FACTION = 0x00010000, // name, gender, faction, etc... - CHAR_CUSTOMIZE_FLAG_RACE = 0x00100000 // name, gender, race, etc... + CHARACTER_FLAG_2_NONE = 0x00000000, + CHARACTER_FLAG_2_CUSTOMIZE = 0x00000001, // Player has paid for a character re-customization + CHARACTER_FLAG_2_GM_SUPPORTER_PROXY = 0x00000002, // GMSupportServer Proxy, NOT for GMTool use + CHARACTER_FLAG_2_CAN_LOAD_ON_NON_SHIP_TRANPORT = 0x00000004, // Character has been saved at least once since saving on non-ship transports was added + CHARACTER_FLAG_2_BATTLE_MASTER_MISC_IS_TAXI_ID = 0x00000008, // Battle Master Misc Field is a Taxi ID + CHARACTER_FLAG_2_TEMP_PET_AUTOCAST_SPELL_1 = 0x00000010, // Temp Pet Autocast Spell 1 + CHARACTER_FLAG_2_TEMP_PET_AUTOCAST_SPELL_2 = 0x00000020, // Temp Pet Autocast Spell 2 + CHARACTER_FLAG_2_TEMP_PET_AUTOCAST_SPELL_3 = 0x00000040, // Temp Pet Autocast Spell 3 + CHARACTER_FLAG_2_TEMP_PET_AUTOCAST_SPELL_4 = 0x00000080, // Temp Pet Autocast Spell 4 + CHARACTER_FLAG_2_TEMP_PET_AGGRESSIVE = 0x00000100, // Temp Pet Aggressive + CHARACTER_FLAG_2_TEMP_PET_PASSIVE = 0x00000200, // Temp Pet Passive + CHARACTER_FLAG_2_CAN_INTERACT_WITH_OTHER_REALMS_IN_SITE = 0x00000400, // Characters can interact with other realms in the site + CHARACTER_FLAG_2_CAN_INTERACT_WITH_OTHER_REALMS_IN_REGION = 0x00000800, // Characters can interact with other realms in the region + CHARACTER_FLAG_2_BATTLE_MASTER_MISC_IS_AREA_ID = 0x00001000, // Battle Master Misc Field is an Area ID + CHARACTER_FLAG_2_REEVALUATE_ACCOUNT_ITEM_LICENSES = 0x00002000, // Account Item Licenses must be reevaluated on next login + CHARACTER_FLAG_2_BATTLE_MASTER_MISC_IS_TRANSPORT = 0x00004000, // Battle Master Misc Field is a Transport + CHARACTER_FLAG_2_TALENTS_RESET_USING_TALENT_GROUP_DATA = 0x00008000, // Players talents have been reset using talent group data + CHARACTER_FLAG_2_FACTION_CHANGE = 0x00010000, // This character is eligible to change his faction + CHARACTER_FLAG_2_HAS_CHANGED_RACE_OR_FACTION = 0x00020000, // This character has changed his race/faction and now requires the world server to repair him + CHARACTER_FLAG_2_NO_XP_GAIN = 0x00040000, // This character has chosen to not gain XP by any means + CHARACTER_FLAG_2_RECAST_ON_RESUMMON = 0x00080000, // Recast on Resummon + CHARACTER_FLAG_2_RACE_CHANGE = 0x00100000, // This character is eligible to change his race + CHARACTER_FLAG_2_CHANGED_TEMP_PET_AUTOCAST_SPELL_1 = 0x00200000, // Player has changed Temp Pet Autocast Spell 1 + CHARACTER_FLAG_2_CHANGED_TEMP_PET_AUTOCAST_SPELL_2 = 0x00400000, // Player has changed Temp Pet Autocast Spell 2 + CHARACTER_FLAG_2_CHANGED_TEMP_PET_AUTOCAST_SPELL_3 = 0x00800000, // Player has changed Temp Pet Autocast Spell 3 + CHARACTER_FLAG_2_CHANGED_TEMP_PET_AUTOCAST_SPELL_4 = 0x01000000, // Player has changed Temp Pet Autocast Spell 4 + CHARACTER_FLAG_2_CHANGED_GUILD_DURING_CHARACTER_TRANSFER = 0x02000000, // Player has transferred guilds during a PCT + CHARACTER_FLAG_2_CAN_USE_VOID_STORAGE_FEATURE = 0x04000000, // Player is allowed to use the Void Storage feature + CHARACTER_FLAG_2_BATTLE_PETS_CONVERTED = 0x08000000, // Battle Pets Converted + CHARACTER_FLAG_2_QUESTS_FIXED = 0x10000000, // Player has had his quests fixed + CHARACTER_FLAG_2_LOW_LEVEL_RAID_ENABLED = 0x20000000, // The player can join raids even if he's below the min raid level + CHARACTER_FLAG_2_AUTO_DECLINE_GUILD = 0x40000000 // The player will automatically decline guild invites }; enum CharacterSlot