diff --git a/conf/mod_autofish.conf.dist b/conf/mod_autofish.conf.dist index 6de5398..03a6d50 100644 --- a/conf/mod_autofish.conf.dist +++ b/conf/mod_autofish.conf.dist @@ -35,4 +35,8 @@ AutoFish.AutoLootDelayMs = 120 # Bag item required to activate autofish # Values: Item ID, if 0 then no item required -AutoFish.RequiredItemId = 0 \ No newline at end of file +AutoFish.RequiredItemId = 0 + +# Equipped item required to activate autofish +# Values: Item ID, if 0 then no item required +AutoFish.RequiredEquipId = 0 diff --git a/src/mod_autofish.cpp b/src/mod_autofish.cpp index a345dab..6384801 100644 --- a/src/mod_autofish.cpp +++ b/src/mod_autofish.cpp @@ -22,6 +22,7 @@ namespace uint32 sRecastSpell = 18248; uint32 sAutoLootDelayMs = 120; uint32 sRequiredItemId = 0; + uint32 sRequiredEquipId = 0; std::vector sBobberEntries; struct GuidHash { std::size_t operator()(ObjectGuid const& g) const noexcept { return std::hash()(g.GetRawValue()); } }; @@ -46,13 +47,26 @@ namespace return out; } + bool HasEquippedItem(Player* plr, uint32 entry) + { + if (!entry) return true; + for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot) + { + if (Item* it = plr->GetItemByPos(INVENTORY_SLOT_BAG_0, slot)) + if (it->GetEntry() == entry) + return true; + } + return false; + } + bool RequirementMet(Player* plr) { - if (!plr) + if (!plr) return false; + if (sRequiredItemId && !plr->HasItemCount(sRequiredItemId, 1, false)) return false; - if (sRequiredItemId == 0) - return true; - return plr->HasItemCount(sRequiredItemId, 1, false); + if (sRequiredEquipId && !HasEquippedItem(plr, sRequiredEquipId)) + return false; + return true; } void ScheduleRecast(Player* plr) @@ -168,6 +182,7 @@ public: sRecastSpell = sConfigMgr->GetOption("AutoFish.RecastSpell", 18248u); sAutoLootDelayMs = sConfigMgr->GetOption("AutoFish.AutoLootDelayMs", 120u); sRequiredItemId = sConfigMgr->GetOption("AutoFish.RequiredItemId", 0u); + sRequiredEquipId = sConfigMgr->GetOption("AutoFish.RequiredEquipId", 0u); sBobberEntries = ParseEntryList(sConfigMgr->GetOption("AutoFish.BobberEntries", "35591")); }