/* * Copyright (C) 2016+ AzerothCore , 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("death count")->Set(0); return true; } botAI->TellError("Cannot find any npc to repair at"); return false; }