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

housing item containers and some minor cleanup/refactoring

This commit is contained in:
NotAdam 2018-12-04 23:00:49 +11:00
parent e2b7012f3d
commit ef7a448ebc
4 changed files with 48 additions and 35 deletions

View file

@ -0,0 +1,9 @@
CREATE TABLE `houseiteminventory` (
`landIdent` BIGINT(20) UNSIGNED NOT NULL,
`containerId` INT(10) UNSIGNED NOT NULL,
`itemId` INT(20) NOT NULL,
INDEX `landIdent` (`landIdent`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

View file

@ -223,8 +223,9 @@ namespace Sapphire::Common
FreeCompanyCrystal = 22001,
HousingExternalAppearance = 25000,
HousingOutdoorItems = 25001,
HousingOutdoorItemStoreroom = 25001,
HousingInternalAppearance = 25002,
HousingIndoorItemStoreroom = 25003,
};
enum ContainerType : uint16_t
@ -826,9 +827,9 @@ namespace Sapphire::Common
enum HouseSize : uint8_t
{
small,
medium,
big
Cottage,
House,
Mansion
};
enum HouseState : uint8_t

View file

@ -45,7 +45,7 @@ Sapphire::Land::Land( uint16_t territoryTypeId, uint8_t wardNum, uint8_t landId,
{
memset( &m_tag, 0x00, 3 );
load();
init();
}
Sapphire::Land::~Land()
@ -53,7 +53,7 @@ Sapphire::Land::~Land()
}
void Sapphire::Land::load()
void Sapphire::Land::init()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto res = pDb->query( "SELECT * FROM land WHERE LandSetId = " + std::to_string( m_landSetId ) + " "
@ -98,7 +98,34 @@ void Sapphire::Land::load()
m_mapMarkerPosition.z = info->z;
}
init();
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
auto setupContainer = [ this ]( InventoryType type, uint8_t maxSize )
{
m_landInventoryMap[ type ] = make_ItemContainer( type, maxSize, "houseiteminventory", true, true );
};
setupContainer( InventoryType::HousingExternalAppearance, 8 );
setupContainer( InventoryType::HousingInternalAppearance, 8 );
setupContainer( InventoryType::HousingOutdoorItemStoreroom, m_maxPlacedExternalItems );
setupContainer( InventoryType::HousingIndoorItemStoreroom, m_maxPlacedInternalItems );
}
uint32_t Sapphire::Land::convertItemIdToHousingItemId( uint32_t itemId )
@ -223,11 +250,6 @@ uint32_t Sapphire::Land::getPlayerOwner()
return m_ownerPlayerId;
}
uint32_t Sapphire::Land::getMaxItems()
{
return m_maxItems;
}
uint32_t Sapphire::Land::getDevaluationTime()
{
return m_nextDrop - static_cast< uint32_t >( Util::getTimeSeconds() );
@ -248,25 +270,6 @@ uint8_t Sapphire::Land::getLandTag( uint8_t slot )
return m_tag[ slot ];
}
void Sapphire::Land::init()
{
switch( m_size )
{
case HouseSize::small:
m_maxItems = 20;
break;
case HouseSize::medium:
m_maxItems = 30;
break;
case HouseSize::big:
m_maxItems = 40;
break;
default:
break;
}
}
void Sapphire::Land::updateLandDb()
{
uint32_t houseId = 0;

View file

@ -18,7 +18,7 @@ namespace Sapphire
Land( uint16_t zoneId, uint8_t wardNum, uint8_t landId, uint32_t landSetId, Sapphire::Data::HousingLandSetPtr info );
virtual ~Land();
void load();
using LandInventoryMap = std::unordered_map< uint32_t, ItemContainerPtr >;
//Primary state
void setSize( uint8_t size );
@ -53,7 +53,6 @@ namespace Sapphire
void updateLandDb();
void update( uint32_t currTime );
uint32_t getMaxItems();
uint32_t getCurrentPrice() const;
uint32_t getMaxPrice() const;
uint32_t getDevaluationTime();
@ -87,8 +86,9 @@ namespace Sapphire
Sapphire::HousePtr m_pHouse;
//item storage
Sapphire::ItemContainerPtr ItemsOutdoorContainer;
uint32_t m_maxItems;
LandInventoryMap m_landInventoryMap;
uint32_t m_maxPlacedExternalItems;
uint32_t m_maxPlacedInternalItems;
//price
uint32_t m_initPrice;