diff options
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 6 |
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) |