From 8ea131c74366e53ff3e508e26a1090009e88f63f Mon Sep 17 00:00:00 2001 From: TerraByte Date: Fri, 23 May 2025 18:40:55 -0500 Subject: [PATCH] Update aoe_loot.cpp --- src/aoe_loot.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/src/aoe_loot.cpp b/src/aoe_loot.cpp index f8d4987..4f62cca 100644 --- a/src/aoe_loot.cpp +++ b/src/aoe_loot.cpp @@ -20,6 +20,8 @@ using namespace Acore::ChatCommands; using namespace WorldPackets; +std::map playerAoeLootEnabled; + bool AoeLootServer::CanPacketReceive(WorldSession* session, WorldPacket& packet) { if (packet.GetOpcode() == CMSG_LOOT) @@ -27,9 +29,18 @@ bool AoeLootServer::CanPacketReceive(WorldSession* session, WorldPacket& packet) Player* player = session->GetPlayer(); if (player) { + uint64 guid = player->GetGUID().GetRawValue(); + + // Check if player has explicitly disabled AOE loot + if (playerAoeLootEnabled.find(guid) != playerAoeLootEnabled.end() && + !playerAoeLootEnabled[guid]) + { + // Let normal looting proceed + return true; + } // Trigger AOE loot when a player attempts to loot a corpse ChatHandler handler(player->GetSession()); - handler.ParseCommands(".startaoeloot"); + handler.ParseCommands(".aoeloot startaoeloot"); } } return true; @@ -37,11 +48,45 @@ bool AoeLootServer::CanPacketReceive(WorldSession* session, WorldPacket& packet) ChatCommandTable AoeLootCommandScript::GetCommands() const { - static ChatCommandTable playerAoeLootCommandTable = + static ChatCommandTable aoeLootSubCommandTable = { - { "startaoeloot", HandleStartAoeLootCommand, SEC_PLAYER, Console::No } + { "startaoeloot", HandleStartAoeLootCommand, SEC_PLAYER, Console::No }, + { "on", HandleAoeLootOnCommand, SEC_PLAYER, Console::No }, + { "off", HandleAoeLootOffCommand, SEC_PLAYER, Console::No } }; - return playerAoeLootCommandTable; + + static ChatCommandTable aoeLootCommandTable = + { + { "aoeloot", nullptr, SEC_PLAYER, Console::No, aoeLootSubCommandTable } + }; + + return aoeLootCommandTable; +} + +bool AoeLootCommandScript::HandleAoeLootOnCommand(ChatHandler* handler, Optional /*args*/) +{ + Player* player = handler->GetSession()->GetPlayer(); + if (!player) + return true; + + uint64 guid = player->GetGUID().GetRawValue(); + playerAoeLootEnabled[guid] = true; + + handler->PSendSysMessage("AOE looting has been enabled for your character. Type: '.aoeloot off' to turn AoE Looting Off."); + return true; +} + +bool AoeLootCommandScript::HandleAoeLootOffCommand(ChatHandler* handler, Optional /*args*/) +{ + Player* player = handler->GetSession()->GetPlayer(); + if (!player) + return true; + + uint64 guid = player->GetGUID().GetRawValue(); + playerAoeLootEnabled[guid] = false; + + handler->PSendSysMessage("AOE looting has been disabled for your character. Type: '.aoeloot on' to turn AoE Looting on."); + return true; } void AoeLootCommandScript::ProcessLootRelease(ObjectGuid lguid, Player* player, Loot* loot)