diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-07-13 13:40:31 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-07-13 13:40:31 +0200 |
commit | 5de252ae8471cea021944d2f404a7793f39a8d0d (patch) | |
tree | 013165f80f8315e6bfe907af32fa193dee4264cb /src | |
parent | 8fad176f5f83f741107d06a9cbe0243da89f8b30 (diff) |
Core/Misc: Move large functions out of header files
Diffstat (limited to 'src')
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; |