diff --git a/Local.testsettings b/Local.testsettings
new file mode 100644
index 00000000..24250d4b
--- /dev/null
+++ b/Local.testsettings
@@ -0,0 +1,10 @@
+
+
+ These are default test settings for a local test run.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs
index 6618839e..230add18 100644
--- a/TShockAPI/Commands.cs
+++ b/TShockAPI/Commands.cs
@@ -138,6 +138,9 @@ namespace TShockAPI
ChatCommands.Add(new Command("warp", UseWarp, "warp"));
ChatCommands.Add(new Command("managewarp", SetWarp, "setwarp"));
ChatCommands.Add(new Command("managewarp", DeleteWarp, "delwarp"));
+ ChatCommands.Add(new Command("managegroup", AddGroup, "addGroup"));
+ ChatCommands.Add(new Command("managegroup", DeleteGroup, "delGroup"));
+ ChatCommands.Add(new Command("managegroup", ModifyGroup, "modGroup"));
ChatCommands.Add(new Command("cfg", SetSpawn, "setspawn"));
ChatCommands.Add(new Command("cfg", Reload, "reload"));
ChatCommands.Add(new Command("cfg", DebugConfiguration, "debug-config"));
@@ -1204,6 +1207,72 @@ namespace TShockAPI
#endregion Teleport Commands
+
+ #region Group Management
+
+ private static void AddGroup(CommandArgs args)
+ {
+ if (args.Parameters.Count > 0)
+ {
+ String groupname = args.Parameters[0];
+ args.Parameters.RemoveAt(0);
+ String permissions = String.Join(",", args.Parameters );
+
+ String response = TShock.Groups.addGroup(groupname, permissions);
+ if( response.Length > 0 )
+ args.Player.SendMessage(response, Color.Green);
+ }
+ else
+ {
+ args.Player.SendMessage("Incorrect format: /addGroup [optional permissions]", Color.Red);
+ }
+ }
+
+ private static void DeleteGroup(CommandArgs args)
+ {
+ if (args.Parameters.Count > 0)
+ {
+ String groupname = args.Parameters[0];
+
+ String response = TShock.Groups.delGroup(groupname);
+ if (response.Length > 0)
+ args.Player.SendMessage(response, Color.Green);
+ }
+ else
+ {
+ args.Player.SendMessage("Incorrect format: /delGroup ", Color.Red);
+ }
+ }
+
+ private static void ModifyGroup(CommandArgs args)
+ {
+ if (args.Parameters.Count > 2)
+ {
+ String com = args.Parameters[0];
+ args.Parameters.RemoveAt(0);
+
+ String groupname = args.Parameters[0];
+ args.Parameters.RemoveAt(0);
+
+ if (com.Equals("add"))
+ {
+ String response = TShock.Groups.addPermission(groupname, args.Parameters);
+ if (response.Length > 0)
+ args.Player.SendMessage(response, Color.Green);
+ return;
+ }
+ else if (com.Equals("del") || com.Equals("delete"))
+ {
+ String response = TShock.Groups.delPermission(groupname, args.Parameters);
+ if (response.Length > 0)
+ args.Player.SendMessage(response, Color.Green);
+ return;
+ }
+ }
+ args.Player.SendMessage("Incorrect format: /modGroup add|del ", Color.Red);
+ }
+
+ #endregion Group Management
#region Server Config Commands
private static void SetSpawn(CommandArgs args)
@@ -1966,8 +2035,13 @@ namespace TShockAPI
return;
}
int itemAmount = 0;
- int.TryParse(args.Parameters[args.Parameters.Count - 1], out itemAmount);
var items = Tools.GetItemByIdOrName(args.Parameters[0]);
+ args.Parameters.RemoveAt(0);
+ string plStr = args.Parameters[0];
+ args.Parameters.RemoveAt(0);
+ if( args.Parameters.Count > 0 )
+ int.TryParse(args.Parameters[args.Parameters.Count - 1], out itemAmount);
+
if (items.Count == 0)
{
@@ -1982,7 +2056,6 @@ namespace TShockAPI
var item = items[0];
if (item.type >= 1 && item.type < Main.maxItemTypes)
{
- string plStr = args.Parameters[1];
var players = Tools.FindPlayer(plStr);
if (players.Count == 0)
{
diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs
index 3f2ad3d5..bd0edb4e 100644
--- a/TShockAPI/DB/GroupManager.cs
+++ b/TShockAPI/DB/GroupManager.cs
@@ -37,7 +37,6 @@ namespace TShockAPI.DB
AddGroup("default", "canwater,canlava,warp,canbuild");
AddGroup("vip", "default,canwater,canlava,warp,canbuild,reservedslot");
-
String file = Path.Combine(TShock.SavePath, "groups.txt");
if (File.Exists(file))
{
@@ -124,6 +123,96 @@ namespace TShockAPI.DB
return false;
}
+ public String addGroup(String name, String permissions)
+ {
+ String message = "";
+ if( GroupExists( name ) )
+ return "Error: Group already exists. Use /modGroup to change permissions.";
+ using (var com = database.CreateCommand())
+ {
+ if (TShock.Config.StorageType.ToLower() == "sqlite")
+ com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);";
+ else if (TShock.Config.StorageType.ToLower() == "mysql")
+ com.CommandText = "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;";
+ com.AddParameter("@groupname", name);
+ com.AddParameter("@commands", permissions);
+ com.AddParameter("@order", "0");
+ if (com.ExecuteNonQuery() == 1)
+ message = "Group " + name + " has been created successfully.";
+ Group g = new Group(name);
+ g.permissions.Add(permissions);
+ groups.Add(g);
+ }
+ return message;
+ }
+
+ public String delGroup(String name)
+ {
+ String message = "";
+ if (!GroupExists(name))
+ return "Error: Group doesn't exists.";
+ using (var com = database.CreateCommand())
+ {
+ com.CommandText = "Delete FROM GroupList WHERE GroupName=@groupname;";
+ com.AddParameter("@groupname", name);
+ if (com.ExecuteNonQuery() == 1)
+ message = "Group " + name + " has been deleted successfully.";
+ groups.Remove(Tools.GetGroup(name));
+ }
+ return message;
+ }
+
+ public String addPermission(String name, List permissions)
+ {
+ String message = "";
+ if (!GroupExists(name))
+ return "Error: Group doesn't exists.";
+ using (var com = database.CreateCommand())
+ {
+ Group g = Tools.GetGroup(name);
+ List perm = g.permissions;
+ foreach (String p in permissions)
+ {
+ if (!perm.Contains(p))
+ {
+ if (perm.Count > 0 && perm[0].Equals(""))
+ perm[0] = p;
+ else
+ g.permissions.Add(p);
+ }
+ }
+ com.CommandText = "UPDATE GroupList SET Commands=@perm WHERE GroupName=@name;";
+ com.AddParameter("@perm", String.Join(",", perm));
+ com.AddParameter("@name", name);
+ if (com.ExecuteNonQuery() == 1)
+ message = "Group " + name + " has been modified successfully.";
+ }
+ return message;
+ }
+
+ public String delPermission(String name, List permissions)
+ {
+ String message = "";
+ if (!GroupExists(name))
+ return "Error: Group doesn't exists.";
+ using (var com = database.CreateCommand())
+ {
+ Group g = Tools.GetGroup(name);
+ List perm = g.permissions;
+ foreach (String p in permissions)
+ {
+ if (perm.Contains(p))
+ g.permissions.Remove(p);
+ }
+ com.CommandText = "UPDATE GroupList SET Commands=@perm WHERE GroupName=@name;";
+ com.AddParameter("@perm", String.Join(",", perm));
+ com.AddParameter("@name", name);
+ if (com.ExecuteNonQuery() == 1)
+ message = "Group " + name + " has been modified successfully.";
+ }
+ return message;
+ }
+
public void LoadPermisions()
{
groups = new List();
diff --git a/TShockAPI/DB/ItemManager.cs b/TShockAPI/DB/ItemManager.cs
index 91bd66d9..12ddb646 100644
--- a/TShockAPI/DB/ItemManager.cs
+++ b/TShockAPI/DB/ItemManager.cs
@@ -36,7 +36,7 @@ namespace TShockAPI.DB
String line;
while ((line = sr.ReadLine()) != null)
{
- if (!line.Equals("") && !line.Substring( 0, 1 ).Equals("#") )
+ if (!line.Equals("") && !line.Substring(0, 1).Equals("#"))
{
if (TShock.Config.StorageType.ToLower() == "sqlite")
com.CommandText = "INSERT OR IGNORE INTO 'ItemBans' (ItemName) VALUES (@name);";
@@ -44,8 +44,8 @@ namespace TShockAPI.DB
com.CommandText = "INSERT IGNORE INTO ItemBans SET ItemName=@name;";
int id = 0;
- int.TryParse(line, out id );
- com.AddParameter("@name", Tools.GetItemById( id ).name );
+ int.TryParse(line, out id);
+ com.AddParameter("@name", Tools.GetItemById(id).name);
com.ExecuteNonQuery();
com.Parameters.Clear();
}
@@ -60,19 +60,25 @@ namespace TShockAPI.DB
File.Delete(file2);
File.Move(file, file2);
}
+ }
+ UpdateItemBans();
+ }
+
+ public void UpdateItemBans()
+ {
+ ItemBans.Clear();
+ using (var com = database.CreateCommand())
+ {
com.CommandText = "SELECT * FROM ItemBans";
using (var reader = com.ExecuteReader())
{
- while (reader.Read())
+ while (reader!=null&&reader.Read())
ItemBans.Add(reader.Get("ItemName"));
-
- reader.Close();
}
}
}
-
public void AddNewBan(string itemname = "")
{
try
@@ -82,6 +88,8 @@ namespace TShockAPI.DB
com.CommandText = "INSERT INTO ItemBans (ItemName) VALUES (@itemname);";
com.AddParameter("@itemname", Tools.GetItemByName(itemname)[0].name);
com.ExecuteNonQuery();
+ if( !ItemIsBanned( itemname ) )
+ ItemBans.Add(itemname);
}
}
catch (Exception ex)
@@ -92,13 +100,16 @@ namespace TShockAPI.DB
public void RemoveBan(string itemname)
{
+ if (!ItemIsBanned(itemname))
+ return;
try
{
using (var com = database.CreateCommand())
{
- com.CommandText = "DELETE FROM ItemBans WHERE ItemName=@itemname;";
+ com.CommandText = "Delete FROM 'ItemBans' WHERE ItemName=@itemname;";
com.AddParameter("@itemname", Tools.GetItemByName(itemname)[0].name);
com.ExecuteNonQuery();
+ ItemBans.Remove(itemname);
}
}
catch (Exception ex)
diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs
index 9c3e96e8..75ee9f7e 100644
--- a/TShockAPI/DB/RegionManager.cs
+++ b/TShockAPI/DB/RegionManager.cs
@@ -201,7 +201,6 @@ namespace TShockAPI.DB
File.Delete(file2);
//File.Move(file, file2);
}
-
if (updates > 0)
ReloadAllRegions();
}
@@ -249,7 +248,7 @@ namespace TShockAPI.DB
int Protected = reader.Get("Protected");
string MergedIDs = DbExt.Get(reader, "UserIds");
string name = DbExt.Get(reader, "RegionName");
-
+ System.Console.WriteLine(MergedIDs);
string[] SplitIDs = MergedIDs.Split(',');
Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldID.ToString());
@@ -262,6 +261,7 @@ namespace TShockAPI.DB
{
break;
}
+ //System.Console.WriteLine(SplitIDs[i]);
r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]);
}
}
@@ -303,7 +303,7 @@ namespace TShockAPI.DB
com.AddParameter("@protected", 1);
if (com.ExecuteNonQuery() > 0)
{
- ReloadAllRegions();
+ Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, 0, worldid));
return true;
}
diff --git a/TShockAPI/Properties/AssemblyInfo.cs b/TShockAPI/Properties/AssemblyInfo.cs
index 44d2c898..2471e719 100644
--- a/TShockAPI/Properties/AssemblyInfo.cs
+++ b/TShockAPI/Properties/AssemblyInfo.cs
@@ -35,5 +35,6 @@ using System.Runtime.InteropServices;
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
+
[assembly: AssemblyVersion("3.1.3.0723")]
[assembly: AssemblyFileVersion("3.1.3.0723")]
diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj
index ba145806..ab773528 100644
--- a/TShockAPI/TShockAPI.csproj
+++ b/TShockAPI/TShockAPI.csproj
@@ -170,7 +170,7 @@
-
+
+
\ No newline at end of file