From f365b79e96628b48ec5c193f7db2577fa26ba959 Mon Sep 17 00:00:00 2001 From: Type1Error <125221903+Type1Error@users.noreply.github.com> Date: Thu, 8 May 2025 21:37:33 +0000 Subject: [PATCH] fix(#1276) Prevent bots from equipping relics intended for other classes (#1277) Fixes #1276 This change adds logic to detect if an item is a relic and ensures it can only be equipped by bots of the corresponding class: - Idols are restricted to druids - Librams are restricted to paladins - Sigils are restricted to death knights - Totems are restricted to shamans Fixes a bug where bots would attempt to equip relics regardless of class restrictions. Additionally, this commit resolves two unrelated build warnings found in the same file. --- src/strategy/actions/EquipAction.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/strategy/actions/EquipAction.cpp b/src/strategy/actions/EquipAction.cpp index 3b4c3880..dccc2a9d 100644 --- a/src/strategy/actions/EquipAction.cpp +++ b/src/strategy/actions/EquipAction.cpp @@ -67,6 +67,19 @@ void EquipAction::EquipItem(Item* item) uint32 itemId = itemProto->ItemId; uint8 invType = itemProto->InventoryType; + // Ensure only the correct classes attempt to equip relics + if (itemProto->SubClass == ITEM_SUBCLASS_ARMOR_IDOL && bot->getClass() != CLASS_DRUID) + return; + + if (itemProto->SubClass == ITEM_SUBCLASS_ARMOR_SIGIL && bot->getClass() != CLASS_DEATH_KNIGHT) + return; + + if (itemProto->SubClass == ITEM_SUBCLASS_ARMOR_LIBRAM && bot->getClass() != CLASS_PALADIN) + return; + + if (itemProto->SubClass == ITEM_SUBCLASS_ARMOR_TOTEM && bot->getClass() != CLASS_SHAMAN) + return; + // Handle ammunition separately if (invType == INVTYPE_AMMO) { @@ -82,7 +95,6 @@ void EquipAction::EquipItem(Item* item) if (itemProto->Class == ITEM_CLASS_CONTAINER) { // Attempt to equip as a bag - Bag* pBag = reinterpret_cast(item); uint8 newBagSlot = GetSmallestBagSlot(); if (newBagSlot > 0) { @@ -331,7 +343,7 @@ bool EquipUpgradesAction::Execute(Event event) return true; } -bool EquipUpgradeAction::Execute(Event event) +bool EquipUpgradeAction::Execute(Event /*event*/) { ListItemsVisitor visitor; IterateItems(&visitor, ITERATE_ITEMS_IN_BAGS);