Files
mod-playerbots/src/strategy/actions/RepairAllAction.cpp
2024-08-04 10:23:36 +08:00

62 lines
1.9 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 "RepairAllAction.h"
#include "ChatHelper.h"
#include "Event.h"
#include "Playerbots.h"
bool RepairAllAction::Execute(Event event)
{
GuidVector npcs = AI_VALUE(GuidVector, "nearest npcs");
for (ObjectGuid const guid : npcs)
{
Creature* unit = bot->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_REPAIR);
if (!unit)
continue;
if (bot->HasUnitState(UNIT_STATE_DIED))
bot->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
bot->SetFacingToObject(unit);
float discountMod = bot->GetReputationPriceDiscount(unit);
uint32 botMoney = bot->GetMoney();
if (botAI->HasCheat(BotCheatMask::gold))
{
bot->SetMoney(10000000);
}
// Repair weapons first.
uint32 totalCost = bot->DurabilityRepair(EQUIPMENT_SLOT_MAINHAND, true, discountMod, false);
totalCost += bot->DurabilityRepair(EQUIPMENT_SLOT_RANGED, true, discountMod, false);
totalCost += bot->DurabilityRepair(EQUIPMENT_SLOT_OFFHAND, true, discountMod, false);
totalCost += bot->DurabilityRepairAll(true, discountMod, false);
if (botAI->HasCheat(BotCheatMask::gold))
{
bot->SetMoney(botMoney);
}
if (totalCost > 0)
{
std::ostringstream out;
out << "Repair: " << chat->formatMoney(totalCost) << " (" << unit->GetName() << ")";
botAI->TellMasterNoFacing(out.str());
bot->PlayDistanceSound(1116);
}
context->GetValue<uint32>("death count")->Set(0);
return true;
}
botAI->TellError("Cannot find any npc to repair at");
return false;
}