aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/Utilities/Memory.h4
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp17
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp10
-rw-r--r--src/server/game/Achievements/CriteriaHandler.h12
-rw-r--r--src/server/game/Combat/CombatManager.cpp4
-rw-r--r--src/server/game/Combat/CombatManager.h2
-rw-r--r--src/server/game/Combat/ThreatManager.cpp5
-rw-r--r--src/server/game/Combat/ThreatManager.h2
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp5
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h7
-rw-r--r--src/server/game/Entities/Player/Player.cpp20
-rw-r--r--src/server/game/Entities/Player/Player.h8
-rw-r--r--src/server/game/Entities/Player/PlayerTaxi.cpp12
-rw-r--r--src/server/game/Entities/Player/PlayerTaxi.h13
-rw-r--r--src/server/game/Entities/Player/SocialMgr.cpp7
-rw-r--r--src/server/game/Entities/Player/SocialMgr.h7
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp59
-rw-r--r--src/server/game/Entities/Unit/Unit.h32
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h4
-rw-r--r--src/server/game/Events/GameEventMgr.cpp10
-rw-r--r--src/server/game/Events/GameEventMgr.h6
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp42
-rw-r--r--src/server/game/Globals/ObjectMgr.h4
-rw-r--r--src/server/game/Mails/Mail.h2
-rw-r--r--src/server/game/Maps/Map.cpp26
-rw-r--r--src/server/game/Maps/Map.h25
-rw-r--r--src/server/game/Reputation/ReputationMgr.cpp6
-rw-r--r--src/server/game/Reputation/ReputationMgr.h7
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.h1
29 files changed, 253 insertions, 106 deletions
diff --git a/src/common/Utilities/Memory.h b/src/common/Utilities/Memory.h
index 629099bf3e3..706a471e3da 100644
--- a/src/common/Utilities/Memory.h
+++ b/src/common/Utilities/Memory.h
@@ -130,7 +130,7 @@ Impl::stateless_unique_ptr_deleter<Ptr, Del> unique_ptr_deleter()
* @endcode
*/
template<typename Ptr, typename T = std::remove_pointer_t<Ptr>, typename Del> requires std::invocable<Del, Ptr> && std::is_pointer_v<Ptr>
-std::unique_ptr<T, Impl::stateful_unique_ptr_deleter<Ptr, Del>> make_unique_ptr_with_deleter(Ptr ptr, Del deleter)
+inline std::unique_ptr<T, Impl::stateful_unique_ptr_deleter<Ptr, Del>> make_unique_ptr_with_deleter(Ptr ptr, Del deleter)
{
return std::unique_ptr<T, Impl::stateful_unique_ptr_deleter<Ptr, Del>>(ptr, std::move(deleter));
}
@@ -161,7 +161,7 @@ std::unique_ptr<T, Impl::stateful_unique_ptr_deleter<Ptr, Del>> make_unique_ptr_
* @endcode
*/
template<auto Del, typename Ptr, typename T = std::remove_pointer_t<Ptr>> requires std::invocable<decltype(Del), Ptr> && std::is_pointer_v<Ptr>
-std::unique_ptr<T, Impl::stateless_unique_ptr_deleter<Ptr, Del>> make_unique_ptr_with_deleter(Ptr ptr)
+inline std::unique_ptr<T, Impl::stateless_unique_ptr_deleter<Ptr, Del>> make_unique_ptr_with_deleter(Ptr ptr)
{
return std::unique_ptr<T, Impl::stateless_unique_ptr_deleter<Ptr, Del>>(ptr);
}
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 3323e9c7212..8cdc4bc2f46 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -38,7 +38,6 @@
#include "StringConvert.h"
#include "World.h"
#include "WorldSession.h"
-#include <sstream>
struct VisibleAchievementCheck
{
@@ -794,7 +793,6 @@ void GuildAchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, Prep
void GuildAchievementMgr::SaveToDB(CharacterDatabaseTransaction trans)
{
CharacterDatabasePreparedStatement* stmt;
- std::ostringstream guidstr;
for (std::pair<uint32 const, CompletedAchievementData>& completedAchievement : _completedAchievements)
{
if (!completedAchievement.second.Changed)
@@ -809,14 +807,19 @@ void GuildAchievementMgr::SaveToDB(CharacterDatabaseTransaction trans)
stmt->setUInt64(0, _owner->GetId());
stmt->setUInt32(1, completedAchievement.first);
stmt->setInt64(2, completedAchievement.second.Date);
- for (ObjectGuid memberGuid : completedAchievement.second.CompletingPlayers)
- guidstr << memberGuid.GetCounter() << ',';
+ std::string guidstr;
+ auto completersItr = completedAchievement.second.CompletingPlayers.begin();
+ auto completersEnd = completedAchievement.second.CompletingPlayers.end();
+ if (completersItr != completersEnd)
+ {
+ Trinity::StringFormatTo(std::back_inserter(guidstr), "{}", completersItr->GetCounter());
+ while (++completersItr != completersEnd)
+ Trinity::StringFormatTo(std::back_inserter(guidstr), ",{}", completersItr->GetCounter());
+ }
- stmt->setString(3, guidstr.str());
+ stmt->setString(3, std::move(guidstr));
trans->Append(stmt);
- guidstr.str("");
-
completedAchievement.second.Changed = false;
}
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 1c3df7302cb..eacc492e97a 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -4634,6 +4634,11 @@ CriteriaList const& CriteriaMgr::GetScenarioCriteriaByTypeAndScenario(CriteriaTy
return EmptyCriteriaList;
}
+CriteriaTreeList const* CriteriaMgr::GetCriteriaTreesByCriteria(uint32 criteriaId) const
+{
+ return Trinity::Containers::MapGetValuePtr(_criteriaTreeByCriteria, criteriaId);
+}
+
std::unordered_map<int32, CriteriaList> const& CriteriaMgr::GetCriteriaByStartEvent(CriteriaStartEvent startEvent) const
{
return _criteriasByStartEvent[size_t(startEvent)];
@@ -4654,6 +4659,11 @@ CriteriaList const* CriteriaMgr::GetCriteriaByFailEvent(CriteriaFailEvent failEv
return Trinity::Containers::MapGetValuePtr(_criteriasByFailEvent[size_t(failEvent)], asset);
}
+CriteriaDataSet const* CriteriaMgr::GetCriteriaDataSet(Criteria const* criteria) const
+{
+ return Trinity::Containers::MapGetValuePtr(_criteriaDataMap, criteria->ID);
+}
+
CriteriaMgr::CriteriaMgr() = default;
//==========================================================
diff --git a/src/server/game/Achievements/CriteriaHandler.h b/src/server/game/Achievements/CriteriaHandler.h
index 067566d0bde..7057d1c5b79 100644
--- a/src/server/game/Achievements/CriteriaHandler.h
+++ b/src/server/game/Achievements/CriteriaHandler.h
@@ -345,11 +345,7 @@ public:
return _questObjectiveCriteriasByType[size_t(type)];
}
- CriteriaTreeList const* GetCriteriaTreesByCriteria(uint32 criteriaId) const
- {
- auto itr = _criteriaTreeByCriteria.find(criteriaId);
- return itr != _criteriaTreeByCriteria.end() ? &itr->second : nullptr;
- }
+ CriteriaTreeList const* GetCriteriaTreesByCriteria(uint32 criteriaId) const;
std::unordered_map<int32, CriteriaList> const& GetCriteriaByStartEvent(CriteriaStartEvent startEvent) const;
CriteriaList const* GetCriteriaByStartEvent(CriteriaStartEvent startEvent, int32 asset) const;
@@ -357,11 +353,7 @@ public:
std::unordered_map<int32, CriteriaList> const& GetCriteriaByFailEvent(CriteriaFailEvent failEvent) const;
CriteriaList const* GetCriteriaByFailEvent(CriteriaFailEvent failEvent, int32 asset) const;
- CriteriaDataSet const* GetCriteriaDataSet(Criteria const* Criteria) const
- {
- auto iter = _criteriaDataMap.find(Criteria->ID);
- return iter != _criteriaDataMap.end() ? &iter->second : nullptr;
- }
+ CriteriaDataSet const* GetCriteriaDataSet(Criteria const* criteria) const;
static bool IsGroupCriteriaType(CriteriaType type)
{
diff --git a/src/server/game/Combat/CombatManager.cpp b/src/server/game/Combat/CombatManager.cpp
index 871065ee8b3..1bd5e31017c 100644
--- a/src/server/game/Combat/CombatManager.cpp
+++ b/src/server/game/Combat/CombatManager.cpp
@@ -126,6 +126,10 @@ void PvPCombatReference::RefreshTimer()
_combatTimer = PVP_COMBAT_TIMEOUT;
}
+CombatManager::CombatManager(Unit* owner) : _owner(owner)
+{
+}
+
CombatManager::~CombatManager()
{
ASSERT(_pveRefs.empty(), "CombatManager::~CombatManager - %s: we still have %zu PvE combat references, one of them is with %s", _owner->GetGUID().ToString().c_str(), _pveRefs.size(), _pveRefs.begin()->first.ToString().c_str());
diff --git a/src/server/game/Combat/CombatManager.h b/src/server/game/Combat/CombatManager.h
index d44aff87e1c..149ab94ab88 100644
--- a/src/server/game/Combat/CombatManager.h
+++ b/src/server/game/Combat/CombatManager.h
@@ -100,7 +100,7 @@ class TC_GAME_API CombatManager
public:
static bool CanBeginCombat(Unit const* a, Unit const* b);
- CombatManager(Unit* owner) : _owner(owner) { }
+ CombatManager(Unit* owner);
~CombatManager();
void Update(uint32 tdiff); // called from Unit::Update
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp
index 57ff0aca131..6ac504e456c 100644
--- a/src/server/game/Combat/ThreatManager.cpp
+++ b/src/server/game/Combat/ThreatManager.cpp
@@ -663,6 +663,11 @@ void ThreatManager::ProcessAIUpdates()
ai->JustStartedThreateningMe(ref->GetVictim());
}
+void ThreatManager::RegisterForAIUpdate(ObjectGuid const& guid)
+{
+ _needsAIUpdate.push_back(guid);
+}
+
// returns true if a is LOWER on the threat list than b
/*static*/ bool ThreatManager::CompareReferencesLT(ThreatReference const* a, ThreatReference const* b, float aWeight)
{
diff --git a/src/server/game/Combat/ThreatManager.h b/src/server/game/Combat/ThreatManager.h
index 4376b0e5e43..d1ac06d3807 100644
--- a/src/server/game/Combat/ThreatManager.h
+++ b/src/server/game/Combat/ThreatManager.h
@@ -208,7 +208,7 @@ class TC_GAME_API ThreatManager
// AI notifies are delayed to ensure we are in a consistent state before we call out to arbitrary logic
// threat references might register themselves here when ::UpdateOffline() is called - MAKE SURE THIS IS PROCESSED JUST BEFORE YOU EXIT THREATMANAGER LOGIC
void ProcessAIUpdates();
- void RegisterForAIUpdate(ObjectGuid const& guid) { _needsAIUpdate.push_back(guid); }
+ void RegisterForAIUpdate(ObjectGuid const& guid);
std::vector<ObjectGuid> _needsAIUpdate;
// picks a new victim - called from ::Update periodically
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index a44f2c1d420..1331c819578 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -100,6 +100,11 @@ VendorItem const* VendorItemData::FindItemCostPair(uint32 item_id, uint32 extend
CreatureModel const CreatureModel::DefaultInvisibleModel(11686, 1.0f, 1.0f);
CreatureModel const CreatureModel::DefaultVisibleModel(17519, 1.0f, 1.0f);
+CreatureTemplate::CreatureTemplate() = default;
+CreatureTemplate::CreatureTemplate(CreatureTemplate&& other) noexcept = default;
+CreatureTemplate& CreatureTemplate::operator=(CreatureTemplate&& other) noexcept = default;
+CreatureTemplate::~CreatureTemplate() = default;
+
CreatureModel const* CreatureTemplate::GetModelByIdx(uint32 idx) const
{
return idx < Models.size() ? &Models[idx] : nullptr;
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h
index c2944fb4058..1f4f4b5e216 100644
--- a/src/server/game/Entities/Creature/CreatureData.h
+++ b/src/server/game/Entities/Creature/CreatureData.h
@@ -558,6 +558,13 @@ struct TC_GAME_API CreatureTemplate
void InitializeQueryData();
WorldPacket BuildQueryData(LocaleConstant loc, Difficulty difficulty) const;
+
+ CreatureTemplate();
+ CreatureTemplate(CreatureTemplate const& other) = delete;
+ CreatureTemplate(CreatureTemplate&& other) noexcept;
+ CreatureTemplate& operator=(CreatureTemplate const& other) = delete;
+ CreatureTemplate& operator=(CreatureTemplate&& other) noexcept;
+ ~CreatureTemplate();
};
// Defines base stats for creatures (used to calculate HP/mana/armor/attackpower/rangedattackpower/all damage).
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 017c19bb6c7..bc513badb8e 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2612,6 +2612,11 @@ void Player::RemoveMail(uint64 id)
}
}
+void Player::AddMail(Mail* mail)
+{
+ m_mail.push_front(mail);
+}
+
void Player::SendMailResult(uint64 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError, ObjectGuid::LowType itemGuid, uint32 itemCount) const
{
WorldPackets::Mail::MailCommandResult result;
@@ -9080,6 +9085,11 @@ LootRoll* Player::GetLootRoll(ObjectGuid const& lootObjectGuid, uint8 lootListId
return itr != m_lootRolls.end() ? *itr : nullptr;
}
+void Player::AddLootRoll(LootRoll* roll)
+{
+ m_lootRolls.push_back(roll);
+}
+
void Player::RemoveLootRoll(LootRoll* roll)
{
m_lootRolls.erase(std::remove(m_lootRolls.begin(), m_lootRolls.end(), roll), m_lootRolls.end());
@@ -17515,6 +17525,16 @@ void Player::SendQuestGiverStatusMultiple()
SendDirectMessage(response.Write());
}
+void Player::AddTimedQuest(uint32 questId)
+{
+ m_timedquests.insert(questId);
+}
+
+void Player::RemoveTimedQuest(uint32 questId)
+{
+ m_timedquests.erase(questId);
+}
+
bool Player::HasPvPForcingQuest() const
{
for (uint8 i = 0; i < MAX_QUEST_LOG_SIZE; ++i)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index cd457d24ca0..2a51422b9a7 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1779,8 +1779,8 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
uint32 GetInGameTime() const { return m_ingametime; }
void SetInGameTime(uint32 time) { m_ingametime = time; }
- void AddTimedQuest(uint32 questId) { m_timedquests.insert(questId); }
- void RemoveTimedQuest(uint32 questId) { m_timedquests.erase(questId); }
+ void AddTimedQuest(uint32 questId);
+ void RemoveTimedQuest(uint32 questId);
void SaveCUFProfile(uint8 id, std::nullptr_t) { _CUFProfiles[id] = nullptr; } ///> Empties a CUF profile at position 0-4
void SaveCUFProfile(uint8 id, std::unique_ptr<CUFProfile> profile) { _CUFProfiles[id] = std::move(profile); } ///> Replaces a CUF profile at position 0-4
@@ -1867,7 +1867,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void RemoveMail(uint64 id);
- void AddMail(Mail* mail) { m_mail.push_front(mail);}// for call from WorldSession::SendMailTo
+ void AddMail(Mail* mail); // for call from WorldSession::SendMailTo
uint32 GetMailSize() const { return uint32(m_mail.size()); }
Mail* GetMail(uint64 id);
@@ -2204,7 +2204,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
Loot* GetLootByWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const;
std::unordered_map<ObjectGuid, Loot*> const& GetAELootView() const { return m_AELootView; }
LootRoll* GetLootRoll(ObjectGuid const& lootObjectGuid, uint8 lootListId);
- void AddLootRoll(LootRoll* roll) { m_lootRolls.push_back(roll); }
+ void AddLootRoll(LootRoll* roll);
void RemoveLootRoll(LootRoll* roll);
void RemovedInsignia(Player* looterPlr);
diff --git a/src/server/game/Entities/Player/PlayerTaxi.cpp b/src/server/game/Entities/Player/PlayerTaxi.cpp
index e8cbe9d620d..ba0ab55c98d 100644
--- a/src/server/game/Entities/Player/PlayerTaxi.cpp
+++ b/src/server/game/Entities/Player/PlayerTaxi.cpp
@@ -23,6 +23,13 @@
#include "TaxiPackets.h"
#include <sstream>
+PlayerTaxi::PlayerTaxi() = default;
+PlayerTaxi::PlayerTaxi(PlayerTaxi const& other) = default;
+PlayerTaxi::PlayerTaxi(PlayerTaxi&& other) noexcept = default;
+PlayerTaxi& PlayerTaxi::operator=(PlayerTaxi const& other) = default;
+PlayerTaxi& PlayerTaxi::operator=(PlayerTaxi&& other) noexcept = default;
+PlayerTaxi::~PlayerTaxi() = default;
+
void PlayerTaxi::InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level)
{
// class specific initial known nodes
@@ -196,6 +203,11 @@ std::string PlayerTaxi::SaveTaxiDestinationsToString()
return ss.str();
}
+void PlayerTaxi::AddTaxiDestination(uint32 dest)
+{
+ m_TaxiDestinations.push_back(dest);
+}
+
uint32 PlayerTaxi::GetCurrentTaxiPath() const
{
if (m_TaxiDestinations.size() < 2)
diff --git a/src/server/game/Entities/Player/PlayerTaxi.h b/src/server/game/Entities/Player/PlayerTaxi.h
index 0b81dd6066f..c94cc46bdb5 100644
--- a/src/server/game/Entities/Player/PlayerTaxi.h
+++ b/src/server/game/Entities/Player/PlayerTaxi.h
@@ -36,8 +36,13 @@ namespace WorldPackets
class TC_GAME_API PlayerTaxi
{
public:
- PlayerTaxi() : m_flightMasterFactionId(0) { }
- ~PlayerTaxi() { }
+ PlayerTaxi();
+ PlayerTaxi(PlayerTaxi const& other);
+ PlayerTaxi(PlayerTaxi&& other) noexcept;
+ PlayerTaxi& operator=(PlayerTaxi const& other);
+ PlayerTaxi& operator=(PlayerTaxi&& other) noexcept;
+ ~PlayerTaxi();
+
// Nodes
void InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level);
bool LoadTaxiMask(std::string const& data);
@@ -68,7 +73,7 @@ class TC_GAME_API PlayerTaxi
std::string SaveTaxiDestinationsToString();
void ClearTaxiDestinations() { m_TaxiDestinations.clear(); }
- void AddTaxiDestination(uint32 dest) { m_TaxiDestinations.push_back(dest); }
+ void AddTaxiDestination(uint32 dest);
uint32 GetTaxiSource() const { return m_TaxiDestinations.empty() ? 0 : m_TaxiDestinations.front(); }
uint32 GetTaxiDestination() const { return m_TaxiDestinations.size() < 2 ? 0 : m_TaxiDestinations[1]; }
uint32 GetCurrentTaxiPath() const;
@@ -87,7 +92,7 @@ class TC_GAME_API PlayerTaxi
private:
TaxiMask m_taximask;
std::deque<uint32> m_TaxiDestinations;
- uint32 m_flightMasterFactionId;
+ uint32 m_flightMasterFactionId = 0;
};
std::ostringstream& operator <<(std::ostringstream& ss, PlayerTaxi const& taxi);
diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp
index 871efaefef1..b0683340398 100644
--- a/src/server/game/Entities/Player/SocialMgr.cpp
+++ b/src/server/game/Entities/Player/SocialMgr.cpp
@@ -24,6 +24,13 @@
#include "World.h"
#include "WorldSession.h"
+PlayerSocial::PlayerSocial() = default;
+PlayerSocial::PlayerSocial(PlayerSocial const&) = default;
+PlayerSocial::PlayerSocial(PlayerSocial&&) noexcept = default;
+PlayerSocial& PlayerSocial::operator=(PlayerSocial const&) = default;
+PlayerSocial& PlayerSocial::operator=(PlayerSocial&&) noexcept = default;
+PlayerSocial::~PlayerSocial() = default;
+
uint32 PlayerSocial::GetNumberOfSocialsWithFlag(SocialFlag flag)
{
uint32 counter = 0;
diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h
index c639dcef7c5..9a01b91ba84 100644
--- a/src/server/game/Entities/Player/SocialMgr.h
+++ b/src/server/game/Entities/Player/SocialMgr.h
@@ -105,6 +105,13 @@ class TC_GAME_API PlayerSocial
friend class SocialMgr;
public:
+ PlayerSocial();
+ PlayerSocial(PlayerSocial const&);
+ PlayerSocial(PlayerSocial&&) noexcept;
+ PlayerSocial& operator=(PlayerSocial const&);
+ PlayerSocial& operator=(PlayerSocial&&) noexcept;
+ ~PlayerSocial();
+
// adding/removing
bool AddToSocialList(ObjectGuid const& guid, ObjectGuid const& accountGuid, SocialFlag flag);
void RemoveFromSocialList(ObjectGuid const& guid, SocialFlag flag);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 91ab4c5168c..45805cfbd0a 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -722,6 +722,16 @@ void Unit::RemoveVisibleAura(AuraApplication* aurApp)
UpdateAuraForGroup();
}
+void Unit::SetVisibleAuraUpdate(AuraApplication* aurApp)
+{
+ m_visibleAurasToUpdate.insert(aurApp);
+}
+
+void Unit::RemoveVisibleAuraUpdate(AuraApplication* aurApp)
+{
+ m_visibleAurasToUpdate.erase(aurApp);
+}
+
void Unit::UpdateInterruptMask()
{
m_interruptMask = SpellAuraInterruptFlags::None;
@@ -3020,6 +3030,28 @@ void Unit::_UpdateAutoRepeatSpell()
}
}
+void Unit::AddChannelObject(ObjectGuid guid)
+{
+ AddDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects)) = guid;
+}
+
+void Unit::SetChannelObject(uint32 slot, ObjectGuid guid)
+{
+ SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects, slot), guid);
+}
+
+void Unit::RemoveChannelObject(ObjectGuid guid)
+{
+ int32 index = m_unitData->ChannelObjects.FindIndex(guid);
+ if (index >= 0)
+ RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects), index);
+}
+
+void Unit::ClearChannelObjects()
+{
+ ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects));
+}
+
void Unit::SetCurrentCastSpell(Spell* pSpell)
{
ASSERT(pSpell); // NULL may be never passed here, use InterruptSpell or InterruptNonMeleeSpells
@@ -8950,6 +8982,16 @@ void Unit::UpdateAdvFlyingSpeed(AdvFlyingRateTypeRange speedType, bool clientUpd
}
}
+void Unit::FollowerAdded(AbstractFollower* f)
+{
+ m_followingMe.insert(f);
+}
+
+void Unit::FollowerRemoved(AbstractFollower* f)
+{
+ m_followingMe.erase(f);
+}
+
void Unit::RemoveAllFollowers()
{
while (!m_followingMe.empty())
@@ -14217,6 +14259,23 @@ float Unit::GetCollisionHeight() const
return collisionHeight == 0.0f ? DEFAULT_COLLISION_HEIGHT : collisionHeight;
}
+void Unit::AddWorldEffect(int32 worldEffectId)
+{
+ AddDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WorldEffects)) = worldEffectId;
+}
+
+void Unit::RemoveWorldEffect(int32 worldEffectId)
+{
+ int32 index = m_unitData->WorldEffects.FindIndex(worldEffectId);
+ if (index >= 0)
+ RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WorldEffects), index);
+}
+
+void Unit::ClearWorldEffects()
+{
+ ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WorldEffects));
+}
+
void Unit::SetVignette(uint32 vignetteId)
{
if (m_vignette)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 7c9f6c5fd9d..f6917ee88f7 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1429,15 +1429,10 @@ class TC_GAME_API Unit : public WorldObject
.ModifyValue(&UF::UnitData::ChannelData)
.ModifyValue(&UF::UnitChannel::SpellVisual), channelVisual);
}
- void AddChannelObject(ObjectGuid guid) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects)) = guid; }
- void SetChannelObject(uint32 slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects, slot), guid); }
- void RemoveChannelObject(ObjectGuid guid)
- {
- int32 index = m_unitData->ChannelObjects.FindIndex(guid);
- if (index >= 0)
- RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects), index);
- }
- void ClearChannelObjects() { ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects)); }
+ void AddChannelObject(ObjectGuid guid);
+ void SetChannelObject(uint32 slot, ObjectGuid guid);
+ void RemoveChannelObject(ObjectGuid guid);
+ void ClearChannelObjects();
int8 GetSpellEmpowerStage() const { return m_unitData->SpellEmpowerStage; }
void SetSpellEmpowerStage(int8 stage) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::SpellEmpowerStage), stage); }
@@ -1584,8 +1579,8 @@ class TC_GAME_API Unit : public WorldObject
bool HasVisibleAura(AuraApplication* aurApp) const { return m_visibleAuras.contains(aurApp); }
void SetVisibleAura(AuraApplication* aurApp);
void RemoveVisibleAura(AuraApplication* aurApp);
- void SetVisibleAuraUpdate(AuraApplication* aurApp) { m_visibleAurasToUpdate.insert(aurApp); }
- void RemoveVisibleAuraUpdate(AuraApplication* aurApp) { m_visibleAurasToUpdate.erase(aurApp); }
+ void SetVisibleAuraUpdate(AuraApplication* aurApp);
+ void RemoveVisibleAuraUpdate(AuraApplication* aurApp);
bool HasInterruptFlag(SpellAuraInterruptFlags flags) const { return m_interruptMask.HasFlag(flags); }
bool HasInterruptFlag(SpellAuraInterruptFlags2 flags) const { return m_interruptMask2.HasFlag(flags); }
@@ -1696,8 +1691,8 @@ class TC_GAME_API Unit : public WorldObject
void UpdateAdvFlyingSpeed(AdvFlyingRateTypeSingle speedType, bool clientUpdate);
void UpdateAdvFlyingSpeed(AdvFlyingRateTypeRange speedType, bool clientUpdate);
- void FollowerAdded(AbstractFollower* f) { m_followingMe.insert(f); }
- void FollowerRemoved(AbstractFollower* f) { m_followingMe.erase(f); }
+ void FollowerAdded(AbstractFollower* f);
+ void FollowerRemoved(AbstractFollower* f);
void RemoveAllFollowers();
MotionMaster* GetMotionMaster() { return i_motionMaster.get(); }
@@ -1849,14 +1844,9 @@ class TC_GAME_API Unit : public WorldObject
// enables / disables combat interaction of this unit
void SetIsCombatDisallowed(bool apply) { _isCombatDisallowed = apply; }
- void AddWorldEffect(int32 worldEffectId) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WorldEffects)) = worldEffectId; }
- void RemoveWorldEffect(int32 worldEffectId)
- {
- int32 index = m_unitData->WorldEffects.FindIndex(worldEffectId);
- if (index >= 0)
- RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WorldEffects), index);
- }
- void ClearWorldEffects() { ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WorldEffects)); }
+ void AddWorldEffect(int32 worldEffectId);
+ void RemoveWorldEffect(int32 worldEffectId);
+ void ClearWorldEffects();
Vignettes::VignetteData const* GetVignette() const { return m_vignette.get(); }
void SetVignette(uint32 vignetteId);
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index 4f4f5552110..540c4111c97 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -517,10 +517,10 @@ enum class AttackSwingErr : uint8
#define MAX_DECLINED_NAME_CASES 5
-struct TC_GAME_API DeclinedName
+struct DeclinedName
{
DeclinedName() = default;
- DeclinedName(UF::DeclinedNames const& uf);
+ TC_GAME_API DeclinedName(UF::DeclinedNames const& uf);
std::string name[MAX_DECLINED_NAME_CASES];
};
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp
index 12781909151..bb525bc530f 100644
--- a/src/server/game/Events/GameEventMgr.cpp
+++ b/src/server/game/Events/GameEventMgr.cpp
@@ -1615,6 +1615,16 @@ void GameEventMgr::SendWorldStateUpdate(Player* player, uint16 event_id)
}
}
+void GameEventMgr::AddActiveEvent(uint16 event_id)
+{
+ m_ActiveEvents.insert(event_id);
+}
+
+void GameEventMgr::RemoveActiveEvent(uint16 event_id)
+{
+ m_ActiveEvents.erase(event_id);
+}
+
class GameEventAIHookWorker
{
public:
diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h
index 086f2a594b5..5354f0b87ce 100644
--- a/src/server/game/Events/GameEventMgr.h
+++ b/src/server/game/Events/GameEventMgr.h
@@ -112,7 +112,7 @@ class TC_GAME_API GameEventMgr
uint32 NextCheck(uint16 entry) const;
void LoadFromDB();
uint32 Update();
- bool IsActiveEvent(uint16 event_id) { return (m_ActiveEvents.find(event_id) != m_ActiveEvents.end()); }
+ bool IsActiveEvent(uint16 event_id) const { return (m_ActiveEvents.contains(event_id)); }
uint32 StartSystem();
void Initialize();
void StartArenaSeason();
@@ -124,8 +124,8 @@ class TC_GAME_API GameEventMgr
private:
void SendWorldStateUpdate(Player* player, uint16 event_id);
- void AddActiveEvent(uint16 event_id) { m_ActiveEvents.insert(event_id); }
- void RemoveActiveEvent(uint16 event_id) { m_ActiveEvents.erase(event_id); }
+ void AddActiveEvent(uint16 event_id);
+ void RemoveActiveEvent(uint16 event_id);
void ApplyNewEvent(uint16 event_id);
void UnApplyEvent(uint16 event_id);
void GameEventSpawn(int16 event_id);
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index ba7f7d79edc..bb0e73e04e6 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -8584,30 +8584,40 @@ void ObjectMgr::LoadNPCSpellClickSpells()
TC_LOG_INFO("server.loading", ">> Loaded {} spellclick definitions in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
}
-void ObjectMgr::DeleteCreatureData(ObjectGuid::LowType guid)
+CreatureData& ObjectMgr::NewOrExistCreatureData(ObjectGuid::LowType spawnId)
+{
+ return _creatureDataStore[spawnId];
+}
+
+void ObjectMgr::DeleteCreatureData(ObjectGuid::LowType spawnId)
{
// remove mapid*cellid -> guid_set map
- CreatureData const* data = GetCreatureData(guid);
- if (data)
- {
- RemoveCreatureFromGrid(data);
- OnDeleteSpawnData(data);
- }
+ auto itr = _creatureDataStore.find(spawnId);
+ if (itr == _creatureDataStore.end())
+ return;
+
+ RemoveCreatureFromGrid(&itr->second);
+ OnDeleteSpawnData(&itr->second);
- _creatureDataStore.erase(guid);
+ _creatureDataStore.erase(itr);
}
-void ObjectMgr::DeleteGameObjectData(ObjectGuid::LowType guid)
+GameObjectData& ObjectMgr::NewOrExistGameObjectData(ObjectGuid::LowType spawnId)
+{
+ return _gameObjectDataStore[spawnId];
+}
+
+void ObjectMgr::DeleteGameObjectData(ObjectGuid::LowType spawnId)
{
// remove mapid*cellid -> guid_set map
- GameObjectData const* data = GetGameObjectData(guid);
- if (data)
- {
- RemoveGameobjectFromGrid(data);
- OnDeleteSpawnData(data);
- }
+ auto itr = _gameObjectDataStore.find(spawnId);
+ if (itr == _gameObjectDataStore.end())
+ return;
+
+ RemoveGameobjectFromGrid(&itr->second);
+ OnDeleteSpawnData(&itr->second);
- _gameObjectDataStore.erase(guid);
+ _gameObjectDataStore.erase(itr);
}
void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, QuestRelationsReverse* reverseMap, std::string const& table)
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index d989bf18df3..a5684df7b94 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -1438,7 +1438,7 @@ class TC_GAME_API ObjectMgr
if (itr == _creatureDataStore.end()) return nullptr;
return &itr->second;
}
- CreatureData& NewOrExistCreatureData(ObjectGuid::LowType spawnId) { return _creatureDataStore[spawnId]; }
+ CreatureData& NewOrExistCreatureData(ObjectGuid::LowType spawnId);
void DeleteCreatureData(ObjectGuid::LowType spawnId);
ObjectGuid GetLinkedRespawnGuid(ObjectGuid spawnId) const
{
@@ -1459,7 +1459,7 @@ class TC_GAME_API ObjectMgr
if (itr == _gameObjectDataStore.end()) return nullptr;
return &itr->second;
}
- GameObjectData& NewOrExistGameObjectData(ObjectGuid::LowType spawnId) { return _gameObjectDataStore[spawnId]; }
+ GameObjectData& NewOrExistGameObjectData(ObjectGuid::LowType spawnId);
void DeleteGameObjectData(ObjectGuid::LowType spawnId);
GameObjectLocale const* GetGameObjectLocale(uint32 entry) const
{
diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h
index de4c029e2f0..d5ebf263aaf 100644
--- a/src/server/game/Mails/Mail.h
+++ b/src/server/game/Mails/Mail.h
@@ -171,7 +171,7 @@ struct MailItemInfo
};
typedef std::vector<MailItemInfo> MailItemInfoVec;
-struct TC_GAME_API Mail
+struct Mail
{
uint64 messageID;
uint8 messageType;
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index ac15853286e..76bfb162ec0 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -2710,9 +2710,19 @@ bool Map::ActiveObjectsNearGrid(NGridType const& ngrid) const
return false;
}
+void Map::AddWorldObject(WorldObject* obj)
+{
+ i_worldObjects.insert(obj);
+}
+
+void Map::RemoveWorldObject(WorldObject* obj)
+{
+ i_worldObjects.erase(obj);
+}
+
void Map::AddToActive(WorldObject* obj)
{
- AddToActiveHelper(obj);
+ m_activeNonPlayers.insert(obj);
Optional<Position> respawnLocation;
switch (obj->GetTypeId())
@@ -2751,7 +2761,19 @@ void Map::AddToActive(WorldObject* obj)
void Map::RemoveFromActive(WorldObject* obj)
{
- RemoveFromActiveHelper(obj);
+ // Map::Update for active object in proccess
+ if (m_activeNonPlayersIter != m_activeNonPlayers.end())
+ {
+ ActiveNonPlayers::iterator itr = m_activeNonPlayers.find(obj);
+ if (itr != m_activeNonPlayers.end())
+ {
+ if (itr == m_activeNonPlayersIter)
+ ++m_activeNonPlayersIter;
+ m_activeNonPlayers.erase(itr);
+ }
+ }
+ else
+ m_activeNonPlayers.erase(obj);
Optional<Position> respawnLocation;
switch (obj->GetTypeId())
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 9468e5d73ec..0241c6d0b62 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -392,8 +392,8 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
uint32 GetPlayersCountExceptGMs() const;
bool ActiveObjectsNearGrid(NGridType const& ngrid) const;
- void AddWorldObject(WorldObject* obj) { i_worldObjects.insert(obj); }
- void RemoveWorldObject(WorldObject* obj) { i_worldObjects.erase(obj); }
+ void AddWorldObject(WorldObject* obj);
+ void RemoveWorldObject(WorldObject* obj);
void SendToPlayers(WorldPacket const* data) const;
@@ -763,27 +763,6 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
template<class T>
void DeleteFromWorld(T*);
- void AddToActiveHelper(WorldObject* obj)
- {
- m_activeNonPlayers.insert(obj);
- }
-
- void RemoveFromActiveHelper(WorldObject* obj)
- {
- // Map::Update for active object in proccess
- if (m_activeNonPlayersIter != m_activeNonPlayers.end())
- {
- ActiveNonPlayers::iterator itr = m_activeNonPlayers.find(obj);
- if (itr == m_activeNonPlayers.end())
- return;
- if (itr == m_activeNonPlayersIter)
- ++m_activeNonPlayersIter;
- m_activeNonPlayers.erase(itr);
- }
- else
- m_activeNonPlayers.erase(obj);
- }
-
std::unique_ptr<RespawnListContainer> _respawnTimes;
RespawnInfoMap _creatureRespawnTimesBySpawnId;
RespawnInfoMap _gameObjectRespawnTimesBySpawnId;
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index a512a9eb018..a8973df150c 100644
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -21,6 +21,7 @@
#include "DB2Stores.h"
#include "Language.h"
#include "Log.h"
+#include "MapUtils.h"
#include "ObjectMgr.h"
#include "Player.h"
#include "ReputationPackets.h"
@@ -225,6 +226,11 @@ ReputationRank const* ReputationMgr::GetForcedRankIfAny(FactionTemplateEntry con
return GetForcedRankIfAny(factionTemplateEntry->Faction);
}
+ReputationRank const* ReputationMgr::GetForcedRankIfAny(uint32 factionId) const
+{
+ return Trinity::Containers::MapGetValuePtr(_forcedReactions, factionId);
+}
+
bool ReputationMgr::IsParagonReputation(FactionEntry const* factionEntry) const
{
if (sDB2Manager.GetParagonReputation(factionEntry->ID))
diff --git a/src/server/game/Reputation/ReputationMgr.h b/src/server/game/Reputation/ReputationMgr.h
index e4cd11978ae..1008ea4173c 100644
--- a/src/server/game/Reputation/ReputationMgr.h
+++ b/src/server/game/Reputation/ReputationMgr.h
@@ -110,12 +110,7 @@ class TC_GAME_API ReputationMgr
std::string GetReputationRankName(FactionEntry const* factionEntry) const;;
ReputationRank const* GetForcedRankIfAny(FactionTemplateEntry const* factionTemplateEntry) const;
-
- ReputationRank const* GetForcedRankIfAny(uint32 factionId) const
- {
- ForcedReactions::const_iterator forceItr = _forcedReactions.find(factionId);
- return forceItr != _forcedReactions.end() ? &forceItr->second : nullptr;
- }
+ ReputationRank const* GetForcedRankIfAny(uint32 factionId) const;
bool IsParagonReputation(FactionEntry const* factionEntry) const;
int32 GetParagonLevel(uint32 paragonFactionId) const;
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h
index 0f6cb281373..405593e150c 100644
--- a/src/server/game/Server/Packets/AuthenticationPackets.h
+++ b/src/server/game/Server/Packets/AuthenticationPackets.h
@@ -23,7 +23,6 @@
#include "Optional.h"
#include "PacketUtilities.h"
#include <array>
-#include <unordered_map>
struct CharacterTemplate;
struct RaceClassAvailability;