Files
mod-playerbots/src/strategy/actions/AddLootAction.cpp
avirar 0c8785d8d1 Resolved issues with herb gathering (#926)
* Check game objects loot tables and determine if loot is valid

* Removed LOS checks since they already occur and removed enemy near node check

* Dismount if mounted, decresed interaction distance, added looting delay

* Decreased interaction distance

* oops, wrong file

* Check game objects loot tables and determine if loot is valid
2025-01-30 00:29:17 +01:00

62 lines
1.6 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 "AddLootAction.h"
#include "CellImpl.h"
#include "Event.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "LootObjectStack.h"
#include "Playerbots.h"
#include "ServerFacade.h"
bool AddLootAction::Execute(Event event)
{
ObjectGuid guid = event.getObject();
if (!guid)
return false;
return AI_VALUE(LootObjectStack*, "available loot")->Add(guid);
}
bool AddAllLootAction::Execute(Event event)
{
bool added = false;
GuidVector gos = context->GetValue<GuidVector>("nearest game objects")->Get();
for (GuidVector::iterator i = gos.begin(); i != gos.end(); i++)
added |= AddLoot(*i);
GuidVector corpses = context->GetValue<GuidVector>("nearest corpses")->Get();
for (GuidVector::iterator i = corpses.begin(); i != corpses.end(); i++)
added |= AddLoot(*i);
return added;
}
bool AddLootAction::isUseful() { return true; }
bool AddAllLootAction::isUseful() { return true; }
bool AddAllLootAction::AddLoot(ObjectGuid guid) { return AI_VALUE(LootObjectStack*, "available loot")->Add(guid); }
bool AddGatheringLootAction::AddLoot(ObjectGuid guid)
{
LootObject loot(bot, guid);
WorldObject* wo = loot.GetWorldObject(bot);
if (loot.IsEmpty() || !wo)
return false;
if (loot.skillId == SKILL_NONE)
return false;
if (!loot.IsLootPossible(bot))
return false;
return AddAllLootAction::AddLoot(guid);
}