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->setRot( pIfrit->getRot() + .2f );
|
||||||
pIfrit->sendPositionUpdate();
|
pIfrit->sendPositionUpdate();
|
||||||
|
|
||||||
|
if( timeElapsedMs > 10000 )
|
||||||
|
{
|
||||||
|
m_bShouldFinish = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if( timeElapsedMs > 5000 )
|
if( timeElapsedMs > 5000 )
|
||||||
{
|
{
|
||||||
auto ifritTwoState = std::make_shared< IfritStateTwo >( m_pEncounter );
|
auto ifritTwoState = std::make_shared< IfritStateTwo >( m_pEncounter );
|
||||||
m_pEncounter->addState( ifritTwoState );
|
m_pEncounter->addState( ifritTwoState );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( timeElapsedMs > 12000 )
|
|
||||||
{
|
|
||||||
pIfrit->hateListGetHighest()->die();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void finish() override
|
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->top()->finish();
|
||||||
m_stateStack->pop();
|
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 );
|
m_pInstance->removeActor( boss );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include "Manager/PlayerMgr.h"
|
#include "Manager/PlayerMgr.h"
|
||||||
#include "Manager/TerritoryMgr.h"
|
#include "Manager/TerritoryMgr.h"
|
||||||
#include "Manager/EventMgr.h"
|
#include "Manager/EventMgr.h"
|
||||||
|
#include "Manager/WarpMgr.h"
|
||||||
#include "Actor/Player.h"
|
#include "Actor/Player.h"
|
||||||
#include "Actor/EventObject.h"
|
#include "Actor/EventObject.h"
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@
|
||||||
#include "InstanceObjectCache.h"
|
#include "InstanceObjectCache.h"
|
||||||
|
|
||||||
#include <Encounter/InstanceContent/IfritNormal.h>
|
#include <Encounter/InstanceContent/IfritNormal.h>
|
||||||
|
#include <Task/MoveTerritoryTask.h>
|
||||||
|
|
||||||
|
|
||||||
using namespace Sapphire::Common;
|
using namespace Sapphire::Common;
|
||||||
|
@ -118,7 +119,7 @@ void Sapphire::InstanceContent::onLeaveTerritory( Entity::Player& player )
|
||||||
Logger::debug( "InstanceContent::onLeaveTerritory: Territory#{0}|{1}, Entity#{2}",
|
Logger::debug( "InstanceContent::onLeaveTerritory: Territory#{0}|{1}, Entity#{2}",
|
||||||
getGuId(), getTerritoryTypeId(), player.getId() );
|
getGuId(), getTerritoryTypeId(), player.getId() );
|
||||||
|
|
||||||
unbindPlayer( player.getId() );
|
//unbindPlayer( player.getId() );
|
||||||
|
|
||||||
clearDirector( player );
|
clearDirector( player );
|
||||||
|
|
||||||
|
@ -190,6 +191,9 @@ void Sapphire::InstanceContent::onUpdate( uint64_t tickCount )
|
||||||
m_instanceResetFinishTime = tickCount + 5000;
|
m_instanceResetFinishTime = tickCount + 5000;
|
||||||
m_pEncounter->reset();
|
m_pEncounter->reset();
|
||||||
|
|
||||||
|
std::vector< Entity::PlayerPtr > playerList;
|
||||||
|
|
||||||
|
auto& warpMgr = Common::Service< WarpMgr >::ref();
|
||||||
auto& server = Common::Service< World::WorldServer >::ref();
|
auto& server = Common::Service< World::WorldServer >::ref();
|
||||||
for( const auto& playerIt : m_playerMap )
|
for( const auto& playerIt : m_playerMap )
|
||||||
{
|
{
|
||||||
|
@ -200,12 +204,13 @@ void Sapphire::InstanceContent::onUpdate( uint64_t tickCount )
|
||||||
pPlayer->setStatus( Common::ActorStatus::Idle );
|
pPlayer->setStatus( Common::ActorStatus::Idle );
|
||||||
|
|
||||||
movePlayerToEntrance( *pPlayer );
|
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 );
|
playerList.push_back( pPlayer );
|
||||||
server.queueForPlayers( pPlayer->getInRangePlayerIds( true ), setStatusPacket );
|
}
|
||||||
|
|
||||||
|
for( const auto& pPlayer : playerList )
|
||||||
|
{
|
||||||
|
warpMgr.requestMoveTerritory( *pPlayer, WarpType::WARP_TYPE_INSTANCE_CONTENT, getGuId(), pPlayer->getPos(), pPlayer->getRot() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_pEntranceEObj )
|
if( m_pEntranceEObj )
|
||||||
|
@ -216,11 +221,23 @@ void Sapphire::InstanceContent::onUpdate( uint64_t tickCount )
|
||||||
else if( tickCount < m_instanceResetFinishTime )
|
else if( tickCount < m_instanceResetFinishTime )
|
||||||
return;
|
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 );
|
m_pEntranceEObj->setPermissionInvisibility( 1 );
|
||||||
sendForward();
|
sendForward();
|
||||||
|
|
||||||
m_state = DutyInProgress;
|
m_state = DutyInProgress;
|
||||||
|
|
||||||
|
m_instanceResetTime = 0;
|
||||||
|
m_instanceResetFinishTime = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -542,7 +559,7 @@ void Sapphire::InstanceContent::movePlayerToEntrance( Sapphire::Entity::Player&
|
||||||
if( rect )
|
if( rect )
|
||||||
player.setRot( Util::eulerToDirection( { rect->header.transform.rotation.x, rect->header.transform.rotation.y, rect->header.transform.rotation.z } ) );
|
player.setRot( Util::eulerToDirection( { rect->header.transform.rotation.x, rect->header.transform.rotation.y, rect->header.transform.rotation.z } ) );
|
||||||
else
|
else
|
||||||
player.setRot( PI );
|
player.setRot( PI - PI / 2 );
|
||||||
player.setPos( m_pEntranceEObj->getPos() );
|
player.setPos( m_pEntranceEObj->getPos() );
|
||||||
}
|
}
|
||||||
else if( rect )
|
else if( rect )
|
||||||
|
@ -552,7 +569,7 @@ void Sapphire::InstanceContent::movePlayerToEntrance( Sapphire::Entity::Player&
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.setRot( PI );
|
player.setRot( PI - PI / 2 );
|
||||||
player.setPos( { 0.f, 0.f, 0.f } );
|
player.setPos( { 0.f, 0.f, 0.f } );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue