1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-01 00:27:44 +00:00

More zone refactoring, general style fixes

This commit is contained in:
Mordred 2018-02-14 21:11:23 +01:00
parent e8ab570502
commit ddb4247588
4 changed files with 61 additions and 46 deletions

View file

@ -463,6 +463,7 @@ namespace Common {
//Weather.exd
enum class Weather : uint8_t
{
None = 0,
ClearSkies = 1,
FairSkies = 2,
Clouds = 3,

View file

@ -180,7 +180,7 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
}
case GmCommand::Weather:
{
targetPlayer->getCurrentZone()->setWeatherOverride( param1 );
targetPlayer->getCurrentZone()->setWeatherOverride( static_cast< Common::Weather >( param1 ) );
player.sendNotice( "Weather in Zone \"" + targetPlayer->getCurrentZone()->getName() + "\" of " +
targetPlayer->getName() + " set in range." );
break;
@ -427,23 +427,23 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
}
case GmCommand::TeriInfo:
{
auto pCurrentZone = player.getCurrentZone();
player.sendNotice( "ZoneId: " + std::to_string( player.getZoneId() ) + "\nName: " +
player.getCurrentZone()->getName() + "\nInternalName: " +
player.getCurrentZone()->getInternalName() + "\nPopCount: " +
std::to_string( player.getCurrentZone()->getPopCount() ) +
"\nCurrentWeather:" + std::to_string( player.getCurrentZone()->getCurrentWeather() ) +
"\nNextWeather:" + std::to_string( player.getCurrentZone()->getNextWeather() ) );
pCurrentZone->getName() + "\nInternalName: " +
pCurrentZone->getInternalName() + "\nPopCount: " +
std::to_string( pCurrentZone->getPopCount() ) +
"\nCurrentWeather:" + std::to_string( static_cast< uint8_t >( pCurrentZone->getCurrentWeather() ) ) +
"\nNextWeather:" + std::to_string( static_cast< uint8_t >( pCurrentZone->getNextWeather() ) ) );
break;
}
case GmCommand::Jump:
{
auto inRange = player.getInRangeActors();
for( auto actor : inRange )
{
player.changePosition( targetActor->getPos().x, targetActor->getPos().y, targetActor->getPos().z,
targetActor->getRotation() );
}
player.sendNotice( "Jumping to " + targetPlayer->getName() + " in range." );
break;
}

View file

@ -44,15 +44,15 @@ extern Core::TerritoryMgr g_territoryMgr;
Core::Zone::Zone() :
m_territoryId( 0 ),
m_guId( 0 ),
m_currentWeather( static_cast< uint8_t >( Common::Weather::FairSkies ) ),
m_weatherOverride( 0 ),
m_currentWeather( Common::Weather::FairSkies ),
m_weatherOverride( Common::Weather::None ),
m_lastMobUpdate( 0 ),
m_currentFestivalId( 0 )
{
}
Core::Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& internalName, const std::string& placeName ) :
m_currentWeather( static_cast< uint8_t >( Common::Weather::FairSkies ) )
m_currentWeather( Common::Weather::FairSkies )
{
m_guId = guId;
@ -61,9 +61,22 @@ Core::Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& intern
m_placeName = placeName;
m_lastMobUpdate = 0;
m_weatherOverride = 0;
m_weatherOverride = Common::Weather::None;
m_territoryTypeInfo = g_exdDataGen.get< Core::Data::TerritoryType >( territoryId );
loadWeatherRates();
m_currentWeather = getNextWeather();
}
void Core::Zone::loadWeatherRates()
{
if( !m_territoryTypeInfo )
{
g_log.error( std::string( __FUNCTION__ ) + " TerritoryTypeInfo not loaded!" );
return;
}
uint8_t weatherRateId = m_territoryTypeInfo->weatherRate > g_exdDataGen.getWeatherRateIdList().size() ?
uint8_t{ 0 } : m_territoryTypeInfo->weatherRate;
@ -80,8 +93,6 @@ Core::Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& intern
m_weatherRateMap[sumPc] = weatherId;
i += 2;
}
m_currentWeather = getNextWeather();
}
Core::Zone::~Zone()
@ -102,12 +113,12 @@ bool Core::Zone::init()
return true;
}
void Core::Zone::setWeatherOverride( uint8_t weather )
void Core::Zone::setWeatherOverride( Common::Weather weather )
{
m_weatherOverride = weather;
}
uint8_t Core::Zone::getCurrentWeather() const
Core::Common::Weather Core::Zone::getCurrentWeather() const
{
return m_currentWeather;
}
@ -227,7 +238,7 @@ void Core::Zone::loadCellCache()
}
uint8_t Core::Zone::getNextWeather()
Core::Common::Weather Core::Zone::getNextWeather()
{
uint32_t unixTime = static_cast< uint32_t >( Util::getTimeSeconds() );
// Get Eorzea hour for weather start
@ -248,13 +259,13 @@ uint8_t Core::Zone::getNextWeather()
for( auto entry : m_weatherRateMap )
{
uint8_t sRate = entry.first;
auto weatherId = static_cast< uint8_t >( entry.second );
auto weatherId = static_cast< Common::Weather >( entry.second );
if( rate <= sRate )
return weatherId;
}
return 1;
return Common::Weather::FairSkies;
}
void Core::Zone::pushActor( Entity::ActorPtr pActor )
@ -407,12 +418,13 @@ std::size_t Core::Zone::getPopCount() const
bool Core::Zone::checkWeather()
{
if ( m_weatherOverride != 0 )
if( m_weatherOverride != Common::Weather::None )
{
if( m_weatherOverride != m_currentWeather )
{
m_currentWeather = m_weatherOverride;
g_log.debug( "[Zone:" + m_internalName + "] overriding weather to : " + std::to_string( m_weatherOverride ) );
g_log.debug( "[Zone:" + m_internalName + "] overriding weather to : " +
std::to_string( static_cast< uint8_t >( m_weatherOverride ) ) );
return true;
}
}
@ -422,7 +434,8 @@ bool Core::Zone::checkWeather()
if( nextWeather != m_currentWeather )
{
m_currentWeather = nextWeather;
g_log.debug( "[Zone:" + m_internalName + "] changing weather to : " + std::to_string( nextWeather ) );
g_log.debug( "[Zone:" + m_internalName + "] changing weather to : " +
std::to_string( static_cast< uint8_t >( nextWeather ) ) );
return true;
}
}
@ -522,7 +535,7 @@ void Core::Zone::updateSessions( bool changedWeather )
{
Core::Network::Packets::ZoneChannelPacket< Core::Network::Packets::Server::FFXIVIpcWeatherChange >
weatherChangePacket( pSession->getPlayer()->getId() );
weatherChangePacket.data().weatherId = m_currentWeather;
weatherChangePacket.data().weatherId = static_cast< uint8_t >( m_currentWeather );
weatherChangePacket.data().delay = 5.0f;
pSession->getPlayer()->queuePacket( weatherChangePacket );
}

View file

@ -44,8 +44,8 @@ protected:
CellCache** m_pCellCache[_sizeX];
uint8_t m_currentWeather;
uint8_t m_weatherOverride;
Common::Weather m_currentWeather;
Common::Weather m_weatherOverride;
uint64_t m_lastMobUpdate;
@ -65,9 +65,9 @@ public:
bool init();
/*! overrides the zone's weather, set to 0 to unlock */
void setWeatherOverride( uint8_t weather );
void setWeatherOverride( Common::Weather weather );
uint8_t getCurrentWeather() const;
Common::Weather getCurrentWeather() const;
uint16_t getCurrentFestival() const;
void setCurrentFestival( uint16_t festivalId );
@ -84,7 +84,7 @@ public:
virtual void onLeaveTerritory( Entity::Player& player );
virtual void onUpdate( uint32_t currTime );
uint8_t getNextWeather();
Common::Weather getNextWeather();
void pushActor( Entity::ActorPtr pActor );
@ -106,6 +106,7 @@ public:
const std::string& getInternalName() const;
std::size_t getPopCount() const;
void loadWeatherRates();
bool checkWeather();
void updateBnpcs( int64_t tickCount );