Fixed /warp list <page>

ListAllWarps now only returns names and only for the specified world.
This commit is contained in:
high 2011-07-22 21:36:07 -04:00
parent 5458fb567a
commit 1c2cead3c9
2 changed files with 87 additions and 63 deletions

View file

@ -327,7 +327,8 @@ namespace TShockAPI
args.Player.LoginAttempts++; args.Player.LoginAttempts++;
return; return;
} }
} catch (Exception) }
catch (Exception)
{ {
args.Player.SendMessage("There was an error processing your request. Maybe your account doesn't exist?", Color.Red); args.Player.SendMessage("There was an error processing your request. Maybe your account doesn't exist?", Color.Red);
return; return;
@ -727,7 +728,8 @@ namespace TShockAPI
args.Player.SendMessage("This command will also change all Worlds to reference this WorldID."); args.Player.SendMessage("This command will also change all Worlds to reference this WorldID.");
args.Player.SendMessage("You must manually fix multi-world configurations."); args.Player.SendMessage("You must manually fix multi-world configurations.");
args.Player.SendMessage("To confirm this: /convert yes"); args.Player.SendMessage("To confirm this: /convert yes");
} else if (args.Parameters[0] == "yes") }
else if (args.Parameters[0] == "yes")
{ {
TShock.Warps.ConvertDB(); TShock.Warps.ConvertDB();
TShock.Regions.ConvertDB(); TShock.Regions.ConvertDB();
@ -1124,40 +1126,60 @@ namespace TShockAPI
private static void UseWarp(CommandArgs args) private static void UseWarp(CommandArgs args)
{ {
if (args.Parameters.Count > 0) if (args.Parameters.Count < 1)
{ {
args.Player.SendMessage("Invalid syntax! Proper syntax: /warp [name] or /warp list <page>", Color.Red);
return;
}
if (args.Parameters[0].Equals("list")) if (args.Parameters[0].Equals("list"))
{ {
args.Player.SendMessage("Current Warps:", Color.Green); //How many warps per page
int page = 1; const int pagelimit = 15;
if (args.Parameters.Count > 1) //How many warps per line
int.TryParse(args.Parameters[1], out page); const int perline = 5;
var sb = new StringBuilder(); //Pages start at 0 but are displayed and parsed at 1
List<Warp> Warps = TShock.Warps.ListAllWarps(); int page = 0;
if (Warps.Count > (15 * (page - 1)))
if (args.Parameters.Count > 1)
{ {
for (int j = (15 * (page - 1)); j < (15 * page); j++) if (!int.TryParse(args.Parameters[1], out page) || page < 1)
{ {
if (Warps[j].WorldWarpID == Main.worldName) args.Player.SendMessage(string.Format("Invalid page number ({0})", page), Color.Red);
return;
}
page--; //Substract 1 as pages are parsed starting at 1 and not 0
}
var warps = TShock.Warps.ListAllWarps(Main.worldName);
//Check if they are trying to access a page that doesn't exist.
int pagecount = warps.Count / pagelimit;
if (page > pagecount)
{ {
if (sb.Length != 0) args.Player.SendMessage(string.Format("Page number exceeds pages ({0}/{1})", page + 1, pagecount + 1), Color.Red);
sb.Append(", "); return;
sb.Append(Warps[j].WarpName); }
if (j == Warps.Count - 1)
//Display the current page and the number of pages.
args.Player.SendMessage(string.Format("Current Warps ({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) < warps.Count; i++)
{ {
args.Player.SendMessage(sb.ToString(), Color.Yellow); nameslist.Add(warps[i].WarpName);
break;
} }
if ((j + 1) % 5 == 0)
//convert the list to an array for joining
var names = nameslist.ToArray();
for (int i = 0; i < names.Length; i += perline)
{ {
args.Player.SendMessage(sb.ToString(), Color.Yellow); args.Player.SendMessage(string.Join(", ", names, i, Math.Min(names.Length - i, perline)), Color.Yellow);
sb.Clear();
} }
}
} if (page < pagecount)
}
if (Warps.Count > (15 * page))
{ {
args.Player.SendMessage(string.Format("Type /warp list {0} for more warps.", (page + 1)), Color.Yellow); args.Player.SendMessage(string.Format("Type /warp list {0} for more warps.", (page + 1)), Color.Yellow);
} }
@ -1176,9 +1198,7 @@ namespace TShockAPI
args.Player.SendMessage("Specified warp not found", Color.Red); args.Player.SendMessage("Specified warp not found", Color.Red);
} }
} }
}
else
args.Player.SendMessage("Invalid syntax! Proper syntax: /warp [name] or warp list", Color.Red);
} }
#endregion Teleport Commands #endregion Teleport Commands

View file

@ -215,20 +215,24 @@ namespace TShockAPI.DB
return new Warp(); return new Warp();
} }
public List<Warp> ListAllWarps() /// <summary>
/// Gets all the warps names from world
/// </summary>
/// <param name="worldid">World name to get warps from</param>
/// <returns>List of warps with only their names</returns>
public List<Warp> ListAllWarps(string worldid)
{ {
List<Warp> Warps = new List<Warp>(); var warps = new List<Warp>();
try try
{ {
using (var com = database.CreateCommand()) using (var com = database.CreateCommand())
{ {
com.CommandText = "SELECT * FROM Warps"; com.CommandText = "SELECT WarpName FROM Warps WHERE WorldID=@worldid";
com.AddParameter("@worldid", worldid);
using (var reader = com.ExecuteReader()) using (var reader = com.ExecuteReader())
{ {
while (reader.Read()) while (reader.Read())
Warps.Add(new Warp(new Vector2(reader.Get<int>("X"), reader.Get<int>("Y")), reader.Get<string>("WarpName"), reader.Get<string>("WorldID"))); warps.Add(new Warp { WarpName = reader.Get<string>("WarpName") });
reader.Close();
} }
} }
} }
@ -236,7 +240,7 @@ namespace TShockAPI.DB
{ {
Log.Error(ex.ToString()); Log.Error(ex.ToString());
} }
return Warps; return warps;
} }
} }