1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-29 07:37:45 +00:00

Decouple land from packet struct data, add worldId to serverZone

This commit is contained in:
mordred 2018-11-14 09:22:17 +01:00
parent 361b0b463b
commit ddcfdd1631
5 changed files with 62 additions and 104 deletions

View file

@ -31,7 +31,8 @@ extern Core::Framework g_fw;
Core::ServerZone::ServerZone( const std::string& configName ) :
m_configName( configName ),
m_bRunning( true ),
m_lastDBPingTime( 0 )
m_lastDBPingTime( 0 ),
m_worldId( 67 )
{
}
@ -188,6 +189,16 @@ void Core::ServerZone::run( int32_t argc, char* argv[] )
}
uint16_t Core::ServerZone::getWorldId() const
{
return m_worldId;
}
void Core::ServerZone::setWorldId( uint16_t worldId )
{
m_worldId = worldId;
}
void Core::ServerZone::printBanner() const
{
auto pLog = g_fw.get< Core::Logger >();

View file

@ -29,6 +29,9 @@ public:
size_t getSessionCount() const;
uint16_t getWorldId() const;
void setWorldId( uint16_t worldId );
void mainLoop();
bool isRunning() const;
@ -47,8 +50,8 @@ private:
uint16_t m_port;
std::string m_ip;
int64_t m_lastDBPingTime;
bool m_bRunning;
uint16_t m_worldId;
std::string m_configName;
@ -56,9 +59,7 @@ private:
std::map< uint32_t, SessionPtr > m_sessionMapById;
std::map< std::string, SessionPtr > m_sessionMapByName;
std::map< uint32_t, uint32_t > m_zones;
std::map< std::string, Entity::BNpcTemplatePtr > m_bNpcTemplateMap;
};

View file

@ -127,9 +127,15 @@ void Core::HousingZone::sendLandSet( Entity::Player& player )
uint8_t startIndex = isPlayerSubInstance( player ) == false ? 0 : 30;
for( uint8_t i = startIndex, count = 0; i < ( startIndex + 30 ); i++ )
for( uint8_t i = startIndex, count = 0; i < ( startIndex + 30 ); ++i, ++count )
{
memcpy( &landsetInitializePacket->data().land[ count++ ], &getLand( i )->getLand(), sizeof( Common::LandStruct ) );
landsetInitializePacket->data().land[ count ].plotSize = getLand( i )->getPlotSize();
landsetInitializePacket->data().land[ count ].houseState = getLand( i )->getState();
landsetInitializePacket->data().land[ count ].iconColor = getLand( i )->getOwnership();
landsetInitializePacket->data().land[ count ].iconAddIcon = getLand( i )->getPlotSize();
landsetInitializePacket->data().land[ count ].fcId = getLand( i )->getFcId();
landsetInitializePacket->data().land[ count ].fcIcon = getLand( i )->getFcIcon();
landsetInitializePacket->data().land[ count ].fcIconColor = getLand( i )->getFcColor();
}
player.queuePacket( landsetInitializePacket );
@ -140,10 +146,17 @@ void Core::HousingZone::sendLandUpdate( uint8_t landId )
for( const auto& playerIt : m_playerMap )
{
auto pPlayer = playerIt.second;
auto pLand = getLand( landId );
auto landUpdatePacket = makeZonePacket< FFXIVIpcLandUpdate >( pPlayer->getId() );
landUpdatePacket->data().landId = landId;
landUpdatePacket->data().land = getLand( landId )->getLand();
landUpdatePacket->data().land.plotSize = pLand->getPlotSize();
landUpdatePacket->data().land.houseState = pLand->getState();
landUpdatePacket->data().land.iconColor = pLand->getOwnership();
landUpdatePacket->data().land.iconAddIcon = pLand->getPlotSize();
landUpdatePacket->data().land.fcId = pLand->getFcId();
landUpdatePacket->data().land.fcIcon = pLand->getFcIcon();
landUpdatePacket->data().land.fcIconColor = pLand->getFcColor();
pPlayer->queuePacket( landUpdatePacket );
}

View file

@ -38,7 +38,6 @@ Core::Land::Land( uint16_t zoneId, uint8_t wardNum, uint8_t landId, uint32_t lan
m_landInfo( info ),
m_type( Common::LandType::Private )
{
memset( &m_land, 0x00, sizeof( LandStruct ) );
memset( &m_tag, 0x00, 3 );
memset( &m_landMsg, 0x00, 193 );
memset( &m_landName, 0x00, 23 );
@ -66,52 +65,19 @@ void Core::Land::load()
m_currentPrice = m_landInfo->prices[ m_landId ];
m_minPrice = m_landInfo->minPrices[ m_landId ];
m_land.plotSize = m_landInfo->sizes[ m_landId ];
m_land.houseState = HouseState::forSale;
m_size = m_landInfo->sizes[ m_landId ];
m_state = HouseState::forSale;
}
else
{
m_type = static_cast< Common::LandType >( res->getUInt( "Type" ) );
m_land.plotSize = res->getUInt( "Size" );
m_land.houseState = res->getUInt( "Status" );
m_size = res->getUInt( "Size" );
m_state = res->getUInt( "Status" );
m_currentPrice = res->getUInt( "LandPrice" );
m_ownerPlayerId = res->getUInt( "OwnerId" );
m_minPrice = m_landInfo->minPrices[ m_landId ];
}
init();
// setPreset( 262145 );
/* auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto res = pDb->query( "SELECT * FROM land WHERE Id = " + std::to_string( m_landKey ) );
if( !res->next() )
{
setHouseSize( HouseSizeType::smallHouse );//ToDo: get house site from ExD (Landset first 60 rows)
m_currentPrice = m_initPrice;
m_land.color[ 7 ] = 0xFF;
m_ownerPlayerId = 0;
m_nextDrop = 0;
setState( HouseStateType::forSell );
auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::LAND_INS );
stmt->setUInt( 1, m_landKey );
pDb->directExecute( stmt );
Init();
}
else
{
Init();
if( getState() == HouseStateType::privateHouse || getState() == HouseStateType::sold )
{
m_ownerPlayerId = res->getUInt( "ownerPlayerId" );
}
else if( getState() == HouseStateType::forSell )
{
m_currentPrice = res->getUInt( "currentPrice" );
m_nextDrop = res->getUInt( "nextDrop" );
m_ownerPlayerId = 0;
}
}
ItemsOutdoorContainer = make_ItemContainer( InventoryType::HousingOutdoorItems,
m_maxItems,
"housingoutdooritems", true );*/
}
uint16_t Core::Land::convertItemIdToHousingItemId( uint16_t itemId )
@ -126,37 +92,25 @@ uint32_t Core::Land::getCurrentPrice() const
return m_currentPrice;
}
void Core::Land::setPreset( uint32_t id )
{
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto info = pExdData->get< Core::Data::HousingPreset >( convertItemIdToHousingItemId( id ) );
setHousePart( Common::HousePartSlot::ExteriorRoof, info->exteriorRoof );
setHousePart( Common::HousePartSlot::ExteriorWall, info->exteriorWall );
setHousePart( Common::HousePartSlot::ExteriorWindow, info->exteriorWindow );
setHousePart( Common::HousePartSlot::BasementWall, info->basementWall );
setHousePart( Common::HousePartSlot::OtherFloorFlooring, info->otherFloorFlooring );
setHousePart( Common::HousePartSlot::OtherFloorWall, info->otherFloorWall );
}
//Primary State
void Core::Land::setHouseSize( uint8_t size )
{
m_land.plotSize = size;
m_size = size;
}
void Core::Land::setState( uint8_t state )
{
m_land.houseState = state;
m_state = state;
}
void Core::Land::setOwnership( uint8_t state )
{
m_land.iconColor = state;
m_iconColor = state;
}
void Core::Land::setSharing( uint8_t state )
{
m_land.iconAddIcon = state;
m_iconAddIcon = state;
}
void Core::Land::setLandName( const std::string& name )
@ -171,22 +125,22 @@ void Core::Land::setLandType( Common::LandType type )
uint8_t Core::Land::getPlotSize() const
{
return m_land.plotSize;
return m_size;
}
uint8_t Core::Land::getState() const
{
return m_land.houseState;
return m_state;
}
uint8_t Core::Land::getOwnership() const
{
return m_land.iconColor;
return m_iconColor;
}
uint8_t Core::Land::getSharing() const
{
return m_land.iconAddIcon;
return m_iconAddIcon;
}
uint32_t Core::Land::getLandSetId() const
@ -222,46 +176,24 @@ Core::Common::LandType Core::Land::getLandType() const
//Free Comapny
void Core::Land::setFreeCompany( uint32_t id, uint32_t icon, uint32_t color )
{
m_land.fcId = id;
m_land.fcIcon = icon;
m_land.fcIconColor = color; //RGBA
m_fcId = id;
m_fcIcon = icon;
m_fcIconColor = color; //RGBA
}
uint32_t Core::Land::getFcId()
{
return m_land.fcIcon;
return m_fcIcon;
}
uint32_t Core::Land::getFcIcon()
{
return m_land.fcIcon;
return m_fcIcon;
}
uint32_t Core::Land::getFcColor()
{
return m_land.fcIconColor;
}
//House Data
void Core::Land::setHousePart( Common::HousePartSlot slot, uint16_t id )
{
m_land.housePart[ slot ] = convertItemIdToHousingItemId( id );
}
uint16_t Core::Land::getHousePart( Common::HousePartSlot slot )
{
return m_land.housePart[ slot ];
}
//Color
void Core::Land::setColor( uint8_t slot, uint8_t color )
{
m_land.color[ slot ] = color;
}
uint8_t Core::Land::getColor( uint8_t slot )
{
return m_land.color[ slot ];
return m_fcIconColor;
}
//Player
@ -275,11 +207,6 @@ uint32_t Core::Land::getPlayerOwner()
return m_ownerPlayerId;
}
const LandStruct& Core::Land::getLand()
{
return m_land;
}
uint32_t Core::Land::getMaxItems()
{
return m_maxItems;
@ -322,7 +249,7 @@ void Core::Land::init()
void Core::Land::UpdateLandDb()
{
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
pDb->directExecute( "UPDATE land SET status = " + std::to_string( m_land.houseState )
pDb->directExecute( "UPDATE land SET status = " + std::to_string( m_state )
+ ", LandPrice = " + std::to_string( getCurrentPrice() )
+ ", UpdateTime = " + std::to_string( getDevaluationTime() )
+ ", OwnerId = " + std::to_string( getPlayerOwner() )

View file

@ -62,7 +62,6 @@ namespace Core
void UpdateLandDb();
void Update( uint32_t currTime );
const Common::LandStruct& getLand();
uint32_t getMaxItems();
uint32_t getCurrentPrice() const;
@ -80,7 +79,14 @@ namespace Core
uint8_t m_landId;
uint32_t m_landSetId;
uint16_t m_zoneId;
Common::LandStruct m_land;
uint8_t m_size;
uint8_t m_state;
uint8_t m_iconColor;
uint8_t m_iconAddIcon;
uint32_t m_fcId;
uint32_t m_fcIcon;
uint32_t m_fcIconColor;
Common::LandType m_type;
uint32_t m_ownerPlayerId;
Core::Data::HousingLandSetPtr m_landInfo;