diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-06-06 14:10:23 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-06-06 14:10:23 +0200 |
commit | 9f852c27b9a03d599f85a806cdae0c2d48427e53 (patch) | |
tree | c5321764736c0db500e73c38f720aa13f57fb435 | |
parent | af815e991d3dc407846fcd05000b4e356d7336ed (diff) |
Core/Players: Add PlayerExtraFlags for tracking race change, and raf level grant usage
4 files changed, 22 insertions, 9 deletions
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 75e2895534b..2109f964f1a 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -466,7 +466,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 7a0aef3c5c5..69fc386e4d0 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -437,15 +437,20 @@ 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_HAS_310_FLYER = 0x0040, // Marks if player already has 310% speed flying mount + 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_HAS_310_FLYER = 0x0040, // Marks if player already has 310% speed flying mount // 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, // reserved for master branch }; // 2^n values @@ -966,6 +971,12 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> bool Has310Flyer(bool checkAllSpells, uint32 excludeSpellId = 0); void SetHas310Flyer(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_HAS_310_FLYER; else m_ExtraFlags &= ~PLAYER_EXTRA_HAS_310_FLYER; } 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 GetUInt32Value(PLAYER_XP); } uint32 GetXPForNextLevel() const { return GetUInt32Value(PLAYER_NEXT_LEVEL_XP); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 0d8b6760f14..2da23b5d4e2 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1774,7 +1774,8 @@ void WorldSession::HandleCharFactionOrRaceChangeCallback(std::shared_ptr<Charact { stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_RACE); stmt->setUInt8(0, factionChangeInfo->Race); - stmt->setUInt32(1, lowGuid); + stmt->setUInt16(1, PLAYER_EXTRA_HAS_RACE_CHANGED); + stmt->setUInt32(2, lowGuid); trans->Append(stmt); } diff --git a/src/server/game/Handlers/ReferAFriendHandler.cpp b/src/server/game/Handlers/ReferAFriendHandler.cpp index e29b9ff04be..c631f5852fa 100644 --- a/src/server/game/Handlers/ReferAFriendHandler.cpp +++ b/src/server/game/Handlers/ReferAFriendHandler.cpp @@ -84,5 +84,6 @@ void WorldSession::HandleAcceptGrantLevel(WorldPacket& recvData) else return; + _player->SetBeenGrantedLevelsFromRaF(); _player->GiveLevel(_player->GetLevel() + 1); } |