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)
|
||||
{
|
||||
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:
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue