diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-06-06 14:19:28 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-06-06 14:19:28 +0200 |
commit | c2751f9195959a199413e332d2b595a60e4a6d35 (patch) | |
tree | ca2bc1747055857d1af82852e92164550bef1e46 /src | |
parent | b01fba4bd9530213ee0c9547e09d1f16b3ce5d67 (diff) |
Core/Players: Add PlayerExtraFlags for tracking race change, level boost, and raf level grant usage
Diffstat (limited to 'src')
-rw-r--r-- | src/server/database/Database/Implementation/CharacterDatabase.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 23 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 3 |
3 files changed, 20 insertions, 8 deletions
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index ec18eda213e..ed6a1920a6c 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -598,7 +598,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_PETITION_SIGNATURE_BY_GUID, "DELETE FROM petition_sign WHERE petitionguid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_DECLINED_NAME, "DELETE FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_DECLINED_NAME, "INSERT INTO character_declinedname (guid, genitive, dative, accusative, instrumental, prepositional) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_UPD_CHAR_RACE, "UPDATE characters SET race = ? WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_CHAR_RACE, "UPDATE characters SET race = ?, extra_flags = extra_flags | ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_SKILL_LANGUAGES, "DELETE FROM character_skills WHERE skill IN (98, 113, 759, 111, 313, 109, 115, 315, 673, 137) AND guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_SKILL_LANGUAGE, "INSERT INTO `character_skills` (guid, skill, value, max) VALUES (?, ?, 300, 300)", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_CHAR_TAXI_PATH, "UPDATE characters SET taxi_path = '' WHERE guid = ?", CONNECTION_ASYNC); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index a3e34307d40..671b550a722 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -503,14 +503,19 @@ enum MirrorTimerType enum PlayerExtraFlags { // gm abilities - PLAYER_EXTRA_GM_ON = 0x0001, - PLAYER_EXTRA_ACCEPT_WHISPERS = 0x0004, - PLAYER_EXTRA_TAXICHEAT = 0x0008, - PLAYER_EXTRA_GM_INVISIBLE = 0x0010, - PLAYER_EXTRA_GM_CHAT = 0x0020, // Show GM badge in chat messages + PLAYER_EXTRA_GM_ON = 0x0001, + PLAYER_EXTRA_ACCEPT_WHISPERS = 0x0004, + PLAYER_EXTRA_TAXICHEAT = 0x0008, + PLAYER_EXTRA_GM_INVISIBLE = 0x0010, + PLAYER_EXTRA_GM_CHAT = 0x0020, // Show GM badge in chat messages // other states - PLAYER_EXTRA_PVP_DEATH = 0x0100 // store PvP death status until corpse creating. + PLAYER_EXTRA_PVP_DEATH = 0x0100, // store PvP death status until corpse creating. + + // Character services markers + PLAYER_EXTRA_HAS_RACE_CHANGED = 0x0200, + PLAYER_EXTRA_GRANTED_LEVELS_FROM_RAF = 0x0400, + PLAYER_EXTRA_LEVEL_BOOSTED = 0x0800, }; // 2^n values @@ -1129,6 +1134,12 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> bool isGMVisible() const { return !(m_ExtraFlags & PLAYER_EXTRA_GM_INVISIBLE); } void SetGMVisible(bool on); void SetPvPDeath(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_PVP_DEATH; else m_ExtraFlags &= ~PLAYER_EXTRA_PVP_DEATH; } + bool HasRaceChanged() const { return (m_ExtraFlags & PLAYER_EXTRA_HAS_RACE_CHANGED) != 0; } + void SetHasRaceChanged() { m_ExtraFlags |= PLAYER_EXTRA_HAS_RACE_CHANGED; } + bool HasBeenGrantedLevelsFromRaF() const { return (m_ExtraFlags & PLAYER_EXTRA_GRANTED_LEVELS_FROM_RAF) != 0; } + void SetBeenGrantedLevelsFromRaF() { m_ExtraFlags |= PLAYER_EXTRA_GRANTED_LEVELS_FROM_RAF; } + bool HasLevelBoosted() const { return (m_ExtraFlags & PLAYER_EXTRA_LEVEL_BOOSTED) != 0; } + void SetHasLevelBoosted() { m_ExtraFlags |= PLAYER_EXTRA_LEVEL_BOOSTED; } uint32 GetXP() const { return m_activePlayerData->XP; } uint32 GetXPForNextLevel() const { return m_activePlayerData->NextLevelXP; } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 5f51fafca25..4bb66052f90 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -2143,7 +2143,8 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa { stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_RACE); stmt->setUInt8(0, factionChangeInfo->RaceID); - stmt->setUInt64(1, lowGuid); + stmt->setUInt16(1, PLAYER_EXTRA_HAS_RACE_CHANGED); + stmt->setUInt64(2, lowGuid); trans->Append(stmt); } |