Update aoe_loot.cpp

This commit is contained in:
TerraByte
2025-05-05 16:41:38 -05:00
committed by GitHub
parent b4fb75dbeb
commit 014bb8f2a7

View File

@@ -227,8 +227,7 @@ bool AoeLootCommandScript::ProcessLootSlot(Player* player, ObjectGuid lguid, uin
Corpse* bones = ObjectAccessor::GetCorpse(*player, lguid); Corpse* bones = ObjectAccessor::GetCorpse(*player, lguid);
if (!bones) if (!bones)
{ {
player->SendLootRelease(lguid); player->SendLootRelease(lguid);
ProcessLootRelease(lguid, player, loot);
return false; return false;
} }
loot = &bones->loot; loot = &bones->loot;
@@ -255,28 +254,6 @@ bool AoeLootCommandScript::ProcessLootSlot(Player* player, ObjectGuid lguid, uin
sScriptMgr->OnPlayerAfterCreatureLoot(player); sScriptMgr->OnPlayerAfterCreatureLoot(player);
if (!loot) if (!loot)
return false; return false;
// Check if the item is already looted
QuestItem* qitem = nullptr;
QuestItem* ffaitem = nullptr;
QuestItem* conditem = nullptr;
LootItem* item = loot->LootItemInSlot(lootSlot, player, &qitem, &ffaitem, &conditem);
if (!item)
{
if (sConfigMgr->GetOption<bool>("AOELoot.Debug", false))
LOG_DEBUG("module.aoe_loot", "No valid loot item found in slot {}", lootSlot);
return false;
}
// Skip items being rolled on
if (item->is_blocked)
return false;
// Skip already looted items
if (item->is_looted)
return false;
InventoryResult msg; InventoryResult msg;
LootItem* lootItem = player->StoreLootItem(lootSlot, loot, msg); LootItem* lootItem = player->StoreLootItem(lootSlot, loot, msg);
@@ -297,6 +274,8 @@ bool AoeLootCommandScript::ProcessLootSlot(Player* player, ObjectGuid lguid, uin
return true; return true;
} }
bool AoeLootCommandScript::HandleStartAoeLootCommand(ChatHandler* handler, Optional<std::string> /*args*/) bool AoeLootCommandScript::HandleStartAoeLootCommand(ChatHandler* handler, Optional<std::string> /*args*/)
{ {
if (!sConfigMgr->GetOption<bool>("AOELoot.Enable", true)) if (!sConfigMgr->GetOption<bool>("AOELoot.Enable", true))
@@ -386,10 +365,113 @@ bool AoeLootCommandScript::HandleStartAoeLootCommand(ChatHandler* handler, Optio
{ {
ObjectGuid lguid = creature->GetGUID(); ObjectGuid lguid = creature->GetGUID();
Loot* loot = &creature->loot; Loot* loot = &creature->loot;
if (validCorpses.size() <= 1)
{
break;
}
if (!loot) if (!loot)
continue; continue;
player->SetLootGUID(lguid); player->SetLootGUID(lguid);
/*
// Add processing for PlayerQuestItems (player-specific quest items)
QuestItemMap const& playerQuestItems = loot->GetPlayerQuestItems();
if (!playerQuestItems.empty())
{
QuestItemMap::const_iterator pqItr = playerQuestItems.find(player->GetGUID());
if (pqItr != playerQuestItems.end())
{
QuestItemList* pql = pqItr->second;
if (pql)
{
for (QuestItemList::const_iterator iter = pql->begin(); iter != pql->end(); ++iter)
{
ProcessLootSlot(player, lguid, iter->index);
if (debugMode)
LOG_DEBUG("module.aoe_loot", "AOE Loot: looted player quest item in slot {}", iter->index);
}
}
}
}
// Add processing for PlayerFFAItems (Free-For-All quest items)
QuestItemMap const& playerFFAItems = loot->GetPlayerFFAItems();
if (!playerFFAItems.empty())
{
QuestItemMap::const_iterator pqItr = playerFFAItems.find(player->GetGUID());
if (pqItr != playerFFAItems.end())
{
QuestItemList* pql = pqItr->second;
if (pql)
{
for (QuestItemList::const_iterator iter = pql->begin(); iter != pql->end(); ++iter)
{
ProcessLootSlot(player, lguid, iter->index);
if (debugMode)
LOG_DEBUG("module.aoe_loot", "AOE Loot: looted player FFA item in slot {}", iter->index);
}
}
}
}
// Add processing for PlayerNonQuestNonFFAConditionalItems
QuestItemMap const& playerNonQuestNonFFAConditionalItems = loot->GetPlayerNonQuestNonFFAConditionalItems();
if (!playerNonQuestNonFFAConditionalItems.empty())
{
QuestItemMap::const_iterator pqItr = playerNonQuestNonFFAConditionalItems.find(player->GetGUID());
if (pqItr != playerNonQuestNonFFAConditionalItems.end())
{
QuestItemList* pql = pqItr->second;
if (pql)
{
for (QuestItemList::const_iterator iter = pql->begin(); iter != pql->end(); ++iter)
{
ProcessLootSlot(player, lguid, iter->index);
if (debugMode)
LOG_DEBUG("module.aoe_loot", "AOE Loot: looted conditional item in slot {}", iter->index);
}
}
}
}
*/
// Process quest items
QuestItemMap const& playerNonQuestNonFFAConditionalItems = loot->GetPlayerNonQuestNonFFAConditionalItems();
if (!playerNonQuestNonFFAConditionalItems.empty())
{
for (uint8 i = 0; i < playerNonQuestNonFFAConditionalItems.size(); ++i)
{
uint8 lootSlot = playerNonQuestNonFFAConditionalItems.size() + i;
ProcessLootSlot(player, lguid, lootSlot);
if (debugMode)
LOG_DEBUG("module.aoe_loot", "AOE Loot: looted quest item in slot {}", lootSlot);
}
}
// Process quest items
QuestItemMap const& playerFFAItems = loot->GetPlayerFFAItems();
if (!playerFFAItems.empty())
{
for (uint8 i = 0; i < playerFFAItems.size(); ++i)
{
uint8 lootSlot = playerFFAItems.size() + i;
ProcessLootSlot(player, lguid, lootSlot);
if (debugMode)
LOG_DEBUG("module.aoe_loot", "AOE Loot: looted quest item in slot {}", lootSlot);
}
}
// Process quest items
QuestItemMap const& playerQuestItems = loot->GetPlayerQuestItems();
if (!playerQuestItems.empty())
{
for (uint8 i = 0; i < playerQuestItems.size(); ++i)
{
uint8 lootSlot = playerQuestItems.size() + i;
ProcessLootSlot(player, lguid, lootSlot);
if (debugMode)
LOG_DEBUG("module.aoe_loot", "AOE Loot: looted quest item in slot {}", lootSlot);
}
}
// Process quest items // Process quest items
if (!loot->quest_items.empty()) if (!loot->quest_items.empty())
@@ -399,7 +481,19 @@ bool AoeLootCommandScript::HandleStartAoeLootCommand(ChatHandler* handler, Optio
uint8 lootSlot = loot->items.size() + i; uint8 lootSlot = loot->items.size() + i;
ProcessLootSlot(player, lguid, lootSlot); ProcessLootSlot(player, lguid, lootSlot);
if (debugMode) if (debugMode)
LOG_DEBUG("module.aoe_loot", "AOE Loot: looted quest item in slot {}", lootSlot); LOG_DEBUG("module.aoe_loot", "AOE Loot: looted quest item in slot {}", lootSlot);
}
}
// Process quest items
if (!loot->quest_items.empty())
{
for (uint8 i = 0; i < loot->quest_items.size(); ++i)
{
uint8 lootSlot = loot->items.size() + i;
ProcessLootSlot(player, lguid, lootSlot);
if (debugMode)
LOG_DEBUG("module.aoe_loot", "AOE Loot: looted quest item in slot {}", lootSlot);
} }
} }