aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-06-06 14:19:28 +0200
committerShauren <shauren.trinity@gmail.com>2021-06-06 14:19:28 +0200
commitc2751f9195959a199413e332d2b595a60e4a6d35 (patch)
treeca2bc1747055857d1af82852e92164550bef1e46 /src
parentb01fba4bd9530213ee0c9547e09d1f16b3ce5d67 (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.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.h23
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp3
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);
}