aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp13
-rw-r--r--src/server/game/Entities/Creature/Creature.h3
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp6
3 files changed, 19 insertions, 3 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 423d4ae2ec7..90e0b98398c 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1303,6 +1303,19 @@ bool Creature::CanResetTalents(Player* player) const
&& player->GetClass() == GetCreatureTemplate()->trainer_class;
}
+uint32 Creature::GetLootId() const
+{
+ if (m_lootId)
+ return *m_lootId;
+
+ return GetCreatureTemplate()->lootid;
+}
+
+void Creature::SetLootId(Optional<uint32> lootId)
+{
+ m_lootId = lootId;
+}
+
void Creature::SetTappedBy(Unit const* unit, bool withGroup)
{
// set the player whose group should receive the right
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index f71a6e07e81..a2354945950 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -231,6 +231,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
bool CanHaveLoot() const { return !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_NO_LOOT); }
void SetCanHaveLoot(bool canHaveLoot) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_NO_LOOT, !canHaveLoot); }
+ uint32 GetLootId() const;
+ void SetLootId(Optional<uint32> lootId);
std::unique_ptr<Loot> m_loot;
std::unordered_map<ObjectGuid, std::unique_ptr<Loot>> m_personalLoot;
void StartPickPocketRefillTimer();
@@ -459,6 +461,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
std::array<std::string_view, 3> m_stringIds;
Optional<std::string> m_scriptStringId;
+ Optional<uint32> m_lootId;
uint16 m_LootMode; // Bitmask (default: LOOT_MODE_DEFAULT) that determines what loot will be lootable
bool IsInvisibleDueToDespawn(WorldObject const* seer) const override;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 21fe8c16be7..bb31ad0fff6 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10686,7 +10686,7 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
{
if (dungeonEncounter)
{
- creature->m_personalLoot = GenerateDungeonEncounterPersonalLoot(dungeonEncounter->ID, creature->GetCreatureTemplate()->lootid,
+ creature->m_personalLoot = GenerateDungeonEncounterPersonalLoot(dungeonEncounter->ID, creature->GetLootId(),
LootTemplates_Creature, LOOT_CORPSE, creature, creature->GetCreatureTemplate()->mingold, creature->GetCreatureTemplate()->maxgold,
creature->GetLootMode(), creature->GetMap()->GetDifficultyLootItemContext(), tappers);
}
@@ -10697,7 +10697,7 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
Loot* loot = new Loot(creature->GetMap(), creature->GetGUID(), LOOT_CORPSE, dungeonEncounter ? group : nullptr);
- if (uint32 lootid = creature->GetCreatureTemplate()->lootid)
+ if (uint32 lootid = creature->GetLootId())
loot->FillLoot(lootid, LootTemplates_Creature, looter, dungeonEncounter != nullptr, false, creature->GetLootMode(), creature->GetMap()->GetDifficultyLootItemContext());
if (creature->GetLootMode() > 0)
@@ -10723,7 +10723,7 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
if (dungeonEncounter)
loot->SetDungeonEncounterId(dungeonEncounter->ID);
- if (uint32 lootid = creature->GetCreatureTemplate()->lootid)
+ if (uint32 lootid = creature->GetLootId())
loot->FillLoot(lootid, LootTemplates_Creature, tapper, true, false, creature->GetLootMode(), creature->GetMap()->GetDifficultyLootItemContext());
if (creature->GetLootMode() > 0)