1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-27 14:57:44 +00:00

fix oob error on market board result lists and correctly sort the items

This commit is contained in:
NotAdam 2019-01-01 14:19:44 +11:00
parent 0aa1fab9a4
commit a37525d002
6 changed files with 15 additions and 6 deletions

View file

@ -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

View file

@ -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;

View file

@ -10,6 +10,8 @@
#include "Actor/Player.h"
#include <algorithm>
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 ];

View file

@ -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;
};

View file

@ -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 );

View file

@ -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 >();
}