1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-30 16:17:46 +00:00

add interior housing object movement updates

This commit is contained in:
NotAdam 2018-12-28 22:50:46 +11:00
parent 34e9ba131e
commit 0ca7b4815e
6 changed files with 26 additions and 7 deletions

View file

@ -204,7 +204,7 @@ namespace Sapphire::Network::Packets
HousingInternalObjectSpawn = 0x22D, // updated 4.4 HousingInternalObjectSpawn = 0x22D, // updated 4.4
HousingWardInfo = 0x022F, // updated 4.4 HousingWardInfo = 0x022F, // updated 4.4
YardObjectMove = 0x0230, // updated 4.4 HousingObjectMove = 0x0230, // updated 4.4
SharedEstateSettingsResponse = 0x023C, // updated 4.4 SharedEstateSettingsResponse = 0x023C, // updated 4.4

View file

@ -1687,7 +1687,7 @@ struct FFXIVIpcYardObjectSpawn : FFXIVIpcBasePacket< YardObjectSpawn >
Common::HousingObject object; Common::HousingObject object;
}; };
struct FFXIVIpcYardObjectMove : FFXIVIpcBasePacket< YardObjectMove > struct FFXIVIpcHousingObjectMove : FFXIVIpcBasePacket< HousingObjectMove >
{ {
uint16_t itemRotation; uint16_t itemRotation;
uint8_t objectArray; uint8_t objectArray;

View file

@ -1225,7 +1225,7 @@ bool Sapphire::World::Manager::HousingMgr::moveInternalItem( Entity::Player& pla
auto invMgr = g_fw.get< InventoryMgr >(); auto invMgr = g_fw.get< InventoryMgr >();
invMgr->updateHousingItemPosition( item ); invMgr->updateHousingItemPosition( item );
terri.updateHousingObjectPosition( slot, item->getPos(), item->getRot() ); terri.updateHousingObjectPosition( player, slot, item->getPos(), item->getRot() );
// send confirmation to player // send confirmation to player
uint32_t param1 = ( ident.landId << 16 ) | containerId; uint32_t param1 = ( ident.landId << 16 ) | containerId;

View file

@ -187,8 +187,9 @@ void Sapphire::World::Territory::Housing::HousingInteriorTerritory::spawnHousing
} }
} }
void Sapphire::World::Territory::Housing::HousingInteriorTerritory::updateHousingObjectPosition( uint16_t slot, void Sapphire::World::Territory::Housing::HousingInteriorTerritory::updateHousingObjectPosition( Entity::Player& sourcePlayer,
Sapphire::Common::FFXIVARR_POSITION3_U16 pos, uint16_t slot,
Common::FFXIVARR_POSITION3_U16 pos,
uint16_t rot ) uint16_t rot )
{ {
auto& obj = m_housingObjects[ slot ]; auto& obj = m_housingObjects[ slot ];
@ -197,6 +198,23 @@ void Sapphire::World::Territory::Housing::HousingInteriorTerritory::updateHousin
obj.itemRotation = rot; obj.itemRotation = rot;
// todo: how does this update on other clients? // todo: how does this update on other clients?
for( const auto& player : m_playerMap )
{
if( player.second->getId() == sourcePlayer.getId() )
continue;
auto moveObjPkt = makeZonePacket< Server::FFXIVIpcHousingObjectMove >( player.second->getId() );
moveObjPkt->data().itemRotation = obj.itemRotation;
moveObjPkt->data().pos = obj.pos;
// todo: how does this work when an item is in a slot >50 or u8 max? my guess is landid is the container index, but not sure...
moveObjPkt->data().objectArray = static_cast< uint8_t >( slot % 50 );
moveObjPkt->data().landId = static_cast< uint8_t >( slot / 50 );
player.second->queuePacket( moveObjPkt );
}
} }
void Sapphire::World::Territory::Housing::HousingInteriorTerritory::removeHousingObject( uint16_t slot ) void Sapphire::World::Territory::Housing::HousingInteriorTerritory::removeHousingObject( uint16_t slot )

View file

@ -27,7 +27,8 @@ namespace Sapphire::World::Territory::Housing
void updateHousingObjects(); void updateHousingObjects();
void spawnHousingObject( uint8_t containerIdx, uint16_t slot, uint16_t containerType, void spawnHousingObject( uint8_t containerIdx, uint16_t slot, uint16_t containerType,
Inventory::HousingItemPtr item ); Inventory::HousingItemPtr item );
void updateHousingObjectPosition( uint16_t slot, Common::FFXIVARR_POSITION3_U16 pos, uint16_t rot ); void updateHousingObjectPosition(
Entity::Player& sourcePlayer, uint16_t slot, Sapphire::Common::FFXIVARR_POSITION3_U16 pos, uint16_t rot );
void removeHousingObject( uint16_t slot ); void removeHousingObject( uint16_t slot );
private: private:

View file

@ -394,7 +394,7 @@ void Sapphire::HousingZone::updateYardObjectPos( Entity::Player& sourcePlayer, u
if( player.second->getId() == sourcePlayer.getId() ) if( player.second->getId() == sourcePlayer.getId() )
continue; continue;
auto packet = makeZonePacket< Server::FFXIVIpcYardObjectMove >( player.second->getId() ); auto packet = makeZonePacket< Server::FFXIVIpcHousingObjectMove >( player.second->getId() );
packet->data().itemRotation = item.getRot(); packet->data().itemRotation = item.getRot();
packet->data().pos = item.getPos(); packet->data().pos = item.getPos();