mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-25 05:57:45 +00:00
Improved timing on instance starting
This commit is contained in:
parent
2b3512ad64
commit
2ce7d91096
6 changed files with 52 additions and 11 deletions
|
@ -73,7 +73,8 @@ Core::Entity::Player::Player() :
|
|||
m_markedForRemoval( false ),
|
||||
m_mount( 0 ),
|
||||
m_directorInitialized( false ),
|
||||
m_objCount( 0 )
|
||||
m_objCount( 0 ),
|
||||
m_onEnterEventDone( false )
|
||||
{
|
||||
m_id = 0;
|
||||
m_currentStance = Stance::Passive;
|
||||
|
@ -359,6 +360,7 @@ void Core::Entity::Player::returnToHomepoint()
|
|||
|
||||
void Core::Entity::Player::setZone( uint32_t zoneId )
|
||||
{
|
||||
m_onEnterEventDone = false;
|
||||
if( !g_territoryMgr.movePlayer( zoneId, getAsPlayer() ) )
|
||||
{
|
||||
// todo: this will require proper handling, for now just return the player to their previous area
|
||||
|
@ -375,6 +377,7 @@ void Core::Entity::Player::setZone( uint32_t zoneId )
|
|||
|
||||
bool Core::Entity::Player::setInstance( uint32_t instanceContentId )
|
||||
{
|
||||
m_onEnterEventDone = false;
|
||||
auto instance = g_territoryMgr.getInstanceZonePtr( instanceContentId );
|
||||
if( !instance )
|
||||
return false;
|
||||
|
@ -384,6 +387,7 @@ bool Core::Entity::Player::setInstance( uint32_t instanceContentId )
|
|||
|
||||
bool Core::Entity::Player::setInstance( ZonePtr instance )
|
||||
{
|
||||
m_onEnterEventDone = false;
|
||||
if( !instance )
|
||||
return false;
|
||||
|
||||
|
@ -1620,12 +1624,12 @@ void Core::Entity::Player::finishZoning()
|
|||
unsetStateFlag( PlayerStateFlag::BetweenAreas );
|
||||
}
|
||||
|
||||
void Player::emote( uint32_t emoteId, uint64_t targetId )
|
||||
void Core::Entity::Player::emote( uint32_t emoteId, uint64_t targetId )
|
||||
{
|
||||
sendToInRangeSet( ActorControlPacket144( getId(), ActorControlType::Emote, emoteId, 0, 0, 0, targetId ) );
|
||||
}
|
||||
|
||||
void Player::teleportQuery( uint16_t aetheryteId )
|
||||
void Core::Entity::Player::teleportQuery( uint16_t aetheryteId )
|
||||
{
|
||||
// TODO: only register this action if enough gil is in possession
|
||||
auto targetAetheryte = g_exdDataGen.get< Core::Data::Aetheryte >( aetheryteId );
|
||||
|
@ -1655,7 +1659,17 @@ void Player::teleportQuery( uint16_t aetheryteId )
|
|||
}
|
||||
}
|
||||
|
||||
uint8_t Player::getNextObjCount()
|
||||
uint8_t Core::Entity::Player::getNextObjCount()
|
||||
{
|
||||
return m_objCount++;
|
||||
}
|
||||
}
|
||||
|
||||
void Core::Entity::Player::setOnEnterEventDone( bool isDone )
|
||||
{
|
||||
m_onEnterEventDone = isDone;
|
||||
}
|
||||
|
||||
bool Core::Entity::Player::isOnEnterEventDone() const
|
||||
{
|
||||
return m_onEnterEventDone;
|
||||
}
|
||||
|
|
|
@ -559,6 +559,9 @@ public:
|
|||
void setMarkedForRemoval();
|
||||
bool isMarkedForRemoval() const;
|
||||
|
||||
void setOnEnterEventDone( bool isDone );
|
||||
bool isOnEnterEventDone() const;
|
||||
|
||||
uint8_t getNextObjCount();
|
||||
|
||||
private:
|
||||
|
@ -575,6 +578,8 @@ private:
|
|||
|
||||
bool m_directorInitialized;
|
||||
|
||||
bool m_onEnterEventDone;
|
||||
|
||||
private:
|
||||
|
||||
Common::FFXIVARR_POSITION3 m_prevPos;
|
||||
|
|
|
@ -82,11 +82,14 @@ enum ClientTrigger
|
|||
AchievementCrit = 0x202,
|
||||
AchievementComp = 0x203,
|
||||
AchievementCatChat = 0x206,
|
||||
|
||||
|
||||
|
||||
DirectorInitFinish = 0x321,
|
||||
|
||||
EnterTerritoryEventFinished = 0x330,
|
||||
|
||||
AchievementCritReq = 0x3E8,
|
||||
AchievementList = 0x3E9,
|
||||
|
||||
DirectorInitFinish = 0x321,
|
||||
|
||||
CompanionAction = 0x6A4,
|
||||
CompanionSetBarding = 0x6A5,
|
||||
|
@ -248,6 +251,12 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
|||
player.getCurrentZone()->onInitDirector( player );
|
||||
break;
|
||||
}
|
||||
case ClientTrigger::EnterTerritoryEventFinished:
|
||||
{
|
||||
g_log.debug( "[DOOOOOOOOOOOOOOOOOOOOOOONE]" );
|
||||
player.setOnEnterEventDone( true );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
g_log.debug( "[" + std::to_string( m_pSession->getId() ) + "] Unhandled action: " +
|
||||
|
|
|
@ -122,6 +122,7 @@ public:
|
|||
|
||||
virtual void onInit( InstanceContentPtr instance ) { }
|
||||
virtual void onUpdate( InstanceContentPtr instance, uint32_t currTime ) { }
|
||||
virtual void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { }
|
||||
};
|
||||
|
||||
#endif
|
|
@ -23,6 +23,11 @@ public:
|
|||
|
||||
}
|
||||
|
||||
void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private:
|
||||
static constexpr auto EXIT_OBJECT = 2000139;
|
||||
static constexpr auto EXIT_OBJECT_STATE = 4;
|
||||
|
|
|
@ -99,7 +99,9 @@ void Core::InstanceContent::onUpdate( uint32_t currTime )
|
|||
|
||||
for( const auto &playerIt : m_playerMap )
|
||||
{
|
||||
if( !playerIt.second->isLoadingComplete() || !playerIt.second->isDirectorInitialized() )
|
||||
if( !playerIt.second->isLoadingComplete() ||
|
||||
!playerIt.second->isDirectorInitialized() ||
|
||||
!playerIt.second->isOnEnterEventDone() )
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -135,8 +137,7 @@ void Core::InstanceContent::onUpdate( uint32_t currTime )
|
|||
|
||||
void Core::InstanceContent::onFinishLoading( Entity::Player& player )
|
||||
{
|
||||
if( m_state != Created )
|
||||
sendDirectorInit( player );
|
||||
sendDirectorInit( player );
|
||||
}
|
||||
|
||||
void Core::InstanceContent::onInitDirector( Entity::Player& player )
|
||||
|
@ -232,9 +233,15 @@ void Core::InstanceContent::onRegisterEObj( Entity::EventObjectPtr object )
|
|||
void Core::InstanceContent::onBeforeEnterTerritory( Core::Entity::Player &player )
|
||||
{
|
||||
if( m_pEntranceEObj != nullptr )
|
||||
{
|
||||
player.setRot( PI );
|
||||
player.setPos( m_pEntranceEObj->getPos() );
|
||||
}
|
||||
else
|
||||
{
|
||||
player.setRot( PI );
|
||||
player.setPos( { 0.f, 0.f, 0.f } );
|
||||
}
|
||||
}
|
||||
|
||||
Core::Entity::EventObjectPtr Core::InstanceContent::getEObjByName( const std::string &name )
|
||||
|
|
Loading…
Add table
Reference in a new issue