public static void save() { River river = new River(Level.info.path + "/Environment/Roads.dat", false); river.writeByte(LevelRoads.SAVEDATA_ROADS_VERSION); river.writeByte((byte)LevelRoads.materials.Length); byte b = 0; while ((int)b < LevelRoads.materials.Length) { river.writeSingle(LevelRoads.materials[(int)b].width); river.writeSingle(LevelRoads.materials[(int)b].height); river.writeSingle(LevelRoads.materials[(int)b].depth); river.writeSingle(LevelRoads.materials[(int)b].offset); river.writeBoolean(LevelRoads.materials[(int)b].isConcrete); b += 1; } river.closeRiver(); river = new River(Level.info.path + "/Environment/Paths.dat", false); river.writeByte(LevelRoads.SAVEDATA_PATHS_VERSION); ushort num = 0; ushort num2 = 0; while ((int)num2 < LevelRoads.roads.Count) { if (LevelRoads.roads[(int)num2].joints.Count > 1) { num += 1; } num2 += 1; } river.writeUInt16(num); byte b2 = 0; while ((int)b2 < LevelRoads.roads.Count) { List <RoadJoint> joints = LevelRoads.roads[(int)b2].joints; if (joints.Count > 1) { river.writeUInt16((ushort)joints.Count); river.writeByte(LevelRoads.roads[(int)b2].material); river.writeBoolean(LevelRoads.roads[(int)b2].isLoop); ushort num3 = 0; while ((int)num3 < joints.Count) { RoadJoint roadJoint = joints[(int)num3]; river.writeSingleVector3(roadJoint.vertex); river.writeSingleVector3(roadJoint.getTangent(0)); river.writeSingleVector3(roadJoint.getTangent(1)); river.writeByte((byte)roadJoint.mode); river.writeSingle(roadJoint.offset); river.writeBoolean(roadJoint.ignoreTerrain); num3 += 1; } } b2 += 1; } river.closeRiver(); }
public static void load() { if (Level.isVR) { LevelVisibility.roadsVisible = false; LevelVisibility._navigationVisible = false; LevelVisibility._nodesVisible = false; LevelVisibility._itemsVisible = false; LevelVisibility.playersVisible = false; LevelVisibility._zombiesVisible = false; LevelVisibility._vehiclesVisible = false; LevelVisibility.borderVisible = false; LevelVisibility._animalsVisible = false; return; } if (Level.isEditor) { if (ReadWrite.fileExists(Level.info.path + "/Level/Visibility.dat", false, false)) { River river = new River(Level.info.path + "/Level/Visibility.dat", false); byte b = river.readByte(); if (b > 0) { LevelVisibility.roadsVisible = river.readBoolean(); LevelVisibility.navigationVisible = river.readBoolean(); LevelVisibility.nodesVisible = river.readBoolean(); LevelVisibility.itemsVisible = river.readBoolean(); LevelVisibility.playersVisible = river.readBoolean(); LevelVisibility.zombiesVisible = river.readBoolean(); LevelVisibility.vehiclesVisible = river.readBoolean(); LevelVisibility.borderVisible = river.readBoolean(); if (b > 1) { LevelVisibility.animalsVisible = river.readBoolean(); } else { LevelVisibility._animalsVisible = true; } river.closeRiver(); } } else { LevelVisibility._roadsVisible = true; LevelVisibility._navigationVisible = true; LevelVisibility._nodesVisible = true; LevelVisibility._itemsVisible = true; LevelVisibility._playersVisible = true; LevelVisibility._zombiesVisible = true; LevelVisibility._vehiclesVisible = true; LevelVisibility._borderVisible = true; LevelVisibility._animalsVisible = true; } } }
// Token: 0x060024E7 RID: 9447 RVA: 0x000D38C0 File Offset: 0x000D1CC0 public static void save() { Block block = new Block(); block.writeByte(LevelItems.SAVEDATA_VERSION); block.writeByte((byte)LevelItems.tables.Count); byte b = 0; while ((int)b < LevelItems.tables.Count) { ItemTable itemTable = LevelItems.tables[(int)b]; block.writeColor(itemTable.color); block.writeString(itemTable.name); block.writeUInt16(itemTable.tableID); block.write((byte)itemTable.tiers.Count); byte b2 = 0; while ((int)b2 < itemTable.tiers.Count) { ItemTier itemTier = itemTable.tiers[(int)b2]; block.writeString(itemTier.name); block.writeSingle(itemTier.chance); block.writeByte((byte)itemTier.table.Count); byte b3 = 0; while ((int)b3 < itemTier.table.Count) { ItemSpawn itemSpawn = itemTier.table[(int)b3]; block.writeUInt16(itemSpawn.item); b3 += 1; } b2 += 1; } b += 1; } ReadWrite.writeBlock(Level.info.path + "/Spawns/Items.dat", false, false, block); River river = new River(Level.info.path + "/Spawns/Jars.dat", false); river.writeByte(LevelItems.SAVEDATA_VERSION); for (byte b4 = 0; b4 < Regions.WORLD_SIZE; b4 += 1) { for (byte b5 = 0; b5 < Regions.WORLD_SIZE; b5 += 1) { List <ItemSpawnpoint> list = LevelItems.spawns[(int)b4, (int)b5]; river.writeUInt16((ushort)list.Count); ushort num = 0; while ((int)num < list.Count) { ItemSpawnpoint itemSpawnpoint = list[(int)num]; river.writeByte(itemSpawnpoint.type); river.writeSingleVector3(itemSpawnpoint.point); num += 1; } } } river.closeRiver(); }
// Token: 0x060028EB RID: 10475 RVA: 0x000F995C File Offset: 0x000F7D5C public static void save() { River river = LevelSavedata.openRiver("/Objects.dat", false); river.writeByte(ObjectManager.SAVEDATA_VERSION); for (byte b = 0; b < Regions.WORLD_SIZE; b += 1) { for (byte b2 = 0; b2 < Regions.WORLD_SIZE; b2 += 1) { ObjectManager.saveRegion(river, LevelObjects.objects[(int)b, (int)b2]); } } river.closeRiver(); }
// Token: 0x060025BA RID: 9658 RVA: 0x000DCD44 File Offset: 0x000DB144 public static void save() { River river = new River(Level.info.path + "/Spawns/Players.dat", false); river.writeByte(LevelPlayers.SAVEDATA_VERSION); river.writeByte((byte)LevelPlayers.spawns.Count); for (int i = 0; i < LevelPlayers.spawns.Count; i++) { PlayerSpawnpoint playerSpawnpoint = LevelPlayers.spawns[i]; river.writeSingleVector3(playerSpawnpoint.point); river.writeByte(MeasurementTool.angleToByte(playerSpawnpoint.angle)); river.writeBoolean(playerSpawnpoint.isAlt); } river.closeRiver(); }
public static void save() { River river = new River(Level.info.path + "/Level/Visibility.dat", false); river.writeByte(LevelVisibility.SAVEDATA_VERSION); river.writeBoolean(LevelVisibility.roadsVisible); river.writeBoolean(LevelVisibility.navigationVisible); river.writeBoolean(LevelVisibility.nodesVisible); river.writeBoolean(LevelVisibility.itemsVisible); river.writeBoolean(LevelVisibility.playersVisible); river.writeBoolean(LevelVisibility.zombiesVisible); river.writeBoolean(LevelVisibility.vehiclesVisible); river.writeBoolean(LevelVisibility.borderVisible); river.writeBoolean(LevelVisibility.animalsVisible); river.closeRiver(); }
public static void save() { River river = LevelSavedata.openRiver("/Structures.dat", false); river.writeByte(StructureManager.SAVEDATA_VERSION); river.writeUInt32(Provider.time); for (byte b = 0; b < Regions.WORLD_SIZE; b += 1) { for (byte b2 = 0; b2 < Regions.WORLD_SIZE; b2 += 1) { StructureRegion region = StructureManager.regions[(int)b, (int)b2]; StructureManager.saveRegion(river, region); } } river.closeRiver(); }
// Token: 0x06002FA6 RID: 12198 RVA: 0x0013B76C File Offset: 0x00139B6C public static void save() { River river = ServerSavedata.openRiver("/Server/Adminlist.dat", false); river.writeByte(SteamAdminlist.SAVEDATA_VERSION); river.writeUInt16((ushort)SteamAdminlist.list.Count); ushort num = 0; while ((int)num < SteamAdminlist.list.Count) { SteamAdminID steamAdminID = SteamAdminlist.list[(int)num]; river.writeSteamID(steamAdminID.playerID); river.writeSteamID(steamAdminID.judgeID); num += 1; } river.closeRiver(); }
public static void save() { River river = new River(Level.info.path + "/Spawns/Vehicles.dat", false); river.writeByte(LevelVehicles.SAVEDATA_VERSION); river.writeByte((byte)LevelVehicles.tables.Count); byte b = 0; while ((int)b < LevelVehicles.tables.Count) { VehicleTable vehicleTable = LevelVehicles.tables[(int)b]; river.writeColor(vehicleTable.color); river.writeString(vehicleTable.name); river.writeUInt16(vehicleTable.tableID); river.writeByte((byte)vehicleTable.tiers.Count); byte b2 = 0; while ((int)b2 < vehicleTable.tiers.Count) { VehicleTier vehicleTier = vehicleTable.tiers[(int)b2]; river.writeString(vehicleTier.name); river.writeSingle(vehicleTier.chance); river.writeByte((byte)vehicleTier.table.Count); byte b3 = 0; while ((int)b3 < vehicleTier.table.Count) { VehicleSpawn vehicleSpawn = vehicleTier.table[(int)b3]; river.writeUInt16(vehicleSpawn.vehicle); b3 += 1; } b2 += 1; } b += 1; } river.writeUInt16((ushort)LevelVehicles.spawns.Count); for (int i = 0; i < LevelVehicles.spawns.Count; i++) { VehicleSpawnpoint vehicleSpawnpoint = LevelVehicles.spawns[i]; river.writeByte(vehicleSpawnpoint.type); river.writeSingleVector3(vehicleSpawnpoint.point); river.writeByte(MeasurementTool.angleToByte(vehicleSpawnpoint.angle)); } river.closeRiver(); }
public static void save() { River river = new River(Level.info.path + "/Spawns/Fauna.dat", false); river.writeByte(LevelAnimals.SAVEDATA_VERSION); river.writeByte((byte)LevelAnimals.tables.Count); byte b = 0; while ((int)b < LevelAnimals.tables.Count) { AnimalTable animalTable = LevelAnimals.tables[(int)b]; river.writeColor(animalTable.color); river.writeString(animalTable.name); river.writeUInt16(animalTable.tableID); river.writeByte((byte)animalTable.tiers.Count); byte b2 = 0; while ((int)b2 < animalTable.tiers.Count) { AnimalTier animalTier = animalTable.tiers[(int)b2]; river.writeString(animalTier.name); river.writeSingle(animalTier.chance); river.writeByte((byte)animalTier.table.Count); byte b3 = 0; while ((int)b3 < animalTier.table.Count) { AnimalSpawn animalSpawn = animalTier.table[(int)b3]; river.writeUInt16(animalSpawn.animal); b3 += 1; } b2 += 1; } b += 1; } river.writeUInt16((ushort)LevelAnimals.spawns.Count); for (int i = 0; i < LevelAnimals.spawns.Count; i++) { AnimalSpawnpoint animalSpawnpoint = LevelAnimals.spawns[i]; river.writeByte(animalSpawnpoint.type); river.writeSingleVector3(animalSpawnpoint.point); } river.closeRiver(); }
// Token: 0x060025B9 RID: 9657 RVA: 0x000DCC18 File Offset: 0x000DB018 public static void load() { LevelPlayers._models = new GameObject().transform; LevelPlayers.models.name = "Players"; LevelPlayers.models.parent = Level.spawns; LevelPlayers.models.tag = "Logic"; LevelPlayers.models.gameObject.layer = LayerMasks.LOGIC; LevelPlayers._spawns = new List <PlayerSpawnpoint>(); if (ReadWrite.fileExists(Level.info.path + "/Spawns/Players.dat", false, false)) { River river = new River(Level.info.path + "/Spawns/Players.dat", false); byte b = river.readByte(); if (b > 1 && b < 3) { river.readSteamID(); } int num = 0; int num2 = 0; byte b2 = river.readByte(); for (int i = 0; i < (int)b2; i++) { Vector3 point = river.readSingleVector3(); float angle = (float)(river.readByte() * 2); bool flag = false; if (b > 3) { flag = river.readBoolean(); } if (flag) { num2++; } else { num++; } LevelPlayers.addSpawn(point, angle, flag); } river.closeRiver(); } }
// Token: 0x06002FB0 RID: 12208 RVA: 0x0013BA70 File Offset: 0x00139E70 public static void save() { River river = ServerSavedata.openRiver("/Server/Blacklist.dat", false); river.writeByte(SteamBlacklist.SAVEDATA_VERSION); river.writeUInt16((ushort)SteamBlacklist.list.Count); ushort num = 0; while ((int)num < SteamBlacklist.list.Count) { SteamBlacklistID steamBlacklistID = SteamBlacklist.list[(int)num]; river.writeSteamID(steamBlacklistID.playerID); river.writeUInt32(steamBlacklistID.ip); river.writeSteamID(steamBlacklistID.judgeID); river.writeString(steamBlacklistID.reason); river.writeUInt32(steamBlacklistID.duration); river.writeUInt32(steamBlacklistID.banned); num += 1; } river.closeRiver(); }
// Token: 0x060024E6 RID: 9446 RVA: 0x000D33D8 File Offset: 0x000D17D8 public static void load() { LevelItems._models = new GameObject().transform; LevelItems.models.name = "Items"; LevelItems.models.parent = Level.spawns; LevelItems.models.tag = "Logic"; LevelItems.models.gameObject.layer = LayerMasks.LOGIC; if (Level.isEditor || Provider.isServer) { LevelItems._tables = new List <ItemTable>(); LevelItems._spawns = new List <ItemSpawnpoint> [(int)Regions.WORLD_SIZE, (int)Regions.WORLD_SIZE]; if (ReadWrite.fileExists(Level.info.path + "/Spawns/Items.dat", false, false)) { Block block = ReadWrite.readBlock(Level.info.path + "/Spawns/Items.dat", false, false, 0); byte b = block.readByte(); if (b > 1 && b < 3) { block.readSteamID(); } byte b2 = block.readByte(); for (byte b3 = 0; b3 < b2; b3 += 1) { Color newColor = block.readColor(); string text = block.readString(); ushort num; if (b > 3) { num = block.readUInt16(); if (num != 0 && SpawnTableTool.resolve(num) == 0) { Assets.errors.Add(string.Concat(new object[] { Level.info.name, " item table \"", text, "\" references invalid spawn table ", num, "!" })); } } else { num = 0; } List <ItemTier> list = new List <ItemTier>(); byte b4 = block.readByte(); for (byte b5 = 0; b5 < b4; b5 += 1) { string newName = block.readString(); float newChance = block.readSingle(); List <ItemSpawn> list2 = new List <ItemSpawn>(); byte b6 = block.readByte(); for (byte b7 = 0; b7 < b6; b7 += 1) { ushort num2 = block.readUInt16(); ItemAsset itemAsset = (ItemAsset)Assets.find(EAssetType.ITEM, num2); if (itemAsset != null && !itemAsset.isPro) { list2.Add(new ItemSpawn(num2)); } } if (list2.Count > 0) { list.Add(new ItemTier(list2, newName, newChance)); } } LevelItems.tables.Add(new ItemTable(list, newColor, text, num)); if (!Level.isEditor) { LevelItems.tables[(int)b3].buildTable(); } } } for (byte b8 = 0; b8 < Regions.WORLD_SIZE; b8 += 1) { for (byte b9 = 0; b9 < Regions.WORLD_SIZE; b9 += 1) { LevelItems.spawns[(int)b8, (int)b9] = new List <ItemSpawnpoint>(); } } if (ReadWrite.fileExists(Level.info.path + "/Spawns/Jars.dat", false, false)) { River river = new River(Level.info.path + "/Spawns/Jars.dat", false); byte b10 = river.readByte(); if (b10 > 0) { for (byte b11 = 0; b11 < Regions.WORLD_SIZE; b11 += 1) { for (byte b12 = 0; b12 < Regions.WORLD_SIZE; b12 += 1) { ushort num3 = river.readUInt16(); for (ushort num4 = 0; num4 < num3; num4 += 1) { byte newType = river.readByte(); Vector3 newPoint = river.readSingleVector3(); LevelItems.spawns[(int)b11, (int)b12].Add(new ItemSpawnpoint(newType, newPoint)); } } } } river.closeRiver(); } else { for (byte b13 = 0; b13 < Regions.WORLD_SIZE; b13 += 1) { for (byte b14 = 0; b14 < Regions.WORLD_SIZE; b14 += 1) { LevelItems.spawns[(int)b13, (int)b14] = new List <ItemSpawnpoint>(); if (ReadWrite.fileExists(string.Concat(new object[] { Level.info.path, "/Spawns/Items_", b13, "_", b14, ".dat" }), false, false)) { River river2 = new River(string.Concat(new object[] { Level.info.path, "/Spawns/Items_", b13, "_", b14, ".dat" }), false); byte b15 = river2.readByte(); if (b15 > 0) { ushort num5 = river2.readUInt16(); for (ushort num6 = 0; num6 < num5; num6 += 1) { byte newType2 = river2.readByte(); Vector3 newPoint2 = river2.readSingleVector3(); LevelItems.spawns[(int)b13, (int)b14].Add(new ItemSpawnpoint(newType2, newPoint2)); } } river2.closeRiver(); } } } } } }
// Token: 0x06002560 RID: 9568 RVA: 0x000D90CC File Offset: 0x000D74CC public static void load() { LevelNodes._models = new GameObject().transform; LevelNodes.models.name = "Nodes"; LevelNodes.models.parent = Level.level; LevelNodes.models.tag = "Logic"; LevelNodes.models.gameObject.layer = LayerMasks.LOGIC; LevelNodes._nodes = new List <Node>(); if (ReadWrite.fileExists(Level.info.path + "/Environment/Nodes.dat", false, false)) { River river = new River(Level.info.path + "/Environment/Nodes.dat", false); byte b = river.readByte(); if (b > 0) { ushort num = (ushort)river.readByte(); for (ushort num2 = 0; num2 < num; num2 += 1) { Vector3 vector = river.readSingleVector3(); ENodeType enodeType = (ENodeType)river.readByte(); if (enodeType == ENodeType.LOCATION) { string newName = river.readString(); LevelNodes.nodes.Add(new LocationNode(vector, newName)); } else if (enodeType == ENodeType.SAFEZONE) { float newRadius = river.readSingle(); bool newHeight = false; if (b > 1) { newHeight = river.readBoolean(); } bool newNoWeapons = true; if (b > 4) { newNoWeapons = river.readBoolean(); } bool newNoBuildables = true; if (b > 4) { newNoBuildables = river.readBoolean(); } LevelNodes.nodes.Add(new SafezoneNode(vector, newRadius, newHeight, newNoWeapons, newNoBuildables)); } else if (enodeType == ENodeType.PURCHASE) { float newRadius2 = river.readSingle(); ushort newID = river.readUInt16(); uint newCost = river.readUInt32(); LevelNodes.nodes.Add(new PurchaseNode(vector, newRadius2, newID, newCost)); } else if (enodeType == ENodeType.ARENA) { float newRadius3 = river.readSingle(); LevelNodes.nodes.Add(new ArenaNode(vector, newRadius3)); } else if (enodeType == ENodeType.DEADZONE) { float newRadius4 = river.readSingle(); LevelNodes.nodes.Add(new DeadzoneNode(vector, newRadius4)); } else if (enodeType == ENodeType.AIRDROP) { ushort num3 = river.readUInt16(); byte b2; byte b3; if (SpawnTableTool.resolve(num3) == 0 && Regions.tryGetCoordinate(vector, out b2, out b3)) { Assets.errors.Add(string.Concat(new object[] { Level.info.name, " airdrop references invalid spawn table ", num3, " at (", b2, ", ", b3, ")!" })); } LevelNodes.nodes.Add(new AirdropNode(vector, num3)); } else if (enodeType == ENodeType.EFFECT) { byte newShape = 0; if (b > 2) { newShape = river.readByte(); } float newRadius5 = river.readSingle(); Vector3 newBounds = Vector3.one; if (b > 2) { newBounds = river.readSingleVector3(); } ushort newID2 = river.readUInt16(); bool newNoWater = river.readBoolean(); bool newNoLighting = false; if (b > 3) { newNoLighting = river.readBoolean(); } LevelNodes.nodes.Add(new EffectNode(vector, (ENodeShape)newShape, newRadius5, newBounds, newID2, newNoWater, newNoLighting)); } } } river.closeRiver(); } }
// Token: 0x06002561 RID: 9569 RVA: 0x000D93E4 File Offset: 0x000D77E4 public static void save() { River river = new River(Level.info.path + "/Environment/Nodes.dat", false); river.writeByte(LevelNodes.SAVEDATA_VERSION); byte b = 0; ushort num = 0; while ((int)num < LevelNodes.nodes.Count) { if (LevelNodes.nodes[(int)num].type != ENodeType.LOCATION || ((LocationNode)LevelNodes.nodes[(int)num]).name.Length > 0) { b += 1; } num += 1; } river.writeByte(b); byte b2 = 0; while ((int)b2 < LevelNodes.nodes.Count) { if (LevelNodes.nodes[(int)b2].type != ENodeType.LOCATION || ((LocationNode)LevelNodes.nodes[(int)b2]).name.Length > 0) { river.writeSingleVector3(LevelNodes.nodes[(int)b2].point); river.writeByte((byte)LevelNodes.nodes[(int)b2].type); if (LevelNodes.nodes[(int)b2].type == ENodeType.LOCATION) { river.writeString(((LocationNode)LevelNodes.nodes[(int)b2]).name); } else if (LevelNodes.nodes[(int)b2].type == ENodeType.SAFEZONE) { river.writeSingle(((SafezoneNode)LevelNodes.nodes[(int)b2]).radius); river.writeBoolean(((SafezoneNode)LevelNodes.nodes[(int)b2]).isHeight); river.writeBoolean(((SafezoneNode)LevelNodes.nodes[(int)b2]).noWeapons); river.writeBoolean(((SafezoneNode)LevelNodes.nodes[(int)b2]).noBuildables); } else if (LevelNodes.nodes[(int)b2].type == ENodeType.PURCHASE) { river.writeSingle(((PurchaseNode)LevelNodes.nodes[(int)b2]).radius); river.writeUInt16(((PurchaseNode)LevelNodes.nodes[(int)b2]).id); river.writeUInt32(((PurchaseNode)LevelNodes.nodes[(int)b2]).cost); } else if (LevelNodes.nodes[(int)b2].type == ENodeType.ARENA) { river.writeSingle(((ArenaNode)LevelNodes.nodes[(int)b2]).radius); } else if (LevelNodes.nodes[(int)b2].type == ENodeType.DEADZONE) { river.writeSingle(((DeadzoneNode)LevelNodes.nodes[(int)b2]).radius); } else if (LevelNodes.nodes[(int)b2].type == ENodeType.AIRDROP) { river.writeUInt16(((AirdropNode)LevelNodes.nodes[(int)b2]).id); } else if (LevelNodes.nodes[(int)b2].type == ENodeType.EFFECT) { river.writeByte((byte)((EffectNode)LevelNodes.nodes[(int)b2]).shape); river.writeSingle(((EffectNode)LevelNodes.nodes[(int)b2]).radius); river.writeSingleVector3(((EffectNode)LevelNodes.nodes[(int)b2]).bounds); river.writeUInt16(((EffectNode)LevelNodes.nodes[(int)b2]).id); river.writeBoolean(((EffectNode)LevelNodes.nodes[(int)b2]).noWater); river.writeBoolean(((EffectNode)LevelNodes.nodes[(int)b2]).noLighting); } } b2 += 1; } river.closeRiver(); }
public static void load() { LevelRoads._models = new GameObject().transform; LevelRoads.models.name = "Roads"; LevelRoads.models.parent = Level.level; LevelRoads.models.tag = "Logic"; LevelRoads.models.gameObject.layer = LayerMasks.LOGIC; if (ReadWrite.fileExists(Level.info.path + "/Environment/Roads.unity3d", false, false)) { Bundle bundle = Bundles.getBundle(Level.info.path + "/Environment/Roads.unity3d", false); Object[] array = bundle.load(); bundle.unload(); LevelRoads._materials = new RoadMaterial[array.Length]; for (int i = 0; i < LevelRoads.materials.Length; i++) { LevelRoads.materials[i] = new RoadMaterial((Texture2D)array[i]); } } else { LevelRoads._materials = new RoadMaterial[0]; } LevelRoads.roads = new List <Road>(); if (ReadWrite.fileExists(Level.info.path + "/Environment/Roads.dat", false, false)) { River river = new River(Level.info.path + "/Environment/Roads.dat", false); byte b = river.readByte(); if (b > 0) { byte b2 = river.readByte(); for (byte b3 = 0; b3 < b2; b3 += 1) { if ((int)b3 >= LevelRoads.materials.Length) { break; } LevelRoads.materials[(int)b3].width = river.readSingle(); LevelRoads.materials[(int)b3].height = river.readSingle(); LevelRoads.materials[(int)b3].depth = river.readSingle(); if (b > 1) { LevelRoads.materials[(int)b3].offset = river.readSingle(); } LevelRoads.materials[(int)b3].isConcrete = river.readBoolean(); } } river.closeRiver(); } if (ReadWrite.fileExists(Level.info.path + "/Environment/Paths.dat", false, false)) { River river2 = new River(Level.info.path + "/Environment/Paths.dat", false); byte b4 = river2.readByte(); if (b4 > 1) { ushort num = river2.readUInt16(); for (ushort num2 = 0; num2 < num; num2 += 1) { ushort num3 = river2.readUInt16(); byte newMaterial = river2.readByte(); bool newLoop = b4 > 2 && river2.readBoolean(); List <RoadJoint> list = new List <RoadJoint>(); for (ushort num4 = 0; num4 < num3; num4 += 1) { Vector3 vertex = river2.readSingleVector3(); Vector3[] array2 = new Vector3[2]; if (b4 > 2) { array2[0] = river2.readSingleVector3(); array2[1] = river2.readSingleVector3(); } ERoadMode mode; if (b4 > 2) { mode = (ERoadMode)river2.readByte(); } else { mode = ERoadMode.FREE; } float offset; if (b4 > 4) { offset = river2.readSingle(); } else { offset = 0f; } bool ignoreTerrain = b4 > 3 && river2.readBoolean(); RoadJoint item = new RoadJoint(vertex, array2, mode, offset, ignoreTerrain); list.Add(item); } if (b4 < 3) { for (ushort num5 = 0; num5 < num3; num5 += 1) { RoadJoint roadJoint = list[(int)num5]; if (num5 == 0) { roadJoint.setTangent(0, (roadJoint.vertex - list[(int)(num5 + 1)].vertex).normalized * 2.5f); roadJoint.setTangent(1, (list[(int)(num5 + 1)].vertex - roadJoint.vertex).normalized * 2.5f); } else if (num5 == num3 - 1) { roadJoint.setTangent(0, (list[(int)(num5 - 1)].vertex - roadJoint.vertex).normalized * 2.5f); roadJoint.setTangent(1, (roadJoint.vertex - list[(int)(num5 - 1)].vertex).normalized * 2.5f); } else { roadJoint.setTangent(0, (list[(int)(num5 - 1)].vertex - roadJoint.vertex).normalized * 2.5f); roadJoint.setTangent(1, (list[(int)(num5 + 1)].vertex - roadJoint.vertex).normalized * 2.5f); } } } LevelRoads.roads.Add(new Road(newMaterial, newLoop, list)); } } else if (b4 > 0) { byte b5 = river2.readByte(); for (byte b6 = 0; b6 < b5; b6 += 1) { byte b7 = river2.readByte(); byte newMaterial2 = river2.readByte(); List <RoadJoint> list2 = new List <RoadJoint>(); for (byte b8 = 0; b8 < b7; b8 += 1) { Vector3 vertex2 = river2.readSingleVector3(); Vector3[] tangents = new Vector3[2]; ERoadMode mode2 = ERoadMode.FREE; RoadJoint item2 = new RoadJoint(vertex2, tangents, mode2, 0f, false); list2.Add(item2); } for (byte b9 = 0; b9 < b7; b9 += 1) { RoadJoint roadJoint2 = list2[(int)b9]; if (b9 == 0) { roadJoint2.setTangent(0, (roadJoint2.vertex - list2[(int)(b9 + 1)].vertex).normalized * 2.5f); roadJoint2.setTangent(1, (list2[(int)(b9 + 1)].vertex - roadJoint2.vertex).normalized * 2.5f); } else if (b9 == b7 - 1) { roadJoint2.setTangent(0, (list2[(int)(b9 - 1)].vertex - roadJoint2.vertex).normalized * 2.5f); roadJoint2.setTangent(1, (roadJoint2.vertex - list2[(int)(b9 - 1)].vertex).normalized * 2.5f); } else { roadJoint2.setTangent(0, (list2[(int)(b9 - 1)].vertex - roadJoint2.vertex).normalized * 2.5f); roadJoint2.setTangent(1, (list2[(int)(b9 + 1)].vertex - roadJoint2.vertex).normalized * 2.5f); } } LevelRoads.roads.Add(new Road(newMaterial2, false, list2)); } } river2.closeRiver(); } if (LevelGround.terrain != null) { LevelRoads.buildMeshes(); } if (!LevelRoads.isListeningForLandscape) { LevelRoads.isListeningForLandscape = true; if (LevelRoads.< > f__mg$cache0 == null) { LevelRoads.< > f__mg$cache0 = new LandscapeLoadedHandler(LevelRoads.handleLandscapeLoaded); } Landscape.loaded += LevelRoads.< > f__mg$cache0; } }
public static void save() { if (Level.info.configData.Use_Legacy_Objects) { River river = new River(Level.info.path + "/Level/Objects.dat", false); river.writeByte(LevelObjects.SAVEDATA_VERSION); river.writeUInt32(LevelObjects.availableInstanceID); for (byte b = 0; b < Regions.WORLD_SIZE; b += 1) { for (byte b2 = 0; b2 < Regions.WORLD_SIZE; b2 += 1) { List <LevelObject> list = LevelObjects.objects[(int)b, (int)b2]; river.writeUInt16((ushort)list.Count); ushort num = 0; while ((int)num < list.Count) { LevelObject levelObject = list[(int)num]; if (levelObject != null && levelObject.transform != null && levelObject.id != 0) { river.writeSingleVector3(levelObject.transform.position); river.writeSingleQuaternion(levelObject.transform.rotation); river.writeSingleVector3(levelObject.transform.localScale); river.writeUInt16(levelObject.id); river.writeString(levelObject.name); river.writeGUID(levelObject.GUID); river.writeByte((byte)levelObject.placementOrigin); river.writeUInt32(levelObject.instanceID); } else { river.writeSingleVector3(Vector3.zero); river.writeSingleQuaternion(Quaternion.identity); river.writeSingleVector3(Vector3.one); river.writeUInt16(0); river.writeString(string.Empty); river.writeGUID(Guid.Empty); river.writeByte(0); river.writeUInt32(0u); Debug.LogError(string.Concat(new object[] { "Found invalid object at ", b, ", ", b2, " with model: ", levelObject.transform, " and ID: ", levelObject.id })); } num += 1; } } } river.closeRiver(); } River river2 = new River(Level.info.path + "/Level/Buildables.dat", false); river2.writeByte(LevelObjects.SAVEDATA_VERSION); for (byte b3 = 0; b3 < Regions.WORLD_SIZE; b3 += 1) { for (byte b4 = 0; b4 < Regions.WORLD_SIZE; b4 += 1) { List <LevelBuildableObject> list2 = LevelObjects.buildables[(int)b3, (int)b4]; river2.writeUInt16((ushort)list2.Count); ushort num2 = 0; while ((int)num2 < list2.Count) { LevelBuildableObject levelBuildableObject = list2[(int)num2]; if (levelBuildableObject != null && levelBuildableObject.transform != null && levelBuildableObject.id != 0) { river2.writeSingleVector3(levelBuildableObject.transform.position); river2.writeSingleQuaternion(levelBuildableObject.transform.rotation); river2.writeUInt16(levelBuildableObject.id); } else { river2.writeSingleVector3(Vector3.zero); river2.writeSingleQuaternion(Quaternion.identity); river2.writeUInt16(0); Debug.LogError(string.Concat(new object[] { "Found invalid object at ", b3, ", ", b4, " with model: ", levelBuildableObject.transform, " and ID: ", levelBuildableObject.id })); } num2 += 1; } } } river2.closeRiver(); }
public static void load() { LevelNavigation._models = new GameObject().transform; LevelNavigation.models.name = "Navigation"; LevelNavigation.models.parent = Level.level; LevelNavigation.models.tag = "Logic"; LevelNavigation.models.gameObject.layer = LayerMasks.LOGIC; LevelNavigation._bounds = new List <Bounds>(); LevelNavigation.flagData = new List <FlagData>(); if (ReadWrite.fileExists(Level.info.path + "/Environment/Bounds.dat", false, false)) { River river = new River(Level.info.path + "/Environment/Bounds.dat", false); byte b = river.readByte(); if (b > 0) { byte b2 = river.readByte(); for (byte b3 = 0; b3 < b2; b3 += 1) { Vector3 vector = river.readSingleVector3(); Vector3 vector2 = river.readSingleVector3(); LevelNavigation.bounds.Add(new Bounds(vector, vector2)); } } river.closeRiver(); } if (ReadWrite.fileExists(Level.info.path + "/Environment/Flags_Data.dat", false, false)) { River river2 = new River(Level.info.path + "/Environment/Flags_Data.dat", false); byte b4 = river2.readByte(); if (b4 > 0) { byte b5 = river2.readByte(); for (byte b6 = 0; b6 < b5; b6 += 1) { string newDifficultyGUID = river2.readString(); byte newMaxZombies = 64; if (b4 > 1) { newMaxZombies = river2.readByte(); } bool newSpawnZombies = true; if (b4 > 2) { newSpawnZombies = river2.readBoolean(); } LevelNavigation.flagData.Add(new FlagData(newDifficultyGUID, newMaxZombies, newSpawnZombies)); } } river2.closeRiver(); } if (LevelNavigation.flagData.Count < LevelNavigation.bounds.Count) { for (int i = LevelNavigation.flagData.Count; i < LevelNavigation.bounds.Count; i++) { LevelNavigation.flagData.Add(new FlagData(string.Empty, 64, true)); } } if (Level.isEditor) { LevelNavigation.flags = new List <Flag>(); Object.Destroy(AstarPath.active.GetComponent <TileHandlerHelpers>()); if (ReadWrite.fileExists(Level.info.path + "/Environment/Flags.dat", false, false)) { River river3 = new River(Level.info.path + "/Environment/Flags.dat", false); byte b7 = river3.readByte(); if (b7 > 2) { byte b8 = river3.readByte(); for (byte b9 = 0; b9 < b8; b9 += 1) { Vector3 newPoint = river3.readSingleVector3(); float num = river3.readSingle(); float num2 = river3.readSingle(); if (b7 < 4) { num *= 0.5f; num2 *= 0.5f; } RecastGraph recastGraph = null; if (ReadWrite.fileExists(string.Concat(new object[] { Level.info.path, "/Environment/Navigation_", b9, ".dat" }), false, false)) { River river4 = new River(string.Concat(new object[] { Level.info.path, "/Environment/Navigation_", b9, ".dat" }), false); byte b10 = river4.readByte(); if (b10 > 0) { recastGraph = LevelNavigation.buildGraph(river4); } river4.closeRiver(); } if (recastGraph == null) { recastGraph = LevelNavigation.addGraph(); } LevelNavigation.flags.Add(new Flag(newPoint, num, num2, recastGraph, LevelNavigation.flagData[(int)b9])); } } river3.closeRiver(); } } else if (Provider.isServer) { byte b11 = 0; while (ReadWrite.fileExists(string.Concat(new object[] { Level.info.path, "/Environment/Navigation_", b11, ".dat" }), false, false)) { River river5 = new River(string.Concat(new object[] { Level.info.path, "/Environment/Navigation_", b11, ".dat" }), false); byte b12 = river5.readByte(); if (b12 > 0) { LevelNavigation.buildGraph(river5); } river5.closeRiver(); b11 += 1; } } }
public static void load() { LevelZombies._models = new GameObject().transform; LevelZombies.models.name = "Zombies"; LevelZombies.models.parent = Level.spawns; LevelZombies.models.tag = "Logic"; LevelZombies.models.gameObject.layer = LayerMasks.LOGIC; LevelZombies.tables = new List <ZombieTable>(); if (ReadWrite.fileExists(Level.info.path + "/Spawns/Zombies.dat", false, false)) { Block block = ReadWrite.readBlock(Level.info.path + "/Spawns/Zombies.dat", false, false, 0); byte b = block.readByte(); if (b > 3 && b < 5) { block.readSteamID(); } if (b > 2) { byte b2 = block.readByte(); for (byte b3 = 0; b3 < b2; b3 += 1) { Color newColor = block.readColor(); string newName = block.readString(); bool flag = block.readBoolean(); ushort newHealth = block.readUInt16(); byte newDamage = block.readByte(); byte newLootIndex = block.readByte(); ushort newLootID; if (b > 6) { newLootID = block.readUInt16(); } else { newLootID = 0; } uint newXP; if (b > 7) { newXP = block.readUInt32(); } else if (flag) { newXP = 40u; } else { newXP = 3u; } float newRegen = 10f; if (b > 5) { newRegen = block.readSingle(); } string newDifficultyGUID = string.Empty; if (b > 8) { newDifficultyGUID = block.readString(); } ZombieSlot[] array = new ZombieSlot[4]; byte b4 = block.readByte(); for (byte b5 = 0; b5 < b4; b5 += 1) { List <ZombieCloth> list = new List <ZombieCloth>(); float newChance = block.readSingle(); byte b6 = block.readByte(); for (byte b7 = 0; b7 < b6; b7 += 1) { ushort num = block.readUInt16(); if ((ItemAsset)Assets.find(EAssetType.ITEM, num) != null) { list.Add(new ZombieCloth(num)); } } array[(int)b5] = new ZombieSlot(newChance, list); } LevelZombies.tables.Add(new ZombieTable(array, newColor, newName, flag, newHealth, newDamage, newLootIndex, newLootID, newXP, newRegen, newDifficultyGUID)); } } else { byte b8 = block.readByte(); for (byte b9 = 0; b9 < b8; b9 += 1) { Color newColor2 = block.readColor(); string newName2 = block.readString(); byte newLootIndex2 = block.readByte(); ZombieSlot[] array2 = new ZombieSlot[4]; byte b10 = block.readByte(); for (byte b11 = 0; b11 < b10; b11 += 1) { List <ZombieCloth> list2 = new List <ZombieCloth>(); float newChance2 = block.readSingle(); byte b12 = block.readByte(); for (byte b13 = 0; b13 < b12; b13 += 1) { ushort num2 = block.readUInt16(); if ((ItemAsset)Assets.find(EAssetType.ITEM, num2) != null) { list2.Add(new ZombieCloth(num2)); } } array2[(int)b11] = new ZombieSlot(newChance2, list2); } LevelZombies.tables.Add(new ZombieTable(array2, newColor2, newName2, false, 100, 15, newLootIndex2, 0, 5u, 10f, string.Empty)); } } } LevelZombies._spawns = new List <ZombieSpawnpoint> [(int)Regions.WORLD_SIZE, (int)Regions.WORLD_SIZE]; for (byte b14 = 0; b14 < Regions.WORLD_SIZE; b14 += 1) { for (byte b15 = 0; b15 < Regions.WORLD_SIZE; b15 += 1) { LevelZombies.spawns[(int)b14, (int)b15] = new List <ZombieSpawnpoint>(); } } if (Level.isEditor) { if (ReadWrite.fileExists(Level.info.path + "/Spawns/Animals.dat", false, false)) { River river = new River(Level.info.path + "/Spawns/Animals.dat", false); byte b16 = river.readByte(); if (b16 > 0) { for (byte b17 = 0; b17 < Regions.WORLD_SIZE; b17 += 1) { for (byte b18 = 0; b18 < Regions.WORLD_SIZE; b18 += 1) { ushort num3 = river.readUInt16(); for (ushort num4 = 0; num4 < num3; num4 += 1) { byte newType = river.readByte(); Vector3 newPoint = river.readSingleVector3(); LevelZombies.spawns[(int)b17, (int)b18].Add(new ZombieSpawnpoint(newType, newPoint)); } } } } river.closeRiver(); } else { for (byte b19 = 0; b19 < Regions.WORLD_SIZE; b19 += 1) { for (byte b20 = 0; b20 < Regions.WORLD_SIZE; b20 += 1) { LevelZombies.spawns[(int)b19, (int)b20] = new List <ZombieSpawnpoint>(); if (ReadWrite.fileExists(string.Concat(new object[] { Level.info.path, "/Spawns/Animals_", b19, "_", b20, ".dat" }), false, false)) { River river2 = new River(string.Concat(new object[] { Level.info.path, "/Spawns/Animals_", b19, "_", b20, ".dat" }), false); byte b21 = river2.readByte(); if (b21 > 0) { ushort num5 = river2.readUInt16(); for (ushort num6 = 0; num6 < num5; num6 += 1) { byte newType2 = river2.readByte(); Vector3 newPoint2 = river2.readSingleVector3(); LevelZombies.spawns[(int)b19, (int)b20].Add(new ZombieSpawnpoint(newType2, newPoint2)); } river2.closeRiver(); } } } } } } else if (Provider.isServer) { LevelZombies._zombies = new List <ZombieSpawnpoint> [LevelNavigation.bounds.Count]; for (int i = 0; i < LevelZombies.zombies.Length; i++) { LevelZombies.zombies[i] = new List <ZombieSpawnpoint>(); } if (ReadWrite.fileExists(Level.info.path + "/Spawns/Animals.dat", false, false)) { River river3 = new River(Level.info.path + "/Spawns/Animals.dat", false); byte b22 = river3.readByte(); if (b22 > 0) { for (byte b23 = 0; b23 < Regions.WORLD_SIZE; b23 += 1) { for (byte b24 = 0; b24 < Regions.WORLD_SIZE; b24 += 1) { ushort num7 = river3.readUInt16(); for (ushort num8 = 0; num8 < num7; num8 += 1) { byte newType3 = river3.readByte(); Vector3 vector = river3.readSingleVector3(); byte b25; if (LevelNavigation.tryGetBounds(vector, out b25) && LevelNavigation.checkNavigation(vector)) { LevelZombies.zombies[(int)b25].Add(new ZombieSpawnpoint(newType3, vector)); } } } } } river3.closeRiver(); } else { for (byte b26 = 0; b26 < Regions.WORLD_SIZE; b26 += 1) { for (byte b27 = 0; b27 < Regions.WORLD_SIZE; b27 += 1) { if (ReadWrite.fileExists(string.Concat(new object[] { Level.info.path, "/Spawns/Animals_", b26, "_", b27, ".dat" }), false, false)) { River river4 = new River(string.Concat(new object[] { Level.info.path, "/Spawns/Animals_", b26, "_", b27, ".dat" }), false); byte b28 = river4.readByte(); if (b28 > 0) { ushort num9 = river4.readUInt16(); for (ushort num10 = 0; num10 < num9; num10 += 1) { byte newType4 = river4.readByte(); Vector3 vector2 = river4.readSingleVector3(); byte b29; if (LevelNavigation.tryGetBounds(vector2, out b29) && LevelNavigation.checkNavigation(vector2)) { LevelZombies.zombies[(int)b29].Add(new ZombieSpawnpoint(newType4, vector2)); } } river4.closeRiver(); } } } } } } }
public static void save() { Block block = new Block(); block.writeByte(LevelZombies.SAVEDATA_TABLE_VERSION); block.writeByte((byte)LevelZombies.tables.Count); byte b = 0; while ((int)b < LevelZombies.tables.Count) { ZombieTable zombieTable = LevelZombies.tables[(int)b]; block.writeColor(zombieTable.color); block.writeString(zombieTable.name); block.writeBoolean(zombieTable.isMega); block.writeUInt16(zombieTable.health); block.writeByte(zombieTable.damage); block.writeByte(zombieTable.lootIndex); block.writeUInt16(zombieTable.lootID); block.writeUInt32(zombieTable.xp); block.writeSingle(zombieTable.regen); block.writeString(zombieTable.difficultyGUID); block.write((byte)zombieTable.slots.Length); byte b2 = 0; while ((int)b2 < zombieTable.slots.Length) { ZombieSlot zombieSlot = zombieTable.slots[(int)b2]; block.writeSingle(zombieSlot.chance); block.writeByte((byte)zombieSlot.table.Count); byte b3 = 0; while ((int)b3 < zombieSlot.table.Count) { ZombieCloth zombieCloth = zombieSlot.table[(int)b3]; block.writeUInt16(zombieCloth.item); b3 += 1; } b2 += 1; } b += 1; } ReadWrite.writeBlock(Level.info.path + "/Spawns/Zombies.dat", false, false, block); River river = new River(Level.info.path + "/Spawns/Animals.dat", false); river.writeByte(LevelZombies.SAVEDATA_SPAWN_VERSION); for (byte b4 = 0; b4 < Regions.WORLD_SIZE; b4 += 1) { for (byte b5 = 0; b5 < Regions.WORLD_SIZE; b5 += 1) { List <ZombieSpawnpoint> list = LevelZombies.spawns[(int)b4, (int)b5]; river.writeUInt16((ushort)list.Count); ushort num = 0; while ((int)num < list.Count) { ZombieSpawnpoint zombieSpawnpoint = list[(int)num]; river.writeByte(zombieSpawnpoint.type); river.writeSingleVector3(zombieSpawnpoint.point); num += 1; } } } river.closeRiver(); }
public static void load() { LevelVehicles._models = new GameObject().transform; LevelVehicles.models.name = "Vehicles"; LevelVehicles.models.parent = Level.spawns; LevelVehicles.models.tag = "Logic"; LevelVehicles.models.gameObject.layer = LayerMasks.LOGIC; if (Level.isEditor || Provider.isServer) { LevelVehicles._tables = new List <VehicleTable>(); LevelVehicles._spawns = new List <VehicleSpawnpoint>(); if (ReadWrite.fileExists(Level.info.path + "/Spawns/Vehicles.dat", false, false)) { River river = new River(Level.info.path + "/Spawns/Vehicles.dat", false); byte b = river.readByte(); if (b > 1 && b < 3) { river.readSteamID(); } byte b2 = river.readByte(); for (byte b3 = 0; b3 < b2; b3 += 1) { Color newColor = river.readColor(); string text = river.readString(); ushort num; if (b > 3) { num = river.readUInt16(); if (num != 0 && SpawnTableTool.resolve(num) == 0) { Assets.errors.Add(string.Concat(new object[] { Level.info.name, " vehicle table \"", text, "\" references invalid spawn table ", num, "!" })); } } else { num = 0; } List <VehicleTier> list = new List <VehicleTier>(); byte b4 = river.readByte(); for (byte b5 = 0; b5 < b4; b5 += 1) { string newName = river.readString(); float newChance = river.readSingle(); List <VehicleSpawn> list2 = new List <VehicleSpawn>(); byte b6 = river.readByte(); for (byte b7 = 0; b7 < b6; b7 += 1) { ushort newVehicle = river.readUInt16(); list2.Add(new VehicleSpawn(newVehicle)); } list.Add(new VehicleTier(list2, newName, newChance)); } LevelVehicles.tables.Add(new VehicleTable(list, newColor, text, num)); if (!Level.isEditor) { LevelVehicles.tables[(int)b3].buildTable(); } } ushort num2 = river.readUInt16(); for (int i = 0; i < (int)num2; i++) { byte newType = river.readByte(); Vector3 newPoint = river.readSingleVector3(); float newAngle = (float)(river.readByte() * 2); LevelVehicles.spawns.Add(new VehicleSpawnpoint(newType, newPoint, newAngle)); } river.closeRiver(); } } }
public static void save() { River river = new River(Level.info.path + "/Environment/Bounds.dat", false); river.writeByte(LevelNavigation.SAVEDATA_BOUNDS_VERSION); river.writeByte((byte)LevelNavigation.bounds.Count); byte b = 0; while ((int)b < LevelNavigation.bounds.Count) { river.writeSingleVector3(LevelNavigation.bounds[(int)b].center); river.writeSingleVector3(LevelNavigation.bounds[(int)b].size); b += 1; } river.closeRiver(); River river2 = new River(Level.info.path + "/Environment/Flags_Data.dat", false); river2.writeByte(LevelNavigation.SAVEDATA_FLAG_DATA_VERSION); river2.writeByte((byte)LevelNavigation.flagData.Count); byte b2 = 0; while ((int)b2 < LevelNavigation.flagData.Count) { river2.writeString(LevelNavigation.flagData[(int)b2].difficultyGUID); river2.writeByte(LevelNavigation.flagData[(int)b2].maxZombies); river2.writeBoolean(LevelNavigation.flagData[(int)b2].spawnZombies); b2 += 1; } river2.closeRiver(); River river3 = new River(Level.info.path + "/Environment/Flags.dat", false); river3.writeByte(LevelNavigation.SAVEDATA_FLAGS_VERSION); int num = LevelNavigation.flags.Count; while (ReadWrite.fileExists(string.Concat(new object[] { Level.info.path, "/Environment/Navigation_", num, ".dat" }), false, false)) { ReadWrite.deleteFile(string.Concat(new object[] { Level.info.path, "/Environment/Navigation_", num, ".dat" }), false, false); num++; } river3.writeByte((byte)LevelNavigation.flags.Count); byte b3 = 0; while ((int)b3 < LevelNavigation.flags.Count) { Flag flag = LevelNavigation.flags[(int)b3]; river3.writeSingleVector3(flag.point); river3.writeSingle(flag.width); river3.writeSingle(flag.height); if (flag.needsNavigationSave) { River river4 = new River(string.Concat(new object[] { Level.info.path, "/Environment/Navigation_", b3, ".dat" }), false); river4.writeByte(LevelNavigation.SAVEDATA_NAVIGATION_VERSION); RecastGraph graph = flag.graph; river4.writeSingleVector3(graph.forcedBoundsCenter); river4.writeSingleVector3(graph.forcedBoundsSize); river4.writeByte((byte)graph.tileXCount); river4.writeByte((byte)graph.tileZCount); RecastGraph.NavmeshTile[] tiles = graph.GetTiles(); for (int i = 0; i < graph.tileZCount; i++) { for (int j = 0; j < graph.tileXCount; j++) { RecastGraph.NavmeshTile navmeshTile = tiles[j + i * graph.tileXCount]; river4.writeUInt16((ushort)navmeshTile.tris.Length); for (int k = 0; k < navmeshTile.tris.Length; k++) { river4.writeUInt16((ushort)navmeshTile.tris[k]); } river4.writeUInt16((ushort)navmeshTile.verts.Length); for (int l = 0; l < navmeshTile.verts.Length; l++) { Int3 @int = navmeshTile.verts[l]; river4.writeInt32(@int.x); river4.writeInt32(@int.y); river4.writeInt32(@int.z); } } } river4.closeRiver(); flag.needsNavigationSave = false; } b3 += 1; } river3.closeRiver(); }
public static void load() { LevelObjects._models = new GameObject().transform; LevelObjects.models.name = "Objects"; LevelObjects.models.parent = Level.level; LevelObjects.models.tag = "Logic"; LevelObjects.models.gameObject.layer = LayerMasks.LOGIC; LevelObjects._objects = new List <LevelObject> [(int)Regions.WORLD_SIZE, (int)Regions.WORLD_SIZE]; LevelObjects._buildables = new List <LevelBuildableObject> [(int)Regions.WORLD_SIZE, (int)Regions.WORLD_SIZE]; LevelObjects._total = 0; LevelObjects._regions = new bool[(int)Regions.WORLD_SIZE, (int)Regions.WORLD_SIZE]; LevelObjects._loads = new int[(int)Regions.WORLD_SIZE, (int)Regions.WORLD_SIZE]; LevelObjects.shouldInstantlyLoad = true; LevelObjects.isHierarchyReady = false; for (byte b = 0; b < Regions.WORLD_SIZE; b += 1) { for (byte b2 = 0; b2 < Regions.WORLD_SIZE; b2 += 1) { LevelObjects.loads[(int)b, (int)b2] = -1; } } for (byte b3 = 0; b3 < Regions.WORLD_SIZE; b3 += 1) { for (byte b4 = 0; b4 < Regions.WORLD_SIZE; b4 += 1) { LevelObjects.objects[(int)b3, (int)b4] = new List <LevelObject>(); LevelObjects.buildables[(int)b3, (int)b4] = new List <LevelBuildableObject>(); } } if (Level.info.configData.Use_Legacy_Objects) { if (ReadWrite.fileExists(Level.info.path + "/Level/Objects.dat", false, false)) { River river = new River(Level.info.path + "/Level/Objects.dat", false); byte b5 = river.readByte(); bool flag = true; if (b5 > 0) { if (b5 > 1 && b5 < 3) { river.readSteamID(); } if (b5 > 8) { LevelObjects.availableInstanceID = river.readUInt32(); } else { LevelObjects.availableInstanceID = 1u; } for (byte b6 = 0; b6 < Regions.WORLD_SIZE; b6 += 1) { for (byte b7 = 0; b7 < Regions.WORLD_SIZE; b7 += 1) { ushort num = river.readUInt16(); for (ushort num2 = 0; num2 < num; num2 += 1) { Vector3 vector = river.readSingleVector3(); Quaternion newRotation = river.readSingleQuaternion(); Vector3 newScale; if (b5 > 3) { newScale = river.readSingleVector3(); } else { newScale = Vector3.one; } ushort num3 = river.readUInt16(); string newName = string.Empty; if (b5 > 5) { newName = river.readString(); } Guid newGUID = Guid.Empty; if (b5 > 7) { newGUID = river.readGUID(); } ELevelObjectPlacementOrigin newPlacementOrigin = ELevelObjectPlacementOrigin.MANUAL; if (b5 > 6) { newPlacementOrigin = (ELevelObjectPlacementOrigin)river.readByte(); } uint newInstanceID; if (b5 > 8) { newInstanceID = river.readUInt32(); } else { newInstanceID = LevelObjects.generateUniqueInstanceID(); } if (num3 != 0) { LevelObject levelObject = new LevelObject(vector, newRotation, newScale, num3, newName, newGUID, newPlacementOrigin, newInstanceID); if (levelObject.asset == null) { flag = false; } if (Level.isEditor) { byte b8; byte b9; Regions.tryGetCoordinate(vector, out b8, out b9); if (b8 != b6 || b9 != b7) { Debug.LogError(string.Concat(new object[] { num3, " should be in ", b8, ", ", b9, " but was in ", b6, ", ", b7, "!" })); } LevelObjects.objects[(int)b8, (int)b9].Add(levelObject); } else { LevelObjects.objects[(int)b6, (int)b7].Add(levelObject); } LevelObjects._total++; } } } } } if (flag) { LevelObjects._hash = river.getHash(); } else { LevelObjects._hash = new byte[20]; } river.closeRiver(); } else { for (byte b10 = 0; b10 < Regions.WORLD_SIZE; b10 += 1) { for (byte b11 = 0; b11 < Regions.WORLD_SIZE; b11 += 1) { if (ReadWrite.fileExists(string.Concat(new object[] { Level.info.path, "/Objects/Objects_", b10, "_", b11, ".dat" }), false, false)) { River river2 = new River(string.Concat(new object[] { Level.info.path, "/Objects/Objects_", b10, "_", b11, ".dat" }), false); byte b12 = river2.readByte(); if (b12 > 0) { ushort num4 = river2.readUInt16(); for (ushort num5 = 0; num5 < num4; num5 += 1) { Vector3 position = river2.readSingleVector3(); Quaternion rotation = river2.readSingleQuaternion(); ushort num6 = river2.readUInt16(); string empty = string.Empty; Guid empty2 = Guid.Empty; ELevelObjectPlacementOrigin placementOrigin = ELevelObjectPlacementOrigin.MANUAL; if (num6 != 0) { LevelObjects.addObject(position, rotation, Vector3.one, num6, empty, empty2, placementOrigin); } } } river2.closeRiver(); } } } LevelObjects._hash = new byte[20]; } } else { LevelObjects._hash = new byte[20]; } if ((Provider.isServer || Level.isEditor) && ReadWrite.fileExists(Level.info.path + "/Level/Buildables.dat", false, false)) { River river3 = new River(Level.info.path + "/Level/Buildables.dat", false); river3.readByte(); for (byte b13 = 0; b13 < Regions.WORLD_SIZE; b13 += 1) { for (byte b14 = 0; b14 < Regions.WORLD_SIZE; b14 += 1) { ushort num7 = river3.readUInt16(); for (ushort num8 = 0; num8 < num7; num8 += 1) { Vector3 vector2 = river3.readSingleVector3(); Quaternion newRotation2 = river3.readSingleQuaternion(); ushort num9 = river3.readUInt16(); if (num9 != 0) { LevelBuildableObject item = new LevelBuildableObject(vector2, newRotation2, num9); if (Level.isEditor) { byte b15; byte b16; Regions.tryGetCoordinate(vector2, out b15, out b16); if (b15 != b13 || b16 != b14) { Debug.LogError(string.Concat(new object[] { num9, " should be in ", b15, ", ", b16, " but was in ", b13, ", ", b14, "!" })); } LevelObjects.buildables[(int)b15, (int)b16].Add(item); } else { LevelObjects.buildables[(int)b13, (int)b14].Add(item); } LevelObjects._total++; } } } } river3.closeRiver(); } if (Level.info.configData.Use_Legacy_Objects && !Dedicator.isDedicated && !Level.isEditor) { for (byte b17 = 0; b17 < Regions.WORLD_SIZE; b17 += 1) { for (byte b18 = 0; b18 < Regions.WORLD_SIZE; b18 += 1) { for (int i = 0; i < LevelObjects.objects[(int)b17, (int)b18].Count; i++) { LevelObject levelObject2 = LevelObjects.objects[(int)b17, (int)b18][i]; if (levelObject2.asset != null && !(levelObject2.transform == null)) { if (levelObject2.asset.lod != EObjectLOD.NONE) { ObjectsLOD objectsLOD = levelObject2.transform.gameObject.AddComponent <ObjectsLOD>(); objectsLOD.lod = levelObject2.asset.lod; objectsLOD.bias = levelObject2.asset.lodBias; objectsLOD.center = levelObject2.asset.lodCenter; objectsLOD.size = levelObject2.asset.lodSize; objectsLOD.calculateBounds(); } } } } } } if (Level.isEditor) { LevelObjects.reun = new IReun[256]; LevelObjects.step = 0; LevelObjects.frame = 0; } }