mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-17 18:55:41 +00:00
Rogue bots can unlock items in their bags and in the trade window (#1055)
This commit is contained in:
84
src/strategy/actions/TradeStatusExtendedAction.cpp
Normal file
84
src/strategy/actions/TradeStatusExtendedAction.cpp
Normal file
@@ -0,0 +1,84 @@
|
||||
#include "TradeStatusExtendedAction.h"
|
||||
#include "Event.h"
|
||||
#include "Player.h"
|
||||
#include "PlayerbotAI.h"
|
||||
#include "WorldPacket.h"
|
||||
#include "TradeData.h"
|
||||
|
||||
bool TradeStatusExtendedAction::Execute(Event event)
|
||||
{
|
||||
Player* trader = bot->GetTrader();
|
||||
if (!trader)
|
||||
return false;
|
||||
|
||||
TradeData* tradeData = trader->GetTradeData();
|
||||
if (!tradeData)
|
||||
return false;
|
||||
|
||||
WorldPacket p(event.getPacket());
|
||||
p.rpos(0);
|
||||
|
||||
uint8 isTraderData;
|
||||
uint32 unknown1, slotCount1, slotCount2, tradeGold, spellCast;
|
||||
p >> isTraderData;
|
||||
p >> unknown1;
|
||||
p >> slotCount1;
|
||||
p >> slotCount2;
|
||||
p >> tradeGold;
|
||||
p >> spellCast;
|
||||
|
||||
for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i)
|
||||
{
|
||||
uint8 tradeSlot;
|
||||
p >> tradeSlot;
|
||||
|
||||
if (tradeSlot >= TRADE_SLOT_COUNT)
|
||||
break; // End of packet
|
||||
|
||||
uint32 itemId, displayId, count, wrapped, lockId;
|
||||
uint64 giftCreator, creator;
|
||||
uint32 permEnchant, gem1, gem2, gem3;
|
||||
uint32 spellCharges, suffixFactor, randomProp, maxDurability, durability;
|
||||
|
||||
p >> itemId;
|
||||
p >> displayId;
|
||||
p >> count;
|
||||
p >> wrapped;
|
||||
p >> giftCreator;
|
||||
p >> permEnchant;
|
||||
p >> gem1;
|
||||
p >> gem2;
|
||||
p >> gem3;
|
||||
p >> creator;
|
||||
p >> spellCharges;
|
||||
p >> suffixFactor;
|
||||
p >> randomProp;
|
||||
p >> lockId;
|
||||
p >> maxDurability;
|
||||
p >> durability;
|
||||
|
||||
// Check for locked items in "Do Not Trade" slot
|
||||
if (tradeSlot == TRADE_SLOT_NONTRADED && lockId > 0)
|
||||
{
|
||||
// Get the actual item reference from TradeData
|
||||
Item* lockbox = tradeData->GetItem(TRADE_SLOT_NONTRADED);
|
||||
if (!lockbox)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (bot->getClass() == CLASS_ROGUE && bot->HasSpell(1804) && lockbox->IsLocked()) // Pick Lock spell
|
||||
{
|
||||
// botAI->CastSpell(1804, bot, lockbox); // Attempt to cast Pick Lock on the lockbox
|
||||
botAI->DoSpecificAction("unlock traded item");
|
||||
botAI->SetNextCheckDelay(4000); // Delay before accepting trade
|
||||
}
|
||||
else
|
||||
{
|
||||
botAI->TellMaster("I can't unlock this item.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user