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:
Zack Piispanen 2012-12-15 18:59:25 -05:00
parent 9960526384
commit 0aedf2b108
4 changed files with 60 additions and 5 deletions

View file

@ -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

View file

@ -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;

View file

@ -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())

View file

@ -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; }