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); }