mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 03:32:28 -04:00
Core/Misc: Reduce memory usage when data query cache is disabled in config
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
#include "PhasingHandler.h"
|
||||
#include "Player.h"
|
||||
#include "UpdateData.h"
|
||||
#include "WorldPacket.h"
|
||||
#include "WorldSession.h"
|
||||
|
||||
Conversation::Conversation() : WorldObject(false), _duration(0), _textureKitId(0)
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "Player.h"
|
||||
#include "StringConvert.h"
|
||||
#include "UpdateData.h"
|
||||
#include "WorldPacket.h"
|
||||
#include <sstream>
|
||||
|
||||
Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES), m_type(type)
|
||||
|
||||
@@ -167,6 +167,8 @@ CreatureModel const* CreatureTemplate::GetFirstVisibleModel() const
|
||||
|
||||
void CreatureTemplate::InitializeQueryData()
|
||||
{
|
||||
QueryData = std::make_unique<WorldPacket[]>(TOTAL_LOCALES);
|
||||
|
||||
for (uint8 loc = LOCALE_enUS; loc < TOTAL_LOCALES; ++loc)
|
||||
{
|
||||
if (!sWorld->getBoolConfig(CONFIG_LOAD_LOCALES) && loc != DEFAULT_LOCALE)
|
||||
|
||||
@@ -25,11 +25,12 @@
|
||||
#include "SharedDefines.h"
|
||||
#include "SpawnData.h"
|
||||
#include "UnitDefines.h"
|
||||
#include "WorldPacket.h"
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <cmath>
|
||||
|
||||
class WorldPacket;
|
||||
struct ItemTemplate;
|
||||
enum class VisibilityDistanceType : uint8;
|
||||
|
||||
@@ -533,7 +534,7 @@ struct TC_GAME_API CreatureTemplate
|
||||
uint32 flags_extra;
|
||||
uint32 ScriptID;
|
||||
std::string StringId;
|
||||
WorldPacket QueryData[TOTAL_LOCALES];
|
||||
std::unique_ptr<WorldPacket[]> QueryData;
|
||||
CreatureModel const* GetModelByIdx(uint32 idx) const;
|
||||
CreatureModel const* GetRandomValidModel() const;
|
||||
CreatureModel const* GetFirstValidModel() const;
|
||||
|
||||
@@ -558,7 +558,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
|
||||
|
||||
void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
|
||||
{
|
||||
if (sWorld->getBoolConfig(CONFIG_CACHE_DATA_QUERIES))
|
||||
if (quest->QueryData)
|
||||
_session->SendPacket(&quest->QueryData[static_cast<uint32>(_session->GetSessionDbLocaleIndex())]);
|
||||
else
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "Transport.h"
|
||||
#include "Unit.h"
|
||||
#include "UpdateData.h"
|
||||
#include "WorldPacket.h"
|
||||
|
||||
DynamicObject::DynamicObject(bool isWorldObject) : WorldObject(isWorldObject),
|
||||
_aura(nullptr), _removedAura(nullptr), _caster(nullptr), _duration(0), _isViewpoint(false)
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
|
||||
void GameObjectTemplate::InitializeQueryData()
|
||||
{
|
||||
QueryData = std::make_unique<WorldPacket[]>(TOTAL_LOCALES);
|
||||
|
||||
for (uint8 loc = LOCALE_enUS; loc < TOTAL_LOCALES; ++loc)
|
||||
{
|
||||
if (!sWorld->getBoolConfig(CONFIG_LOAD_LOCALES) && loc != DEFAULT_LOCALE)
|
||||
|
||||
@@ -22,11 +22,13 @@
|
||||
#include "QuaternionData.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "SpawnData.h"
|
||||
#include "WorldPacket.h"
|
||||
#include <array>
|
||||
#include <memory>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
||||
class WorldPacket;
|
||||
|
||||
enum class GameObjectChestFlags : int32
|
||||
{
|
||||
Consumable = 0x0001,
|
||||
@@ -883,7 +885,7 @@ struct GameObjectTemplate
|
||||
std::string AIName;
|
||||
uint32 ScriptId;
|
||||
std::string StringId;
|
||||
WorldPacket QueryData[TOTAL_LOCALES];
|
||||
std::unique_ptr<WorldPacket[]> QueryData;
|
||||
|
||||
// helpers
|
||||
bool IsDespawnAtAction() const
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "DB2Stores.h"
|
||||
#include "Player.h"
|
||||
#include "UpdateData.h"
|
||||
#include "WorldPacket.h"
|
||||
|
||||
AzeriteEmpoweredItem::AzeriteEmpoweredItem()
|
||||
{
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "GameTime.h"
|
||||
#include "Player.h"
|
||||
#include "UpdateData.h"
|
||||
#include "WorldPacket.h"
|
||||
#include <boost/date_time/gregorian/gregorian_types.hpp>
|
||||
#include <boost/date_time/posix_time/conversion.hpp>
|
||||
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Common.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "DatabaseEnv.h"
|
||||
|
||||
#include "Bag.h"
|
||||
#include "Common.h"
|
||||
#include "DatabaseEnv.h"
|
||||
#include "Log.h"
|
||||
#include "UpdateData.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "Player.h"
|
||||
#include "UpdateData.h"
|
||||
#include "WorldPacket.h"
|
||||
|
||||
Bag::Bag(): Item()
|
||||
{
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "SpellAuras.h"
|
||||
#include "UpdateData.h"
|
||||
#include "Util.h"
|
||||
#include "WorldPacket.h"
|
||||
|
||||
SceneObject::SceneObject() : WorldObject(false)
|
||||
{
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "Totem.h"
|
||||
#include "UpdateData.h"
|
||||
#include "Vehicle.h"
|
||||
#include "WorldPacket.h"
|
||||
#include <boost/dynamic_bitset.hpp>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
@@ -275,12 +275,6 @@ void CharmInfo::LoadPetActionBar(const std::string& data)
|
||||
}
|
||||
}
|
||||
|
||||
void CharmInfo::BuildActionBar(WorldPacket* data)
|
||||
{
|
||||
for (uint32 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
|
||||
*data << uint32(PetActionBar[i].packedData);
|
||||
}
|
||||
|
||||
void CharmInfo::SetSpellAutocast(SpellInfo const* spellInfo, bool state)
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i)
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
class SpellInfo;
|
||||
class Unit;
|
||||
class WorldPacket;
|
||||
|
||||
constexpr uint8 MAX_SPELL_CHARM = 4;
|
||||
constexpr uint8 MAX_SPELL_VEHICLE = 6;
|
||||
@@ -107,7 +106,6 @@ struct TC_GAME_API CharmInfo
|
||||
bool AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate = ACT_DECIDE, uint8 preferredSlot = 0);
|
||||
bool RemoveSpellFromActionBar(uint32 spell_id);
|
||||
void LoadPetActionBar(const std::string& data);
|
||||
void BuildActionBar(WorldPacket* data);
|
||||
void SetSpellAutocast(SpellInfo const* spellInfo, bool state);
|
||||
void SetActionBar(uint8 index, uint32 spellOrAction, ActiveStates type)
|
||||
{
|
||||
|
||||
@@ -11001,8 +11001,11 @@ void ObjectMgr::InitializeQueriesData(QueryDataGroup mask)
|
||||
|
||||
void QuestPOIData::InitializeQueryData()
|
||||
{
|
||||
QueryDataBuffer << *this;
|
||||
QueryDataBuffer.shrink_to_fit();
|
||||
ByteBuffer tempBuffer;
|
||||
tempBuffer << *this;
|
||||
tempBuffer.shrink_to_fit();
|
||||
|
||||
QueryDataBuffer = std::move(tempBuffer).Release();
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadSceneTemplates()
|
||||
|
||||
@@ -822,7 +822,7 @@ struct QuestPOIData
|
||||
std::vector<QuestPOIBlobData> Blobs;
|
||||
|
||||
void InitializeQueryData();
|
||||
ByteBuffer QueryDataBuffer;
|
||||
std::vector<uint8> QueryDataBuffer;
|
||||
};
|
||||
|
||||
typedef std::unordered_map<uint32, QuestPOIData> QuestPOIContainer;
|
||||
|
||||
@@ -78,7 +78,7 @@ void WorldSession::HandleCreatureQuery(WorldPackets::Query::QueryCreature& packe
|
||||
Difficulty difficulty = _player->GetMap()->GetDifficultyID();
|
||||
|
||||
// Cache only exists for difficulty base
|
||||
if (sWorld->getBoolConfig(CONFIG_CACHE_DATA_QUERIES) && difficulty == DIFFICULTY_NONE)
|
||||
if (ci->QueryData && difficulty == DIFFICULTY_NONE)
|
||||
SendPacket(&ci->QueryData[static_cast<uint32>(GetSessionDbLocaleIndex())]);
|
||||
else
|
||||
{
|
||||
@@ -103,7 +103,7 @@ void WorldSession::HandleGameObjectQueryOpcode(WorldPackets::Query::QueryGameObj
|
||||
{
|
||||
if (GameObjectTemplate const* info = sObjectMgr->GetGameObjectTemplate(packet.GameObjectID))
|
||||
{
|
||||
if (sWorld->getBoolConfig(CONFIG_CACHE_DATA_QUERIES))
|
||||
if (info->QueryData)
|
||||
SendPacket(&info->QueryData[static_cast<uint32>(GetSessionDbLocaleIndex())]);
|
||||
else
|
||||
{
|
||||
|
||||
@@ -650,6 +650,8 @@ bool Quest::CanIncreaseRewardedQuestCounters() const
|
||||
|
||||
void Quest::InitializeQueryData()
|
||||
{
|
||||
QueryData = std::make_unique<WorldPacket[]>(TOTAL_LOCALES);
|
||||
|
||||
for (uint8 loc = LOCALE_enUS; loc < TOTAL_LOCALES; ++loc)
|
||||
{
|
||||
if (!sWorld->getBoolConfig(CONFIG_LOAD_LOCALES) && loc != DEFAULT_LOCALE)
|
||||
|
||||
@@ -27,12 +27,12 @@
|
||||
#include "RaceMask.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "UniqueTrackablePtr.h"
|
||||
#include "WorldPacket.h"
|
||||
#include <bitset>
|
||||
#include <unordered_set>
|
||||
#include <vector>
|
||||
|
||||
class Player;
|
||||
class WorldPacket;
|
||||
enum Difficulty : int16;
|
||||
|
||||
namespace WorldPackets
|
||||
@@ -778,7 +778,7 @@ class TC_GAME_API Quest
|
||||
|
||||
std::vector<uint32> DependentPreviousQuests;
|
||||
std::vector<uint32> DependentBreadcrumbQuests;
|
||||
std::array<WorldPacket, TOTAL_LOCALES> QueryData;
|
||||
std::unique_ptr<WorldPacket[]> QueryData;
|
||||
|
||||
private:
|
||||
uint32 _rewItemsCount = 0;
|
||||
|
||||
@@ -427,12 +427,10 @@ WorldPacket const* QuestPOIQueryResponse::Write()
|
||||
_worldPacket << Size<int32>(QuestPOIDataStats);
|
||||
_worldPacket << Size<int32>(QuestPOIDataStats);
|
||||
|
||||
bool useCache = sWorld->getBoolConfig(CONFIG_CACHE_DATA_QUERIES);
|
||||
|
||||
for (QuestPOIData const* questPOIData : QuestPOIDataStats)
|
||||
{
|
||||
if (useCache)
|
||||
_worldPacket.append(questPOIData->QueryDataBuffer);
|
||||
if (!questPOIData->QueryDataBuffer.empty())
|
||||
_worldPacket.append(questPOIData->QueryDataBuffer.data(), questPOIData->QueryDataBuffer.size());
|
||||
else
|
||||
_worldPacket << *questPOIData;
|
||||
}
|
||||
|
||||
@@ -21,12 +21,13 @@
|
||||
#include "ItemDefines.h"
|
||||
#include "ItemTemplate.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include <cstring> // std::memset
|
||||
|
||||
/*static*/ ItemTemplate& UnitTestDataLoader::GetItemTemplate(uint32 itemId, std::string_view name)
|
||||
{
|
||||
ItemTemplate& t = sObjectMgr->_itemTemplateStore[itemId];
|
||||
ItemEntry* itemEntry = new ItemEntry();
|
||||
memset(itemEntry, 0, sizeof(ItemEntry));
|
||||
std::memset(itemEntry, 0, sizeof(ItemEntry));
|
||||
itemEntry->ID = itemId;
|
||||
itemEntry->ClassID = ITEM_CLASS_MISCELLANEOUS;
|
||||
t.BasicData = itemEntry;
|
||||
|
||||
Reference in New Issue
Block a user