diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index c0b636149..279eb7805 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -1865,10 +1865,10 @@ bool ZoneDatabase::DisableRecipe(uint32 recipe_id) bool Client::CheckTradeskillLoreConflict(int32 recipe_id) { - const auto& recipe_entries = TradeskillRecipeEntriesRepository::GetWhere( + auto recipe_entries = TradeskillRecipeEntriesRepository::GetWhere( content_db, fmt::format( - "recipe_id = {} ORDER BY id ASC", + "recipe_id = {} ORDER BY componentcount DESC", recipe_id ) ); @@ -1876,21 +1876,28 @@ bool Client::CheckTradeskillLoreConflict(int32 recipe_id) return false; } - for (auto& e : recipe_entries) { - auto item_inst = database.GetItem(e.item_id); - if (item_inst) { - if (item_inst->LoreGroup == 0 || e.componentcount > 0 || e.iscontainer) { - continue; + for (auto& f : recipe_entries) { + for (auto &e: recipe_entries) { + if (f.componentcount > 0 && e.item_id == f.item_id && e.componentcount == 0) { + e.item_id = 0; } - if (CheckLoreConflict(item_inst)) { - EQ::SayLinkEngine linker; - linker.SetLinkType(EQ::saylink::SayLinkItemData); - linker.SetItemData(item_inst); - auto item_link = linker.GenerateLink(); - MessageString(Chat::Red, TRADESKILL_COMBINE_LORE, item_link.c_str()); - return true; + auto item_inst = database.GetItem(e.item_id); + if (item_inst) { + if (item_inst->LoreGroup >= 0 || e.componentcount > 0 || e.iscontainer) { + continue; + } + if (CheckLoreConflict(item_inst)) { + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemData); + linker.SetItemData(item_inst); + auto item_link = linker.GenerateLink(); + MessageString(Chat::Red, TRADESKILL_COMBINE_LORE, item_link.c_str()); + return true; + } } } } return false; -} \ No newline at end of file +} + +