mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-13 17:09:08 +00:00
92 lines
2.8 KiB
C++
92 lines
2.8 KiB
C++
/*
|
|
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
|
*/
|
|
|
|
#include "LootStrategyAction.h"
|
|
#include "ChatHelper.h"
|
|
#include "Event.h"
|
|
#include "LootAction.h"
|
|
#include "LootObjectStack.h"
|
|
#include "LootStrategyValue.h"
|
|
#include "Playerbots.h"
|
|
|
|
bool LootStrategyAction::Execute(Event event)
|
|
{
|
|
std::string const strategy = event.getParam();
|
|
|
|
LootObjectStack* lootItems = AI_VALUE(LootObjectStack*, "available loot");
|
|
std::set<uint32>& alwaysLootItems = AI_VALUE(std::set<uint32>&, "always loot list");
|
|
Value<LootStrategy*>* lootStrategy = context->GetValue<LootStrategy*>("loot strategy");
|
|
|
|
if (strategy == "?")
|
|
{
|
|
{
|
|
std::ostringstream out;
|
|
out << "Loot strategy: ";
|
|
out << lootStrategy->Get()->GetName();
|
|
botAI->TellMaster(out);
|
|
}
|
|
|
|
{
|
|
std::ostringstream out;
|
|
out << "Always loot items: ";
|
|
|
|
for (uint32 itemId : alwaysLootItems)
|
|
{
|
|
ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId);
|
|
if (!proto)
|
|
continue;
|
|
|
|
out << chat->FormatItem(proto);
|
|
}
|
|
|
|
botAI->TellMaster(out);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ItemIds items = chat->parseItems(strategy);
|
|
|
|
if (items.size() == 0)
|
|
{
|
|
lootStrategy->Set(LootStrategyValue::instance(strategy));
|
|
|
|
std::ostringstream out;
|
|
out << "Loot strategy set to " << lootStrategy->Get()->GetName();
|
|
botAI->TellMaster(out);
|
|
return true;
|
|
}
|
|
|
|
bool remove = strategy.size() > 1 && strategy.substr(0, 1) == "-";
|
|
bool query = strategy.size() > 1 && strategy.substr(0, 1) == "?";
|
|
for (uint32 itemid : items)
|
|
{
|
|
if (query)
|
|
{
|
|
if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemid))
|
|
{
|
|
std::ostringstream out;
|
|
out << (StoreLootAction::IsLootAllowed(itemid, botAI) ? "|cFF000000Will loot " : "|c00FF0000Won't loot ") << ChatHelper::FormatItem(proto);
|
|
botAI->TellMaster(out.str());
|
|
}
|
|
}
|
|
else if (remove)
|
|
{
|
|
std::set<uint32>::iterator j = alwaysLootItems.find(itemid);
|
|
if (j != alwaysLootItems.end())
|
|
alwaysLootItems.erase(j);
|
|
|
|
botAI->TellMaster("Item(s) removed from always loot list");
|
|
}
|
|
else
|
|
{
|
|
alwaysLootItems.insert(itemid);
|
|
botAI->TellMaster("Item(s) added to always loot list");
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|