From 3b37d14d64a799e00375be89e7db869518358f1b Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Dec 2018 17:12:24 +1100 Subject: [PATCH] maybe fix an issue where a container wouldn't get read properly also some extra item crap --- src/common/Network/CommonActorControl.h | 1 + src/common/Network/PacketDef/Zone/ClientZoneDef.h | 2 +- src/world/Inventory/HousingItem.cpp | 1 + src/world/Inventory/Item.cpp | 13 ++++++++++++- src/world/Inventory/Item.h | 4 ++++ src/world/Manager/HousingMgr.cpp | 7 +++++-- src/world/Manager/InventoryMgr.cpp | 1 + src/world/Network/Handlers/ClientTriggerHandler.cpp | 4 +++- .../PacketWrappers/UpdateInventorySlotPacket.h | 2 +- 9 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index 170c23e3..5f5f615d 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -344,6 +344,7 @@ enum ActorControlType : uint16_t RequestHousingItemUI = 0x463, RequestSharedEstateSettings = 0x46F, UpdateEstateLightingLevel = 0x471, + HousingItemSelectedInUI = 0x47E, CompanionAction = 0x6A4, CompanionSetBarding = 0x6A5, diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index 4af1d691..12b452dd 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -42,7 +42,7 @@ struct FFXIVIpcClientTrigger : /* 0008 */ uint32_t param12; /* 000C */ uint32_t param2; /* 0010 */ uint32_t param4; // todo: really? - /* 0014 */ char unk_14[4]; + /* 0014 */ uint32_t param5; /* 0018 */ uint64_t param3; }; diff --git a/src/world/Inventory/HousingItem.cpp b/src/world/Inventory/HousingItem.cpp index 99f903ff..15352dab 100644 --- a/src/world/Inventory/HousingItem.cpp +++ b/src/world/Inventory/HousingItem.cpp @@ -5,6 +5,7 @@ Sapphire::Inventory::HousingItem::HousingItem( uint64_t uId, uint32_t catalogId { m_stackSize = 1; m_spiritBond = 1; + m_reservedFlag = 1092616192; // wat? } uint16_t Sapphire::Inventory::HousingItem::getRot() const diff --git a/src/world/Inventory/Item.cpp b/src/world/Inventory/Item.cpp index 98c546b7..d8af0f17 100644 --- a/src/world/Inventory/Item.cpp +++ b/src/world/Inventory/Item.cpp @@ -13,7 +13,8 @@ Sapphire::Item::Item( uint64_t uId, uint32_t catalogId, bool isHq ) : m_isHq( isHq ), m_stain( 0 ), m_durability( 30000 ), - m_spiritBond( 0 ) + m_spiritBond( 0 ), + m_reservedFlag( 0 ) { auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto itemInfo = pExdData->get< Sapphire::Data::Item >( catalogId ); @@ -171,3 +172,13 @@ void Sapphire::Item::setSpiritbond( uint16_t spiritbond ) { m_spiritBond = spiritbond; } + +uint32_t Sapphire::Item::getReservedFlag() const +{ + return m_reservedFlag; +} + +void Sapphire::Item::setReservedFlag( uint32_t flag ) +{ + m_reservedFlag = flag; +} \ No newline at end of file diff --git a/src/world/Inventory/Item.h b/src/world/Inventory/Item.h index 018956b9..34fa02f7 100644 --- a/src/world/Inventory/Item.h +++ b/src/world/Inventory/Item.h @@ -67,6 +67,9 @@ namespace Sapphire void setSpiritbond( uint16_t spiritbond ); uint16_t getSpiritbond() const; + void setReservedFlag( uint32_t flag ); + uint32_t getReservedFlag() const; + protected: uint32_t m_id; @@ -93,6 +96,7 @@ namespace Sapphire uint16_t m_durability; uint16_t m_stain; uint16_t m_spiritBond; + uint32_t m_reservedFlag; uint32_t m_additionalData; diff --git a/src/world/Manager/HousingMgr.cpp b/src/world/Manager/HousingMgr.cpp index ef3e68c9..ea86382c 100644 --- a/src/world/Manager/HousingMgr.cpp +++ b/src/world/Manager/HousingMgr.cpp @@ -851,9 +851,12 @@ void Sapphire::World::Manager::HousingMgr::sendEstateInventory( Entity::Player& return; auto& containers = getEstateInventory( targetLand->getLandIdent() ); + auto needle = containers.find( inventoryType ); + if( needle == containers.end() ) + return; auto invMgr = g_fw.get< Manager::InventoryMgr >(); - invMgr->sendInventoryContainer( player, containers[ inventoryType ] ); + invMgr->sendInventoryContainer( player, needle->second ); } const Sapphire::World::Manager::HousingMgr::LandSetLandCacheMap& @@ -1430,7 +1433,7 @@ bool Sapphire::World::Manager::HousingMgr::removeExternalItem( Entity::Player& p } terri.despawnYardObject( land.getLandIdent().landId, slotId ); - + return true; } diff --git a/src/world/Manager/InventoryMgr.cpp b/src/world/Manager/InventoryMgr.cpp index 7405a0eb..5c960f35 100644 --- a/src/world/Manager/InventoryMgr.cpp +++ b/src/world/Manager/InventoryMgr.cpp @@ -50,6 +50,7 @@ void Sapphire::World::Manager::InventoryMgr::sendInventoryContainer( Sapphire::E itemInfoPacket->data().catalogId = itM->second->getId(); itemInfoPacket->data().condition = itM->second->getDurability(); itemInfoPacket->data().spiritBond = itM->second->getSpiritbond(); + itemInfoPacket->data().reservedFlag = itM->second->getReservedFlag(); itemInfoPacket->data().hqFlag = static_cast< uint8_t >( itM->second->isHq() ? 1 : 0 ); itemInfoPacket->data().stain = itM->second->getStain(); diff --git a/src/world/Network/Handlers/ClientTriggerHandler.cpp b/src/world/Network/Handlers/ClientTriggerHandler.cpp index ee915f0d..df9409f4 100644 --- a/src/world/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/world/Network/Handlers/ClientTriggerHandler.cpp @@ -80,13 +80,15 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( const Packets::FFX const auto param2 = packet.data().param2; const auto param3 = packet.data().param3; const auto param4 = packet.data().param4; + const auto param5 = packet.data().param5; pLog->debug( "[" + std::to_string( m_pSession->getId() ) + "] Incoming action: " + Util::intToHexString( static_cast< uint32_t >( commandId & 0xFFFF ), 4 ) + "\nparam1: " + Util::intToHexString( static_cast< uint64_t >( param1 & 0xFFFFFFFFFFFFFFF ), 16 ) + "\nparam2: " + Util::intToHexString( static_cast< uint32_t >( param2 & 0xFFFFFFFF ), 8 ) + "\nparam3: " + Util::intToHexString( static_cast< uint64_t >( param3 & 0xFFFFFFFFFFFFFFF ), 16 ) + - "\nparam4: " + Util::intToHexString( static_cast< uint32_t >( param4 & 0xFFFFFFFF ), 8 ) + "\nparam4: " + Util::intToHexString( static_cast< uint32_t >( param4 & 0xFFFFFFFF ), 8 ) + + "\nparam5: " + Util::intToHexString( static_cast< uint32_t >( param5 & 0xFFFFFFFF ), 8 ) ); diff --git a/src/world/Network/PacketWrappers/UpdateInventorySlotPacket.h b/src/world/Network/PacketWrappers/UpdateInventorySlotPacket.h index 1dbe2474..4f10459a 100644 --- a/src/world/Network/PacketWrappers/UpdateInventorySlotPacket.h +++ b/src/world/Network/PacketWrappers/UpdateInventorySlotPacket.h @@ -29,7 +29,7 @@ namespace Sapphire::Network::Packets::Server m_data.slot = slot; m_data.quantity = item.getStackSize(); m_data.catalogId = item.getId(); - m_data.reservedFlag = 0; // no idea + m_data.reservedFlag = item.getReservedFlag(); // no idea m_data.signatureId = 0; m_data.hqFlag = item.isHq() ? 1 : 0; m_data.condition = 60000; // 200%