public static byte[] Convert(XmlData data, string json) { var obj = JsonConvert.DeserializeObject <json_dat>(json); byte[] dat = ZlibStream.UncompressBuffer(obj.data); var tileDict = new Dictionary <short, TerrainTile>(); for (int i = 0; i < obj.dict.Length; i++) { loc o = obj.dict[i]; tileDict[(short)i] = new TerrainTile { TileId = o.ground == null ? (ushort)0xff : data.IdToTileType[o.ground], TileObj = o.objs == null ? null : o.objs[0].id, Name = o.objs == null ? "" : o.objs[0].name ?? "", Terrain = TerrainType.None, Region = o.regions == null ? TileRegion.None : (TileRegion)Enum.Parse(typeof(TileRegion), o.regions[0].id.Replace(' ', '_')) }; } var tiles = new TerrainTile[obj.width, obj.height]; using (var rdr = new NReader(new MemoryStream(dat))) for (int y = 0; y < obj.height; y++) { for (int x = 0; x < obj.width; x++) { tiles[x, y] = tileDict[rdr.ReadInt16()]; } } return(WorldMapExporter.Export(tiles)); }
public static byte[] Convert(XmlData data, string json) { var obj = JsonConvert.DeserializeObject <json_dat>(json); var dat = ZlibStream.UncompressBuffer(obj.data); Dictionary <short, TerrainTile> tileDict = new Dictionary <short, TerrainTile>(); for (int i = 0; i < obj.dict.Length; i++) { var o = obj.dict[i]; tileDict[(short)i] = new TerrainTile() { TileId = o.ground == null ? (ushort)0xff : data.IdToTileType[o.ground], TileObj = o.objs == null ? null : o.objs[0].id, Name = o.objs == null ? "" : o.objs[0].name ?? "", Terrain = TerrainType.None, Region = o.regions == null ? TileRegion.None : (TileRegion)Enum.Parse(typeof(TileRegion), o.regions[0].id.Replace(' ', '_')) }; } var tiles = new TerrainTile[obj.width, obj.height]; ushort objType; //creates a new case insensitive dictionary based on the XmlDatas Dictionary <string, ushort> icdatas = new Dictionary <string, ushort>( data.IdToObjectType, StringComparer.OrdinalIgnoreCase); using (NReader rdr = new NReader(new MemoryStream(dat))) for (int y = 0; y < obj.height; y++) { for (int x = 0; x < obj.width; x++) { tiles[x, y] = tileDict[rdr.ReadInt16()]; if (tiles[x, y].TileId.ToString().Length == 2) { File.AppendAllText("Tiles.txt", tiles[x, y].TileId.ToString() + " "); } else if (String.IsNullOrEmpty(tiles[x, y].TileId.ToString())) { File.AppendAllText("Tiles.txt", " "); } else { File.AppendAllText("Tiles.txt", tiles[x, y].TileId.ToString() + " "); } if (tiles[x, y].TileObj == null) { File.AppendAllText("Objects.txt", " "); } else { if (!icdatas.TryGetValue(tiles[x, y].TileObj, out objType) || !data.ObjectDescs.ContainsKey(objType)) { } if (objType.ToString().Length == 3) { File.AppendAllText("Objects.txt", objType.ToString() + " "); } else { File.AppendAllText("Objects.txt", objType.ToString() + " "); } } } File.AppendAllText("Objects.txt", Environment.NewLine); File.AppendAllText("Tiles.txt", Environment.NewLine); } return(WorldMapExporter.Export(tiles)); }
public static byte[] ConvertMakeWalls(string json) { var obj = JsonConvert.DeserializeObject <json_dat>(json); var dat = ZlibStream.UncompressBuffer(obj.data); Dictionary <short, TerrainTile> tileDict = new Dictionary <short, TerrainTile>(); for (int i = 0; i < obj.dict.Length; i++) { var o = obj.dict[i]; tileDict[(short)i] = new TerrainTile() { TileId = o.ground == null ? (short)0xff : XmlDatas.IdToType[o.ground], TileObj = o.objs == null ? null : o.objs[0].id, Name = o.objs == null ? "" : o.objs[0].name ?? "", Terrain = TerrainType.None, Region = o.regions == null ? TileRegion.None : (TileRegion)Enum.Parse(typeof(TileRegion), o.regions[0].id.Replace(' ', '_')) }; } var tiles = new TerrainTile[obj.width, obj.height]; using (NReader rdr = new NReader(new MemoryStream(dat))) for (int y = 0; y < obj.height; y++) { for (int x = 0; x < obj.width; x++) { tiles[x, y] = tileDict[rdr.ReadInt16()]; tiles[x, y].X = x; tiles[x, y].Y = y; } } foreach (var i in tiles) { if (i.TileId == 0xff && i.TileObj == null) { bool createWall = false; for (int ty = -1; ty <= 1; ty++) { for (int tx = -1; tx <= 1; tx++) { try { if (tiles[i.X + tx, i.Y + ty].TileId != 0xff) { createWall = true; } } catch { } } } if (createWall) { tiles[i.X, i.Y].TileObj = "Grey Wall"; } } } return(WorldMapExporter.Export(tiles)); }