private bool loadFile()
{
// read entities from file
string path = "entities.txt";
// check if file exists
if (!File.Exists(path))
{
MessageBox.Show("Entities-File 'entities.txt' not found.", "Error");
this.Close();
return false;
}
else
{
clearAll();
string[] rows;
rows = File.ReadAllLines(path);
string[] parameters;
List<string> categories = new List<string>();
// default category
categories.Add("Items");
int i = 0;
foreach (string row in rows)
{
if (row.Length > 1 && row.Substring(0, 2) != "//")
{
if (row.Substring(0, 1) == "!")
{
if (!Int32.TryParse(row.Substring(1), out localFileVer))
{
localFileVer = 0; // file-version unknown
}
}
else
{
// if new category
if (row.Substring(0, 1) == "-")
{
int level = 1;
while (row.Length > level && row.Substring(level, 1) == "-") { level++; }
int currentLevel = categories.Count();
if (currentLevel >= level)
{
categories.RemoveRange(level - 1, 1 + currentLevel - level);
}
categories.Add(row.Substring(level).Trim());
// check if category is already in treeview, else add
TreeNode node;
TreeNodeCollection nodes;
switch (categories[0].ToLower())
{
case "commands":
nodes = this.treeViewCommands.Nodes;
break;
case "creatures":
nodes = this.treeViewCreatures.Nodes;
break;
case "items":
nodes = this.treeViewItems.Nodes;
break;
default:
nodes = null;
break;
}
bool nodeExists;
if (nodes != null)
{
for (int n = 0; n < categories.Count; n++)
{
node = null;
nodeExists = false;
if (nodes.Count > 0)
{
node = nodes[0];
}
while (node != null)
{
if (node.Text == categories[n])
{
if (n == categories.Count - 1)
{
nodeExists = true;
break;
}
nodes = node.Nodes;
nodeExists = true;
break;
}
node = node.NextNode;
}
if (!nodeExists)
{
// add new node alphabetically
int nn = 0;
while (nn < nodes.Count && String.Compare(nodes[nn].Text, categories[n], true) < 0) { nn++; }
nodes.Insert(nn, categories[n]);
break;
}
}
}
}
else
{
parameters = row.Split(',');
if (parameters.Count() > 1)
{
int n = 1;
this.entities.Add(new Entity() { name = parameters[0].Trim() + (parameters[1].Trim().Length + (parameters.Count() > 2 ? parameters[2].Trim().Length : 0) == 0 ? " (NO ID OR BP GIVEN!)" : ""), id = parameters[1].Trim(), bp = (parameters.Count() > 2 ? parameters[2].Trim() : ""), category = string.Join("\\", categories), maxstack = (parameters.Count() > 3 ? (int.TryParse(parameters[3].Trim(), out n) ? n : 1) : 1) });
i++;
}
}
}
}
}
// sort entities
entities.Sort(delegate (Entity x, Entity y)
{
if (x.name == null && y.name == null) return 0;
else if (x.name == null) return -1;
else if (y.name == null) return 1;
else return x.name.CompareTo(y.name);
});
this.treeViewCommands.ExpandAll();
this.treeViewCreatures.ExpandAll();
this.treeViewItems.ExpandAll();
filterList(2, "Commands");
filterList(1, "Creatures");
filterList(0, "Items");
return true;
}
}