mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-27 14:57:44 +00:00
instane obj spawning
This commit is contained in:
parent
01e22b679d
commit
2f6bc9e1eb
6 changed files with 85 additions and 3 deletions
|
@ -103,6 +103,7 @@ namespace Packets {
|
|||
ActorSetPos = 0x0160, // updated 4.2
|
||||
ActorCast = 0x0162, // updated 4.2
|
||||
HateList = 0x0165, // updated 4.2
|
||||
ObjectControl = 0x0167, // updated 4.2
|
||||
UpdateClassInfo = 0x0169, // updated 4.2
|
||||
InitUI = 0x016B, // updated 4.2
|
||||
|
||||
|
|
|
@ -1316,6 +1316,28 @@ struct FFXIVIpcMSQTrackerComplete : FFXIVIpcBasePacket<MSQTrackerComplete>
|
|||
uint64_t padding4; // last 4 bytes is uint32_t but who cares
|
||||
};
|
||||
|
||||
struct FFXIVIpcObjectControl : FFXIVIpcBasePacket<ObjectControl>
|
||||
{
|
||||
uint8_t count;
|
||||
uint8_t objKind;
|
||||
uint8_t unknown2;
|
||||
uint8_t state;
|
||||
uint32_t objId;
|
||||
uint32_t actorId;
|
||||
uint32_t levelId;
|
||||
uint32_t unknown10;
|
||||
uint32_t someActorId14;
|
||||
uint32_t hierachyId;
|
||||
uint32_t unknown1C;
|
||||
uint32_t unknown20;
|
||||
uint32_t unknown24;
|
||||
uint32_t unknown28;
|
||||
uint32_t unknown2c;
|
||||
Common::FFXIVARR_POSITION3 position;
|
||||
int16_t rotation;
|
||||
int16_t unknown;
|
||||
};
|
||||
|
||||
|
||||
} /* Server */
|
||||
} /* Packets */
|
||||
|
|
|
@ -37,6 +37,7 @@ public:
|
|||
Housing = 0x0C,
|
||||
Cutscene = 0x0D,
|
||||
CardStand = 0x0E,
|
||||
Exit = 0x0F,
|
||||
};
|
||||
|
||||
enum Stance : uint8_t
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
Core::Entity::InstanceObject::InstanceObject( uint32_t objectId, uint32_t hierachyId ) :
|
||||
Core::Entity::GameObject( ObjKind::EventObj ),
|
||||
m_hierachyId( hierachyId )
|
||||
m_hierachyId( hierachyId ),
|
||||
m_state( 0 )
|
||||
{
|
||||
m_id = objectId;
|
||||
}
|
||||
|
@ -33,7 +34,7 @@ void Core::Entity::InstanceObject::setState( uint8_t state )
|
|||
{
|
||||
m_state = state;
|
||||
|
||||
m_parentInstance->updateInstanceObj( InstanceObjectPtr( this ) );
|
||||
//m_parentInstance->updateInstanceObj( InstanceObjectPtr( this ) );
|
||||
}
|
||||
|
||||
void Core::Entity::InstanceObject::setParentInstance( Core::InstanceContentPtr instance )
|
||||
|
|
|
@ -768,6 +768,45 @@ void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, bo
|
|||
|
||||
instance->setVar( static_cast< uint8_t >( index ), static_cast< uint8_t >( value ) );
|
||||
}
|
||||
else if( subCommand == "objupdate" )
|
||||
{
|
||||
uint32_t instanceId;
|
||||
uint32_t objId;
|
||||
|
||||
sscanf( params.c_str(), "%d %d", &instanceId, &objId );
|
||||
|
||||
auto pInstance = g_territoryMgr.getInstanceZonePtr( instanceId );
|
||||
if( !pInstance )
|
||||
return;
|
||||
|
||||
auto instance = boost::dynamic_pointer_cast< InstanceContent >( pInstance );
|
||||
|
||||
auto obj = instance->getInstanceObject( objId );
|
||||
if( !obj )
|
||||
return;
|
||||
|
||||
instance->updateInstanceObj( obj );
|
||||
}
|
||||
else if( subCommand == "objstate" )
|
||||
{
|
||||
uint32_t instanceId;
|
||||
uint32_t objId;
|
||||
uint32_t state;
|
||||
|
||||
sscanf( params.c_str(), "%d %d %d", &instanceId, &objId, &state );
|
||||
|
||||
auto pInstance = g_territoryMgr.getInstanceZonePtr( instanceId );
|
||||
if( !pInstance )
|
||||
return;
|
||||
|
||||
auto instance = boost::dynamic_pointer_cast< InstanceContent >( pInstance );
|
||||
|
||||
auto obj = instance->getInstanceObject( objId );
|
||||
if( !obj )
|
||||
return;
|
||||
|
||||
obj->setState( state );
|
||||
}
|
||||
else if( subCommand == "festival" )
|
||||
{
|
||||
uint32_t festivalId;
|
||||
|
|
|
@ -222,6 +222,8 @@ void Core::InstanceContent::registerInstanceObj( Core::Entity::InstanceObjectPtr
|
|||
object->setParentInstance( InstanceContentPtr( this ) );
|
||||
|
||||
m_instanceObjects[object->getId()] = object;
|
||||
|
||||
g_log.debug("Registered instance eobj: " + std::to_string( object->getId() ) );
|
||||
}
|
||||
|
||||
Core::Entity::InstanceObjectPtr Core::InstanceContent::getInstanceObject( uint32_t objId )
|
||||
|
@ -238,8 +240,24 @@ void Core::InstanceContent::updateInstanceObj( Core::Entity::InstanceObjectPtr o
|
|||
if( !object )
|
||||
return;
|
||||
|
||||
for( const auto& playerId : m_playerMap )
|
||||
for( const auto& playerIt : m_playerMap )
|
||||
{
|
||||
// send that packet with le data
|
||||
ZoneChannelPacket< FFXIVIpcObjectControl > eobjStatePacket( playerIt.second->getId() );
|
||||
eobjStatePacket.data().objKind = object->getObjKind();
|
||||
eobjStatePacket.data().state = object->getState();
|
||||
eobjStatePacket.data().objId = object->getId();
|
||||
eobjStatePacket.data().hierachyId = object->getHierachyId();
|
||||
eobjStatePacket.data().position = object->getPos();
|
||||
|
||||
// ????
|
||||
//eobjStatePacket.data().levelId = 4236873;
|
||||
//eobjStatePacket.data().unknown2 = 5;
|
||||
//eobjStatePacket.data().unknown1C = 1065353216;
|
||||
//eobjStatePacket.data().unknown20 = 2147423605;
|
||||
//eobjStatePacket.data().actorId = 1074105831;
|
||||
//eobjStatePacket.data().unknown = 1;
|
||||
|
||||
playerIt.second->queuePacket( eobjStatePacket );
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue