Region list now uses the new code that warps use too.

This commit is contained in:
high 2011-07-22 22:00:18 -04:00
parent 85dac355be
commit 64ca3e7148
2 changed files with 73 additions and 48 deletions

View file

@ -1561,40 +1561,56 @@ namespace TShockAPI
} }
case "list": case "list":
{ {
args.Player.SendMessage("Current Regions:", Color.Green); //How many regions per page
int page = 1; const int pagelimit = 15;
//How many regions per line
const int perline = 5;
//Pages start at 0 but are displayed and parsed at 1
int page = 0;
if (args.Parameters.Count > 1) if (args.Parameters.Count > 1)
int.TryParse(args.Parameters[1], out page);
var sb = new StringBuilder();
List<Region> Regions = TShock.Regions.ListAllRegions();
if (Regions.Count > (15 * (page - 1)))
{ {
for (int j = (15 * (page - 1)); j < (15 * page); j++) if (!int.TryParse(args.Parameters[1], out page) || page < 1)
{ {
if (Regions[j].RegionWorldID == Main.worldName) args.Player.SendMessage(string.Format("Invalid page number ({0})", page), Color.Red);
{ return;
if (sb.Length != 0)
sb.Append(", ");
sb.Append(Regions[j].RegionName);
if (j == Regions.Count - 1)
{
args.Player.SendMessage(sb.ToString(), Color.Yellow);
break;
}
if ((j + 1) % 5 == 0)
{
args.Player.SendMessage(sb.ToString(), Color.Yellow);
sb.Clear();
}
}
} }
page--; //Substract 1 as pages are parsed starting at 1 and not 0
} }
if (Regions.Count > (15 * page))
var regions = TShock.Regions.ListAllRegions(Main.worldName);
//Check if they are trying to access a page that doesn't exist.
int pagecount = regions.Count / pagelimit;
if (page > pagecount)
{
args.Player.SendMessage(string.Format("Page number exceeds pages ({0}/{1})", page + 1, pagecount + 1), Color.Red);
return;
}
//Display the current page and the number of pages.
args.Player.SendMessage(string.Format("Current Regions ({0}/{1}):", page + 1, pagecount + 1), Color.Green);
//Add up to pagelimit names to a list
var nameslist = new List<string>();
for (int i = 0; i < pagelimit && i + (page * pagelimit) < regions.Count; i++)
{
nameslist.Add(regions[i].RegionName);
}
//convert the list to an array for joining
var names = nameslist.ToArray();
for (int i = 0; i < names.Length; i += perline)
{
args.Player.SendMessage(string.Join(", ", names, i, Math.Min(names.Length - i, perline)), Color.Yellow);
}
if (page < pagecount)
{ {
args.Player.SendMessage(string.Format("Type /region list {0} for more regions.", (page + 1)), Color.Yellow); args.Player.SendMessage(string.Format("Type /region list {0} for more regions.", (page + 1)), Color.Yellow);
} }
break; break;
} }
case "help": case "help":

View file

@ -74,7 +74,7 @@ namespace TShockAPI.DB
switch (reader.NodeType) switch (reader.NodeType)
{ {
case XmlNodeType.Element: case XmlNodeType.Element:
switch( reader.Name ) switch (reader.Name)
{ {
case "ProtectedRegion": case "ProtectedRegion":
name = ""; name = "";
@ -96,7 +96,7 @@ namespace TShockAPI.DB
case "Point1X": case "Point1X":
while (reader.NodeType != XmlNodeType.Text) while (reader.NodeType != XmlNodeType.Text)
reader.Read(); reader.Read();
int.TryParse( reader.Value, out x1 ); int.TryParse(reader.Value, out x1);
break; break;
case "Point1Y": case "Point1Y":
while (reader.NodeType != XmlNodeType.Text) while (reader.NodeType != XmlNodeType.Text)
@ -120,10 +120,11 @@ namespace TShockAPI.DB
{ {
prot = 0; prot = 0;
} }
else{ else
{
prot = 1; prot = 1;
} }
break; break;
case "WorldName": case "WorldName":
while (reader.NodeType != XmlNodeType.Text) while (reader.NodeType != XmlNodeType.Text)
reader.Read(); reader.Read();
@ -144,14 +145,15 @@ namespace TShockAPI.DB
ips[i] = reader.Value; ips[i] = reader.Value;
} }
ipstr = ""; ipstr = "";
for( int i = 0; i < ips.Length; i++ ) for (int i = 0; i < ips.Length; i++)
{ {
try try
{ {
if (ipstr != "") if (ipstr != "")
ipstr += ","; ipstr += ",";
ipstr += TShock.Users.GetUserID(ips[i]); ipstr += TShock.Users.GetUserID(ips[i]);
} catch (Exception) }
catch (Exception)
{ {
Log.Error("An IP address failed to import. It wasn't a user in the new user system."); Log.Error("An IP address failed to import. It wasn't a user in the new user system.");
} }
@ -166,7 +168,7 @@ namespace TShockAPI.DB
com.AddParameter("@tx", x1); com.AddParameter("@tx", x1);
com.AddParameter("@ty", y1); com.AddParameter("@ty", y1);
com.AddParameter("@width", x2); com.AddParameter("@width", x2);
com.AddParameter("@height",y2); com.AddParameter("@height", y2);
com.AddParameter("@name", name); com.AddParameter("@name", name);
com.AddParameter("@worldid", world); com.AddParameter("@worldid", world);
com.AddParameter("@userids", ipstr); com.AddParameter("@userids", ipstr);
@ -200,7 +202,7 @@ namespace TShockAPI.DB
//File.Move(file, file2); //File.Move(file, file2);
} }
if( updates > 0 ) if (updates > 0)
ReloadAllRegions(); ReloadAllRegions();
} }
} }
@ -262,7 +264,8 @@ namespace TShockAPI.DB
} }
r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]); r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]);
} }
} catch (Exception e) }
catch (Exception e)
{ {
Log.Error("Your database contains invalid UserIDs (they should be ints)."); Log.Error("Your database contains invalid UserIDs (they should be ints).");
Log.Error("A lot of things will fail because of this. You must manually delete and re-create the allowed field."); Log.Error("A lot of things will fail because of this. You must manually delete and re-create the allowed field.");
@ -374,7 +377,7 @@ namespace TShockAPI.DB
public bool InArea(int x, int y) public bool InArea(int x, int y)
{ {
foreach(Region region in Regions) foreach (Region region in Regions)
{ {
if (x >= region.RegionArea.Left && x <= region.RegionArea.Right && if (x >= region.RegionArea.Left && x <= region.RegionArea.Right &&
y >= region.RegionArea.Top && y <= region.RegionArea.Bottom && y >= region.RegionArea.Top && y <= region.RegionArea.Bottom &&
@ -438,7 +441,8 @@ namespace TShockAPI.DB
{ {
ReloadAllRegions(); ReloadAllRegions();
return true; return true;
} else }
else
{ {
return false; return false;
} }
@ -451,19 +455,24 @@ namespace TShockAPI.DB
} }
} }
public List<Region> ListAllRegions() /// <summary>
/// Gets all the regions names from world
/// </summary>
/// <param name="worldid">World name to get regions from</param>
/// <returns>List of regions with only their names</returns>
public List<Region> ListAllRegions(string worldid)
{ {
List<Region> Regions = new List<Region>(); var regions = new List<Region>();
try try
{ {
using (var com = database.CreateCommand()) using (var com = database.CreateCommand())
{ {
com.CommandText = "SELECT * FROM Regions"; com.CommandText = "SELECT RegionName FROM Regions WHERE WorldID=@worldid";
com.AddParameter("@worldid", worldid);
using (var reader = com.ExecuteReader()) using (var reader = com.ExecuteReader())
{ {
while (reader.Read()) while (reader.Read())
Regions.Add(new Region(new Rectangle(reader.Get<int>("X1"), reader.Get<int>("Y1"), reader.Get<int>("height"), reader.Get<int>("width")), reader.Get<string>("RegionName"), reader.Get<int>("Protected"), reader.Get<string>("WorldID"))); regions.Add(new Region { RegionName = reader.Get<string>("RegionName") });
reader.Close();
} }
} }
} }
@ -471,7 +480,7 @@ namespace TShockAPI.DB
{ {
Log.Error(ex.ToString()); Log.Error(ex.ToString());
} }
return Regions; return regions;
} }
} }