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, OverrideSSI, "overridessi", "ossi");
|
||||
add(Permissions.xmas, ForceXmas, "forcexmas");
|
||||
add(Permissions.sudo, Sudo, "sudo");
|
||||
//add(null, TestCallbackCommand, "test");
|
||||
}
|
||||
|
||||
|
|
@ -433,6 +434,7 @@ namespace TShockAPI
|
|||
args.Player.IgnoreActionsForDisabledArmor = "none";
|
||||
|
||||
args.Player.Group = group;
|
||||
args.Player.tempGroup = null;
|
||||
args.Player.UserAccountName = user.Name;
|
||||
args.Player.UserID = TShock.Users.GetUserID(args.Player.UserAccountName);
|
||||
args.Player.IsLoggedIn = true;
|
||||
|
|
@ -1198,6 +1200,42 @@ namespace TShockAPI
|
|||
(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
|
||||
|
||||
#region Server Maintenence Commands
|
||||
|
|
|
|||
|
|
@ -1372,6 +1372,7 @@ namespace TShockAPI
|
|||
args.Player.IgnoreActionsForDisabledArmor = "none";
|
||||
|
||||
args.Player.Group = group;
|
||||
args.Player.tempGroup = null;
|
||||
args.Player.UserAccountName = args.Player.Name;
|
||||
args.Player.UserID = TShock.Users.GetUserID(args.Player.UserAccountName);
|
||||
args.Player.IsLoggedIn = true;
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ namespace TShockAPI
|
|||
|
||||
[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()
|
||||
{
|
||||
foreach (var field in typeof (Permissions).GetFields())
|
||||
|
|
|
|||
|
|
@ -71,10 +71,26 @@ namespace TShockAPI
|
|||
|
||||
public int FirstMaxMP { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The player's group.
|
||||
/// </summary>
|
||||
public Group Group { get; set; }
|
||||
/// <summary>
|
||||
/// The player's group.
|
||||
/// </summary>
|
||||
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; }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue