diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index d144e83c..2a74cba4 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -350,6 +350,7 @@ namespace Sapphire::Network::ActorControl DismountReq = 0x65, SpawnCompanionReq = 0x66, + DespawnCompanionReq = 0x67, RemoveStatusEffect = 0x68, CastCancel = 0x69, diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index 07b12743..691d90a3 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -1563,11 +1563,14 @@ void Sapphire::Entity::Player::dismount() void Sapphire::Entity::Player::spawnCompanion( uint16_t id ) { - auto& exdData = Common::Service< Data::ExdDataGenerated >::ref(); + if( id > 0 ) + { + auto& exdData = Common::Service< Data::ExdDataGenerated >::ref(); - auto companion = exdData.get< Data::Companion >( id ); - if( !id ) - return; + auto companion = exdData.get< Data::Companion >( id ); + if( !companion ) + return; + } m_companionId = id; sendToInRangeSet( makeActorControl( getId(), ActorControlType::ToggleCompanion, id ), true ); diff --git a/src/world/Network/Handlers/ClientTriggerHandler.cpp b/src/world/Network/Handlers/ClientTriggerHandler.cpp index a1dd3815..6ca7a7b4 100644 --- a/src/world/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/world/Network/Handlers/ClientTriggerHandler.cpp @@ -130,6 +130,11 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( const Packets::FFX player.spawnCompanion( static_cast< uint16_t >( param1 ) ); break; } + case ClientTriggerType::DespawnCompanionReq: + { + player.spawnCompanion( 0 ); + break; + } case ClientTriggerType::RemoveStatusEffect: // Remove status (clicking it off) { // todo: check if status can be removed by client from exd