1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-04 09:47:46 +00:00

#448 - remove deed on build

This commit is contained in:
NotAdam 2018-12-30 17:44:03 +11:00
parent c4f0623b62
commit 79ed3d63d9
8 changed files with 56 additions and 22 deletions

View file

@ -791,7 +791,7 @@ namespace Sapphire::Common
ExteriorFence
};
enum HousingInteriorSlot
enum HouseInteriorSlot
{
InteriorWall,
InteriorFloor,

View file

@ -916,7 +916,7 @@ namespace Sapphire::Entity
uint32_t getNextInventorySequence();
void send();
bool findFirstItemWithId( uint32_t catalogId, Inventory::InventoryContainerPair& location );
uint8_t getFreeSlotsInBags();

View file

@ -933,3 +933,24 @@ void Sapphire::Entity::Player::insertInventoryItem( Sapphire::Common::InventoryT
queuePacket( slotUpdate );
}
bool Sapphire::Entity::Player::findFirstItemWithId( uint32_t catalogId,
Inventory::InventoryContainerPair& location )
{
for( auto bagId : { Bag0, Bag1, Bag2, Bag3 } )
{
auto& container = m_storageMap[ bagId ];
for( const auto& item : container->getItemMap() )
{
if( item.second->getId() != catalogId )
continue;
location = std::make_pair( bagId, item.first );
return true;
}
}
return false;
}

View file

@ -564,6 +564,18 @@ bool Sapphire::World::Manager::HousingMgr::initHouseModels( Entity::Player& play
if( !preset )
return false;
// remove preset item
Inventory::InventoryContainerPair foundItem;
if( !player.findFirstItemWithId( presetCatalogId, foundItem ) )
return false;
auto item = player.dropInventoryItem( foundItem.first, foundItem.second );
if( !item )
return false;
// move preset item into ext appearance container
houseInventory[ InventoryType::HousingExteriorAppearance ]->setItem( HouseExteriorSlot::HousePermit, item );
// high iq shit
auto invMap = std::map< uint16_t, std::map< uint32_t, int32_t > >
{
@ -583,19 +595,19 @@ bool Sapphire::World::Manager::HousingMgr::initHouseModels( Entity::Player& play
InventoryType::HousingInteriorAppearance,
{
// lobby/middle floor
{ HousingInteriorSlot::InteriorWall, preset->interiorWall },
{ HousingInteriorSlot::InteriorFloor, preset->interiorFlooring },
{ HousingInteriorSlot::InteriorLight, preset->interiorLighting },
{ HouseInteriorSlot::InteriorWall, preset->interiorWall },
{ HouseInteriorSlot::InteriorFloor, preset->interiorFlooring },
{ HouseInteriorSlot::InteriorLight, preset->interiorLighting },
// attic
{ HousingInteriorSlot::InteriorWall_Attic, preset->otherFloorWall },
{ HousingInteriorSlot::InteriorFloor_Attic, preset->otherFloorFlooring },
{ HousingInteriorSlot::InteriorLight_Attic, preset->otherFloorLighting },
{ HouseInteriorSlot::InteriorWall_Attic, preset->otherFloorWall },
{ HouseInteriorSlot::InteriorFloor_Attic, preset->otherFloorFlooring },
{ HouseInteriorSlot::InteriorLight_Attic, preset->otherFloorLighting },
// basement
{ HousingInteriorSlot::InteriorWall_Basement, preset->basementWall },
{ HousingInteriorSlot::InteriorFloor_Basement, preset->basementFlooring },
{ HousingInteriorSlot::InteriorLight_Basement, preset->basementLighting },
{ HouseInteriorSlot::InteriorWall_Basement, preset->basementWall },
{ HouseInteriorSlot::InteriorFloor_Basement, preset->basementFlooring },
{ HouseInteriorSlot::InteriorLight_Basement, preset->basementLighting },
}
}
};
@ -641,7 +653,7 @@ void Sapphire::World::Manager::HousingMgr::createHouse( Sapphire::HousePtr house
pDb->execute( stmt );
}
void Sapphire::World::Manager::HousingMgr::buildPresetEstate( Entity::Player& player, uint8_t plotNum, uint32_t presetItem )
void Sapphire::World::Manager::HousingMgr::buildPresetEstate( Entity::Player& player, uint8_t plotNum, uint32_t presetCatalogId )
{
auto hZone = std::dynamic_pointer_cast< HousingZone >( player.getCurrentZone() );
@ -656,8 +668,6 @@ void Sapphire::World::Manager::HousingMgr::buildPresetEstate( Entity::Player& pl
if( pLand->getOwnerId() != player.getId() )
return;
// todo: check if permit is in inventory and remove one
// create house
auto ident = pLand->getLandIdent();
auto house = make_House( getNextHouseId(), pLand->getLandSetId(), ident,
@ -666,8 +676,11 @@ void Sapphire::World::Manager::HousingMgr::buildPresetEstate( Entity::Player& pl
pLand->setHouse( house );
// create inventory items
if( !initHouseModels( player, pLand, presetItem ) )
if( !initHouseModels( player, pLand, presetCatalogId ) )
{
pLand->setHouse( nullptr );
return;
}
createHouse( house );
@ -913,7 +926,7 @@ void Sapphire::World::Manager::HousingMgr::updateHouseModels( Sapphire::HousePtr
{
for( auto& item : intContainer->second->getItemMap() )
{
house->setInteriorModel( static_cast< Common::HousingInteriorSlot >( item.first ),
house->setInteriorModel( static_cast< Common::HouseInteriorSlot >( item.first ),
getItemAdditionalData( item.second->getId() ) );
}
}

View file

@ -91,7 +91,7 @@ namespace Sapphire::World::Manager
bool relinquishLand( Entity::Player& player, uint8_t plot );
void buildPresetEstate( Entity::Player& player, uint8_t plotNum, uint32_t presetItem );
void buildPresetEstate( Entity::Player& player, uint8_t plotNum, uint32_t presetCatalogId );
void requestEstateRename( Entity::Player& player, const Common::LandIdent ident );

View file

@ -96,12 +96,12 @@ Sapphire::House::HousePart Sapphire::House::getExteriorModel( Sapphire::Common::
return m_exteriorModelCache[ slot ];
}
void Sapphire::House::setInteriorModel( Sapphire::Common::HousingInteriorSlot slot, uint32_t modelId )
void Sapphire::House::setInteriorModel( Sapphire::Common::HouseInteriorSlot slot, uint32_t modelId )
{
m_interiorModelCache[ slot ] = modelId;
}
uint32_t Sapphire::House::getInteriorModel( Sapphire::Common::HousingInteriorSlot slot )
uint32_t Sapphire::House::getInteriorModel( Sapphire::Common::HouseInteriorSlot slot )
{
return m_interiorModelCache[ slot ];
}

View file

@ -34,8 +34,8 @@ namespace Sapphire
void setExteriorModel( Common::HouseExteriorSlot slot, uint32_t modelId, uint16_t stain );
HousePart getExteriorModel( Common::HouseExteriorSlot slot );
void setInteriorModel( Common::HousingInteriorSlot slot, uint32_t modelId );
uint32_t getInteriorModel( Common::HousingInteriorSlot slot );
void setInteriorModel( Common::HouseInteriorSlot slot, uint32_t modelId );
uint32_t getInteriorModel( Common::HouseInteriorSlot slot );
HouseModelsArray const& getHouseModels() const;

View file

@ -71,7 +71,7 @@ void Sapphire::World::Territory::Housing::HousingInteriorTerritory::onPlayerZone
for( auto i = 0; i < 10; i++ )
{
indoorInitPacket->data().indoorItems[ i ] = pHouse->getInteriorModel(
static_cast< Common::HousingInteriorSlot >( i ) );
static_cast< Common::HouseInteriorSlot >( i ) );
}
player.queuePacket( indoorInitPacket );