diff --git a/src/common/Common.h b/src/common/Common.h index 98b212f4..6ac1b6b9 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -1593,7 +1593,7 @@ namespace Sapphire::Common uint8_t status; uint8_t flags; uint8_t __padding1; - uint8_t unknown1[4]; + uint32_t fcId; uint32_t fcCrestId; uint32_t fcCrestId1; uint8_t patternIds[8]; diff --git a/src/common/Network/PacketDef/ClientIpcs.h b/src/common/Network/PacketDef/ClientIpcs.h index 2a1f3ea5..c61e9ae2 100644 --- a/src/common/Network/PacketDef/ClientIpcs.h +++ b/src/common/Network/PacketDef/ClientIpcs.h @@ -160,6 +160,7 @@ namespace Sapphire::Network::Packets TreasureCheckCommand = 0x1B4, SelectLootAction = 0x1B5, OpenTreasureWithKey = 0x1B6, + BuildPresetHandler = 0x1B7, StartTalkEvent = 0x01C2, StartEmoteEvent = 0x01C3, diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index ef57c377..089a4f4c 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -546,6 +546,13 @@ struct FFXIVIpcHousingHouseName : FFXIVIpcBasePacket< HousingHouseName > char houseName[20]; }; +struct FFXIVIpcBuildPresetHandler : FFXIVIpcBasePacket< BuildPresetHandler > +{ + /* 0000 */ uint32_t itemId; + /* 0004 */ uint8_t plotNum; + /* 0005 */ char stateString[27]; +}; + struct FFXIVIpcHousingGreeting : FFXIVIpcBasePacket< HousingGreeting > { Common::LandIdent landId; diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 3c64bcf1..1a5a1e12 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1977,10 +1977,10 @@ struct FFXIVIpcEorzeaTimeOffset : FFXIVIpcBasePacket< TimeOffset > struct FFXIVIpcHouse : FFXIVIpcBasePacket< House > { - uint8_t Block; - uint8_t __padding1; - uint8_t __padding2; - uint8_t __padding3; + uint16_t Block; + uint16_t __padding1; + uint16_t __padding2; + uint16_t __padding3; Common::House House; }; @@ -2045,19 +2045,19 @@ struct FFXIVIpcEorzeaTimeOffset : FFXIVIpcBasePacket< TimeOffset > struct FFXIVIpcCharaHousingLandData : FFXIVIpcBasePacket< CharaHousingLandData > { - uint8_t IsFcOwner; uint8_t Index; - uint8_t __padding1; - uint8_t __padding2; - Common::LandIdent LandId; - uint8_t Flags; + uint32_t unknown; + Common::CharaLandData LandData; }; struct FFXIVIpcCharaHousing : FFXIVIpcBasePacket< CharaHousing > { Common::CharaLandData FcLands; + uint64_t padding; Common::CharaLandData CharaLands; + uint64_t padding1; Common::CharaLandData apartment; + uint64_t padding2; Common::CharaLandData sharedHouse[2]; }; diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index ed689ffd..7edeca22 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -1791,8 +1791,9 @@ void Player::sendLandFlagsSlot( Common::LandFlagsSlot slot ) return; } - landFlags->data().Flags = static_cast< uint32_t >( type ); - landFlags->data().LandId = m_charaLandData[ slot ].landId; + landFlags->data().Index = static_cast< uint32_t >( type ); + landFlags->data().LandData.landId = m_charaLandData[ slot ].landId; + landFlags->data().LandData.landFlags = m_charaLandData[ slot ].landFlags; queuePacket( landFlags ); } diff --git a/src/world/Network/GameConnection.cpp b/src/world/Network/GameConnection.cpp index 14011104..b92a73a2 100644 --- a/src/world/Network/GameConnection.cpp +++ b/src/world/Network/GameConnection.cpp @@ -89,7 +89,7 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH setZoneHandler( ClientItemOperation, "ItemOperation", &GameConnection::itemOperation ); - //setZoneHandler( BuildPresetHandler, "BuildPresetHandler", &GameConnection::buildPresetHandler ); + setZoneHandler( BuildPresetHandler, "BuildPresetHandler", &GameConnection::buildPresetHandler ); setZoneHandler( ClientZoneIpcType::HousingHouseName, "HousingHouseName", &GameConnection::landRenameHandler ); setZoneHandler( ClientZoneIpcType::HousingGreeting, "HousingUpdateHouseGreeting", &GameConnection::housingUpdateGreetingHandler ); setZoneHandler( HousingPlaceYardItem, "HousingPlaceYardItem", &GameConnection::reqPlaceHousingItem ); diff --git a/src/world/Network/Handlers/HousingPacketHandlers.cpp b/src/world/Network/Handlers/HousingPacketHandlers.cpp index 04555e4c..a1aae987 100644 --- a/src/world/Network/Handlers/HousingPacketHandlers.cpp +++ b/src/world/Network/Handlers/HousingPacketHandlers.cpp @@ -73,10 +73,13 @@ void Sapphire::Network::GameConnection::landRenameHandler( const Packets::FFXIVA void Sapphire::Network::GameConnection::buildPresetHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { - //const auto packet = ZoneChannelPacket< Client::FFXIVIpcBuildPresetHandler >( inPacket ); + const auto packet = ZoneChannelPacket< Client::FFXIVIpcBuildPresetHandler >( inPacket ); - //auto& housingMgr = Common::Service< HousingMgr >::ref(); - //housingMgr.buildPresetEstate( player, packet.data().plotNum, packet.data().itemId ); + auto& housingMgr = Common::Service< HousingMgr >::ref(); + auto& teriMgr = Common::Service< TerritoryMgr >::ref(); + auto pTeri = teriMgr.getTerritoryByGuId( player.getTerritoryId() ); + auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri ); + housingMgr.buildPresetEstate( player, *hZone, packet.data().plotNum, packet.data().itemId ); } void Sapphire::Network::GameConnection::housingUpdateGreetingHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket,