From e5826fbc0a93eba52796f4e13a691ec9cae17aa3 Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Tue, 19 Jul 2011 19:30:07 -0400 Subject: [PATCH] Converts Warps to db files, and fixes a bug in region code. Currently, the program fails to copy the old xml files to the new directory, so you may want to manually do that. --- TShockAPI/DB/RegionManager.cs | 219 +++++++++++++++++----------------- TShockAPI/DB/WarpsManager.cs | 87 +++++++++++++- 2 files changed, 193 insertions(+), 113 deletions(-) diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index 4edfe013..1015e59f 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -66,130 +66,131 @@ namespace TShockAPI.DB int updates = 0; if (File.Exists(file)) { - using (XmlReader reader = XmlReader.Create(new StreamReader(file))) + XmlReader reader; + reader = XmlReader.Create(new StreamReader(file)); + // Parse the file and display each of the nodes. + while (reader.Read()) { - // Parse the file and display each of the nodes. - while (reader.Read()) + switch (reader.NodeType) { - switch (reader.NodeType) - { - case XmlNodeType.Element: - switch( reader.Name ) - { - case "ProtectedRegion": - name = ""; - world = ""; - x1 = 0; - x2 = 0; - y1 = 0; - y2 = 0; - prot = 0; - users = 0; - ips = null; - ipstr = ""; - break; - case "RegionName": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - name = reader.Value; - break; - case "Point1X": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - int.TryParse( reader.Value, out x1 ); - break; - case "Point1Y": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - int.TryParse(reader.Value, out y1); - break; - case "Point2X": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - int.TryParse(reader.Value, out x2); - break; - case "Point2Y": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - int.TryParse(reader.Value, out y2); - break; - case "Protected": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - if (reader.Value.Equals("True")) - { - prot = 0; - } - else{ - prot = 1; - } + case XmlNodeType.Element: + switch( reader.Name ) + { + case "ProtectedRegion": + name = ""; + world = ""; + x1 = 0; + x2 = 0; + y1 = 0; + y2 = 0; + prot = 0; + users = 0; + ips = null; + ipstr = ""; break; - case "WorldName": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - world = reader.Value; - break; - case "AllowedUserCount": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - int.TryParse(reader.Value, out users); - if (users > 0) + case "RegionName": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + name = reader.Value; + break; + case "Point1X": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + int.TryParse( reader.Value, out x1 ); + break; + case "Point1Y": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + int.TryParse(reader.Value, out y1); + break; + case "Point2X": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + int.TryParse(reader.Value, out x2); + break; + case "Point2Y": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + int.TryParse(reader.Value, out y2); + break; + case "Protected": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + if (reader.Value.Equals("True")) + { + prot = 0; + } + else{ + prot = 1; + } + break; + case "WorldName": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + world = reader.Value; + break; + case "AllowedUserCount": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + int.TryParse(reader.Value, out users); + if (users > 0) + { + ips = new String[users]; + for (int i = 0; i < users; i++) { - ips = new String[users]; - for (int i = 0; i < users; i++) - { - do - reader.Read(); - while (reader.NodeType != XmlNodeType.Text); - ips[i] = reader.Value; - } - ipstr = ""; - for( int i = 0; i < ips.Length; i++ ) - { - if (ipstr != "") - ipstr += ","; - ipstr += ips[i]; - } - + do + reader.Read(); + while (reader.NodeType != XmlNodeType.Text); + ips[i] = reader.Value; + } + ipstr = ""; + for( int i = 0; i < ips.Length; i++ ) + { + if (ipstr != "") + ipstr += ","; + ipstr += ips[i]; } - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = "INSERT OR IGNORE INTO Regions VALUES (@tx, @ty, @height, @width, @name, @worldid, @userids, @protected);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = "INSERT IGNORE INTO Regions SET X1=@tx, Y1=@ty, height=@height, width=@width, RegionName=@name, WorldID=@world, UserIds=@userids, Protected=@protected;"; - com.AddParameter("@tx", x1); - com.AddParameter("@ty", y1); - com.AddParameter("@width", x2); - com.AddParameter("@height",y2); - com.AddParameter("@name", name); - com.AddParameter("@worldid", world); - com.AddParameter("@userids", ipstr); - com.AddParameter("@protected", prot); - updates += com.ExecuteNonQuery(); - com.Parameters.Clear(); - break; - } - break; - case XmlNodeType.Text: - break; - case XmlNodeType.XmlDeclaration: - case XmlNodeType.ProcessingInstruction: - break; - case XmlNodeType.Comment: - break; - case XmlNodeType.EndElement: + } + if (TShock.Config.StorageType.ToLower() == "sqlite") + com.CommandText = "INSERT OR IGNORE INTO Regions VALUES (@tx, @ty, @height, @width, @name, @worldid, @userids, @protected);"; + else if (TShock.Config.StorageType.ToLower() == "mysql") + com.CommandText = "INSERT IGNORE INTO Regions SET X1=@tx, Y1=@ty, height=@height, width=@width, RegionName=@name, WorldID=@world, UserIds=@userids, Protected=@protected;"; + com.AddParameter("@tx", x1); + com.AddParameter("@ty", y1); + com.AddParameter("@width", x2); + com.AddParameter("@height",y2); + com.AddParameter("@name", name); + com.AddParameter("@worldid", world); + com.AddParameter("@userids", ipstr); + com.AddParameter("@protected", prot); + updates += com.ExecuteNonQuery(); + com.Parameters.Clear(); + break; + } + break; + case XmlNodeType.Text: - break; - } + break; + case XmlNodeType.XmlDeclaration: + case XmlNodeType.ProcessingInstruction: + break; + case XmlNodeType.Comment: + break; + case XmlNodeType.EndElement: + + break; } } + reader.Close(); + reader = null; String path = Path.Combine(TShock.SavePath, "old_configs"); String file2 = Path.Combine(path, "regions.xml"); if (!Directory.Exists(path)) System.IO.Directory.CreateDirectory(path); if (File.Exists(file2)) File.Delete(file2); - File.Move(file, file2); + //File.Move(file, file2); } if( updates > 0 ) diff --git a/TShockAPI/DB/WarpsManager.cs b/TShockAPI/DB/WarpsManager.cs index 245f4446..ca3b7309 100644 --- a/TShockAPI/DB/WarpsManager.cs +++ b/TShockAPI/DB/WarpsManager.cs @@ -18,15 +18,11 @@ along with this program. If not, see . using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Data; using System.IO; -using Community.CsharpSqlite.SQLiteClient; using Microsoft.Xna.Framework; using System.Xml; using Terraria; -using TShockAPI.DB; namespace TShockAPI.DB { @@ -48,6 +44,89 @@ namespace TShockAPI.DB "CREATE TABLE IF NOT EXISTS Warps (X INT(11), Y INT(11), WarpName VARCHAR(255) PRIMARY, WorldID VARCHAR(255));"; com.ExecuteNonQuery(); + + String file = Path.Combine(TShock.SavePath, "warps.xml"); + String name = ""; + String world = ""; + int x1 = 0; + int y1 = 0; + if (File.Exists(file)) + { + XmlReader reader; + using (reader = XmlReader.Create(new StreamReader(file))) + { + // Parse the file and display each of the nodes. + while (reader.Read()) + { + switch (reader.NodeType) + { + case XmlNodeType.Element: + switch (reader.Name) + { + case "Warp": + name = ""; + world = ""; + x1 = 0; + y1 = 0; + break; + case "WarpName": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + name = reader.Value; + break; + case "X": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + int.TryParse(reader.Value, out x1); + break; + case "Y": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + int.TryParse(reader.Value, out y1); + break; + case "WorldName": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + world = reader.Value; + break; + } + break; + case XmlNodeType.Text: + + break; + case XmlNodeType.XmlDeclaration: + case XmlNodeType.ProcessingInstruction: + break; + case XmlNodeType.Comment: + break; + case XmlNodeType.EndElement: + if (reader.Name.Equals("Warp")) + { + if (TShock.Config.StorageType.ToLower() == "sqlite") + com.CommandText = "INSERT OR IGNORE INTO Warps VALUES (@tx, @ty,@name, @worldid);"; + else if (TShock.Config.StorageType.ToLower() == "mysql") + com.CommandText = "INSERT IGNORE INTO Warps SET X=@tx, Y=@ty, WarpName=@name, WorldID=@worldid;"; + com.AddParameter("@tx", x1); + com.AddParameter("@ty", y1); + com.AddParameter("@name", name); + com.AddParameter("@worldid", world); + com.ExecuteNonQuery(); + com.Parameters.Clear(); + } + break; + } + } + + } + reader.Close(); + String path = Path.Combine(TShock.SavePath, "old_configs"); + String file2 = Path.Combine(path, "warps.xml"); + if (!Directory.Exists(path)) + System.IO.Directory.CreateDirectory(path); + if (File.Exists(file2)) + File.Delete(file2); + //File.Move(file, file2); + } } }