mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-28 15:17:46 +00:00
rezone player; wait for all players to unlock zone entrance;
This commit is contained in:
parent
c8ab6debec
commit
9035d44c55
2 changed files with 39 additions and 18 deletions
|
@ -70,21 +70,25 @@ namespace Sapphire
|
|||
pIfrit->setRot( pIfrit->getRot() + .2f );
|
||||
pIfrit->sendPositionUpdate();
|
||||
|
||||
if( timeElapsedMs > 10000 )
|
||||
{
|
||||
m_bShouldFinish = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if( timeElapsedMs > 5000 )
|
||||
{
|
||||
auto ifritTwoState = std::make_shared< IfritStateTwo >( m_pEncounter );
|
||||
m_pEncounter->addState( ifritTwoState );
|
||||
}
|
||||
|
||||
if( timeElapsedMs > 12000 )
|
||||
{
|
||||
pIfrit->hateListGetHighest()->die();
|
||||
}
|
||||
}
|
||||
|
||||
void finish() override
|
||||
{
|
||||
Logger::info( "stage 1 finish - enrage" );
|
||||
|
||||
auto pIfrit = m_pEncounter->getBNpc( IfritNormalData::IFRIT );
|
||||
pIfrit->hateListGetHighest()->die();
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -152,8 +156,9 @@ namespace Sapphire
|
|||
m_stateStack->top()->finish();
|
||||
m_stateStack->pop();
|
||||
}
|
||||
|
||||
m_stateStack->top()->update( deltaTime );
|
||||
|
||||
if( !m_stateStack->empty() )
|
||||
m_stateStack->top()->update( deltaTime );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -166,7 +171,6 @@ namespace Sapphire
|
|||
m_pInstance->removeActor( boss );
|
||||
|
||||
}
|
||||
|
||||
|
||||
init();
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include "Manager/PlayerMgr.h"
|
||||
#include "Manager/TerritoryMgr.h"
|
||||
#include "Manager/EventMgr.h"
|
||||
|
||||
#include "Manager/WarpMgr.h"
|
||||
#include "Actor/Player.h"
|
||||
#include "Actor/EventObject.h"
|
||||
|
||||
|
@ -29,6 +29,7 @@
|
|||
#include "InstanceObjectCache.h"
|
||||
|
||||
#include <Encounter/InstanceContent/IfritNormal.h>
|
||||
#include <Task/MoveTerritoryTask.h>
|
||||
|
||||
|
||||
using namespace Sapphire::Common;
|
||||
|
@ -118,7 +119,7 @@ void Sapphire::InstanceContent::onLeaveTerritory( Entity::Player& player )
|
|||
Logger::debug( "InstanceContent::onLeaveTerritory: Territory#{0}|{1}, Entity#{2}",
|
||||
getGuId(), getTerritoryTypeId(), player.getId() );
|
||||
|
||||
unbindPlayer( player.getId() );
|
||||
//unbindPlayer( player.getId() );
|
||||
|
||||
clearDirector( player );
|
||||
|
||||
|
@ -190,6 +191,9 @@ void Sapphire::InstanceContent::onUpdate( uint64_t tickCount )
|
|||
m_instanceResetFinishTime = tickCount + 5000;
|
||||
m_pEncounter->reset();
|
||||
|
||||
std::vector< Entity::PlayerPtr > playerList;
|
||||
|
||||
auto& warpMgr = Common::Service< WarpMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
for( const auto& playerIt : m_playerMap )
|
||||
{
|
||||
|
@ -200,12 +204,13 @@ void Sapphire::InstanceContent::onUpdate( uint64_t tickCount )
|
|||
pPlayer->setStatus( Common::ActorStatus::Idle );
|
||||
|
||||
movePlayerToEntrance( *pPlayer );
|
||||
auto zoneInPacket = makeActorControlSelf( pPlayer->getId(), Appear, 0x3, 0, 0, 0 );
|
||||
auto setStatusPacket = makeActorControl( pPlayer->getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) );
|
||||
|
||||
|
||||
server.queueForPlayer( pPlayer->getCharacterId(), zoneInPacket );
|
||||
server.queueForPlayers( pPlayer->getInRangePlayerIds( true ), setStatusPacket );
|
||||
playerList.push_back( pPlayer );
|
||||
}
|
||||
|
||||
for( const auto& pPlayer : playerList )
|
||||
{
|
||||
warpMgr.requestMoveTerritory( *pPlayer, WarpType::WARP_TYPE_INSTANCE_CONTENT, getGuId(), pPlayer->getPos(), pPlayer->getRot() );
|
||||
}
|
||||
|
||||
if( m_pEntranceEObj )
|
||||
|
@ -216,11 +221,23 @@ void Sapphire::InstanceContent::onUpdate( uint64_t tickCount )
|
|||
else if( tickCount < m_instanceResetFinishTime )
|
||||
return;
|
||||
|
||||
|
||||
for( const auto& playerIt : m_playerMap )
|
||||
{
|
||||
auto pPlayer = playerIt.second;
|
||||
|
||||
if( !pPlayer->isLoadingComplete() ||
|
||||
!pPlayer->isDirectorInitialized() ||
|
||||
pPlayer->hasCondition( PlayerCondition::WatchingCutscene ) )
|
||||
return;
|
||||
}
|
||||
|
||||
m_pEntranceEObj->setPermissionInvisibility( 1 );
|
||||
sendForward();
|
||||
|
||||
m_state = DutyInProgress;
|
||||
|
||||
m_instanceResetTime = 0;
|
||||
m_instanceResetFinishTime = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -542,7 +559,7 @@ void Sapphire::InstanceContent::movePlayerToEntrance( Sapphire::Entity::Player&
|
|||
if( rect )
|
||||
player.setRot( Util::eulerToDirection( { rect->header.transform.rotation.x, rect->header.transform.rotation.y, rect->header.transform.rotation.z } ) );
|
||||
else
|
||||
player.setRot( PI );
|
||||
player.setRot( PI - PI / 2 );
|
||||
player.setPos( m_pEntranceEObj->getPos() );
|
||||
}
|
||||
else if( rect )
|
||||
|
@ -552,7 +569,7 @@ void Sapphire::InstanceContent::movePlayerToEntrance( Sapphire::Entity::Player&
|
|||
}
|
||||
else
|
||||
{
|
||||
player.setRot( PI );
|
||||
player.setRot( PI - PI / 2 );
|
||||
player.setPos( { 0.f, 0.f, 0.f } );
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue