From 6ce9d9557e52ecc07814b8996c71935a68e666d2 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Mon, 31 Dec 2018 23:20:36 +1100 Subject: [PATCH] start of marketboard implementation --- src/common/Network/PacketDef/Ipcs.h | 2 +- .../Network/PacketDef/Zone/ClientZoneDef.h | 13 +++++++++++ src/world/Manager/MarketMgr.cpp | 19 ++++++++++++++++ src/world/Manager/MarketMgr.h | 22 +++++++++++++++++++ src/world/Manager/PlayerMgr.h | 7 +++++- src/world/Network/GameConnection.h | 2 ++ src/world/Network/Handlers/PacketHandlers.cpp | 13 +++++++++++ src/world/ServerMgr.cpp | 10 +++++++++ 8 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 src/world/Manager/MarketMgr.cpp create mode 100644 src/world/Manager/MarketMgr.h diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index ede6ed36..40855781 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -267,7 +267,7 @@ namespace Sapphire::Network::Packets MarketBoardRequestItemInformation = 0x00FE, // updated 4.4 MarketBoardRequestItemListings = 0x00FF, // updated 4.4 - SearchMarketboard = 0x0103, // updated 4.3 + SearchMarketboard = 0x0103, // updated 4.4 ReqExamineFcInfo = 0x010F, // updated 4.1 FcInfoReqHandler = 0x011A, // updated 4.2 diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index e096fa8a..68b856b8 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -270,6 +270,19 @@ struct FFXIVIpcHousingUpdateObjectPosition : /* 001C */ uint32_t padding; }; +struct FFXIVIpcSearchMarketboard : + FFXIVIpcBasePacket< SearchMarketboard > +{ + /* 0000 */ uint32_t unk; + /* 0004 */ uint8_t unk2[2]; + /* 0006 */ uint8_t itemSearchCategory; + /* 0007 */ uint8_t shouldCheckClassJobId; // wat? seems only 1 there at least... + /* 0008 */ uint8_t maxEquipLevel; + /* 0009 */ uint8_t classJobId; + /* 000A */ char searchStr[40]; + /* 0032 */ uint16_t unk4[43]; +}; + } } } diff --git a/src/world/Manager/MarketMgr.cpp b/src/world/Manager/MarketMgr.cpp new file mode 100644 index 00000000..1769a6e8 --- /dev/null +++ b/src/world/Manager/MarketMgr.cpp @@ -0,0 +1,19 @@ +#include "MarketMgr.h" + +Sapphire::World::Manager::MarketMgr::MarketMgr( Sapphire::FrameworkPtr pFw ) : + BaseManager( pFw ) +{ + +} + +bool Sapphire::World::Manager::MarketMgr::init() +{ + return true; +} + +void Sapphire::World::Manager::MarketMgr::searchMarketboard( Entity::Player& player, + uint8_t itemSearchCategory, uint8_t maxEquipLevel, + uint8_t classJob ) +{ + +} \ No newline at end of file diff --git a/src/world/Manager/MarketMgr.h b/src/world/Manager/MarketMgr.h new file mode 100644 index 00000000..9c21c8ed --- /dev/null +++ b/src/world/Manager/MarketMgr.h @@ -0,0 +1,22 @@ +#ifndef SAPPHIRE_MARKETMGR_H +#define SAPPHIRE_MARKETMGR_H + +#include "ForwardsZone.h" +#include "BaseManager.h" + +namespace Sapphire::World::Manager +{ + class MarketMgr : public Manager::BaseManager + { + public: + explicit MarketMgr( FrameworkPtr pFw ); + + bool init(); + + void searchMarketboard( Entity::Player& player, uint8_t itemSearchCategory, uint8_t maxEquipLevel, uint8_t classJob ); + + }; +} + + +#endif //SAPPHIRE_MARKETMGR_H diff --git a/src/world/Manager/PlayerMgr.h b/src/world/Manager/PlayerMgr.h index 0b0cbd13..f7d08488 100644 --- a/src/world/Manager/PlayerMgr.h +++ b/src/world/Manager/PlayerMgr.h @@ -1,3 +1,6 @@ +#ifndef SAPPHIRE_PLAYERMGR_H +#define SAPPHIRE_PLAYERMGR_H + #include "ForwardsZone.h" #include "BaseManager.h" @@ -10,4 +13,6 @@ class PlayerMgr : public Manager::BaseManager void movePlayerToLandDestination( Sapphire::Entity::Player& player, uint32_t landId, uint16_t param = 0 ); }; -} \ No newline at end of file +} + +#endif // SAPPHIRE_PLAYERMGR_H \ No newline at end of file diff --git a/src/world/Network/GameConnection.h b/src/world/Network/GameConnection.h index dcdec9d1..c4984267 100644 --- a/src/world/Network/GameConnection.h +++ b/src/world/Network/GameConnection.h @@ -176,6 +176,8 @@ namespace Sapphire::Network DECLARE_HANDLER( reqMoveHousingItem ); + DECLARE_HANDLER( searchMarketboard ); + }; } diff --git a/src/world/Network/Handlers/PacketHandlers.cpp b/src/world/Network/Handlers/PacketHandlers.cpp index fa6543bf..580b0629 100644 --- a/src/world/Network/Handlers/PacketHandlers.cpp +++ b/src/world/Network/Handlers/PacketHandlers.cpp @@ -36,6 +36,7 @@ #include "Manager/DebugCommandMgr.h" #include "Manager/EventMgr.h" +#include "Manager/MarketMgr.h" #include "Action/Action.h" #include "Action/ActionTeleport.h" @@ -752,4 +753,16 @@ void Sapphire::Network::GameConnection::reqMoveHousingItem( FrameworkPtr pFw, housingMgr->reqMoveHousingItem( player, data.ident, data.slot, data.pos, data.rotation ); +} + +void Sapphire::Network::GameConnection::searchMarketboard( FrameworkPtr pFw, + const Sapphire::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, + Entity::Player& player ) +{ + auto marketMgr = pFw->get< MarketMgr >(); + + const auto packet = ZoneChannelPacket< Client::FFXIVIpcSearchMarketboard >( inPacket ); + const auto& data = packet.data(); + + marketMgr->searchMarketboard( player, data.itemSearchCategory, data.maxEquipLevel, data.classJobId ); } \ No newline at end of file diff --git a/src/world/ServerMgr.cpp b/src/world/ServerMgr.cpp index cc89386a..316f6460 100644 --- a/src/world/ServerMgr.cpp +++ b/src/world/ServerMgr.cpp @@ -39,6 +39,7 @@ #include "Manager/InventoryMgr.h" #include "Manager/EventMgr.h" #include "Manager/ItemMgr.h" +#include "Manager/MarketMgr.h" using namespace Sapphire::World::Manager; @@ -160,6 +161,15 @@ void Sapphire::World::ServerMgr::run( int32_t argc, char* argv[] ) return; } + auto pMarketMgr = std::make_shared< Manager::MarketMgr >( framework() ); + framework()->set< Manager::MarketMgr >( pMarketMgr ); + + if( !pMarketMgr->init() ) + { + Logger::fatal( "Failed to setup market manager!" ); + return; + } + loadBNpcTemplates(); Network::HivePtr hive( new Network::Hive() );