Commands /region list and /warp list now work

Regions now use User ID's for /region allow (can be IP or Username/password based ID)
Minor Tweaks
A reset of your database is recommended
This commit is contained in:
Twitchy 2011-07-09 20:41:31 +12:00
parent cb7033d89c
commit 243b0297b9
6 changed files with 156 additions and 28 deletions

View file

@ -305,6 +305,7 @@ namespace TShockAPI
if (exr[0] == encrPass)
{
args.Player.Group = Tools.GetGroup(exr[1]);
args.Player.UserName = args.Parameters[0];
args.Player.SendMessage("Authenticated as " + args.Parameters[0] + " successfully.", Color.LimeGreen);
return;
}
@ -964,16 +965,18 @@ namespace TShockAPI
if (args.Parameters.Count > 1)
int.TryParse(args.Parameters[1], out page);
var sb = new StringBuilder();
if (TShock.Warps.Warps.Count > (15 * (page - 1)))
List<Warp> Warps = TShock.Warps.ListAllWarps();
if (Warps.Count > (15 * (page - 1)))
{
for (int j = (15 * (page - 1)); j < (15 * page); j++)
{
if (TShock.Warps.Warps[j].WorldWarpName == Main.worldName)
if (Warps[j].WorldWarpID == Main.worldID.ToString())
{
if (sb.Length != 0)
sb.Append(", ");
sb.Append("/").Append(TShock.Warps.Warps[j].WarpName);
if (j == TShock.Warps.Warps.Count - 1)
sb.Append("/").Append(Warps[j].WarpName);
if (j == Warps.Count - 1)
{
args.Player.SendMessage(sb.ToString(), Color.Yellow);
break;
@ -986,7 +989,7 @@ namespace TShockAPI
}
}
}
if (TShock.Warps.Warps.Count > (15 * page))
if (Warps.Count > (15 * page))
{
args.Player.SendMessage(string.Format("Type /warp list {0} for more warps.", (page + 1)), Color.Yellow);
}
@ -1315,7 +1318,7 @@ namespace TShockAPI
{
string playerName = args.Parameters[1];
string regionName = "";
string playerIP = null;
string playerID = "0";
for (int i = 2; i < args.Parameters.Count; i++)
{
@ -1328,9 +1331,18 @@ namespace TShockAPI
regionName = regionName + " " + args.Parameters[i];
}
}
if ((playerIP = Tools.GetPlayerIP(playerName)) != null)
if ((playerID = TShock.Users.GetUserID(Tools.FindPlayer(playerName)[0].UserName)) != "0")
{
if (TShock.Regions.AddNewUser(regionName, playerIP))
if (TShock.Regions.AddNewUser(regionName, playerID))
{
args.Player.SendMessage("Added user " + playerName + " to " + regionName, Color.Yellow);
}
else
args.Player.SendMessage("Region " + regionName + " not found", Color.Red);
}
else if ((playerID = TShock.Users.GetUserID("",Tools.FindPlayer(playerName)[0].IP)) != "0")
{
if (TShock.Regions.AddNewUser(regionName, playerID))
{
args.Player.SendMessage("Added user " + playerName + " to " + regionName, Color.Yellow);
}
@ -1346,6 +1358,44 @@ namespace TShockAPI
args.Player.SendMessage("Invalid syntax! Proper syntax: /region allow [name] [region]", Color.Red);
break;
}
case "list":
{
args.Player.SendMessage("Current Regions:", Color.Green);
int page = 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 (Regions[j].RegionWorldID == Main.worldID.ToString())
{
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();
}
}
}
}
if (Regions.Count > (15 * page))
{
args.Player.SendMessage(string.Format("Type /warp list {0} for more warps.", (page + 1)), Color.Yellow);
}
break;
}
case "help":
default:
{

View file

@ -43,7 +43,7 @@ namespace TShockAPI.DB
using (var com = database.CreateCommand())
{
com.CommandText =
"CREATE TABLE IF NOT EXISTS 'Regions' ('X1' INTEGER(11) NOT NULL, 'Y1' INTEGER(11) NOT NULL, 'X2' INTEGER(11) NOT NULL, 'Y2' INTEGER(11) NOT NULL, 'RegionName' VARCHAR(32) NOT NULL, 'WorldID' VARCHAR(255) NOT NULL, 'UserIds' VARCHAR(255) NOT NULL, 'Protected' INTEGER(1));";
"CREATE TABLE IF NOT EXISTS 'Regions' ('X1' NUMERIC, 'Y1' NUMERIC, 'X2' NUMERIC, 'Y2' NUMERIC, 'RegionName' TEXT, 'WorldID' TEXT, 'UserIds' TEXT, 'Protected' NUMERIC);";
com.ExecuteNonQuery();
}
}
@ -139,7 +139,9 @@ namespace TShockAPI.DB
int Y2 = reader.Get<int>("Y2");
int Protected = reader.Get<int>("Protected");
string MergedIDs = DbExt.Get<string>(reader, "UserIds");
List<string> SplitIDs = ListIDs(MergedIDs);
string[] SplitIDs = MergedIDs.Split(',');
if (X >= X1 &&
X <= X2 &&
Y >= Y1 &&
@ -190,7 +192,7 @@ namespace TShockAPI.DB
{
using (var com = database.CreateCommand())
{
com.CommandText = "SELECT * FROM Regions WHERE RegionName=@name WorldID=@worldid";
com.CommandText = "SELECT * FROM Regions WHERE RegionName=@name AND WorldID=@worldid";
com.AddParameter("@name", regionName);
com.AddParameter("@worldid", Main.worldID.ToString());
@ -198,7 +200,7 @@ namespace TShockAPI.DB
{
if (reader.Read())
{
MergedIDs = DbExt.Get<string>(reader, "UserIds");
MergedIDs = reader.Get<string>("UserIds");
}
}
@ -207,10 +209,8 @@ namespace TShockAPI.DB
else
MergedIDs = MergedIDs + "," + ID;
com.CommandText = "UPDATE Regions SET UserIds='@ids' WHERE RegionName=@name WorldID=@worldid";
com.CommandText = "UPDATE Regions SET UserIds=@ids";
com.AddParameter("@ids", MergedIDs);
com.AddParameter("@name", regionName);
com.AddParameter("@worldid", Main.worldID.ToString());
if (com.ExecuteNonQuery() > 0)
return true;
else
@ -223,30 +223,51 @@ namespace TShockAPI.DB
return false;
}
}
public List<Region> ListAllRegions()
{
List<Region> Regions = new List<Region>();
try
{
using (var com = database.CreateCommand())
{
com.CommandText = "SELECT * FROM Regions";
using (var reader = com.ExecuteReader())
{
while (reader.Read())
Regions.Add(new Region(new Rectangle(reader.Get<int>("X1"), reader.Get<int>("Y1"), reader.Get<int>("X2"), reader.Get<int>("Y2")), reader.Get<string>("RegionName"), reader.Get<int>("Protected"), reader.Get<string>("WorldID")));
}
}
}
catch (SqliteExecutionException ex)
{
}
return Regions;
}
}
public class Region
{
public Rectangle RegionArea { get; set; }
public string RegionName { get; set; }
public bool DisableBuild { get; set; }
public string WorldRegionName { get; set; }
public int DisableBuild { get; set; }
public string RegionWorldID { get; set; }
public string RegionAllowedIDs { get; set; }
public Region(Rectangle region, string name, bool disablebuild, string worldname)
public Region(Rectangle region, string name, int disablebuild, string worldname)
{
RegionArea = region;
RegionName = name;
DisableBuild = disablebuild;
WorldRegionName = worldname;
RegionWorldID = worldname;
}
public Region()
{
RegionArea = Rectangle.Empty;
RegionName = string.Empty;
DisableBuild = true;
WorldRegionName = string.Empty;
DisableBuild = 1;
RegionWorldID = string.Empty;
}
}
}

View file

@ -137,8 +137,45 @@ namespace TShockAPI.DB
}
catch (SqliteExecutionException ex)
{
}
return Tools.GetGroup("default");
}
public string GetUserID(string username = "", string IP = "")
{
try
{
using (var com = database.CreateCommand())
{
if (username != "" && username != null)
{
com.CommandText = "SELECT * FROM Users WHERE Username=@name";
com.AddParameter("@name", username);
}
else if (IP != "" && IP != null)
{
com.CommandText = "SELECT * FROM Users WHERE IP=@ip";
com.AddParameter("@ip", IP);
}
else
return "0";
using (var reader = com.ExecuteReader())
{
if (reader.Read())
{
string ID = reader.Get<string>("ID");
return ID;
}
}
}
}
catch (SqliteExecutionException ex)
{
}
return "0";
}
}
}

View file

@ -34,8 +34,6 @@ namespace TShockAPI.DB
{
private IDbConnection database;
public List<Warp> Warps = new List<Warp>();
public WarpManager(IDbConnection db)
{
database = db;
@ -43,7 +41,7 @@ namespace TShockAPI.DB
using (var com = database.CreateCommand())
{
com.CommandText =
"CREATE TABLE IF NOT EXISTS 'Warps' ('X' INTEGER(11) NOT NULL, 'Y' INTEGER(11) NOT NULL, 'WarpName' TEXT UNIQUE, 'WorldID' TEXT);";
"CREATE TABLE IF NOT EXISTS 'Warps' ('X' NUMERIC, 'Y' NUMERIC, 'WarpName' TEXT UNIQUE, 'WorldID' TEXT);";
com.ExecuteNonQuery();
}
}
@ -109,26 +107,47 @@ namespace TShockAPI.DB
}
return new Warp();
}
public List<Warp> ListAllWarps()
{
List<Warp> Warps = new List<Warp>();
try
{
using (var com = database.CreateCommand())
{
com.CommandText = "SELECT * FROM Warps";
using (var reader = com.ExecuteReader())
{
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")));
}
}
}
catch (SqliteExecutionException ex)
{
}
return Warps;
}
}
public class Warp
{
public Vector2 WarpPos { get; set; }
public string WarpName { get; set; }
public string WorldWarpName { get; set; }
public string WorldWarpID { get; set; }
public Warp(Vector2 warppos, string name, string worldname)
{
WarpPos = warppos;
WarpName = name;
WorldWarpName = worldname;
WorldWarpID = worldname;
}
public Warp()
{
WarpPos = Vector2.Zero;
WarpName = null;
WorldWarpName = string.Empty;
WorldWarpID = string.Empty;
}
}
}

View file

@ -259,7 +259,7 @@ namespace TShockAPI
return true;
}
}
if (!args.Player.Group.HasPermission("editspawn") && RegionManager.InProtectedArea(x, y, Tools.GetPlayerIP(args.Player.Name)))
if (!args.Player.Group.HasPermission("editspawn") && TShock.Regions.InProtectedArea(x, y, TShock.Users.GetUserID(args.Player.UserName,args.Player.IP)))
{
args.Player.SendMessage("Region protected from changes.", Color.Red);
args.Player.SendTileSquare(x, y);

View file

@ -42,6 +42,7 @@ namespace TShockAPI
public Vector2 oldSpawn = Vector2.Zero;
public TSPlayer LastWhisper;
public int LoginAttempts { get; set; }
public string UserName { get; set; }
Player FakePlayer = null;