aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Item
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-09-01 20:07:58 +0200
committerShauren <shauren.trinity@gmail.com>2022-09-01 20:07:58 +0200
commit7957e2d380e08fa831765f610c0e29d2f3e11a04 (patch)
tree55632f7f94edb3096360c983abbdd448d8dc79d7 /src/server/game/Entities/Item
parent62e5b52d2b91832889f02edc7bbd83ad474923e3 (diff)
Core/Loot: Allocate Loot separately from objects
Diffstat (limited to 'src/server/game/Entities/Item')
-rw-r--r--src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp1
-rw-r--r--src/server/game/Entities/Item/Item.cpp5
-rw-r--r--src/server/game/Entities/Item/Item.h5
3 files changed, 7 insertions, 4 deletions
diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp
index 21662ee9d96..ae86e0ab97e 100644
--- a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp
+++ b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp
@@ -17,6 +17,7 @@
#include "AzeriteItem.h"
#include "AzeritePackets.h"
+#include "ConditionMgr.h"
#include "DatabaseEnv.h"
#include "DB2Stores.h"
#include "GameObject.h"
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index d52519fa164..464706d5538 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -31,6 +31,7 @@
#include "ItemEnchantmentMgr.h"
#include "ItemPackets.h"
#include "Log.h"
+#include "Loot.h"
#include "LootItemStorage.h"
#include "LootMgr.h"
#include "Map.h"
@@ -805,7 +806,7 @@ void Item::SaveToDB(CharacterDatabaseTransaction trans)
CharacterDatabase.CommitTransaction(trans);
// Delete the items if this is a container
- if (!loot.isLooted())
+ if (m_loot && !m_loot->isLooted())
sLootItemStorage->RemoveStoredLootForContainer(GetGUID().GetCounter());
delete this;
@@ -1117,7 +1118,7 @@ void Item::DeleteFromDB(CharacterDatabaseTransaction trans)
DeleteFromDB(trans, GetGUID().GetCounter());
// Delete the items if this is a container
- if (!loot.isLooted())
+ if (m_loot && !m_loot->isLooted())
sLootItemStorage->RemoveStoredLootForContainer(GetGUID().GetCounter());
}
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index 8e7aebc7660..6a778e0fe65 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -25,11 +25,11 @@
#include "ItemEnchantmentMgr.h"
#include "ItemTemplate.h"
#include "IteratorPair.h"
-#include "Loot.h"
class SpellInfo;
class Bag;
class Unit;
+struct Loot;
namespace WorldPackets
{
namespace Item
@@ -313,8 +313,9 @@ class TC_GAME_API Item : public Object
int32 GetSpellCharges(uint8 index/*0..5*/ = 0) const { return m_itemData->SpellCharges[index]; }
void SetSpellCharges(uint8 index/*0..5*/, int32 value) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::SpellCharges, index), value); }
- Loot loot;
+ std::unique_ptr<Loot> m_loot;
bool m_lootGenerated;
+ Loot* GetLootForPlayer(Player const* /*player*/) const override { return m_loot.get(); }
// Update States
ItemUpdateState GetState() const { return uState; }