Added way to have an overridable group that is session based.
New command /sudo <player> <group> will override the player's group with the group specified.
This commit is contained in:
parent
9960526384
commit
0aedf2b108
4 changed files with 60 additions and 5 deletions
|
|
@ -226,6 +226,7 @@ namespace TShockAPI
|
||||||
add(Permissions.savessi, SaveSSI, "savessi");
|
add(Permissions.savessi, SaveSSI, "savessi");
|
||||||
add(Permissions.savessi, OverrideSSI, "overridessi", "ossi");
|
add(Permissions.savessi, OverrideSSI, "overridessi", "ossi");
|
||||||
add(Permissions.xmas, ForceXmas, "forcexmas");
|
add(Permissions.xmas, ForceXmas, "forcexmas");
|
||||||
|
add(Permissions.sudo, Sudo, "sudo");
|
||||||
//add(null, TestCallbackCommand, "test");
|
//add(null, TestCallbackCommand, "test");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -433,6 +434,7 @@ namespace TShockAPI
|
||||||
args.Player.IgnoreActionsForDisabledArmor = "none";
|
args.Player.IgnoreActionsForDisabledArmor = "none";
|
||||||
|
|
||||||
args.Player.Group = group;
|
args.Player.Group = group;
|
||||||
|
args.Player.tempGroup = null;
|
||||||
args.Player.UserAccountName = user.Name;
|
args.Player.UserAccountName = user.Name;
|
||||||
args.Player.UserID = TShock.Users.GetUserID(args.Player.UserAccountName);
|
args.Player.UserID = TShock.Users.GetUserID(args.Player.UserAccountName);
|
||||||
args.Player.IsLoggedIn = true;
|
args.Player.IsLoggedIn = true;
|
||||||
|
|
@ -1198,6 +1200,42 @@ namespace TShockAPI
|
||||||
(TShock.Config.ForceXmas ? "in" : "not in")));
|
(TShock.Config.ForceXmas ? "in" : "not in")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Sudo(CommandArgs args)
|
||||||
|
{
|
||||||
|
if (args.Parameters.Count < 2)
|
||||||
|
{
|
||||||
|
args.Player.SendInfoMessage("Invalid usage");
|
||||||
|
args.Player.SendInfoMessage("Usage: /sudo <username> <new group>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<TSPlayer> ply = TShock.Utils.FindPlayer(args.Parameters[0]);
|
||||||
|
if(ply.Count < 1)
|
||||||
|
{
|
||||||
|
args.Player.SendErrorMessage(string.Format("Could not find player {0}.", args.Parameters[0]));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ply.Count > 1)
|
||||||
|
{
|
||||||
|
args.Player.SendErrorMessage(string.Format("Found more than one match for {0}.", args.Parameters[0]));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!TShock.Groups.GroupExists(args.Parameters[1]))
|
||||||
|
{
|
||||||
|
args.Player.SendErrorMessage(string.Format("Could not find group {0}", args.Parameters[1]));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Group g = TShock.Utils.GetGroup(args.Parameters[1]);
|
||||||
|
|
||||||
|
ply[0].tempGroup = g;
|
||||||
|
|
||||||
|
args.Player.SendSuccessMessage(string.Format("You have changed {0}'s group to {1}", ply[0].Name, g.Name));
|
||||||
|
ply[0].SendSuccessMessage(string.Format("Your group has temporarily been changed to {0}", g.Name));
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Player Management Commands
|
#endregion Player Management Commands
|
||||||
|
|
||||||
#region Server Maintenence Commands
|
#region Server Maintenence Commands
|
||||||
|
|
|
||||||
|
|
@ -1372,6 +1372,7 @@ namespace TShockAPI
|
||||||
args.Player.IgnoreActionsForDisabledArmor = "none";
|
args.Player.IgnoreActionsForDisabledArmor = "none";
|
||||||
|
|
||||||
args.Player.Group = group;
|
args.Player.Group = group;
|
||||||
|
args.Player.tempGroup = null;
|
||||||
args.Player.UserAccountName = args.Player.Name;
|
args.Player.UserAccountName = args.Player.Name;
|
||||||
args.Player.UserID = TShock.Users.GetUserID(args.Player.UserAccountName);
|
args.Player.UserID = TShock.Users.GetUserID(args.Player.UserAccountName);
|
||||||
args.Player.IsLoggedIn = true;
|
args.Player.IsLoggedIn = true;
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ namespace TShockAPI
|
||||||
|
|
||||||
[Description("User can use /spawn.")] public static readonly string spawn;
|
[Description("User can use /spawn.")] public static readonly string spawn;
|
||||||
|
|
||||||
|
[Description("User can elevate other users' groups temporarily.")] public static readonly string sudo;
|
||||||
static Permissions()
|
static Permissions()
|
||||||
{
|
{
|
||||||
foreach (var field in typeof (Permissions).GetFields())
|
foreach (var field in typeof (Permissions).GetFields())
|
||||||
|
|
|
||||||
|
|
@ -71,10 +71,26 @@ namespace TShockAPI
|
||||||
|
|
||||||
public int FirstMaxMP { get; set; }
|
public int FirstMaxMP { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The player's group.
|
/// The player's group.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Group Group { get; set; }
|
public Group Group
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (tempGroup != null)
|
||||||
|
return tempGroup;
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
set { group = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The player's temporary group. This overrides the user's actual group.
|
||||||
|
/// </summary>
|
||||||
|
public Group tempGroup = null;
|
||||||
|
|
||||||
|
private Group group = null;
|
||||||
|
|
||||||
public bool ReceivedInfo { get; set; }
|
public bool ReceivedInfo { get; set; }
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue