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

Added layerset parsing

This commit is contained in:
Mordred 2022-02-11 10:32:13 +01:00
parent c565dfbd34
commit dc562bfe61
2 changed files with 50 additions and 10 deletions

View file

@ -161,35 +161,72 @@ public:
}; };
}; };
enum LayerSetReferencedType
{
All = 0x0,
Include = 0x1,
Exclude = 0x2,
Undetermined = 0x3,
};
struct LayerSetReferenced
{
uint32_t LayerSetID;
};
struct LayerSetReferencedList
{
LayerSetReferencedType ReferencedType;
int LayerSets;
int LayerSetCount;
};
struct LGB_GROUP_HEADER struct LGB_GROUP_HEADER
{ {
uint32_t id; uint32_t id;
int32_t groupNameOffset; int32_t groupNameOffset;
int32_t entriesOffset; int32_t entriesOffset;
int32_t entryCount; int32_t entryCount;
uint32_t unknown2; int8_t ToolModeVisible;
uint32_t unknown3; int8_t ToolModeReadOnly;
uint32_t unknown4; int8_t IsBushLayer;
uint32_t unknown5; int8_t PS3Visible;
uint32_t unknown6; int32_t LayerSetRef;
uint32_t unknown7; uint16_t FestivalID;
uint32_t unknown8; uint16_t FestivalPhaseID;
uint32_t unknown9; int8_t IsTemporary;
uint32_t unknown10; int8_t IsHousing;
uint16_t VersionMask;
uint32_t Reserved;
int32_t OBSetReferencedList;
int32_t OBSetReferencedList_Count;
int32_t OBSetEnableReferencedList;
int32_t OBSetEnableReferencedList_Count;
}; };
struct LGB_GROUP struct LGB_GROUP
{ {
LGB_FILE* parent; LGB_FILE* parent;
LGB_GROUP_HEADER header; LGB_GROUP_HEADER header;
LayerSetReferencedList layerSetReferencedList;
std::string name; std::string name;
std::vector< std::shared_ptr< LgbEntry > > entries; std::vector< std::shared_ptr< LgbEntry > > entries;
std::vector< LayerSetReferenced > refs;
LGB_GROUP( char* buf, LGB_FILE* parentStruct, size_t offset ) LGB_GROUP( char* buf, LGB_FILE* parentStruct, size_t offset )
{ {
parent = parentStruct; parent = parentStruct;
header = *reinterpret_cast< LGB_GROUP_HEADER* >( buf + offset ); header = *reinterpret_cast< LGB_GROUP_HEADER* >( buf + offset );
name = std::string( buf + offset + header.groupNameOffset ); name = std::string( buf + offset + header.groupNameOffset );
layerSetReferencedList = *reinterpret_cast< LayerSetReferencedList* >( buf + offset + header.LayerSetRef );
if( layerSetReferencedList.LayerSetCount > 0 )
{
refs.resize( layerSetReferencedList.LayerSetCount );
memcpy( (char*)&refs[0], buf + offset + header.LayerSetRef + layerSetReferencedList.LayerSets, layerSetReferencedList.LayerSetCount * sizeof( LayerSetReferenced ) );
}
const auto entriesOffset = offset + header.entriesOffset; const auto entriesOffset = offset + header.entriesOffset;
for( auto i = 0; i < header.entryCount; ++i ) for( auto i = 0; i < header.entryCount; ++i )
{ {

View file

@ -23,10 +23,13 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
{ {
m_data.ZoneId = territory.getTerritoryTypeId(); m_data.ZoneId = territory.getTerritoryTypeId();
m_data.TerritoryType = territory.getTerritoryTypeId(); m_data.TerritoryType = territory.getTerritoryTypeId();
m_data.TerritoryIndex = 0;
m_data.WeatherId = static_cast< uint8_t >( territory.getCurrentWeather() ); m_data.WeatherId = static_cast< uint8_t >( territory.getCurrentWeather() );
m_data.Flag = 0x1; m_data.Flag = 1;
m_data.FestivalEid0 = territory.getCurrentFestival().first; m_data.FestivalEid0 = territory.getCurrentFestival().first;
m_data.FestivalPid0 = territory.getCurrentFestival().second; m_data.FestivalPid0 = territory.getCurrentFestival().second;
//m_data.LayoutId = 85915;
//m_data.LayerSetId = 115133;
m_data.Pos[ 0 ] = player.getPos().x; m_data.Pos[ 0 ] = player.getPos().x;
m_data.Pos[ 1 ] = player.getPos().y; m_data.Pos[ 1 ] = player.getPos().y;
m_data.Pos[ 2 ] = player.getPos().z; m_data.Pos[ 2 ] = player.getPos().z;