diff --git a/src/common/Common.h b/src/common/Common.h index cc88aac7..fa9e9e2d 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -1592,8 +1592,8 @@ namespace Sapphire::Common uint8_t flags; uint8_t __padding1; uint64_t fcCrestId; - uint8_t patternIds[8]; - uint8_t colors[8]; + uint8_t patternIds[9]; + uint8_t colors[9]; }; struct Furniture diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 917e4b55..c5682860 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1700,7 +1700,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server struct FFXIVIpcQuestCompleteList : FFXIVIpcBasePacket< QuestCompleteFlags > { uint8_t questCompleteMask[310]; - uint8_t unknownCompleteMask[40]; + uint8_t unknownCompleteMask[32]; }; /** diff --git a/src/world/Territory/HousingZone.cpp b/src/world/Territory/HousingZone.cpp index cbf761e8..472a7c36 100644 --- a/src/world/Territory/HousingZone.cpp +++ b/src/world/Territory/HousingZone.cpp @@ -147,25 +147,33 @@ bool Sapphire::HousingZone::init() return true; } +bool Sapphire::HousingZone::isPlayerSubInstance( Entity::Player& player ) +{ + return player.getPos().x < -15000.0f; //ToDo: get correct pos +} + void Sapphire::HousingZone::onPlayerZoneIn( Entity::Player& player ) { auto& server = Common::Service< World::WorldServer >::ref(); Logger::debug( "HousingZone::onPlayerZoneIn: Territory#{0}|{1}, Entity#{2}", getGuId(), getTerritoryTypeId(), player.getId() ); + auto isInSubdivision = isPlayerSubInstance( player ); uint32_t yardPacketNum; + uint32_t yardPacketTotal = 8; sendLandSet( player ); - for( yardPacketNum = 1; yardPacketNum > 2; yardPacketNum++ ) + for( yardPacketNum = 0; yardPacketNum < yardPacketTotal; yardPacketNum++ ) { auto housingObjectInit = makeZonePacket< FFXIVIpcYardObjectList >( player.getId() ); housingObjectInit->data().PacketIndex = yardPacketNum; - auto yardObjectSize = sizeof( Common::Furniture ); + housingObjectInit->data().PacketIndex = yardPacketNum; + housingObjectInit->data().PacketEnd = yardPacketTotal; - auto& objects = m_yardObjects[ 0 ]; + auto& objects = m_yardObjects[ isInSubdivision ? 1 : 0 ]; memcpy( &housingObjectInit->data().YardObjects, &objects + ( yardPacketNum * 400 ), yardObjectSize * 400 );