1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-27 06:47:45 +00:00

fix items not being able to be removed from external storeroom

This commit is contained in:
NotAdam 2018-12-28 20:10:07 +11:00
parent e81a666258
commit 34e9ba131e
3 changed files with 21 additions and 12 deletions

View file

@ -1307,7 +1307,9 @@ void Sapphire::World::Manager::HousingMgr::reqRemoveHousingItem( Sapphire::Entit
if( land->getOwnerId() != player.getId() ) if( land->getOwnerId() != player.getId() )
return; return;
removeExternalItem( player, *terri, *land, slot, sendToStoreroom ); auto containerType = static_cast< Common::InventoryType >( containerId );
removeExternalItem( player, *terri, *land, containerType, slot, sendToStoreroom );
} }
} }
@ -1319,6 +1321,7 @@ bool Sapphire::World::Manager::HousingMgr::removeInternalItem( Entity::Player& p
auto& containers = getEstateInventory( terri.getLandIdent() ); auto& containers = getEstateInventory( terri.getLandIdent() );
// validate the container id first // validate the container id first
// we also need the idx of the container so we can get the slot offset
bool foundContainer = false; bool foundContainer = false;
uint8_t containerIdx = 0; uint8_t containerIdx = 0;
for( auto cId : m_internalPlacedItemContainers ) for( auto cId : m_internalPlacedItemContainers )
@ -1395,13 +1398,18 @@ bool Sapphire::World::Manager::HousingMgr::removeInternalItem( Entity::Player& p
} }
bool Sapphire::World::Manager::HousingMgr::removeExternalItem( Entity::Player& player, HousingZone& terri, Land& land, bool Sapphire::World::Manager::HousingMgr::removeExternalItem( Entity::Player& player, HousingZone& terri, Land& land,
uint16_t slotId, bool sendToStoreroom ) Common::InventoryType containerType, uint16_t slotId,
bool sendToStoreroom )
{ {
auto& containers = getEstateInventory( land.getLandIdent() ); auto& containers = getEstateInventory( land.getLandIdent() );
auto& placedContainer = containers[ InventoryType::HousingExteriorPlacedItems ]; auto needle = containers.find( containerType );
if( needle == containers.end() )
return false;
auto item = std::dynamic_pointer_cast< Inventory::HousingItem >( placedContainer->getItem( slotId ) ); auto& sourceContainer = needle->second;
auto item = std::dynamic_pointer_cast< Inventory::HousingItem >( sourceContainer->getItem( slotId ) );
if( !item ) if( !item )
return false; return false;
@ -1415,10 +1423,10 @@ bool Sapphire::World::Manager::HousingMgr::removeExternalItem( Entity::Player& p
if( freeSlot == -1 ) if( freeSlot == -1 )
return false; return false;
placedContainer->removeItem( slotId ); sourceContainer->removeItem( slotId );
invMgr->sendInventoryContainer( player, placedContainer ); invMgr->sendInventoryContainer( player, sourceContainer );
invMgr->removeHousingItemPosition( *item ); invMgr->removeHousingItemPosition( *item );
invMgr->removeItemFromHousingContainer( land.getLandIdent(), placedContainer->getId(), slotId ); invMgr->removeItemFromHousingContainer( land.getLandIdent(), sourceContainer->getId(), slotId );
storeroomContainer->setItem( freeSlot, item ); storeroomContainer->setItem( freeSlot, item );
invMgr->sendInventoryContainer( player, storeroomContainer ); invMgr->sendInventoryContainer( player, storeroomContainer );
@ -1431,10 +1439,10 @@ bool Sapphire::World::Manager::HousingMgr::removeExternalItem( Entity::Player& p
return false; return false;
// remove from housing inv // remove from housing inv
placedContainer->removeItem( slotId ); sourceContainer->removeItem( slotId );
invMgr->sendInventoryContainer( player, placedContainer ); invMgr->sendInventoryContainer( player, sourceContainer );
invMgr->removeHousingItemPosition( *item ); invMgr->removeHousingItemPosition( *item );
invMgr->removeItemFromHousingContainer( land.getLandIdent(), placedContainer->getId(), slotId ); invMgr->removeItemFromHousingContainer( land.getLandIdent(), sourceContainer->getId(), slotId );
// add to player inv // add to player inv
player.insertInventoryItem( containerPair.first, containerPair.second, item ); player.insertInventoryItem( containerPair.first, containerPair.second, item );

View file

@ -203,7 +203,8 @@ namespace Sapphire::World::Manager
* @return * @return
*/ */
bool removeExternalItem( Entity::Player& player, HousingZone& terri, Land& land, bool removeExternalItem( Entity::Player& player, HousingZone& terri, Land& land,
uint16_t slotId, bool sendToStoreroom ); Common::InventoryType containerType, uint16_t slotId,
bool sendToStoreroom );
/*! /*!
* @brief Processes the movement of an item placed in a HousingZone * @brief Processes the movement of an item placed in a HousingZone

View file

@ -464,7 +464,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( const Packets::FFX
auto slot = param4 & 0xFF; auto slot = param4 & 0xFF;
auto sendToStoreroom = ( param4 >> 16 ) != 0; auto sendToStoreroom = ( param4 >> 16 ) != 0;
//player, plot, containerId, slot, sendToStoreroom //player, plot, containerId, slot, sendToStoreroom
housingMgr->reqRemoveHousingItem( player, param12, param2, slot, sendToStoreroom ); housingMgr->reqRemoveHousingItem( player, param12, param2, slot, sendToStoreroom );
break; break;