From 2b9eef87e4812890ec7875c581ce9e5b67644abc Mon Sep 17 00:00:00 2001 From: click Date: Tue, 25 May 2010 16:15:22 +0200 Subject: Slap auctioneers in the face telling them to search for items with partial names or suffixes - patch by MrSmite Will require more testing, but base functionality is there. Fixes issue #1510. Closes issue #1534. + Skip some excess (unused) packetdata sent from client during AH-usage (click) --HG-- branch : trunk --- src/game/AuctionHouseMgr.cpp | 78 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 60 insertions(+), 18 deletions(-) (limited to 'src/game/AuctionHouseMgr.cpp') diff --git a/src/game/AuctionHouseMgr.cpp b/src/game/AuctionHouseMgr.cpp index cac9cf9940a..94bb8180953 100644 --- a/src/game/AuctionHouseMgr.cpp +++ b/src/game/AuctionHouseMgr.cpp @@ -611,24 +611,66 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPacket& data, Player* player if (usable != 0x00 && player->CanUseItem(item) != EQUIP_ERR_OK) continue; - std::string name = proto->Name1; - if (name.empty()) - continue; - - // local name - if (loc_idx >= 0) - { - ItemLocale const *il = objmgr.GetItemLocale(proto->ItemId); - if (il) - { - if (il->Name.size() > size_t(loc_idx) && !il->Name[loc_idx].empty()) - name = il->Name[loc_idx]; - } - } - - if (!wsearchedname.empty() && !Utf8FitTo(name, wsearchedname)) - continue; - + // Allow search by suffix (ie: of the Monkey) or partial name (ie: Monkey) + // No need to do any of this if no search term was entered + if (!wsearchedname.empty()) + { + std::string name = proto->Name1; + if (name.empty()) + continue; + + // local name + if (loc_idx >= 0) + { + ItemLocale const *il = objmgr.GetItemLocale(proto->ItemId); + if (il) + { + if (il->Name.size() > size_t(loc_idx) && !il->Name[loc_idx].empty()) + name = il->Name[loc_idx]; + } + } + + // DO NOT use GetItemEnchantMod(proto->RandomProperty) as it may return a result + // that matches the search but it may not equal item->GetItemRandomPropertyId() + // used in BuildAuctionInfo() which then causes wrong items to be listed + int32 propRefID = item->GetItemRandomPropertyId(); + + if (propRefID) + { + // Append the suffix to the name (ie: of the Monkey) if one exists + // These are found in ItemRandomProperties.dbc, not ItemRandomSuffix.dbc + // even though the DBC names seem misleading + const ItemRandomPropertiesEntry *itemRandProp = sItemRandomPropertiesStore.LookupEntry(propRefID); + + if (itemRandProp) + { + char* const* temp = itemRandProp->nameSuffix; + //char* temp = itemRandProp->nameSuffix; + + if (temp) + { + if (loc_idx >= 0) + { + // Append the suffix (ie: of the Monkey) to the name using localization + name += " "; + name += temp[loc_idx]; + } + else + { + // Invalid localization? Append the suffix using default enUS + name += " "; + name += temp[LOCALE_enUS]; + } + } + } + } + + // Perform the search (with or without suffix) + if (!Utf8FitTo(name, wsearchedname)) + continue; + } + + // Add the item if no search term or if entered search term was found if (count < 50 && totalcount >= listfrom) { ++count; -- cgit v1.2.3