rendered paste body// /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";
}
}
/// <summary>
/// Cleans a String from colorcodes
/// </summary>
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());
}
}
}