1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 22:37:45 +00:00

Temporary fix for resetting directors. Eventually zoning needs to be streamlined

This commit is contained in:
Mordred 2019-01-13 17:32:43 +01:00
parent c57cc0c9e1
commit b5ceae58fb
7 changed files with 31 additions and 13 deletions

View file

@ -1563,6 +1563,11 @@ struct FFXIVIpcDirectorVars : FFXIVIpcBasePacket< DirectorVars >
uint8_t m_branch;
/*! raw storage for flags/vars */
uint8_t m_unionData[10];
/*! unknown */
uint16_t u20;
uint16_t u22;
uint16_t u24;
uint16_t u28;
};

View file

@ -11,11 +11,12 @@
#include "Session.h"
#include "Player.h"
#include "Manager/HousingMgr.h"
#include "Manager/TerritoryMgr.h"
#include "Territory/Zone.h"
#include "Territory/ZonePosition.h"
#include "Manager/HousingMgr.h"
#include "Territory/InstanceContent.h"
#include "Territory/Land.h"
#include "Network/GameConnection.h"
@ -491,6 +492,9 @@ bool Sapphire::Entity::Player::exitInstance()
{
auto pTeriMgr = m_pFw->get< TerritoryMgr >();
auto pZone = getCurrentZone();
auto pInstance = pZone->getAsInstanceContent();
// check if housing zone
if( pTeriMgr->isHousingTerritory( m_prevTerritoryTypeId ) )
{
@ -510,6 +514,8 @@ bool Sapphire::Entity::Player::exitInstance()
sendZonePackets();
//m_queuedZoneing = std::make_shared< QueuedZoning >( m_territoryTypeId, m_pos, Util::getTimeMs(), m_rot );
return true;
}

View file

@ -794,14 +794,14 @@ Sapphire::World::Manager::DebugCommandMgr::instance( char* data, Entity::Player&
if( subCommand == "create" || subCommand == "cr" )
{
uint32_t instanceContentId;
sscanf( params.c_str(), "%d", &instanceContentId );
uint32_t contentFinderConditionId;
sscanf( params.c_str(), "%d", &contentFinderConditionId );
auto instance = pTeriMgr->createInstanceContent( instanceContentId );
auto instance = pTeriMgr->createInstanceContent( contentFinderConditionId );
if( instance )
player.sendDebug( "Created instance with id#{0} -> {1}", instance->getGuId(), instance->getName() );
else
player.sendDebug( "Failed to create instance with id#{0}", instanceContentId );
player.sendDebug( "Failed to create instance with id#{0}", contentFinderConditionId );
}
else if( subCommand == "bind" )
{

View file

@ -535,8 +535,8 @@ bool Sapphire::World::Manager::TerritoryMgr::movePlayer( ZonePtr pZone, Sapphire
// mark character as zoning in progress
pPlayer->setLoadingComplete( false );
//if( pPlayer->getLastPing() != 0 )
// pPlayer->getCurrentZone()->removeActor( pPlayer );
if( pPlayer->getLastPing() != 0 )
pPlayer->getCurrentZone()->removeActor( pPlayer );
pPlayer->setCurrentZone( pZone );
pZone->pushActor( pPlayer );

View file

@ -294,7 +294,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw,
}
case ClientTriggerType::RequestInstanceLeave:
{
// todo: apply cf penalty if applicable, make sure player isnt in combat
// todo: apply cf penalty if applicable, make sure player isn't in combat
player.exitInstance();
break;
}

View file

@ -89,11 +89,8 @@ void Sapphire::InstanceContent::onLeaveTerritory( Entity::Player& player )
{
Logger::debug( "InstanceContent::onLeaveTerritory: Zone#{0}|{1}, Entity#{2}",
getGuId(), getTerritoryTypeId(), player.getId() );
sendDirectorClear( player );
player.setDirectorInitialized( false );
// remove "bound by duty" state
player.unsetStateFlag( PlayerStateFlag::BoundByDuty );
clearDirector( player );
}
void Sapphire::InstanceContent::onUpdate( uint32_t currTime )
@ -450,3 +447,11 @@ void Sapphire::InstanceContent::unbindPlayer( uint32_t playerId )
if( it != m_playerMap.end() )
it->second->exitInstance();
}
void Sapphire::InstanceContent::clearDirector( Entity::Player& player )
{
sendDirectorClear( player );
player.setDirectorInitialized( false );
// remove "bound by duty" state
player.unsetStateFlag( PlayerStateFlag::BoundByDuty );}

View file

@ -64,6 +64,8 @@ public:
void endEventCutscene();
void clearDirector( Entity::Player& player );
/*! set the current bgm index (inside bgm.exd) */
void setCurrentBGM( uint16_t bgmId );