private void treeView2_dat_AfterSelect(object sender, TreeViewEventArgs e) { var node = e.Node; if (node == null || !(node.Tag is Tuple <string, string, int>)) { return; } var info = node.Tag as Tuple <string, string, int>; var temp = AtumZip.ZippedFile.UnzipItems(LoadingData.directory + info.Item1); using (var tempstream = new MemoryStream(temp[0].Data)) _DatData = MapFormatter.Read(tempstream); if (info.Item2 == "base") { string temp5 = info.Item1; temp5 = temp5.Remove(temp5.Length - 4, 4); pictureBox2.Image = new Bitmap(PaintStuff.GetMapImage(LoadingData.directory + temp5 + ".map"), new Size(512, 512)); PictureBox cc = new PictureBox(); cc.Width = pictureBox2.Width; cc.Height = pictureBox2.Height; Controls.Add(cc); Bitmap crap = (Bitmap)pictureBox2.Image; Graphics g = Graphics.FromImage(crap); Bitmap ttt = PaintStuff.GetWaterImage(_DatData); // g.DrawImage(ttt, 0, 0, 512, 512); SolidBrush sb = new SolidBrush(Color.Red); g.FillEllipse(sb, 20, 20, 20, 20); g.DrawEllipse(new Pen(Color.Red), 20, 20, 20, 20); pictureBox2.Refresh(); } switch (info.Item2) { case "mapdata": var tempdt = MapFormatter.GetFormatter(0).GetSchema(); tempdt.Rows.Add(_DatData[0] as object[]); dataGridView3.DataSource = tempdt; // dataGridView3.DataSource = MapFormatter.GetFormatter(0).GetSchema(new object[] { (_DatData[0] as object[] }); break; case "vertexinfo": dataGridView3.DataSource = MapFormatter.GetFormatter(1).GetSchema(_DatData[1] as object[][]); break; case "tileinfo": dataGridView3.DataSource = MapFormatter.GetFormatter(2).GetSchema(_DatData[2] as object[][]); break; case "objectinfo": dataGridView3.DataSource = MapFormatter.GetFormatter(3).GetSchema(_DatData[3] as object[][]); break; } }
/// <summary> /// Generates an array of map ideces and monster unique numbers /// from dat and sma files. 2017-01-05 panoskj /// </summary> public static object[] SomeQuery() { var dats = Directory.GetFiles(@"..\..\..\map", "*.dat"); var smas = Directory.GetFiles(@"..\..\..\map", "*.sma"); // data from map config var mapcfg = GetMapConfig(@"..\..\..\config\map.cfg"). ToDictionary(x => x.Item1, x => new Tuple <int, int>(x.Item2, x.Item3)); // reads a dat file Func <string, Tuple <int, object> > readDat = (s) => { int idx = int.Parse(Path.GetFileNameWithoutExtension(s)); using (AtumZip.ZippedFile zpf = File.OpenRead(s)) return(new Tuple <int, object>(idx, MapFormatter.Read(zpf.At(0)))); }; // reads a sma file Func <string, Tuple <int, object> > readSma = (s) => { int idx = int.Parse(Path.GetFileNameWithoutExtension(s)); using (var src = File.OpenRead(s)) if (mapcfg.ContainsKey(idx) && mapcfg[idx].Item1 == mapcfg[idx].Item2) { return(new Tuple <int, object>(idx, SmaFormatter.Read(src, (uint)mapcfg[idx].Item1))); } else { return(null); } }; // collects all tables containing spawn information var datmondata = dats.Select(x => readDat(x)).Where(x => x != null). Select(x => new { Index = x.Item1, Data = (x.Item2 as object[])[3] as object[][] }); // collects all tables containing spawn information var smamondata = smas.Select(x => readSma(x)).Where(x => x != null). Select(x => new { Index = x.Item1, Data = (x.Item2 as object[])[2] as object[][] }); // indeces for later use var idx1 = MapFormatter.GetIndex("objectinfo", "ObjectMonsterUniqueNumber"); var idx2 = SmaFormatter.GetIndex("monsterinfo", "Monster Num"); // from each object spawn row of each collected table // select the map index and ObjectMonsterUniqueNumber // if ObjectMonsterUniqueNumber is in range [2000000, 3000000) var res1 = from data in datmondata from spawn in data.Data where (uint)spawn[idx1] >= 2000000 && (uint)spawn[idx1] < 3000000 // or check for EventType == 6 select new { Index = data.Index, Monster = (uint)spawn[idx1] }; // from each monster spawn of each collected table // select the map index and Monster Num // if Monster Num is not 0 var res2 = from data in smamondata from spawn in data.Data where (uint)spawn[idx2] != 0 select new { Index = data.Index, Monster = (uint)spawn[idx2] }; // return the distinct results return(res1.Concat(res2).Distinct().ToArray()); }
object DeserializeMapInfo(string name) { using (AtumZip.ZippedFile zpf = File.OpenRead(@"res-map\" + name + ".dat")) return(MapFormatter.Read(zpf.At(0))); }