1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-03 17:27:47 +00:00

Fixed popranges not being found

This commit is contained in:
Mordred 2019-10-22 22:34:34 +02:00
parent b17af41e67
commit 79764da844
7 changed files with 35 additions and 43 deletions

View file

@ -108,7 +108,7 @@ struct RelativePositions
int32_t PosCount;
};
struct PopRangeData : InstanceObject
struct PopRangeData : public InstanceObject
{
PopType popType;
RelativePositions relativePositions;

View file

@ -55,7 +55,7 @@ public:
class LGB_BGPARTS_ENTRY : public LgbEntry
{
public:
BgPartsData header;
BgPartsData data;
std::string name;
std::string modelFileName;
std::string collisionFileName;
@ -66,38 +66,38 @@ public:
LGB_BGPARTS_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset )
{
header = *reinterpret_cast< BgPartsData* >( buf + offset );
data = *reinterpret_cast< BgPartsData* >( buf + offset );
name = std::string( buf + offset + header.nameOffset );
modelFileName = std::string( buf + offset + header.modelFileOffset );
collisionFileName = std::string( buf + offset + header.collisionFileOffset );
modelFileName = std::string( buf + offset + data.modelFileOffset );
collisionFileName = std::string( buf + offset + data.collisionFileOffset );
};
};
class LGB_GIMMICK_ENTRY : public LgbEntry
{
public:
GimmickData header;
GimmickData data;
std::string name;
std::string gimmickFileName;
LGB_GIMMICK_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset )
{
header = *reinterpret_cast< GimmickData* >( buf + offset );
data = *reinterpret_cast< GimmickData* >( buf + offset );
name = std::string( buf + offset + header.nameOffset );
gimmickFileName = std::string( buf + offset + header.gimmickFileOffset );
gimmickFileName = std::string( buf + offset + data.gimmickFileOffset );
};
};
class LGB_ENPC_ENTRY : public LgbEntry
{
public:
ENpcData header;
ENpcData data;
std::string name;
LGB_ENPC_ENTRY( char* buf, uint32_t offset ) :
LgbEntry( buf, offset )
{
header = *reinterpret_cast< ENpcData* >( buf + offset );
data = *reinterpret_cast< ENpcData* >( buf + offset );
name = std::string( buf + offset + header.nameOffset );
};
};
@ -105,12 +105,12 @@ public:
class LGB_EOBJ_ENTRY : public LgbEntry
{
public:
EObjData header;
EObjData data;
std::string name;
LGB_EOBJ_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset )
{
header = *reinterpret_cast< EObjData* >( buf + offset );
data = *reinterpret_cast< EObjData* >( buf + offset );
name = std::string( buf + offset + header.nameOffset );
};
};
@ -118,12 +118,12 @@ public:
struct LGB_MAP_RANGE_ENTRY : public LgbEntry
{
public:
MapRangeData header;
MapRangeData data;
std::string name;
LGB_MAP_RANGE_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset )
{
header = *reinterpret_cast< MapRangeData* >( buf + offset );
data = *reinterpret_cast< MapRangeData* >( buf + offset );
name = std::string( buf + offset + header.nameOffset );
};
};
@ -131,25 +131,24 @@ public:
struct LGB_EXIT_RANGE_ENTRY : public LgbEntry
{
public:
ExitRangeData header;
ExitRangeData data;
std::string name;
LGB_EXIT_RANGE_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset )
{
header = *reinterpret_cast< ExitRangeData* >( buf + offset );
data = *reinterpret_cast< ExitRangeData* >( buf + offset );
name = std::string( buf + offset + header.nameOffset );
};
};
struct LGB_POP_RANGE_ENTRY : public LgbEntry
{
public:
PopRangeData header;
PopRangeData data;
LGB_POP_RANGE_ENTRY( char* buf, uint32_t offset ) : LgbEntry( buf, offset )
{
header = *reinterpret_cast< PopRangeData* >( buf + offset );
data = *reinterpret_cast< PopRangeData* >( buf + offset );
};
};

View file

@ -222,12 +222,12 @@ void loadEobjNames()
void writeMapRangeEntry( std::ofstream& out, LgbEntry* pObj )
{
auto pMapRange = reinterpret_cast< LGB_MAP_RANGE_ENTRY* >( pObj );
if( !pMapRange->header.discoveryEnabled )
if( !pMapRange->data.discoveryEnabled )
return;
auto subArea = 0;
auto mapId = -1;
auto discoveryIndex = pMapRange->header.discoveryIndex;
auto discoveryIndex = pMapRange->data.discoveryIndex;
vec3 translation = pObj->header.transform.translation;
@ -236,8 +236,8 @@ void writeMapRangeEntry( std::ofstream& out, LgbEntry* pObj )
std::to_string( pMapRange->header.transform.translation.y ) + " " +
std::to_string( pMapRange->header.transform.translation.z ) + " " +
std::to_string( pMapRange->header.transform.rotation.y ) + " " +
std::to_string( pMapRange->header.mapId ) + " " +
std::to_string( pMapRange->header.discoveryIndex ) + "\n"
std::to_string( pMapRange->data.mapId ) + " " +
std::to_string( pMapRange->data.discoveryIndex ) + "\n"
);
out.write( outStr.c_str(), outStr.size() );

View file

@ -284,10 +284,10 @@ int main( int argc, char* argv[] )
uint32_t eobjlevelHierachyId = 0;
auto pEobj = reinterpret_cast< LGB_EOBJ_ENTRY* >( pObj );
id = pEobj->header.eobjId;
id = pEobj->data.eobjId;
unknown = pEobj->header.instanceId;
eobjlevelHierachyId = pEobj->header.levelHierachyId;
eobjlevelHierachyId = pEobj->data.levelHierachyId;
std::string states = "";
std::string gimmickName = "";
@ -295,7 +295,7 @@ int main( int argc, char* argv[] )
{
auto pGObj = pEntry1.get();
if( pGObj->getType() == LgbEntryType::Gimmick &&
pGObj->header.instanceId == pEobj->header.levelHierachyId )
pGObj->header.instanceId == pEobj->data.levelHierachyId )
{
auto pGObjR = reinterpret_cast< LGB_GIMMICK_ENTRY* >( pGObj );
char* dataSection = nullptr;

View file

@ -370,7 +370,7 @@ void Sapphire::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type )
}
else
{
sendDebug( "Teleport: popRange not found!" );
sendDebug( "Teleport: popRange {0} not found in {1}!", data->level[ 0 ], data->territory );
}
Common::FFXIVARR_POSITION3 pos;

View file

@ -293,15 +293,15 @@ void Sapphire::Network::GameConnection::zoneLineHandler( FrameworkPtr pFw,
if( pExitRange )
{
player.sendDebug( "Found ExitRange#{0}", zoneLineId );
player.sendDebug( "destTerritoryType#{0}", pExitRange->header.destTerritoryType );
player.sendDebug( "destInstanceObjectId#{0}", pExitRange->header.destInstanceObjectId );
player.sendDebug( "destTerritoryType#{0}", pExitRange->data.destTerritoryType );
player.sendDebug( "destInstanceObjectId#{0}", pExitRange->data.destInstanceObjectId );
auto pPopRange = pInstanceObjectCache->getPopRange( pExitRange->header.destTerritoryType,
pExitRange->header.destInstanceObjectId );
auto pPopRange = pInstanceObjectCache->getPopRange( pExitRange->data.destTerritoryType,
pExitRange->data.destInstanceObjectId );
if( pPopRange )
{
targetZone = pExitRange->header.destTerritoryType;
player.sendDebug( "\tFound PopRange#{0}", pExitRange->header.destInstanceObjectId );
targetZone = pExitRange->data.destTerritoryType;
player.sendDebug( "\tFound PopRange#{0}", pExitRange->data.destInstanceObjectId );
player.sendDebug( "\t{0}", pPopRange->header.transform.translation.x );
player.sendDebug( "\t{0}", pPopRange->header.transform.translation.y );
player.sendDebug( "\t{0}", pPopRange->header.transform.translation.z );
@ -312,7 +312,7 @@ void Sapphire::Network::GameConnection::zoneLineHandler( FrameworkPtr pFw,
player.sendDebug( "ZoneLine #{0} found.", zoneLineId );
auto preparePacket = makeZonePacket< FFXIVIpcPrepareZoning >( player.getId() );
preparePacket->data().targetZone = pExitRange->header.destTerritoryType;
preparePacket->data().targetZone = pExitRange->data.destTerritoryType;
//ActorControlSelfPacket controlPacket( pPlayer, ActorControlType::DespawnZoneScreenMsg,
// 0x03, player.getId(), 0x01, targetZone );
@ -372,9 +372,9 @@ void Sapphire::Network::GameConnection::discoveryHandler( FrameworkPtr pFw,
{
auto discoveryPacket = makeZonePacket< FFXIVIpcDiscovery >( player.getId() );
discoveryPacket->data().mapId = tInfo->map;
discoveryPacket->data().mapPartId = pRefInfo->header.discoveryIndex;
discoveryPacket->data().mapPartId = pRefInfo->data.discoveryIndex;
player.queuePacket( discoveryPacket );
player.discover( tInfo->map, pRefInfo->header.discoveryIndex );
player.discover( tInfo->map, pRefInfo->data.discoveryIndex );
}
}

View file

@ -69,7 +69,6 @@ Sapphire::InstanceObjectCache::InstanceObjectCache( std::shared_ptr< Framework >
{
for( const auto& pEntry : group.entries )
{
if( pEntry->getType() == LgbEntryType::MapRange )
{
auto pMapRange = reinterpret_cast< LGB_MAP_RANGE_ENTRY* >( pEntry.get() );
@ -82,12 +81,6 @@ Sapphire::InstanceObjectCache::InstanceObjectCache( std::shared_ptr< Framework >
}
else if( pEntry->getType() == LgbEntryType::PopRange )
{
if( pEntry->header.instanceId == 1359242 )
{
std::cout << ">>>" << id << "__" << static_cast< uint32_t >( pEntry->getType() ) << ">>>\n";
//break;
}
auto pPopRange = reinterpret_cast< LGB_POP_RANGE_ENTRY* >( pEntry.get() );
m_popRangeCache.insert( id, *pPopRange );
}