private void HandleClientConnected(NetIncomingMessage msg) { baselineSnapshotMap.Add(msg.SenderConnection, 0); // Send the world header to the newly connected client NetOutgoingMessage sendMsg = peer.CreateMessage(); WorldManager worldManager = application.GetCurrentWorldManager(); if (worldManager != null) { WorldHeader header = worldManager.GetWorldHeader(); sendMsg.Write((byte)0); //message type sendMsg.Write(header.name); sendMsg.Write(header.width); sendMsg.Write(header.height); sendMsg.Write(header.spawnArea.X); sendMsg.Write(header.spawnArea.Y); peer.SendMessage(sendMsg, msg.SenderConnection, NetDeliveryMethod.ReliableOrdered); } else { msg.SenderConnection.Disconnect("The host world is not yet loaded!"); } }
private void ProcessDataMessage(NetIncomingMessage msg) { byte msgType = msg.ReadByte(); switch (msgType) { case 0: // World Details // string = world name // string = version number // int = width // int = height // int spawn X // int spawn Y WorldHeader header = new WorldHeader(); header.name = msg.ReadString(); header.width = msg.ReadInt32(); header.height = msg.ReadInt32(); header.spawnArea.X = msg.ReadInt32(); header.spawnArea.Y = msg.ReadInt32(); WorldDetailsReceived(header); break; default: throw new ArgumentOutOfRangeException(); } }
public BackwardsScanner(FileStream str, WorldHeader head) { stream = str; MaxX = head.MaxTiles.X; MaxY = head.MaxTiles.Y; header = head; backReader = new BackwardsBinaryReader(stream); }
public void Convert(byte[] wldData, IDictionary <string, byte[]> objectFiles) { s3d = objectFiles; using (var input = new BinaryReader(new MemoryStream(wldData))) { Header = new WorldHeader(input); if (0x54503D02 != Header.magic) { throw new FormatException("Expected magic (0x54503D02) not found."); } // Get the string table. _stringTableHash = GenerateStringTableHash(input.ReadBytes(Header.stringHashSize).DecodeString()); // Get all fragments from this file. GetFragments(input); // Clear the values, but not the keys. foreach (var v in byType) { v.Value.Clear(); } var nfrags = new Dictionary <int, object>(); var nnames = new Dictionary <string, object>(); foreach (var frag in frags.Values.OfType <Tuple <int, string, uint, object> >()) { nfrags[frag.Item1] = nnames[frag.Item2] = frag.Item4; byType[frag.Item3].Add(frag.Item4); } frags = nfrags; names = nnames; baked = true; //Console.UnityEngine.Debug.Log( // $"fragtypes ({byType.Keys.Count}): {byType.Aggregate("", (current, v) => current + $",'{v.Key:X2}'").TrimStart(',')}"); } }
private void ReadHeader() { Int32 version = reader.ReadInt32(); Int32 x, y, w, h; if (bw != null) bw.ReportProgress((Int32)(((Single)progressPosition / stream.Length) * readWorldPerc) , "Reading Header"); header = new WorldHeader(); header.ReleaseNumber = version; header.Name = reader.ReadString(); header.Id = reader.ReadInt32(); x = reader.ReadInt32(); w = reader.ReadInt32(); y = reader.ReadInt32(); h = reader.ReadInt32(); header.WorldCoords = new Rect(x, w, y, h); y = reader.ReadInt32(); x = reader.ReadInt32(); MaxX = x; MaxY = y; header.MaxTiles = new Point(x, y); header.SpawnPoint = new Point(reader.ReadInt32(), reader.ReadInt32()); header.SurfaceLevel = reader.ReadDouble(); header.RockLayer = reader.ReadDouble(); header.TemporaryTime = reader.ReadDouble(); header.IsDayTime = reader.ReadBoolean(); header.MoonPhase = reader.ReadInt32(); header.IsBloodMoon = reader.ReadBoolean(); header.DungeonPoint = new Point(reader.ReadInt32(), reader.ReadInt32()); header.IsBoss1Dead = reader.ReadBoolean(); header.IsBoss2Dead = reader.ReadBoolean(); header.IsBoss3Dead = reader.ReadBoolean(); if (version >= 0x24) { header.IsGoblinSaved = reader.ReadBoolean(); header.IsWizardSaved = reader.ReadBoolean(); header.IsMechanicSaved = reader.ReadBoolean(); header.IsGoblinArmyDefeated = reader.ReadBoolean(); header.IsClownDefeated = reader.ReadBoolean(); } if (version >= 0x25) { header.IsFrostDefeated = reader.ReadBoolean(); } header.IsShadowOrbSmashed = reader.ReadBoolean(); header.IsMeteorSpawned = reader.ReadBoolean(); header.ShadowOrbsSmashed = reader.ReadByte(); if (version >= 0x24) { header.AltarsDestroyed = reader.ReadInt32(); header.HardMode = reader.ReadBoolean(); } header.InvasionDelay = reader.ReadInt32(); header.InvasionSize = reader.ReadInt32(); header.InvasionType = reader.ReadInt32(); header.InvasionPointX = reader.ReadDouble(); posTiles = stream.Position; progressPosition = stream.Position; }
public void Clear() { header = new WorldHeader(); tiles = null; chests = null; signs = null; footer = null; posChests = 0; posEnd = 0; posFooter = 0; posNpcs = 0; posSigns = 0; posTiles = 0; MaxX = 0; MaxY = 0; progress = 0; if (reader != null) { reader.Close(); reader = null; } if (stream != null) stream = null; if (buffReader != null) buffReader = null; if (bw != null) bw = null; }
private void ReadHeader(World world) { version = reader.ReadInt32(); sectionCount = reader.ReadInt16(); sectionPointers = new int[sectionCount]; for (int i = 0; i < sectionCount; i++) { sectionPointers[i] = reader.ReadInt32(); } tiletypeCount = reader.ReadInt16(); tileImportance = new bool[tiletypeCount]; byte mask = 0x80; byte flags = 0; for (int i = 0; i < tiletypeCount; i++) { if (mask == 0x80) { flags = reader.ReadByte(); mask = 0x01; } else { mask <<= 1; } if ((flags & mask) == mask) { tileImportance[i] = true; } } int x, y, w, h; var header = new WorldHeader(); // header.ReleaseNumber = version; header.Name = reader.ReadString(); header.Id = reader.ReadInt32(); x = reader.ReadInt32(); w = reader.ReadInt32(); y = reader.ReadInt32(); h = reader.ReadInt32(); header.WorldCoords = new Rect(x, w, y, h); y = reader.ReadInt32(); x = reader.ReadInt32(); header.MaxTiles = new Point(x, y); header.TreeX = new int[3]; header.TreeStyle = new int[4]; header.CaveBackX = new int[3]; header.CaveBackStyle = new int[4]; if (version >= 0x3F) { header.MoonType = reader.ReadByte(); for (int i = 0; i < 3; i++) { header.TreeX[i] = reader.ReadInt32(); } for (int i = 0; i < 4; i++) { header.TreeStyle[i] = reader.ReadInt32(); } for (int i = 0; i < 3; i++) { header.CaveBackX[i] = reader.ReadInt32(); } for (int i = 0; i < 4; i++) { header.CaveBackStyle[i] = reader.ReadInt32(); } header.IceBackStyle = reader.ReadInt32(); header.JungleBackStyle = reader.ReadInt32(); header.HellBackStyle = reader.ReadInt32(); } header.SpawnPoint = new Point(reader.ReadInt32(), reader.ReadInt32()); header.SurfaceLevel = reader.ReadDouble(); header.RockLayer = reader.ReadDouble(); header.TemporaryTime = reader.ReadDouble(); header.IsDayTime = reader.ReadBoolean(); header.MoonPhase = reader.ReadInt32(); header.IsBloodMoon = reader.ReadBoolean(); if (version >= 70) { header.IsEclipse = reader.ReadBoolean(); } header.DungeonPoint = new Point(reader.ReadInt32(), reader.ReadInt32()); if (version >= 66) { header.Crimson = reader.ReadBoolean(); } header.IsBoss1Dead = reader.ReadBoolean(); header.IsBoss2Dead = reader.ReadBoolean(); header.IsBoss3Dead = reader.ReadBoolean(); if (version >= 66) { header.IsQueenBeeDead = reader.ReadBoolean(); header.IsMechBoss1Dead = reader.ReadBoolean(); header.IsMechBoss2Dead = reader.ReadBoolean(); header.IsMechBoss3Dead = reader.ReadBoolean(); header.IsMechBossAnyDead = reader.ReadBoolean(); header.IsPlantBossDead = reader.ReadBoolean(); header.IsGolemBossDead = reader.ReadBoolean(); } if (version >= 0x24) { header.IsGoblinSaved = reader.ReadBoolean(); header.IsWizardSaved = reader.ReadBoolean(); header.IsMechanicSaved = reader.ReadBoolean(); header.IsGoblinArmyDefeated = reader.ReadBoolean(); header.IsClownDefeated = reader.ReadBoolean(); } if (version >= 0x25) { header.IsFrostDefeated = reader.ReadBoolean(); } if (version >= 66) { header.IsPiratesDefeated = reader.ReadBoolean(); } header.IsShadowOrbSmashed = reader.ReadBoolean(); header.IsMeteorSpawned = reader.ReadBoolean(); header.ShadowOrbsSmashed = reader.ReadByte(); if (version >= 0x24) { header.AltarsDestroyed = reader.ReadInt32(); header.HardMode = reader.ReadBoolean(); } header.InvasionDelay = reader.ReadInt32(); header.InvasionSize = reader.ReadInt32(); header.InvasionType = reader.ReadInt32(); header.InvasionPointX = reader.ReadDouble(); header.OreTiers = new int[3]; header.Styles = new byte[8]; if (version >= 66) { header.IsRaining = reader.ReadBoolean(); header.RainTime = reader.ReadInt32(); header.MaxRain = reader.ReadSingle(); for (int i = 0; i < 3; i++) { header.OreTiers[i] = reader.ReadInt32(); } for (int i = 0; i < 8; i++) { header.Styles[i] = reader.ReadByte(); } header.CloudsActive = reader.ReadInt32(); header.NumClouds = reader.ReadInt16(); header.WindSpeed = reader.ReadSingle(); } else if (version >= 24) { if (header.AltarsDestroyed == 0) { for (int i = 0; i < 3; i++) { header.OreTiers[i] = -1; } } else { header.OreTiers[1] = 107; header.OreTiers[1] = 108; header.OreTiers[1] = 111; } } world.Header = header; }
private void OnWorldHeaderReceived(WorldHeader header) { map.GenerateEmptyWorld(header); OnLoadMapCompleteHandler(null, null); }