// /home/hannes/Dokumente/c#-Projects/DemoRename/DemoRename/ProcessDemo.cs created with MonoDevelop // User: hannes at 04:12 30.10.2007 // // To change standard headers go to Edit->Preferences->Coding->Standard Headers // using System; using System.IO; using System.Text; using System.Collections; using System.Text.RegularExpressions; namespace DemoRename { public class ProcessDemo { private String demo2 =""; private string map = "unknown"; bool mod1 = false; PlayerList players; ArrayList arr = new ArrayList(); ArrayList finalTags = new ArrayList(); public ProcessDemo(String _demo, double offset, PlayerList lst) { demo2 = _demo; players = lst; FileInfo demo = new FileInfo(demo2); Console.WriteLine("Processing demo: " + Path.GetFileName(demo2)); using (StreamReader sr = new StreamReader(demo2)) { string rawLine = sr.ReadToEnd(); string[] datas = rawLine.Split(''); foreach (String d in datas) { if (d.IndexOf("si_map") > 0 && !mod1) { string[] map2 = d.Split('/'); for (int i = 0; i <= map2.Length - 1; i++) { if (map2[i].IndexOf("si_map") > 0) getMap(map2[i + 1]); } } if (d.IndexOf("ui_name") > 0) { string[] map2 = d.Split('\n'); for (int i = 0; i <= map2.Length - 1; i++) { if (map2[i].IndexOf("ui_realname") > 0) { string[] map3 = map2[i].Split('\0'); players.Add(cleanString(map3[map3.Length-1]),new Player(cleanString(map3[map3.Length-1]))); } } } } mod1 = false; analyseTags(); } string newFile = demo.LastWriteTime.AddHours(offset).ToString() .Replace(".", "_") .Replace(" ", "_") .Replace(":", "") + "_" + map + ".ndm"; try { if (!File.Exists(newFile)) File.Move(demo2, newFile); } catch (Exception e) { Console.WriteLine(e.Message); } } private void getMap(string p) { mod1 = true; if (p.IndexOf("salvage") >= 0) { map = "salvage"; } else if (p.IndexOf("volcano") >= 0) { map = "volcano"; } else if (p.IndexOf("area22") >= 0) { map = "area22"; } else if (p.IndexOf("island") >= 0) { map = "island"; } else if (p.IndexOf("ark") >= 0) { map = "ark"; } else if (p.IndexOf("sewer") >= 0) { map = "sewer"; } else if (p.IndexOf("canyon") >= 0) { map = "canyon"; } else if (p.IndexOf("outskirts") >= 0) { map = "outskirts"; } else if (p.IndexOf("quarry") >= 0) { map = "quarry"; } else if (p.IndexOf("refinery") >= 0) { map = "refinery"; } else if (p.IndexOf("slipgate") >= 0) { map = "slipgate"; } else if (p.IndexOf("valley") >= 0) { map = "valley"; } } /// /// Cleans a String from colorcodes /// public String cleanString(String name) { if (name == null) return null; Regex regex = new Regex(@"(\^\D)|(\$\D)|(\^\d)|(\$\d)"); return regex.Replace(name, ""); } public void analyseTags() { int j =0; foreach(String i in players.Keys) { arr.Add(players[i].Name); j++; } try{ for(int k=0; k<=arr.Count-1;k++){ compare(arr[k].ToString(),arr[k+1].ToString()); } } catch{ }; if(finalTags.Count <= 0) { Console.WriteLine("TeamA"); Console.WriteLine("TeamB");} else if(finalTags.Count <= 1) { Console.WriteLine(finalTags[0]); Console.WriteLine("TeamA"); }else{ Console.WriteLine(finalTags[0]); Console.WriteLine(finalTags[1]); } } public void compare(String x, String y) { int xLength = x.Length, yLength = y.Length; StringBuilder sb = new StringBuilder(); int len = 0; if(xLength < yLength) len = xLength; else len = yLength; // von vorne for( int i=0; i<=len;i++) { if(x[i].Equals(y[i])) { sb.Append(x[i]); }else break; } if(sb.ToString().Equals("")){ // von hinten for( int m=len; m<=1;m--) { if(x[m].Equals(y[m])) { sb.Append(x[m]); }else break; } } //Console.WriteLine(sb.ToString()); if(!sb.ToString().Equals("") && !finalTags.Contains(sb.ToString())) finalTags.Add(sb.ToString()); } } }