aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-06-06 14:10:23 +0200
committerShauren <shauren.trinity@gmail.com>2021-06-06 14:10:23 +0200
commit9f852c27b9a03d599f85a806cdae0c2d48427e53 (patch)
treec5321764736c0db500e73c38f720aa13f57fb435
parentaf815e991d3dc407846fcd05000b4e356d7336ed (diff)
Core/Players: Add PlayerExtraFlags for tracking race change, and raf level grant usage
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.h25
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp3
-rw-r--r--src/server/game/Handlers/ReferAFriendHandler.cpp1
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);
}