Reapplied my region changes that were lost from a bad conflict merge
This commit is contained in:
parent
57a2d082ef
commit
d39d9e5127
3 changed files with 127 additions and 188 deletions
|
|
@ -1465,10 +1465,10 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
foreach (Region r in TShock.Regions.Regions)
|
foreach (Region r in TShock.Regions.Regions)
|
||||||
{
|
{
|
||||||
args.Player.SendMessage(r.RegionName + ": P: " + r.DisableBuild + " X: " + r.RegionArea.X + " Y: " + r.RegionArea.Y + " W: " + r.RegionArea.Width + " H: " + r.RegionArea.Height);
|
args.Player.SendMessage(r.Name + ": P: " + r.DisableBuild + " X: " + r.Area.X + " Y: " + r.Area.Y + " W: " + r.Area.Width + " H: " + r.Area.Height);
|
||||||
foreach (int s in r.RegionAllowedIDs)
|
foreach (int s in r.AllowedIDs)
|
||||||
{
|
{
|
||||||
args.Player.SendMessage(r.RegionName + ": " + s);
|
args.Player.SendMessage(r.Name + ": " + s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1666,7 +1666,7 @@ namespace TShockAPI
|
||||||
var nameslist = new List<string>();
|
var nameslist = new List<string>();
|
||||||
for (int i = 0; i < pagelimit && i + (page * pagelimit) < regions.Count; i++)
|
for (int i = 0; i < pagelimit && i + (page * pagelimit) < regions.Count; i++)
|
||||||
{
|
{
|
||||||
nameslist.Add(regions[i].RegionName);
|
nameslist.Add(regions[i].Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
//convert the list to an array for joining
|
//convert the list to an array for joining
|
||||||
|
|
|
||||||
|
|
@ -49,159 +49,109 @@ namespace TShockAPI.DB
|
||||||
|
|
||||||
database.Query(query);
|
database.Query(query);
|
||||||
|
|
||||||
String file = Path.Combine(TShock.SavePath, "regions.xml");
|
|
||||||
String name = "";
|
ImportOld();
|
||||||
String world = "";
|
}
|
||||||
int x1 = 0;
|
}
|
||||||
int x2 = 0;
|
|
||||||
int y1 = 0;
|
public void ImportOld()
|
||||||
int y2 = 0;
|
{
|
||||||
int prot = 0;
|
String file = Path.Combine(TShock.SavePath, "regions.xml");
|
||||||
int users = 0;
|
if (!File.Exists(file))
|
||||||
String[] ips;
|
return;
|
||||||
String ipstr = "";
|
|
||||||
int updates = 0;
|
Region region;
|
||||||
if (File.Exists(file))
|
Rectangle rect;
|
||||||
|
using (var sr = new StreamReader(file))
|
||||||
|
{
|
||||||
|
using (var reader = XmlReader.Create(sr))
|
||||||
{
|
{
|
||||||
XmlReader reader;
|
|
||||||
reader = XmlReader.Create(new StreamReader(file));
|
|
||||||
// Parse the file and display each of the nodes.
|
// Parse the file and display each of the nodes.
|
||||||
while (reader.Read())
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
switch (reader.NodeType)
|
if (reader.NodeType != XmlNodeType.Element || reader.Name != "ProtectedRegion")
|
||||||
|
continue;
|
||||||
|
|
||||||
|
region = new Region();
|
||||||
|
rect = new Rectangle();
|
||||||
|
|
||||||
|
bool endregion = false;
|
||||||
|
while (reader.Read() && !endregion)
|
||||||
{
|
{
|
||||||
case XmlNodeType.Element:
|
if (reader.NodeType != XmlNodeType.Element)
|
||||||
switch (reader.Name)
|
continue;
|
||||||
|
|
||||||
|
string name = reader.Name;
|
||||||
|
|
||||||
|
while (reader.Read() && reader.NodeType != XmlNodeType.Text) ;
|
||||||
|
|
||||||
|
switch (name)
|
||||||
{
|
{
|
||||||
case "ProtectedRegion":
|
|
||||||
name = "";
|
|
||||||
world = "";
|
|
||||||
x1 = 0;
|
|
||||||
x2 = 0;
|
|
||||||
y1 = 0;
|
|
||||||
y2 = 0;
|
|
||||||
prot = 0;
|
|
||||||
users = 0;
|
|
||||||
ips = null;
|
|
||||||
ipstr = "";
|
|
||||||
break;
|
|
||||||
case "RegionName":
|
case "RegionName":
|
||||||
while (reader.NodeType != XmlNodeType.Text)
|
region.Name = reader.Value;
|
||||||
reader.Read();
|
|
||||||
name = reader.Value;
|
|
||||||
break;
|
break;
|
||||||
case "Point1X":
|
case "Point1X":
|
||||||
while (reader.NodeType != XmlNodeType.Text)
|
int.TryParse(reader.Value, out rect.X);
|
||||||
reader.Read();
|
|
||||||
int.TryParse(reader.Value, out x1);
|
|
||||||
break;
|
break;
|
||||||
case "Point1Y":
|
case "Point1Y":
|
||||||
while (reader.NodeType != XmlNodeType.Text)
|
int.TryParse(reader.Value, out rect.Y);
|
||||||
reader.Read();
|
|
||||||
int.TryParse(reader.Value, out y1);
|
|
||||||
break;
|
break;
|
||||||
case "Point2X":
|
case "Point2X":
|
||||||
while (reader.NodeType != XmlNodeType.Text)
|
int.TryParse(reader.Value, out rect.Width);
|
||||||
reader.Read();
|
|
||||||
int.TryParse(reader.Value, out x2);
|
|
||||||
break;
|
break;
|
||||||
case "Point2Y":
|
case "Point2Y":
|
||||||
while (reader.NodeType != XmlNodeType.Text)
|
int.TryParse(reader.Value, out rect.Height);
|
||||||
reader.Read();
|
|
||||||
int.TryParse(reader.Value, out y2);
|
|
||||||
break;
|
break;
|
||||||
case "Protected":
|
case "Protected":
|
||||||
while (reader.NodeType != XmlNodeType.Text)
|
region.DisableBuild = reader.Value.ToLower().Equals("true");
|
||||||
reader.Read();
|
|
||||||
if (reader.Value.Equals("True"))
|
|
||||||
{
|
|
||||||
prot = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
prot = 1;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case "WorldName":
|
case "WorldName":
|
||||||
while (reader.NodeType != XmlNodeType.Text)
|
region.WorldID = reader.Value;
|
||||||
reader.Read();
|
|
||||||
world = reader.Value;
|
|
||||||
break;
|
break;
|
||||||
case "AllowedUserCount":
|
case "AllowedUserCount":
|
||||||
while (reader.NodeType != XmlNodeType.Text)
|
break;
|
||||||
reader.Read();
|
case "IP":
|
||||||
int.TryParse(reader.Value, out users);
|
region.AllowedIDs.Add(int.Parse(reader.Value));
|
||||||
if (users > 0)
|
break;
|
||||||
{
|
default:
|
||||||
ips = new String[users];
|
endregion = true;
|
||||||
for (int i = 0; i < users; i++)
|
break;
|
||||||
{
|
|
||||||
do
|
|
||||||
reader.Read();
|
|
||||||
while (reader.NodeType != XmlNodeType.Text);
|
|
||||||
ips[i] = reader.Value;
|
|
||||||
}
|
}
|
||||||
ipstr = "";
|
|
||||||
for (int i = 0; i < ips.Length; i++)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (ipstr != "")
|
|
||||||
ipstr += ",";
|
|
||||||
ipstr += TShock.Users.GetUserID(ips[i]);
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
Log.Error("An IP address failed to import. It wasn't a user in the new user system.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
region.Area = rect;
|
||||||
|
using (var com = database.CreateCommand())
|
||||||
}
|
{
|
||||||
if (TShock.Config.StorageType.ToLower() == "sqlite")
|
if (TShock.Config.StorageType.ToLower() == "sqlite")
|
||||||
com.CommandText = "INSERT OR IGNORE INTO Regions VALUES (@tx, @ty, @height, @width, @name, @worldid, @userids, @protected);";
|
com.CommandText =
|
||||||
|
"INSERT OR IGNORE INTO Regions VALUES (@tx, @ty, @height, @width, @name, @worldid, @userids, @protected);";
|
||||||
else if (TShock.Config.StorageType.ToLower() == "mysql")
|
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.CommandText =
|
||||||
com.AddParameter("@tx", x1);
|
"INSERT IGNORE INTO Regions SET X1=@tx, Y1=@ty, height=@height, width=@width, RegionName=@name, WorldID=@world, UserIds=@userids, Protected=@protected;";
|
||||||
com.AddParameter("@ty", y1);
|
com.AddParameter("@tx", region.Area.X);
|
||||||
com.AddParameter("@width", x2);
|
com.AddParameter("@ty", region.Area.Y);
|
||||||
com.AddParameter("@height", y2);
|
com.AddParameter("@width", region.Area.Width);
|
||||||
com.AddParameter("@name", name);
|
com.AddParameter("@height", region.Area.Height);
|
||||||
com.AddParameter("@worldid", world);
|
com.AddParameter("@name", region.Name);
|
||||||
com.AddParameter("@userids", ipstr);
|
com.AddParameter("@worldid", region.WorldID);
|
||||||
com.AddParameter("@protected", prot);
|
//Todo: What should this be? We don't really have a way to go from ips to userids
|
||||||
updates += com.ExecuteNonQuery();
|
com.AddParameter("@userids", ""/*string.Join(",", region.AllowedIDs)*/);
|
||||||
com.Parameters.Clear();
|
com.AddParameter("@protected", region.DisableBuild);
|
||||||
break;
|
int num = com.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
case XmlNodeType.Text:
|
|
||||||
|
|
||||||
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 path = Path.Combine(TShock.SavePath, "old_configs");
|
||||||
String file2 = Path.Combine(path, "regions.xml");
|
String file2 = Path.Combine(path, "regions.xml");
|
||||||
if (!Directory.Exists(path))
|
if (!Directory.Exists(path))
|
||||||
System.IO.Directory.CreateDirectory(path);
|
Directory.CreateDirectory(path);
|
||||||
if (File.Exists(file2))
|
if (File.Exists(file2))
|
||||||
File.Delete(file2);
|
File.Delete(file2);
|
||||||
//File.Move(file, file2);
|
File.Move(file, file2);
|
||||||
}
|
|
||||||
if (updates > 0)
|
|
||||||
ReloadAllRegions();
|
ReloadAllRegions();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void ConvertDB()
|
public void ConvertDB()
|
||||||
{
|
{
|
||||||
|
|
@ -245,21 +195,15 @@ namespace TShockAPI.DB
|
||||||
int Protected = reader.Get<int>("Protected");
|
int Protected = reader.Get<int>("Protected");
|
||||||
string MergedIDs = DbExt.Get<string>(reader, "UserIds");
|
string MergedIDs = DbExt.Get<string>(reader, "UserIds");
|
||||||
string name = DbExt.Get<string>(reader, "RegionName");
|
string name = DbExt.Get<string>(reader, "RegionName");
|
||||||
System.Console.WriteLine(MergedIDs);
|
|
||||||
string[] SplitIDs = MergedIDs.Split(',');
|
string[] SplitIDs = MergedIDs.Split(',');
|
||||||
|
|
||||||
Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldID.ToString());
|
Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected != 0, Main.worldID.ToString());
|
||||||
r.RegionAllowedIDs = new int[SplitIDs.Length];
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
for (int i = 0; i < SplitIDs.Length; i++)
|
for (int i = 0; i < SplitIDs.Length; i++)
|
||||||
{
|
{
|
||||||
if (SplitIDs.Length == 1 && SplitIDs[0].Equals(""))
|
r.AllowedIDs.Add(Convert.ToInt32(SplitIDs[i]));
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//System.Console.WriteLine(SplitIDs[i]);
|
|
||||||
r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
@ -300,21 +244,14 @@ namespace TShockAPI.DB
|
||||||
int Protected = reader.Get<int>("Protected");
|
int Protected = reader.Get<int>("Protected");
|
||||||
string MergedIDs = DbExt.Get<string>(reader, "UserIds");
|
string MergedIDs = DbExt.Get<string>(reader, "UserIds");
|
||||||
string name = DbExt.Get<string>(reader, "RegionName");
|
string name = DbExt.Get<string>(reader, "RegionName");
|
||||||
System.Console.WriteLine(MergedIDs);
|
|
||||||
string[] SplitIDs = MergedIDs.Split(',');
|
string[] SplitIDs = MergedIDs.Split(',');
|
||||||
|
|
||||||
Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldID.ToString());
|
Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected != 0, Main.worldID.ToString());
|
||||||
r.RegionAllowedIDs = new int[SplitIDs.Length];
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
for (int i = 0; i < SplitIDs.Length; i++)
|
for (int i = 0; i < SplitIDs.Length; i++)
|
||||||
{
|
{
|
||||||
if (SplitIDs.Length == 1 && SplitIDs[0].Equals(""))
|
r.AllowedIDs[i] = Convert.ToInt32(SplitIDs[i]);
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//System.Console.WriteLine(SplitIDs[i]);
|
|
||||||
r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
@ -349,7 +286,7 @@ namespace TShockAPI.DB
|
||||||
com.AddParameter("@userids", "");
|
com.AddParameter("@userids", "");
|
||||||
com.AddParameter("@protected", 1);
|
com.AddParameter("@protected", 1);
|
||||||
com.ExecuteNonQuery();
|
com.ExecuteNonQuery();
|
||||||
Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, 0, worldid));
|
Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, true, worldid));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -393,7 +330,7 @@ namespace TShockAPI.DB
|
||||||
com.AddParameter("@bool", state ? 1 : 0);
|
com.AddParameter("@bool", state ? 1 : 0);
|
||||||
com.AddParameter("@worldid", Main.worldID.ToString());
|
com.AddParameter("@worldid", Main.worldID.ToString());
|
||||||
com.ExecuteNonQuery();
|
com.ExecuteNonQuery();
|
||||||
getRegion(name).DisableBuild = state ? 1 : 0;
|
getRegion(name).DisableBuild = state;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -415,7 +352,7 @@ namespace TShockAPI.DB
|
||||||
com.AddParameter("@bool", state ? 1 : 0);
|
com.AddParameter("@bool", state ? 1 : 0);
|
||||||
com.AddParameter("@worldid", world);
|
com.AddParameter("@worldid", world);
|
||||||
com.ExecuteNonQuery();
|
com.ExecuteNonQuery();
|
||||||
getRegion(name).DisableBuild = state ? 1 : 0;
|
getRegion(name).DisableBuild = state;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -446,9 +383,9 @@ namespace TShockAPI.DB
|
||||||
{
|
{
|
||||||
foreach (Region region in Regions)
|
foreach (Region region in Regions)
|
||||||
{
|
{
|
||||||
if (x >= region.RegionArea.Left && x <= region.RegionArea.Right &&
|
if (x >= region.Area.Left && x <= region.Area.Right &&
|
||||||
y >= region.RegionArea.Top && y <= region.RegionArea.Bottom &&
|
y >= region.Area.Top && y <= region.Area.Bottom &&
|
||||||
region.DisableBuild == 1)
|
region.DisableBuild)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -545,7 +482,7 @@ namespace TShockAPI.DB
|
||||||
using (var reader = com.ExecuteReader())
|
using (var reader = com.ExecuteReader())
|
||||||
{
|
{
|
||||||
while (reader.Read())
|
while (reader.Read())
|
||||||
regions.Add(new Region { RegionName = reader.Get<string>("RegionName") });
|
regions.Add(new Region { Name = reader.Get<string>("RegionName") });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -560,7 +497,7 @@ namespace TShockAPI.DB
|
||||||
{
|
{
|
||||||
foreach (Region r in Regions)
|
foreach (Region r in Regions)
|
||||||
{
|
{
|
||||||
if (r.RegionName.Equals(name))
|
if (r.Name.Equals(name))
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
return new Region();
|
return new Region();
|
||||||
|
|
@ -569,31 +506,33 @@ namespace TShockAPI.DB
|
||||||
|
|
||||||
public class Region
|
public class Region
|
||||||
{
|
{
|
||||||
public Rectangle RegionArea { get; set; }
|
public Rectangle Area { get; set; }
|
||||||
public string RegionName { get; set; }
|
public string Name { get; set; }
|
||||||
public int DisableBuild { get; set; }
|
public bool DisableBuild { get; set; }
|
||||||
public string RegionWorldID { get; set; }
|
public string WorldID { get; set; }
|
||||||
public int[] RegionAllowedIDs { get; set; }
|
public List<int> AllowedIDs { get; set; }
|
||||||
|
|
||||||
public Region(Rectangle region, string name, int disablebuild, string RegionWorldIDz)
|
public Region(Rectangle region, string name, bool disablebuild, string RegionWorldIDz)
|
||||||
|
:this()
|
||||||
{
|
{
|
||||||
RegionArea = region;
|
Area = region;
|
||||||
RegionName = name;
|
Name = name;
|
||||||
DisableBuild = disablebuild;
|
DisableBuild = disablebuild;
|
||||||
RegionWorldID = RegionWorldIDz;
|
WorldID = RegionWorldIDz;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Region()
|
public Region()
|
||||||
{
|
{
|
||||||
RegionArea = Rectangle.Empty;
|
Area = Rectangle.Empty;
|
||||||
RegionName = string.Empty;
|
Name = string.Empty;
|
||||||
DisableBuild = 1;
|
DisableBuild = true;
|
||||||
RegionWorldID = string.Empty;
|
WorldID = string.Empty;
|
||||||
|
AllowedIDs = new List<int>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool InArea(Rectangle point)
|
public bool InArea(Rectangle point)
|
||||||
{
|
{
|
||||||
if (RegionArea.Contains(point.X, point.Y))
|
if (Area.Contains(point.X, point.Y))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -611,14 +550,14 @@ namespace TShockAPI.DB
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (DisableBuild == 0)
|
if (!DisableBuild)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < RegionAllowedIDs.Length; i++)
|
for (int i = 0; i < AllowedIDs.Count; i++)
|
||||||
{
|
{
|
||||||
if (RegionAllowedIDs[i] == ply.UserID)
|
if (AllowedIDs[i] == ply.UserID)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,12 +37,12 @@ namespace UnitTests
|
||||||
public void AddRegion()
|
public void AddRegion()
|
||||||
{
|
{
|
||||||
Region r = new Region( new Rectangle(100,100,100,100), "test", 1, "test");
|
Region r = new Region( new Rectangle(100,100,100,100), "test", 1, "test");
|
||||||
Assert.IsTrue(manager.AddRegion(r.RegionArea.X, r.RegionArea.Y, r.RegionArea.Width, r.RegionArea.Height, r.RegionName, r.RegionWorldID));
|
Assert.IsTrue(manager.AddRegion(r.Area.X, r.Area.Y, r.Area.Width, r.Area.Height, r.Name, r.WorldID));
|
||||||
Assert.AreEqual(1, manager.Regions.Count);
|
Assert.AreEqual(1, manager.Regions.Count);
|
||||||
Assert.IsNotNull(manager.getRegion("test"));
|
Assert.IsNotNull(manager.getRegion("test"));
|
||||||
|
|
||||||
Region r2 = new Region(new Rectangle(201, 201, 100, 100), "test2", 1, "test");
|
Region r2 = new Region(new Rectangle(201, 201, 100, 100), "test2", 1, "test");
|
||||||
manager.AddRegion(r2.RegionArea.X, r2.RegionArea.Y, r2.RegionArea.Width, r2.RegionArea.Height, r2.RegionName, r2.RegionWorldID);
|
manager.AddRegion(r2.Area.X, r2.Area.Y, r2.Area.Width, r2.Area.Height, r2.Name, r2.WorldID);
|
||||||
Assert.AreEqual(2, manager.Regions.Count);
|
Assert.AreEqual(2, manager.Regions.Count);
|
||||||
Assert.IsNotNull(manager.getRegion("test2"));
|
Assert.IsNotNull(manager.getRegion("test2"));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue