diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index c1875da3..bdfc08fb 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -264,7 +264,7 @@ namespace Sapphire::Network::Packets LinkshellListHandler = 0x00F4, // updated 4.3 - MarketBoardRequestItemInformation = 0x00FE, // updated 4.4 + MarketBoardRequestItemListingInfo = 0x00FE, // updated 4.4 MarketBoardRequestItemListings = 0x00FF, // updated 4.4 MarketBoardSearch = 0x0103, // updated 4.4 diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index e312d790..f4a057ad 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -284,8 +284,8 @@ struct FFXIVIpcMarketBoardSearch : /* 0032 */ uint16_t unk4[43]; }; -struct FFXIVIpcMarketBoardRequestItemInformation : - FFXIVIpcBasePacket< MarketBoardRequestItemInformation > +struct FFXIVIpcMarketBoardRequestItemListingInfo : + FFXIVIpcBasePacket< MarketBoardRequestItemListingInfo > { /* 0000 */ uint32_t catalogId; /* 0000 */ uint32_t requestId; diff --git a/src/world/Manager/MarketMgr.cpp b/src/world/Manager/MarketMgr.cpp index b850f1bc..e448ba16 100644 --- a/src/world/Manager/MarketMgr.cpp +++ b/src/world/Manager/MarketMgr.cpp @@ -10,6 +10,8 @@ #include "Actor/Player.h" +#include + using namespace Sapphire::Network::Packets; Sapphire::World::Manager::MarketMgr::MarketMgr( Sapphire::FrameworkPtr pFw ) : @@ -41,10 +43,16 @@ bool Sapphire::World::Manager::MarketMgr::init() cacheEntry.maxEquipLevel = item->levelEquip; cacheEntry.name = item->name; cacheEntry.classJob = item->classJobUse; + cacheEntry.itemLevel = item->levelItem; m_marketItemCache.push_back( std::move( cacheEntry ) ); } + std::sort( m_marketItemCache.begin(), m_marketItemCache.end(), []( const MarketableItem& a, const MarketableItem& b ) + { + return a.itemLevel > b.itemLevel; + } ); + Logger::info( "MarketMgr: Cached " + std::to_string( m_marketItemCache.size() ) + " marketable items" ); return true; @@ -79,7 +87,7 @@ void Sapphire::World::Manager::MarketMgr::searchMarketboard( Entity::Player& pla resultPkt->data().itemIndexStart = startIdx; resultPkt->data().requestId = requestId; - for( auto i = 0; i < resultList.size(); i++ ) + for( auto i = 0; i < size; i++ ) { auto& item = resultList.at( startIdx + i ); auto& data = resultPkt->data().items[ i ]; diff --git a/src/world/Manager/MarketMgr.h b/src/world/Manager/MarketMgr.h index 311c1e28..b50462a6 100644 --- a/src/world/Manager/MarketMgr.h +++ b/src/world/Manager/MarketMgr.h @@ -34,6 +34,7 @@ namespace Sapphire::World::Manager uint32_t catalogId; uint8_t itemSearchCategory; uint8_t maxEquipLevel; + uint16_t itemLevel; uint8_t classJob; std::string name; }; diff --git a/src/world/Network/GameConnection.cpp b/src/world/Network/GameConnection.cpp index de524b87..bb2f6697 100644 --- a/src/world/Network/GameConnection.cpp +++ b/src/world/Network/GameConnection.cpp @@ -124,7 +124,7 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH setZoneHandler( ClientZoneIpcType::PerformNoteHandler, "PerformNoteHandler", &GameConnection::performNoteHandler ); setZoneHandler( ClientZoneIpcType::MarketBoardSearch, "MarketBoardSearch", &GameConnection::marketBoardSearch ); - setZoneHandler( ClientZoneIpcType::MarketBoardRequestItemInformation, "MarketBoardRequestItemInformation", + setZoneHandler( ClientZoneIpcType::MarketBoardRequestItemListingInfo, "MarketBoardRequestItemListingInfo", &GameConnection::marketBoardRequestItemInfo ); setChatHandler( ClientChatIpcType::TellReq, "TellReq", &GameConnection::tellHandler ); diff --git a/src/world/Network/Handlers/PacketHandlers.cpp b/src/world/Network/Handlers/PacketHandlers.cpp index e08a566e..aa07a1d5 100644 --- a/src/world/Network/Handlers/PacketHandlers.cpp +++ b/src/world/Network/Handlers/PacketHandlers.cpp @@ -774,7 +774,7 @@ void Sapphire::Network::GameConnection::marketBoardRequestItemInfo( FrameworkPtr const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { - const auto packet = ZoneChannelPacket< Client::FFXIVIpcMarketBoardRequestItemInformation >( inPacket ); + const auto packet = ZoneChannelPacket< Client::FFXIVIpcMarketBoardRequestItemListingInfo >( inPacket ); auto marketMgr = pFw->get< MarketMgr >(); } \ No newline at end of file