From dc562bfe61ed06e3d24947933aeeab02f4b0ba07 Mon Sep 17 00:00:00 2001 From: Mordred Date: Fri, 11 Feb 2022 10:32:13 +0100 Subject: [PATCH] Added layerset parsing --- deps/datReader/DatCategories/bg/lgb.h | 55 ++++++++++++++++--- .../Network/PacketWrappers/InitZonePacket.h | 5 +- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/deps/datReader/DatCategories/bg/lgb.h b/deps/datReader/DatCategories/bg/lgb.h index 93688c8e..2a10251a 100644 --- a/deps/datReader/DatCategories/bg/lgb.h +++ b/deps/datReader/DatCategories/bg/lgb.h @@ -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 { uint32_t id; int32_t groupNameOffset; int32_t entriesOffset; int32_t entryCount; - uint32_t unknown2; - uint32_t unknown3; - uint32_t unknown4; - uint32_t unknown5; - uint32_t unknown6; - uint32_t unknown7; - uint32_t unknown8; - uint32_t unknown9; - uint32_t unknown10; + int8_t ToolModeVisible; + int8_t ToolModeReadOnly; + int8_t IsBushLayer; + int8_t PS3Visible; + int32_t LayerSetRef; + uint16_t FestivalID; + uint16_t FestivalPhaseID; + int8_t IsTemporary; + 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 { LGB_FILE* parent; LGB_GROUP_HEADER header; + LayerSetReferencedList layerSetReferencedList; std::string name; std::vector< std::shared_ptr< LgbEntry > > entries; + std::vector< LayerSetReferenced > refs; LGB_GROUP( char* buf, LGB_FILE* parentStruct, size_t offset ) { parent = parentStruct; header = *reinterpret_cast< LGB_GROUP_HEADER* >( buf + offset ); 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; for( auto i = 0; i < header.entryCount; ++i ) { diff --git a/src/world/Network/PacketWrappers/InitZonePacket.h b/src/world/Network/PacketWrappers/InitZonePacket.h index 2d14c49e..32ec1c8b 100644 --- a/src/world/Network/PacketWrappers/InitZonePacket.h +++ b/src/world/Network/PacketWrappers/InitZonePacket.h @@ -23,10 +23,13 @@ namespace Sapphire::Network::Packets::WorldPackets::Server { m_data.ZoneId = territory.getTerritoryTypeId(); m_data.TerritoryType = territory.getTerritoryTypeId(); + m_data.TerritoryIndex = 0; 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.FestivalPid0 = territory.getCurrentFestival().second; + //m_data.LayoutId = 85915; + //m_data.LayerSetId = 115133; m_data.Pos[ 0 ] = player.getPos().x; m_data.Pos[ 1 ] = player.getPos().y; m_data.Pos[ 2 ] = player.getPos().z;