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:
parent
cb7033d89c
commit
243b0297b9
6 changed files with 156 additions and 28 deletions
|
|
@ -305,6 +305,7 @@ namespace TShockAPI
|
||||||
if (exr[0] == encrPass)
|
if (exr[0] == encrPass)
|
||||||
{
|
{
|
||||||
args.Player.Group = Tools.GetGroup(exr[1]);
|
args.Player.Group = Tools.GetGroup(exr[1]);
|
||||||
|
args.Player.UserName = args.Parameters[0];
|
||||||
args.Player.SendMessage("Authenticated as " + args.Parameters[0] + " successfully.", Color.LimeGreen);
|
args.Player.SendMessage("Authenticated as " + args.Parameters[0] + " successfully.", Color.LimeGreen);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -964,16 +965,18 @@ namespace TShockAPI
|
||||||
if (args.Parameters.Count > 1)
|
if (args.Parameters.Count > 1)
|
||||||
int.TryParse(args.Parameters[1], out page);
|
int.TryParse(args.Parameters[1], out page);
|
||||||
var sb = new StringBuilder();
|
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++)
|
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)
|
if (sb.Length != 0)
|
||||||
sb.Append(", ");
|
sb.Append(", ");
|
||||||
sb.Append("/").Append(TShock.Warps.Warps[j].WarpName);
|
sb.Append("/").Append(Warps[j].WarpName);
|
||||||
if (j == TShock.Warps.Warps.Count - 1)
|
if (j == Warps.Count - 1)
|
||||||
{
|
{
|
||||||
args.Player.SendMessage(sb.ToString(), Color.Yellow);
|
args.Player.SendMessage(sb.ToString(), Color.Yellow);
|
||||||
break;
|
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);
|
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 playerName = args.Parameters[1];
|
||||||
string regionName = "";
|
string regionName = "";
|
||||||
string playerIP = null;
|
string playerID = "0";
|
||||||
|
|
||||||
for (int i = 2; i < args.Parameters.Count; i++)
|
for (int i = 2; i < args.Parameters.Count; i++)
|
||||||
{
|
{
|
||||||
|
|
@ -1328,9 +1331,18 @@ namespace TShockAPI
|
||||||
regionName = regionName + " " + args.Parameters[i];
|
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);
|
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);
|
args.Player.SendMessage("Invalid syntax! Proper syntax: /region allow [name] [region]", Color.Red);
|
||||||
break;
|
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":
|
case "help":
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ namespace TShockAPI.DB
|
||||||
using (var com = database.CreateCommand())
|
using (var com = database.CreateCommand())
|
||||||
{
|
{
|
||||||
com.CommandText =
|
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();
|
com.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -139,7 +139,9 @@ namespace TShockAPI.DB
|
||||||
int Y2 = reader.Get<int>("Y2");
|
int Y2 = reader.Get<int>("Y2");
|
||||||
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");
|
||||||
List<string> SplitIDs = ListIDs(MergedIDs);
|
|
||||||
|
string[] SplitIDs = MergedIDs.Split(',');
|
||||||
|
|
||||||
if (X >= X1 &&
|
if (X >= X1 &&
|
||||||
X <= X2 &&
|
X <= X2 &&
|
||||||
Y >= Y1 &&
|
Y >= Y1 &&
|
||||||
|
|
@ -190,7 +192,7 @@ namespace TShockAPI.DB
|
||||||
{
|
{
|
||||||
using (var com = database.CreateCommand())
|
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("@name", regionName);
|
||||||
com.AddParameter("@worldid", Main.worldID.ToString());
|
com.AddParameter("@worldid", Main.worldID.ToString());
|
||||||
|
|
||||||
|
|
@ -198,7 +200,7 @@ namespace TShockAPI.DB
|
||||||
{
|
{
|
||||||
if (reader.Read())
|
if (reader.Read())
|
||||||
{
|
{
|
||||||
MergedIDs = DbExt.Get<string>(reader, "UserIds");
|
MergedIDs = reader.Get<string>("UserIds");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -207,10 +209,8 @@ namespace TShockAPI.DB
|
||||||
else
|
else
|
||||||
MergedIDs = MergedIDs + "," + ID;
|
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("@ids", MergedIDs);
|
||||||
com.AddParameter("@name", regionName);
|
|
||||||
com.AddParameter("@worldid", Main.worldID.ToString());
|
|
||||||
if (com.ExecuteNonQuery() > 0)
|
if (com.ExecuteNonQuery() > 0)
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
|
|
@ -223,30 +223,51 @@ namespace TShockAPI.DB
|
||||||
return false;
|
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 class Region
|
||||||
{
|
{
|
||||||
public Rectangle RegionArea { get; set; }
|
public Rectangle RegionArea { get; set; }
|
||||||
public string RegionName { get; set; }
|
public string RegionName { get; set; }
|
||||||
public bool DisableBuild { get; set; }
|
public int DisableBuild { get; set; }
|
||||||
public string WorldRegionName { get; set; }
|
public string RegionWorldID { get; set; }
|
||||||
public string RegionAllowedIDs { 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;
|
RegionArea = region;
|
||||||
RegionName = name;
|
RegionName = name;
|
||||||
DisableBuild = disablebuild;
|
DisableBuild = disablebuild;
|
||||||
WorldRegionName = worldname;
|
RegionWorldID = worldname;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Region()
|
public Region()
|
||||||
{
|
{
|
||||||
RegionArea = Rectangle.Empty;
|
RegionArea = Rectangle.Empty;
|
||||||
RegionName = string.Empty;
|
RegionName = string.Empty;
|
||||||
DisableBuild = true;
|
DisableBuild = 1;
|
||||||
WorldRegionName = string.Empty;
|
RegionWorldID = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -137,8 +137,45 @@ namespace TShockAPI.DB
|
||||||
}
|
}
|
||||||
catch (SqliteExecutionException ex)
|
catch (SqliteExecutionException ex)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
return Tools.GetGroup("default");
|
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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,6 @@ namespace TShockAPI.DB
|
||||||
{
|
{
|
||||||
private IDbConnection database;
|
private IDbConnection database;
|
||||||
|
|
||||||
public List<Warp> Warps = new List<Warp>();
|
|
||||||
|
|
||||||
public WarpManager(IDbConnection db)
|
public WarpManager(IDbConnection db)
|
||||||
{
|
{
|
||||||
database = db;
|
database = db;
|
||||||
|
|
@ -43,7 +41,7 @@ namespace TShockAPI.DB
|
||||||
using (var com = database.CreateCommand())
|
using (var com = database.CreateCommand())
|
||||||
{
|
{
|
||||||
com.CommandText =
|
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();
|
com.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -109,26 +107,47 @@ namespace TShockAPI.DB
|
||||||
}
|
}
|
||||||
return new Warp();
|
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 class Warp
|
||||||
{
|
{
|
||||||
public Vector2 WarpPos { get; set; }
|
public Vector2 WarpPos { get; set; }
|
||||||
public string WarpName { 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)
|
public Warp(Vector2 warppos, string name, string worldname)
|
||||||
{
|
{
|
||||||
WarpPos = warppos;
|
WarpPos = warppos;
|
||||||
WarpName = name;
|
WarpName = name;
|
||||||
WorldWarpName = worldname;
|
WorldWarpID = worldname;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Warp()
|
public Warp()
|
||||||
{
|
{
|
||||||
WarpPos = Vector2.Zero;
|
WarpPos = Vector2.Zero;
|
||||||
WarpName = null;
|
WarpName = null;
|
||||||
WorldWarpName = string.Empty;
|
WorldWarpID = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -259,7 +259,7 @@ namespace TShockAPI
|
||||||
return true;
|
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.SendMessage("Region protected from changes.", Color.Red);
|
||||||
args.Player.SendTileSquare(x, y);
|
args.Player.SendTileSquare(x, y);
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ namespace TShockAPI
|
||||||
public Vector2 oldSpawn = Vector2.Zero;
|
public Vector2 oldSpawn = Vector2.Zero;
|
||||||
public TSPlayer LastWhisper;
|
public TSPlayer LastWhisper;
|
||||||
public int LoginAttempts { get; set; }
|
public int LoginAttempts { get; set; }
|
||||||
|
public string UserName { get; set; }
|
||||||
|
|
||||||
Player FakePlayer = null;
|
Player FakePlayer = null;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue