mirror of
https://github.com/azerothcore/mod-aoe-loot
synced 2025-11-29 21:38:16 +08:00
fix. Failed to skin looted creature (#37)
This commit is contained in:
@@ -17,19 +17,21 @@
|
|||||||
|
|
||||||
#include "aoe_loot.h"
|
#include "aoe_loot.h"
|
||||||
|
|
||||||
void OnCreatureLootAOE(Player* player)
|
void OnCreatureLootAOE(Player* player, ObjectGuid lootguid)
|
||||||
{
|
{
|
||||||
bool _enable = sConfigMgr->GetOption<bool>("AOELoot.Enable", true);
|
bool _enable = sConfigMgr->GetOption<bool>("AOELoot.Enable", true);
|
||||||
|
|
||||||
if (!_enable)
|
if (!_enable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!lootguid.IsCreature())
|
||||||
|
return;
|
||||||
|
|
||||||
float range = sConfigMgr->GetOption<float>("AOELoot.Range", 30.0);
|
float range = sConfigMgr->GetOption<float>("AOELoot.Range", 30.0);
|
||||||
|
|
||||||
std::list<Creature*> deadCreatures;
|
std::list<Creature*> deadCreatures;
|
||||||
uint32 gold = 0;
|
uint32 gold = 0;
|
||||||
player->GetDeadCreatureListInGrid(deadCreatures, range);
|
player->GetDeadCreatureListInGrid(deadCreatures, range);
|
||||||
ObjectGuid lootGuid = player->GetLootGUID();
|
|
||||||
|
|
||||||
for (auto& _creature : deadCreatures)
|
for (auto& _creature : deadCreatures)
|
||||||
{
|
{
|
||||||
@@ -43,7 +45,7 @@ void OnCreatureLootAOE(Player* player)
|
|||||||
InventoryResult msg;
|
InventoryResult msg;
|
||||||
LootItem* lootItem = player->StoreLootItem(lootSlot, loot, msg);
|
LootItem* lootItem = player->StoreLootItem(lootSlot, loot, msg);
|
||||||
|
|
||||||
if (msg != EQUIP_ERR_OK && lootGuid.IsItem() && loot->loot_type != LOOT_CORPSE)
|
if (msg != EQUIP_ERR_OK && lootguid.IsItem() && loot->loot_type != LOOT_CORPSE)
|
||||||
{
|
{
|
||||||
lootItem->is_looted = true;
|
lootItem->is_looted = true;
|
||||||
loot->NotifyItemRemoved(lootItem->itemIndex);
|
loot->NotifyItemRemoved(lootItem->itemIndex);
|
||||||
@@ -53,12 +55,14 @@ void OnCreatureLootAOE(Player* player)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player->SendLootRelease(lootGuid);
|
player->SendLootRelease(player->GetLootGUID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loot->isLooted())
|
if (loot->isLooted())
|
||||||
{
|
{
|
||||||
|
player->GetSession()->DoLootRelease(lootguid);
|
||||||
|
|
||||||
// skip pickpocketing loot for speed, skinning timer reduction is no-op in fact
|
// skip pickpocketing loot for speed, skinning timer reduction is no-op in fact
|
||||||
if (!_creature->IsAlive())
|
if (!_creature->IsAlive())
|
||||||
_creature->AllLootRemovedFromCorpse();
|
_creature->AllLootRemovedFromCorpse();
|
||||||
@@ -66,19 +70,6 @@ void OnCreatureLootAOE(Player* player)
|
|||||||
_creature->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
|
_creature->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
|
||||||
loot->clear();
|
loot->clear();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// if the round robin player release, reset it.
|
|
||||||
if (player->GetGUID() == loot->roundRobinPlayer)
|
|
||||||
{
|
|
||||||
loot->roundRobinPlayer.Clear();
|
|
||||||
|
|
||||||
if (Group* group = player->GetGroup())
|
|
||||||
group->SendLooter(_creature, nullptr);
|
|
||||||
}
|
|
||||||
// force dynflag update to update looter and lootable info
|
|
||||||
_creature->ForceValuesUpdateAtIndex(UNIT_DYNAMIC_FLAGS);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->GetGroup())
|
if (player->GetGroup())
|
||||||
@@ -134,14 +125,14 @@ bool AoeLootPlayer::CanSendErrorAlreadyLooted(Player* /*player*/)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AoeLootPlayer::OnAfterCreatureLoot(Player* player)
|
void AoeLootPlayer::OnLootItem(Player* player, Item* /*item*/, uint32 /*count*/, ObjectGuid lootguid)
|
||||||
{
|
{
|
||||||
OnCreatureLootAOE(player);
|
OnCreatureLootAOE(player, lootguid);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AoeLootPlayer::OnBeforeLootMoney(Player* player, Loot*)
|
void AoeLootPlayer::OnBeforeLootMoney(Player* player, Loot* /*loot*/)
|
||||||
{
|
{
|
||||||
OnCreatureLootAOE(player);
|
OnCreatureLootAOE(player, player->GetLootGUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ enum AoeLootString
|
|||||||
AOE_ITEM_IN_THE_MAIL
|
AOE_ITEM_IN_THE_MAIL
|
||||||
};
|
};
|
||||||
|
|
||||||
void OnCreatureLootAOE(Player* player);
|
void OnCreatureLootAOE(Player* player, ObjectGuid lootguid);
|
||||||
|
|
||||||
class AoeLootPlayer : public PlayerScript
|
class AoeLootPlayer : public PlayerScript
|
||||||
{
|
{
|
||||||
@@ -39,7 +39,7 @@ public:
|
|||||||
|
|
||||||
void OnLogin(Player* player) override;
|
void OnLogin(Player* player) override;
|
||||||
bool CanSendErrorAlreadyLooted(Player* /*player*/) override;
|
bool CanSendErrorAlreadyLooted(Player* /*player*/) override;
|
||||||
void OnAfterCreatureLoot(Player* player) override;
|
void OnLootItem(Player* player, Item* /*item*/, uint32 /*count*/, ObjectGuid lootguid) override;
|
||||||
void OnBeforeLootMoney(Player* player, Loot* /*loot*/) override;
|
void OnBeforeLootMoney(Player* player, Loot* /*loot*/) override;
|
||||||
void OnPlayerCompleteQuest(Player* player, Quest const* quest) override;
|
void OnPlayerCompleteQuest(Player* player, Quest const* quest) override;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user