mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-16 02:10:28 +00:00
Big update.
This commit is contained in:
91
src/strategy/actions/LootStrategyAction.cpp
Normal file
91
src/strategy/actions/LootStrategyAction.cpp
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user