Added new commands to allow users in game to create, delete, modify groups.
Added new methods to create, delete, modify groups. Uhhh....dunno why RegionManager.cs was conflicted. Added permission for accessing group commands
This commit is contained in:
parent
e1cd87f487
commit
727ae2322b
4 changed files with 166 additions and 6 deletions
|
|
@ -137,6 +137,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"));
|
||||
|
|
@ -1183,6 +1186,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 <group name> [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 <group name>", 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 <group name> <permission to add or remove>", Color.Red);
|
||||
}
|
||||
|
||||
#endregion Group Management
|
||||
#region Server Config Commands
|
||||
|
||||
private static void SetSpawn(CommandArgs args)
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ namespace TShockAPI.DB
|
|||
else if (TShock.Config.StorageType.ToLower() == "mysql")
|
||||
com.CommandText = "INSERT IGNORE INTO GroupList SET GroupName=@groupname, Commands=@commands, OrderBy=@order;";
|
||||
com.AddParameter("@groupname", "admin");
|
||||
com.AddParameter("@commands", "newadmin,ban,unban,whitelist,causeevents,spawnboss,spawnmob,managewarp,time,tp,pvpfun,kill,logs,immunetokick,tphere");
|
||||
com.AddParameter("@commands", "newadmin,ban,unban,whitelist,causeevents,spawnboss,spawnmob,managewarp,time,tp,pvpfun,kill,logs,immunetokick,tphere, managegroup");
|
||||
com.AddParameter("@order", "0");
|
||||
com.ExecuteNonQuery();
|
||||
com.Parameters.Clear();
|
||||
|
|
@ -141,6 +141,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<String> permissions)
|
||||
{
|
||||
String message = "";
|
||||
if (!GroupExists(name))
|
||||
return "Error: Group doesn't exists.";
|
||||
using (var com = database.CreateCommand())
|
||||
{
|
||||
Group g = Tools.GetGroup(name);
|
||||
List<String> 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<String> permissions)
|
||||
{
|
||||
String message = "";
|
||||
if (!GroupExists(name))
|
||||
return "Error: Group doesn't exists.";
|
||||
using (var com = database.CreateCommand())
|
||||
{
|
||||
Group g = Tools.GetGroup(name);
|
||||
List<String> 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<Group>();
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ namespace TShockAPI.DB
|
|||
if (ipstr != "")
|
||||
ipstr += ",";
|
||||
ipstr += TShock.Users.GetUserID(ips[i]);
|
||||
} catch (Exception)
|
||||
} catch (Exception e)
|
||||
{
|
||||
Log.Error("An IP address failed to import. It wasn't a user in the new user system.");
|
||||
}
|
||||
|
|
@ -200,8 +200,7 @@ namespace TShockAPI.DB
|
|||
//File.Move(file, file2);
|
||||
}
|
||||
|
||||
if( updates > 0 )
|
||||
ReloadAllRegions();
|
||||
ReloadAllRegions();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -247,9 +246,9 @@ namespace TShockAPI.DB
|
|||
int Protected = reader.Get<int>("Protected");
|
||||
string MergedIDs = DbExt.Get<string>(reader, "UserIds");
|
||||
string name = DbExt.Get<string>(reader, "RegionName");
|
||||
|
||||
System.Console.WriteLine(MergedIDs);
|
||||
string[] SplitIDs = MergedIDs.Split(',');
|
||||
|
||||
System.Console.WriteLine(SplitIDs.Length);
|
||||
Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldName);
|
||||
r.RegionAllowedIDs = new int[SplitIDs.Length];
|
||||
try
|
||||
|
|
@ -260,6 +259,7 @@ namespace TShockAPI.DB
|
|||
{
|
||||
break;
|
||||
}
|
||||
//System.Console.WriteLine(SplitIDs[i]);
|
||||
r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]);
|
||||
}
|
||||
} catch (Exception e)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#tp - allow player to teleport
|
||||
#tphere - allow a player to teleport players to their position
|
||||
#managewarp - allow player to add/delete warp locations
|
||||
#managegroup - allow player to add/delete/modify groups
|
||||
#editspawn - allow player to enable/disable build protection
|
||||
#cfg - allow player to view/change tshock configuration
|
||||
#time - allow player to change time
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue