1
Fork 0
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:
Alice Ogeda 2023-03-08 21:14:04 -03:00 committed by Tahir
parent c8ab6debec
commit 9035d44c55
2 changed files with 39 additions and 18 deletions

View file

@ -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();
}

View file

@ -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 } );
}
}