2018-11-01 23:56:43 +01:00
|
|
|
#include <set>
|
|
|
|
|
|
|
|
#include <Common.h>
|
|
|
|
#include <Logging/Logger.h>
|
|
|
|
#include <Util/Util.h>
|
|
|
|
#include <Util/UtilMath.h>
|
|
|
|
#include <Exd/ExdDataGenerated.h>
|
|
|
|
#include <Database/DatabaseDef.h>
|
|
|
|
|
|
|
|
#include <MySqlBase.h>
|
|
|
|
#include <Connection.h>
|
|
|
|
|
|
|
|
#include <Network/GamePacketNew.h>
|
|
|
|
#include <Network/PacketDef/Zone/ServerZoneDef.h>
|
|
|
|
|
|
|
|
#include "Actor/Player.h"
|
|
|
|
#include "Inventory/ItemContainer.h"
|
|
|
|
#include "Inventory/Item.h"
|
2018-12-21 23:49:46 +11:00
|
|
|
#include "Inventory/ItemUtil.h"
|
2018-11-01 23:56:43 +01:00
|
|
|
|
|
|
|
#include "Forwards.h"
|
|
|
|
#include "Land.h"
|
|
|
|
#include "Framework.h"
|
2018-11-25 01:55:53 +11:00
|
|
|
#include "House.h"
|
2018-11-01 23:56:43 +01:00
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
extern Sapphire::Framework g_fw;
|
2018-11-01 23:56:43 +01:00
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
using namespace Sapphire::Common;
|
2018-11-01 23:56:43 +01:00
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
Sapphire::Land::Land( uint16_t territoryTypeId, uint8_t wardNum, uint8_t landId, uint32_t landSetId,
|
|
|
|
Sapphire::Data::HousingLandSetPtr info ) :
|
2018-11-01 23:56:43 +01:00
|
|
|
m_currentPrice( 0 ),
|
2018-11-09 10:53:11 +01:00
|
|
|
m_minPrice( 0 ),
|
2018-11-10 23:47:19 +01:00
|
|
|
m_nextDrop( static_cast< uint32_t >( Util::getTimeSeconds() ) + 21600 ),
|
2018-12-19 16:03:35 +11:00
|
|
|
m_ownerId( 0 ),
|
2018-11-04 23:47:10 +01:00
|
|
|
m_landSetId( landSetId ),
|
2018-11-13 19:48:22 +01:00
|
|
|
m_landInfo( info ),
|
2018-11-25 23:20:56 +11:00
|
|
|
m_type( Common::LandType::none ),
|
2018-11-25 01:55:53 +11:00
|
|
|
m_fcIcon( 0 ),
|
|
|
|
m_fcIconColor( 0 ),
|
|
|
|
m_fcId( 0 ),
|
|
|
|
m_iconAddIcon( 0 )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-10 19:00:13 +01:00
|
|
|
memset( &m_tag, 0x00, 3 );
|
2018-11-11 14:27:39 +01:00
|
|
|
|
2018-12-21 22:08:05 +11:00
|
|
|
m_landIdent.landId = landId;
|
|
|
|
m_landIdent.territoryTypeId = territoryTypeId;
|
|
|
|
m_landIdent.wardNum = wardNum;
|
|
|
|
m_landIdent.worldId = 67; // todo: fix this
|
|
|
|
|
2018-12-22 00:48:43 +11:00
|
|
|
m_minPrice = m_landInfo->minPrice[ m_landIdent.landId ];
|
|
|
|
m_maxPrice = m_landInfo->initialPrice[ m_landIdent.landId ];
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-12-21 22:08:05 +11:00
|
|
|
Sapphire::Land::~Land() = default;
|
2018-11-01 23:56:43 +01:00
|
|
|
|
2018-12-22 00:48:43 +11:00
|
|
|
void Sapphire::Land::init( Common::LandType type, uint8_t size, uint8_t state, uint32_t currentPrice, uint64_t ownerId, uint64_t houseId )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-12-22 00:48:43 +11:00
|
|
|
m_type = type;
|
|
|
|
m_size = size;
|
|
|
|
m_state = state;
|
|
|
|
m_currentPrice = currentPrice;
|
|
|
|
m_ownerId = ownerId;
|
2018-12-21 23:49:46 +11:00
|
|
|
|
2018-12-21 22:08:05 +11:00
|
|
|
// fetch the house if we have one for this land
|
|
|
|
if( houseId > 0 )
|
|
|
|
m_pHouse = make_House( houseId, m_landSetId, getLandIdent() );
|
2018-11-30 22:52:08 +11:00
|
|
|
|
|
|
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
2018-12-21 22:08:05 +11:00
|
|
|
auto info = pExdData->get< Sapphire::Data::HousingMapMarkerInfo >( m_landIdent.territoryTypeId, m_landIdent.landId );
|
2018-11-30 22:52:08 +11:00
|
|
|
if( info )
|
|
|
|
{
|
|
|
|
m_mapMarkerPosition.x = info->x;
|
|
|
|
m_mapMarkerPosition.y = info->y;
|
|
|
|
m_mapMarkerPosition.z = info->z;
|
|
|
|
}
|
|
|
|
|
2018-12-04 23:00:49 +11:00
|
|
|
switch( m_size )
|
|
|
|
{
|
|
|
|
case HouseSize::Cottage:
|
|
|
|
m_maxPlacedExternalItems = 20;
|
|
|
|
m_maxPlacedInternalItems = 200;
|
|
|
|
break;
|
|
|
|
case HouseSize::House:
|
|
|
|
m_maxPlacedExternalItems = 30;
|
|
|
|
m_maxPlacedInternalItems = 300;
|
|
|
|
break;
|
|
|
|
case HouseSize::Mansion:
|
|
|
|
m_maxPlacedExternalItems = 40;
|
|
|
|
m_maxPlacedInternalItems = 400;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// init item containers
|
2018-12-20 21:54:03 +11:00
|
|
|
auto setupContainer = [ this ]( InventoryType type, uint16_t maxSize )
|
2018-12-04 23:00:49 +11:00
|
|
|
{
|
|
|
|
m_landInventoryMap[ type ] = make_ItemContainer( type, maxSize, "houseiteminventory", true, true );
|
|
|
|
};
|
|
|
|
|
2018-12-20 21:52:18 +11:00
|
|
|
setupContainer( InventoryType::HousingOutdoorAppearance, 8 );
|
|
|
|
setupContainer( InventoryType::HousingOutdoorPlacedItems, m_maxPlacedExternalItems );
|
|
|
|
setupContainer( InventoryType::HousingOutdoorStoreroom, m_maxPlacedExternalItems );
|
|
|
|
|
|
|
|
setupContainer( InventoryType::HousingInteriorAppearance, 9 );
|
2018-12-21 22:08:05 +11:00
|
|
|
|
|
|
|
// nb: so we're going to store these internally in one container because SE is fucked in the head
|
|
|
|
// but when an inventory is requested, we will split them into groups of 50
|
|
|
|
setupContainer( InventoryType::HousingInteriorPlacedItems1, m_maxPlacedInternalItems );
|
|
|
|
setupContainer( InventoryType::HousingInteriorStoreroom1, m_maxPlacedInternalItems );
|
2018-12-21 23:49:46 +11:00
|
|
|
|
2018-12-22 01:00:31 +11:00
|
|
|
loadItemContainerContents();
|
2018-12-20 21:52:18 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
void Sapphire::Land::loadItemContainerContents()
|
|
|
|
{
|
2018-12-21 23:49:46 +11:00
|
|
|
if( !m_pHouse )
|
|
|
|
return;
|
|
|
|
|
|
|
|
auto ident = *reinterpret_cast< uint64_t* >( &m_landIdent );
|
2018-12-22 01:00:31 +11:00
|
|
|
g_fw.get< Sapphire::Logger >()->debug( "Loading housing inventory for ident: " + std::to_string( ident ) );
|
2018-12-21 23:49:46 +11:00
|
|
|
|
|
|
|
auto pDB = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
|
|
|
|
|
2018-12-22 01:00:31 +11:00
|
|
|
auto stmt = pDB->getPreparedStatement( Db::LAND_INV_SEL_HOUSE );
|
|
|
|
stmt->setUInt64( 1, ident );
|
|
|
|
|
|
|
|
auto res = pDB->query( stmt );
|
2018-12-20 21:52:18 +11:00
|
|
|
|
2018-12-22 01:00:31 +11:00
|
|
|
std::unordered_map< uint16_t, std::vector< std::pair< uint16_t, uint32_t > > > items;
|
2018-12-21 23:49:46 +11:00
|
|
|
|
|
|
|
while( res->next() )
|
|
|
|
{
|
|
|
|
auto containerId = res->getUInt( "ContainerId" );
|
|
|
|
auto itemId = res->getUInt64( "ItemId" );
|
|
|
|
auto slotId = res->getUInt( "SlotId" );
|
|
|
|
|
2018-12-22 01:00:31 +11:00
|
|
|
items[ containerId ].push_back( std::make_pair( slotId, itemId ) );
|
2018-12-21 23:49:46 +11:00
|
|
|
}
|
2018-12-21 22:08:05 +11:00
|
|
|
|
2018-12-22 01:00:31 +11:00
|
|
|
res.reset();
|
|
|
|
|
|
|
|
for( auto it = items.begin(); it != items.end(); it++ )
|
|
|
|
{
|
|
|
|
auto container = m_landInventoryMap[ it->first ];
|
|
|
|
|
|
|
|
for( auto fuck = it->second.begin(); fuck != it->second.end(); fuck++ )
|
|
|
|
{
|
|
|
|
auto item = Sapphire::Items::Util::loadItem( fuck->second );
|
|
|
|
if( item )
|
|
|
|
container->setItem( fuck->first, item );
|
|
|
|
}
|
|
|
|
}
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint32_t Sapphire::Land::convertItemIdToHousingItemId( uint32_t itemId )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
|
|
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
2018-11-29 16:55:48 +01:00
|
|
|
auto info = pExdData->get< Sapphire::Data::Item >( itemId );
|
2018-11-01 23:56:43 +01:00
|
|
|
return info->additionalData;
|
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint32_t Sapphire::Land::getCurrentPrice() const
|
2018-11-04 23:47:10 +01:00
|
|
|
{
|
|
|
|
return m_currentPrice;
|
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint32_t Sapphire::Land::getMaxPrice() const
|
2018-11-17 01:16:44 +01:00
|
|
|
{
|
|
|
|
return m_maxPrice;
|
|
|
|
}
|
|
|
|
|
2018-11-01 23:56:43 +01:00
|
|
|
//Primary State
|
2018-11-29 16:55:48 +01:00
|
|
|
void Sapphire::Land::setSize( uint8_t size )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
m_size = size;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
void Sapphire::Land::setState( uint8_t state )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
m_state = state;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
void Sapphire::Land::setSharing( uint8_t state )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
m_iconAddIcon = state;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
void Sapphire::Land::setLandType( Common::LandType type )
|
2018-11-13 19:48:22 +01:00
|
|
|
{
|
|
|
|
m_type = type;
|
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint8_t Sapphire::Land::getSize() const
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
return m_size;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint8_t Sapphire::Land::getState() const
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
return m_state;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint8_t Sapphire::Land::getSharing() const
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
return m_iconAddIcon;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint32_t Sapphire::Land::getLandSetId() const
|
2018-11-10 19:00:13 +01:00
|
|
|
{
|
|
|
|
return m_landSetId;
|
|
|
|
}
|
|
|
|
|
2018-12-21 22:08:05 +11:00
|
|
|
Sapphire::Common::LandIdent Sapphire::Land::getLandIdent() const
|
2018-11-10 19:00:13 +01:00
|
|
|
{
|
2018-12-21 22:08:05 +11:00
|
|
|
return m_landIdent;
|
2018-11-10 19:00:13 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
Sapphire::HousePtr Sapphire::Land::getHouse() const
|
2018-11-19 09:40:44 +01:00
|
|
|
{
|
2018-11-19 11:55:29 +01:00
|
|
|
return m_pHouse;
|
2018-11-19 09:40:44 +01:00
|
|
|
}
|
|
|
|
|
2018-11-30 22:52:08 +11:00
|
|
|
FFXIVARR_POSITION3 Sapphire::Land::getMapMarkerPosition()
|
|
|
|
{
|
|
|
|
return m_mapMarkerPosition;
|
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
Sapphire::Common::LandType Sapphire::Land::getLandType() const
|
2018-11-13 19:48:22 +01:00
|
|
|
{
|
|
|
|
return m_type;
|
|
|
|
}
|
|
|
|
|
2018-11-01 23:56:43 +01:00
|
|
|
//Free Comapny
|
2018-11-29 16:55:48 +01:00
|
|
|
void Sapphire::Land::setFreeCompany( uint32_t id, uint32_t icon, uint32_t color )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
m_fcId = id;
|
|
|
|
m_fcIcon = icon;
|
|
|
|
m_fcIconColor = color; //RGBA
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint32_t Sapphire::Land::getFcId()
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
return m_fcIcon;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint32_t Sapphire::Land::getFcIcon()
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
return m_fcIcon;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint32_t Sapphire::Land::getFcColor()
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-14 09:22:17 +01:00
|
|
|
return m_fcIconColor;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
//Player
|
2018-12-19 16:03:35 +11:00
|
|
|
void Sapphire::Land::setOwnerId( uint64_t id )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-12-19 16:03:35 +11:00
|
|
|
m_ownerId = id;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-12-19 16:03:35 +11:00
|
|
|
uint64_t Sapphire::Land::getOwnerId()
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-12-19 16:03:35 +11:00
|
|
|
return m_ownerId;
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint32_t Sapphire::Land::getDevaluationTime()
|
2018-11-07 11:08:07 +01:00
|
|
|
{
|
2018-11-10 23:47:19 +01:00
|
|
|
return m_nextDrop - static_cast< uint32_t >( Util::getTimeSeconds() );
|
2018-11-07 11:08:07 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
void Sapphire::Land::setCurrentPrice( uint32_t currentPrice )
|
2018-11-17 01:16:44 +01:00
|
|
|
{
|
|
|
|
m_currentPrice = currentPrice;
|
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
void Sapphire::Land::setLandTag( uint8_t slot, uint8_t tag )
|
2018-11-10 19:00:13 +01:00
|
|
|
{
|
|
|
|
m_tag[ slot ] = tag;
|
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint8_t Sapphire::Land::getLandTag( uint8_t slot )
|
2018-11-10 19:00:13 +01:00
|
|
|
{
|
|
|
|
return m_tag[ slot ];
|
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
void Sapphire::Land::updateLandDb()
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-25 01:55:53 +11:00
|
|
|
uint32_t houseId = 0;
|
|
|
|
|
|
|
|
if( getHouse() )
|
|
|
|
houseId = getHouse()->getHouseId();
|
|
|
|
|
2018-11-26 23:32:22 +11:00
|
|
|
// todo: change to prepared statement
|
2018-11-10 19:00:13 +01:00
|
|
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
|
2018-11-14 09:22:17 +01:00
|
|
|
pDb->directExecute( "UPDATE land SET status = " + std::to_string( m_state )
|
2018-11-10 19:00:13 +01:00
|
|
|
+ ", LandPrice = " + std::to_string( getCurrentPrice() )
|
|
|
|
+ ", UpdateTime = " + std::to_string( getDevaluationTime() )
|
2018-12-19 16:03:35 +11:00
|
|
|
+ ", OwnerId = " + std::to_string( getOwnerId() )
|
2018-11-25 01:55:53 +11:00
|
|
|
+ ", HouseId = " + std::to_string( houseId )
|
2018-11-13 19:48:22 +01:00
|
|
|
+ ", Type = " + std::to_string( static_cast< uint32_t >( m_type ) ) //TODO: add house id
|
2018-11-10 19:00:13 +01:00
|
|
|
+ " WHERE LandSetId = " + std::to_string( m_landSetId )
|
2018-12-21 22:08:05 +11:00
|
|
|
+ " AND LandId = " + std::to_string( m_landIdent.landId ) + ";" );
|
2018-11-26 23:32:22 +11:00
|
|
|
|
|
|
|
if( auto house = getHouse() )
|
|
|
|
house->updateHouseDb();
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
void Sapphire::Land::update( uint32_t currTime )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-07 11:08:07 +01:00
|
|
|
if( getState() == HouseState::forSale )
|
2018-11-01 23:56:43 +01:00
|
|
|
{
|
2018-11-09 10:00:36 +01:00
|
|
|
if( m_nextDrop < currTime && m_minPrice < m_currentPrice )
|
2018-11-07 11:08:07 +01:00
|
|
|
{
|
2018-11-09 10:00:36 +01:00
|
|
|
m_nextDrop = currTime + 21600;
|
2018-12-02 02:01:41 +01:00
|
|
|
m_currentPrice = static_cast< uint32_t >( ( m_currentPrice / 100 ) * 99.58f );
|
2018-11-15 12:40:02 +01:00
|
|
|
updateLandDb();
|
2018-11-07 11:08:07 +01:00
|
|
|
}
|
2018-11-01 23:56:43 +01:00
|
|
|
}
|
2018-11-14 09:22:17 +01:00
|
|
|
}
|
2018-11-24 15:17:18 +11:00
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
uint32_t Sapphire::Land::getNextHouseId()
|
2018-11-25 01:55:53 +11:00
|
|
|
{
|
|
|
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
|
|
|
|
auto pQR = pDb->query( "SELECT MAX( HouseId ) FROM house" );
|
|
|
|
|
|
|
|
if( !pQR->next() )
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
return pQR->getUInt( 1 ) + 1;
|
|
|
|
}
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
bool Sapphire::Land::setPreset( uint32_t itemId )
|
2018-11-24 15:17:18 +11:00
|
|
|
{
|
|
|
|
auto housingItemId = convertItemIdToHousingItemId( itemId );
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
auto exdData = g_fw.get< Sapphire::Data::ExdDataGenerated >();
|
2018-11-24 15:17:18 +11:00
|
|
|
if( !exdData )
|
|
|
|
return false;
|
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
auto housingPreset = exdData->get< Sapphire::Data::HousingPreset >( housingItemId );
|
2018-11-25 01:55:53 +11:00
|
|
|
if( !housingPreset )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
if( !getHouse() )
|
|
|
|
{
|
|
|
|
// todo: i guess we'd create a house here?
|
|
|
|
auto newId = getNextHouseId();
|
2018-12-21 22:08:05 +11:00
|
|
|
m_pHouse = make_House( newId, getLandSetId(), getLandIdent() );
|
2018-11-25 01:55:53 +11:00
|
|
|
}
|
|
|
|
|
2018-12-02 14:59:24 +11:00
|
|
|
|
2018-11-26 17:56:29 +11:00
|
|
|
getHouse()->setHousePart( Common::HousePartSlot::ExteriorRoof, convertItemIdToHousingItemId( housingPreset->exteriorRoof ) );
|
|
|
|
getHouse()->setHousePart( Common::HousePartSlot::ExteriorWall, convertItemIdToHousingItemId( housingPreset->exteriorWall ) );
|
|
|
|
getHouse()->setHousePart( Common::HousePartSlot::ExteriorWindow, convertItemIdToHousingItemId( housingPreset->exteriorWindow ) );
|
|
|
|
getHouse()->setHousePart( Common::HousePartSlot::ExteriorDoor, convertItemIdToHousingItemId( housingPreset->exteriorDoor ) );
|
2018-11-24 15:17:18 +11:00
|
|
|
|
2018-12-02 14:59:24 +11:00
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorWall, convertItemIdToHousingItemId( housingPreset->interiorWall ) );
|
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorFloor, convertItemIdToHousingItemId( housingPreset->interiorFlooring ) );
|
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorLight, convertItemIdToHousingItemId( housingPreset->interiorLighting ) );
|
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorWall_Attic, convertItemIdToHousingItemId( housingPreset->otherFloorWall ) );
|
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorFloor_Attic, convertItemIdToHousingItemId( housingPreset->otherFloorFlooring ) );
|
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorLight_Attic, convertItemIdToHousingItemId( housingPreset->otherFloorLighting ) );
|
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorWall_Basement, convertItemIdToHousingItemId( housingPreset->basementWall ) );
|
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorFloor_Basement, convertItemIdToHousingItemId( housingPreset->basementFlooring ) );
|
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorLight_Basement, convertItemIdToHousingItemId( housingPreset->basementLighting ) );
|
|
|
|
getHouse()->setHouseInteriorPart( Common::HousingInteriorSlot::InteriorLight_Mansion, convertItemIdToHousingItemId( housingPreset->mansionLighting ) );
|
2018-12-01 21:40:30 +01:00
|
|
|
|
|
|
|
|
2018-11-25 01:55:53 +11:00
|
|
|
return true;
|
2018-11-24 15:17:18 +11:00
|
|
|
}
|
2018-12-05 19:58:43 +11:00
|
|
|
|
2018-12-07 20:11:59 +11:00
|
|
|
Sapphire::ItemContainerPtr Sapphire::Land::getItemContainer( uint16_t inventoryType ) const
|
2018-12-05 19:58:43 +11:00
|
|
|
{
|
|
|
|
auto container = m_landInventoryMap.find( inventoryType );
|
|
|
|
if( container == m_landInventoryMap.end() )
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
return container->second;
|
|
|
|
}
|