diff --git a/common/repositories/trader_repository.h b/common/repositories/trader_repository.h index b85d04e76..6c6ab35d2 100644 --- a/common/repositories/trader_repository.h +++ b/common/repositories/trader_repository.h @@ -164,37 +164,35 @@ public: return UpdateOne(db, m); } - static Trader GetItemBySerialNumber(Database &db, uint32 serial_number) + static Trader GetItemBySerialNumber(Database &db, uint32 serial_number, uint32 trader_id) { Trader e{}; const auto trader_item = GetWhere( db, - fmt::format("`item_sn` = '{}' LIMIT 1", serial_number) + fmt::format("`char_id` = '{}' AND `item_sn` = '{}' LIMIT 1", trader_id, serial_number) ); if (trader_item.empty()) { return e; } - else { - return trader_item.at(0); - } + + return trader_item.at(0); } - static Trader GetItemBySerialNumber(Database &db, std::string serial_number) + static Trader GetItemBySerialNumber(Database &db, std::string serial_number, uint32 trader_id) { Trader e{}; auto sn = Strings::ToUnsignedBigInt(serial_number); const auto trader_item = GetWhere( db, - fmt::format("`item_sn` = '{}' LIMIT 1", sn) + fmt::format("`char_id` = '{}' AND `item_sn` = '{}' LIMIT 1", trader_id, sn) ); if (trader_item.empty()) { return e; } - else { - return trader_item.at(0); - } + + return trader_item.at(0); } static int UpdateActiveTransaction(Database &db, uint32 id, bool status) diff --git a/zone/trading.cpp b/zone/trading.cpp index 7a8abc2e9..d3896fb09 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -3235,7 +3235,10 @@ void Client::SendBulkBazaarTraders() void Client::DoBazaarInspect(const BazaarInspect_Struct &in) { - auto items = TraderRepository::GetWhere(database, fmt::format("item_sn = {}", in.serial_number)); + auto items = TraderRepository::GetWhere( + database, fmt::format("`char_id` = '{}' AND `item_sn` = '{}'", in.trader_id, in.serial_number) + ); + if (items.empty()) { LogInfo("Failed to find item with serial number [{}]", in.serial_number); return; @@ -3304,7 +3307,7 @@ std::string Client::DetermineMoneyString(uint64 cp) void Client::BuyTraderItemOutsideBazaar(TraderBuy_Struct *tbs, const EQApplicationPacket *app) { auto in = (TraderBuy_Struct *) app->pBuffer; - auto trader_item = TraderRepository::GetItemBySerialNumber(database, tbs->serial_number); + auto trader_item = TraderRepository::GetItemBySerialNumber(database, tbs->serial_number, tbs->trader_id); if (!trader_item.id) { LogTrading("Attempt to purchase an item outside of the Bazaar trader_id [{}] item serial_number " "[{}] The Traders data was outdated.",