Files
mod-playerbots/src/Ai/Base/Actions/OpenItemAction.cpp

42 lines
1.1 KiB
C++

#include "OpenItemAction.h"
#include "PlayerbotAI.h"
#include "ItemTemplate.h"
#include "WorldPacket.h"
#include "Player.h"
#include "ObjectMgr.h"
#include "LootObjectStack.h"
#include "AiObjectContext.h"
bool OpenItemAction::Execute(Event event)
{
bool foundOpenable = false;
Item* item = botAI->FindOpenableItem();
if (item)
{
uint8 bag = item->GetBagSlot(); // Retrieves the bag slot (0 for main inventory)
uint8 slot = item->GetSlot(); // Retrieves the actual slot inside the bag
OpenItem(item, bag, slot);
foundOpenable = true;
}
return foundOpenable;
}
void OpenItemAction::OpenItem(Item* item, uint8 bag, uint8 slot)
{
WorldPacket packet(CMSG_OPEN_ITEM);
packet << bag << slot;
bot->GetSession()->HandleOpenItemOpcode(packet);
// Store the item GUID as the loot target
LootObject lootObject;
lootObject.guid = item->GetGUID();
botAI->GetAiObjectContext()->GetValue<LootObject>("loot target")->Set(lootObject);
std::ostringstream out;
out << "Opened item: " << item->GetTemplate()->Name1;
botAI->TellMaster(out.str());
}