aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp64
1 files changed, 16 insertions, 48 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 83d32dbd701..f58156d97c9 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10883,9 +10883,9 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
Creature* creature = victim->ToCreature();
- bool isRewardAllowed = attacker != victim;
+ bool isRewardAllowed = true;
if (creature)
- isRewardAllowed = !creature->GetTapList().empty();
+ isRewardAllowed = creature->IsDamageEnoughForLootingAndReward() && !creature->GetTapList().empty();
std::vector<Player*> tappers;
if (isRewardAllowed && creature)
@@ -10936,57 +10936,25 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
// Generate loot before updating looter
if (creature)
{
- DungeonEncounterEntry const* dungeonEncounter = nullptr;
- if (InstanceScript const* instance = creature->GetInstanceScript())
- dungeonEncounter = instance->GetBossDungeonEncounter(creature);
+ Group* group = !groups.empty() ? *groups.begin() : nullptr;
+ Player* looter = group ? ASSERT_NOTNULL(ObjectAccessor::GetPlayer(*creature, group->GetLooterGuid())) : tappers[0];
- if (creature->GetMap()->IsDungeon())
- {
- Group* group = !groups.empty() ? *groups.begin() : nullptr;
- Player* looter = group ? ASSERT_NOTNULL(ObjectAccessor::GetPlayer(*creature, group->GetLooterGuid())) : tappers[0];
-
- Loot* loot = new Loot(creature->GetMap(), creature->GetGUID(), LOOT_CORPSE, dungeonEncounter ? group : nullptr);
-
- if (dungeonEncounter)
- loot->SetDungeonEncounterId(dungeonEncounter->ID);
-
- if (uint32 lootid = creature->GetLootId())
- loot->FillLoot(lootid, LootTemplates_Creature, looter, dungeonEncounter != nullptr, false, creature->GetLootMode(), ItemBonusMgr::GetContextForPlayer(creature->GetMap()->GetMapDifficulty(), looter));
+ Loot* loot = new Loot(creature->GetMap(), creature->GetGUID(), LOOT_CORPSE, group);
+ if (uint32 lootid = creature->GetLootId())
+ loot->FillLoot(lootid, LootTemplates_Creature, looter, false, false, creature->GetLootMode(), ItemBonusMgr::GetContextForPlayer(creature->GetMap()->GetMapDifficulty(), looter));
- if (creature->GetLootMode() > 0)
- loot->generateMoneyLoot(creature->GetCreatureDifficulty()->GoldMin, creature->GetCreatureDifficulty()->GoldMax);
+ if (creature->GetLootMode() > 0)
+ loot->generateMoneyLoot(creature->GetCreatureDifficulty()->GoldMin, creature->GetCreatureDifficulty()->GoldMax);
- if (group)
- loot->NotifyLootList(creature->GetMap());
+ if (group)
+ loot->NotifyLootList(creature->GetMap());
- if (dungeonEncounter || groups.empty()) // Classic Only - Boss encounter loot is no longer personal
- creature->m_loot.reset(loot);
- else
- creature->m_personalLoot[looter->GetGUID()].reset(loot); // trash mob loot is personal, generated with round robin rules
+ creature->m_loot.reset(loot);
- // Update round robin looter only if the creature had loot
- if (!loot->isLooted())
- for (Group* tapperGroup : groups)
- tapperGroup->UpdateLooterGuid(creature);
- }
- else
- {
- for (Player* tapper : tappers)
- {
- Loot* loot = new Loot(creature->GetMap(), creature->GetGUID(), LOOT_CORPSE, nullptr);
-
- if (dungeonEncounter)
- loot->SetDungeonEncounterId(dungeonEncounter->ID);
-
- if (uint32 lootid = creature->GetLootId())
- loot->FillLoot(lootid, LootTemplates_Creature, tapper, true, false, creature->GetLootMode(), ItemBonusMgr::GetContextForPlayer(creature->GetMap()->GetMapDifficulty(), tapper));
-
- if (creature->GetLootMode() > 0)
- loot->generateMoneyLoot(creature->GetCreatureDifficulty()->GoldMin, creature->GetCreatureDifficulty()->GoldMax);
-
- creature->m_personalLoot[tapper->GetGUID()].reset(loot);
- }
- }
+ // Update round robin looter only if the creature had loot
+ if (!loot->isLooted())
+ for (Group* tapperGroup : groups)
+ tapperGroup->UpdateLooterGuid(creature);
}
if (Vignettes::VignetteData const* vignette = victim->GetVignette())