From d687d410789b30dcd58bb367bf21a2884622dfa6 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 6 Jun 2021 14:12:53 -0400 Subject: [PATCH] Core/Players: Add PlayerExtraFlags for tracking race change, level boost, and raf level grant usage Port From (https://github.com/TrinityCore/TrinityCore/commit/c2751f9195959a199413e332d2b595a60e4a6d35) --- Source/Framework/Constants/PlayerConst.cs | 8 +++++++- Source/Framework/Database/Databases/CharacterDatabase.cs | 2 +- Source/Game/Entities/Player/Player.cs | 7 +++++++ Source/Game/Handlers/CharacterHandler.cs | 3 ++- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Source/Framework/Constants/PlayerConst.cs b/Source/Framework/Constants/PlayerConst.cs index bfd85cc90..65cce0a77 100644 --- a/Source/Framework/Constants/PlayerConst.cs +++ b/Source/Framework/Constants/PlayerConst.cs @@ -602,6 +602,7 @@ namespace Framework.Constants VengefulGladiator = 0x0000010000000000, // 40 } + [Flags] public enum PlayerExtraFlags { // gm abilities @@ -612,7 +613,12 @@ namespace Framework.Constants GMChat = 0x20, // Show GM badge in chat messages // other states - PVPDeath = 0x100 // store PvP death status until corpse creating. + PVPDeath = 0x100, // store PvP death status until corpse creating. + + // Character services markers + HasRaceChanged = 0x0200, + GrantedLevelsFromRaf = 0x0400, + LevelBoosted = 0x0800 } public enum EquipmentSetUpdateState diff --git a/Source/Framework/Database/Databases/CharacterDatabase.cs b/Source/Framework/Database/Databases/CharacterDatabase.cs index 3026fa1d4..e34f3eeb3 100644 --- a/Source/Framework/Database/Databases/CharacterDatabase.cs +++ b/Source/Framework/Database/Databases/CharacterDatabase.cs @@ -591,7 +591,7 @@ namespace Framework.Database PrepareStatement(CharStatements.DEL_PETITION_SIGNATURE_BY_GUID, "DELETE FROM petition_sign WHERE petitionguid = ?"); PrepareStatement(CharStatements.DEL_CHAR_DECLINED_NAME, "DELETE FROM character_declinedname WHERE guid = ?"); PrepareStatement(CharStatements.INS_CHAR_DECLINED_NAME, "INSERT INTO character_declinedname (guid, genitive, dative, accusative, instrumental, prepositional) VALUES (?, ?, ?, ?, ?, ?)"); - PrepareStatement(CharStatements.UPD_CHAR_RACE, "UPDATE characters SET race = ? WHERE guid = ?"); + PrepareStatement(CharStatements.UPD_CHAR_RACE, "UPDATE characters SET race = ?, extra_flags = extra_flags | ? WHERE guid = ?"); PrepareStatement(CharStatements.DEL_CHAR_SKILL_LANGUAGES, "DELETE FROM character_skills WHERE skill IN (98, 113, 759, 111, 313, 109, 115, 315, 673, 137) AND guid = ?"); PrepareStatement(CharStatements.INS_CHAR_SKILL_LANGUAGE, "INSERT INTO `character_skills` (guid, skill, value, max) VALUES (?, ?, 300, 300)"); PrepareStatement(CharStatements.UPD_CHAR_TAXI_PATH, "UPDATE characters SET taxi_path = '' WHERE guid = ?"); diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index d5c0f5461..c1dbde0af 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -6391,6 +6391,13 @@ namespace Game.Entities SendMovementSetCollisionHeight(scale * GetCollisionHeight(), UpdateCollisionHeightReason.Scale); } + bool HasRaceChanged() { return m_ExtraFlags.HasFlag(PlayerExtraFlags.HasRaceChanged); } + void SetHasRaceChanged() { m_ExtraFlags |= PlayerExtraFlags.HasRaceChanged; } + bool HasBeenGrantedLevelsFromRaF() { return m_ExtraFlags.HasFlag(PlayerExtraFlags.GrantedLevelsFromRaf); } + void SetBeenGrantedLevelsFromRaF() { m_ExtraFlags |= PlayerExtraFlags.GrantedLevelsFromRaf; } + bool HasLevelBoosted() { return m_ExtraFlags.HasFlag(PlayerExtraFlags.LevelBoosted); } + void SetHasLevelBoosted() { m_ExtraFlags |= PlayerExtraFlags.LevelBoosted; } + public uint GetXP() { return m_activePlayerData.XP; } public uint GetXPForNextLevel() { return m_activePlayerData.NextLevelXP; } diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index d41d25b2f..dab3a0444 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -1795,7 +1795,8 @@ namespace Game { stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_CHAR_RACE); stmt.AddValue(0, (byte)factionChangeInfo.RaceID); - stmt.AddValue(1, lowGuid); + stmt.AddValue(1, (ushort)PlayerExtraFlags.HasRaceChanged); + stmt.AddValue(2, lowGuid); trans.Append(stmt); }