private static void loadRegion(byte version, River river, StructureRegion region)
        {
            ushort num = river.readUInt16();

            for (ushort num2 = 0; num2 < num; num2 += 1)
            {
                ushort  num3   = river.readUInt16();
                ushort  num4   = river.readUInt16();
                Vector3 vector = river.readSingleVector3();
                byte    b      = 0;
                if (version > 4)
                {
                    b = river.readByte();
                }
                byte b2 = river.readByte();
                byte b3 = 0;
                if (version > 4)
                {
                    b3 = river.readByte();
                }
                ulong num5 = 0UL;
                ulong num6 = 0UL;
                if (version > 2)
                {
                    num5 = river.readUInt64();
                    num6 = river.readUInt64();
                }
                uint newObjActiveDate;
                if (version > 3)
                {
                    newObjActiveDate = river.readUInt32();
                    if (Provider.time - StructureManager.serverActiveDate > Provider.modeConfigData.Structures.Decay_Time / 2u)
                    {
                        newObjActiveDate = Provider.time;
                    }
                }
                else
                {
                    newObjActiveDate = Provider.time;
                }
                ItemStructureAsset itemStructureAsset;
                try
                {
                    itemStructureAsset = (ItemStructureAsset)Assets.find(EAssetType.ITEM, num3);
                }
                catch
                {
                    itemStructureAsset = null;
                }
                if (itemStructureAsset != null)
                {
                    if (version < 5)
                    {
                        Vector3 eulerAngles = Quaternion.Euler(-90f, (float)(b2 * 2), 0f).eulerAngles;
                        b  = MeasurementTool.angleToByte((float)(Mathf.RoundToInt(eulerAngles.x / 2f) * 2));
                        b2 = MeasurementTool.angleToByte((float)(Mathf.RoundToInt(eulerAngles.y / 2f) * 2));
                        b3 = MeasurementTool.angleToByte((float)(Mathf.RoundToInt(eulerAngles.z / 2f) * 2));
                    }
                    region.structures.Add(new StructureData(new Structure(num3, num4, itemStructureAsset), vector, b, b2, b3, num5, num6, newObjActiveDate));
                    StructureManager.manager.spawnStructure(region, num3, vector, b, b2, b3, (byte)Mathf.RoundToInt((float)num4 / (float)itemStructureAsset.health * 100f), num5, num6, StructureManager.instanceCount += 1u);
                }
            }
        }