diff options
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index af66302df7f..c213e78e01f 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1547,6 +1547,7 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype) return; case GAMEOBJECT_TYPE_CHEST: + { if (Battleground* bg = player->GetBattleground()) { if (!bg->CanActivateGO(gameObjTarget->GetEntry(), bg->GetPlayerTeam(player->GetGUID()))) @@ -1556,6 +1557,7 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype) } } + Loot* loot = nullptr; if (gameObjTarget->getLootState() == GO_READY) { if (uint32 lootId = gameObjTarget->GetGOInfo()->GetLootId()) @@ -1565,7 +1567,7 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype) Group const* group = player->GetGroup(); bool groupRules = group && gameObjTarget->GetGOInfo()->chest.usegrouplootrules; - Loot* loot = new Loot(gameObjTarget->GetMap(), guid, loottype, groupRules ? group : nullptr); + loot = new Loot(gameObjTarget->GetMap(), guid, loottype, groupRules ? group : nullptr); gameObjTarget->m_loot.reset(loot); loot->FillLoot(lootId, LootTemplates_Gameobject, player, !groupRules, false, gameObjTarget->GetLootMode(), gameObjTarget->GetMap()->GetDifficultyLootItemContext()); @@ -1588,16 +1590,18 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype) gameObjTarget->SetLootState(GO_ACTIVATED, player); } + else + loot = gameObjTarget->GetLootForPlayer(player); - // Don't return, let loots been taken + // Send loot + if (loot) + player->SendLoot(*loot); break; + } default: break; } } - - // Send loot - player->SendLoot(guid, loottype); } void Spell::EffectOpenLock() @@ -2281,7 +2285,7 @@ void Spell::EffectPickPocket() return; } - player->SendLoot(unitTarget->GetGUID(), LOOT_PICKPOCKETING); + player->SendLoot(*creature->m_loot); } void Spell::EffectAddFarsight() @@ -3481,7 +3485,7 @@ void Spell::EffectDisEnchant() caster->UpdateCraftSkill(m_spellInfo); itemTarget->m_loot.reset(new Loot(caster->GetMap(), itemTarget->GetGUID(), LOOT_DISENCHANTING, nullptr)); itemTarget->m_loot->FillLoot(ASSERT_NOTNULL(itemTarget->GetDisenchantLoot(caster))->ID, LootTemplates_Disenchant, caster, true); - caster->SendLoot(itemTarget->GetGUID(), LOOT_DISENCHANTING); + caster->SendLoot(*itemTarget->m_loot); } // item will be removed at disenchanting end @@ -3843,7 +3847,7 @@ void Spell::EffectSkinning() creature->m_loot.reset(new Loot(creature->GetMap(), creature->GetGUID(), LOOT_SKINNING, nullptr)); creature->m_loot->FillLoot(creature->GetCreatureTemplate()->SkinLootId, LootTemplates_Skinning, player, true); creature->SetLootRecipient(player, false); - player->SendLoot(creature->GetGUID(), LOOT_SKINNING); + player->SendLoot(*creature->m_loot); if (skill == SKILL_SKINNING) { @@ -4544,7 +4548,7 @@ void Spell::EffectProspecting() itemTarget->m_loot.reset(new Loot(player->GetMap(), itemTarget->GetGUID(), LOOT_PROSPECTING, nullptr)); itemTarget->m_loot->FillLoot(itemTarget->GetEntry(), LootTemplates_Prospecting, player, true); - player->SendLoot(itemTarget->GetGUID(), LOOT_PROSPECTING); + player->SendLoot(*itemTarget->m_loot); } void Spell::EffectMilling() @@ -4571,7 +4575,7 @@ void Spell::EffectMilling() itemTarget->m_loot.reset(new Loot(player->GetMap(), itemTarget->GetGUID(), LOOT_MILLING, nullptr)); itemTarget->m_loot->FillLoot(itemTarget->GetEntry(), LootTemplates_Milling, player, true); - player->SendLoot(itemTarget->GetGUID(), LOOT_MILLING); + player->SendLoot(*itemTarget->m_loot); } void Spell::EffectSkill() |
