diff --git a/sql/update_land.sql b/sql/update_land.sql new file mode 100644 index 00000000..9827b1c5 --- /dev/null +++ b/sql/update_land.sql @@ -0,0 +1 @@ +ALTER TABLE `land` ADD `Type` SMALLINT(6) NOT NULL DEFAULT '0' AFTER `LandId`; \ No newline at end of file diff --git a/src/common/Common.h b/src/common/Common.h index cc4fedf1..602ea356 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -781,6 +781,13 @@ namespace Core::Common SharedHouse2 }; + enum class LandType : uint8_t + { + none = 0, + FreeCompany = 1, + Private = 2, + }; + struct LandPermissionSet { int16_t landId; //00 diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index 5ec751c4..40943d99 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -379,8 +379,8 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR std::string playerName = g_fw.get< Core::ServerZone >()->getPlayerNameFromDb( playerId ); //memcpy( &landInfoSignPacket->data().estateGreeting, "Hello World", 11 ); //memcpy( &landInfoSignPacket->data().estateName, land->getLandName().c_str(), land->getLandName().size() ); - //landInfoSignPacket->data().houseSize = land->getPlotSize(); - landInfoSignPacket->data().houseType = 2; // we really need to save this in the plot + landInfoSignPacket->data().houseSize = land->getPlotSize(); + landInfoSignPacket->data().houseType = static_cast< uint8_t >( land->getLandType() ); landInfoSignPacket->data().landId = land->getLandId(); landInfoSignPacket->data().ownerId = player.getContentId(); // should be real owner contentId, not player.contentId() memcpy( &landInfoSignPacket->data().ownerName, playerName.c_str(), playerName.size() ); diff --git a/src/servers/sapphire_zone/Zone/HousingZone.cpp b/src/servers/sapphire_zone/Zone/HousingZone.cpp index 8f45e1a5..a0ed7e93 100644 --- a/src/servers/sapphire_zone/Zone/HousingZone.cpp +++ b/src/servers/sapphire_zone/Zone/HousingZone.cpp @@ -190,6 +190,7 @@ Core::LandPurchaseResult Core::HousingZone::purchseLand( Entity::Player& player, player.removeCurrency( CurrencyType::Gil, plotPrice ); pLand->setPlayerOwner( player.getId() ); pLand->setState( HouseState::sold ); + pLand->setLandType( Common::LandType::Private ); player.setLandPermissions( LandPermissionSlot::Private, 0x00, plot, pHousing->getWardNum(), pHousing->getTerritoryTypeId() ); player.sendLandPermissions(); diff --git a/src/servers/sapphire_zone/Zone/Land.cpp b/src/servers/sapphire_zone/Zone/Land.cpp index 0d5bb7b3..54e90c8a 100644 --- a/src/servers/sapphire_zone/Zone/Land.cpp +++ b/src/servers/sapphire_zone/Zone/Land.cpp @@ -35,7 +35,8 @@ Core::Land::Land( uint16_t zoneId, uint8_t wardNum, uint8_t landId, uint32_t lan m_nextDrop( static_cast< uint32_t >( Util::getTimeSeconds() ) + 21600 ), m_ownerPlayerId( 0 ), m_landSetId( landSetId ), - m_landInfo( info ) + m_landInfo( info ), + m_type( Common::LandType::Private ) { memset( &m_land, 0x00, sizeof( LandStruct ) ); memset( &m_tag, 0x00, 3 ); @@ -57,8 +58,9 @@ void Core::Land::load() "AND LandId = " + std::to_string( m_landId ) ); if( !res->next() ) { - pDb->directExecute( "INSERT INTO land ( landsetid, landid, size, status, landprice ) " + pDb->directExecute( "INSERT INTO land ( landsetid, landid, type, size, status, landprice ) " "VALUES ( " + std::to_string( m_landSetId ) + "," + std::to_string( m_landId ) + "," + + std::to_string( static_cast< uint8_t >( m_type ) ) + "," + std::to_string( m_landInfo->sizes[ m_landId ] ) + "," + " 1, " + std::to_string( m_landInfo->prices[ m_landId ] ) + " );" ); @@ -69,6 +71,7 @@ void Core::Land::load() } else { + m_type = static_cast< Common::LandType >( res->getUInt( "Type" ) ); m_land.plotSize = res->getUInt( "Size" ); m_land.houseState = res->getUInt( "Status" ); m_currentPrice = res->getUInt( "LandPrice" ); @@ -161,51 +164,61 @@ void Core::Land::setLandName( const std::string& name ) memcpy( &m_landName, name.c_str(), 20 ); } -uint8_t Core::Land::getPlotSize() +void Core::Land::setLandType( Common::LandType type ) +{ + m_type = type; +} + +uint8_t Core::Land::getPlotSize() const { return m_land.plotSize; } -uint8_t Core::Land::getState() +uint8_t Core::Land::getState() const { return m_land.houseState; } -uint8_t Core::Land::getOwnership() +uint8_t Core::Land::getOwnership() const { return m_land.iconColor; } -uint8_t Core::Land::getSharing() +uint8_t Core::Land::getSharing() const { return m_land.iconAddIcon; } -uint32_t Core::Land::getLandSetId() +uint32_t Core::Land::getLandSetId() const { return m_landSetId; } -uint8_t Core::Land::getWardNum() +uint8_t Core::Land::getWardNum() const { return m_wardNum; } -uint8_t Core::Land::getLandId() +uint8_t Core::Land::getLandId() const { return m_landId; } -uint16_t Core::Land::getZoneId() +uint16_t Core::Land::getZoneId() const { return m_zoneId; } -std::string Core::Land::getLandName() +std::string Core::Land::getLandName() const { return std::string( m_landName ); } +Core::Common::LandType Core::Land::getLandType() const +{ + return m_type; +} + //Free Comapny void Core::Land::setFreeCompany( uint32_t id, uint32_t icon, uint32_t color ) { @@ -314,6 +327,7 @@ void Core::Land::UpdateLandDb() + ", UpdateTime = " + std::to_string( getDevaluationTime() ) + ", OwnerId = " + std::to_string( getPlayerOwner() ) + ", HouseId = " + std::to_string( 0 ) //TODO: add house id + + ", Type = " + std::to_string( static_cast< uint32_t >( m_type ) ) //TODO: add house id + " WHERE LandSetId = " + std::to_string( m_landSetId ) + " AND LandId = " + std::to_string( m_landId ) + ";" ); } diff --git a/src/servers/sapphire_zone/Zone/Land.h b/src/servers/sapphire_zone/Zone/Land.h index cc7c3825..f8e64a49 100644 --- a/src/servers/sapphire_zone/Zone/Land.h +++ b/src/servers/sapphire_zone/Zone/Land.h @@ -26,17 +26,19 @@ namespace Core void setOwnership( uint8_t state ); void setSharing( uint8_t state ); void setLandName( const std::string& name ); + void setLandType( Common::LandType type ); //Gerneral - uint8_t getPlotSize(); - uint8_t getState(); - uint8_t getOwnership(); - uint8_t getSharing(); - uint32_t getLandSetId(); - uint8_t getWardNum(); - uint8_t getLandId(); - uint16_t getZoneId(); - std::string getLandName(); + uint8_t getPlotSize() const; + uint8_t getState() const; + uint8_t getOwnership() const; + uint8_t getSharing() const; + uint32_t getLandSetId() const; + uint8_t getWardNum() const; + uint8_t getLandId() const; + uint16_t getZoneId() const; + std::string getLandName() const; + Common::LandType getLandType() const; //Free Comapny void setFreeCompany( uint32_t id, uint32_t icon, uint32_t color ); @@ -79,6 +81,7 @@ namespace Core uint32_t m_landSetId; uint16_t m_zoneId; Common::LandStruct m_land; + Common::LandType m_type; uint32_t m_ownerPlayerId; Core::Data::HousingLandSetPtr m_landInfo;