Merge branch 'general-devel' of github.com:NyxStudios/TShock into general-devel
This commit is contained in:
commit
262e6d8349
8 changed files with 102 additions and 28 deletions
|
|
@ -231,6 +231,7 @@ namespace TShockAPI
|
||||||
add(Permissions.whisper, Reply, "reply", "r");
|
add(Permissions.whisper, Reply, "reply", "r");
|
||||||
add(Permissions.annoy, Annoy, "annoy");
|
add(Permissions.annoy, Annoy, "annoy");
|
||||||
add(Permissions.kill, Kill, "kill");
|
add(Permissions.kill, Kill, "kill");
|
||||||
|
add(Permissions.godmode, ToggleGodMode, "godmode");
|
||||||
add(Permissions.butcher, Butcher, "butcher");
|
add(Permissions.butcher, Butcher, "butcher");
|
||||||
add(Permissions.item, Give, "give", "g");
|
add(Permissions.item, Give, "give", "g");
|
||||||
add(Permissions.clearitems, ClearItems, "clear", "clearitems");
|
add(Permissions.clearitems, ClearItems, "clear", "clearitems");
|
||||||
|
|
@ -3924,6 +3925,51 @@ namespace TShockAPI
|
||||||
args.Player.SendSuccessMessage("Tried to grow a " + name + ".");
|
args.Player.SendSuccessMessage("Tried to grow a " + name + ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void ToggleGodMode(CommandArgs args)
|
||||||
|
{
|
||||||
|
TSPlayer playerToGod;
|
||||||
|
if (args.Parameters.Count > 0)
|
||||||
|
{
|
||||||
|
string plStr = String.Join(" ", args.Parameters);
|
||||||
|
var players = TShock.Utils.FindPlayer(plStr);
|
||||||
|
if (players.Count == 0)
|
||||||
|
{
|
||||||
|
args.Player.SendErrorMessage("Invalid player!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (players.Count > 1)
|
||||||
|
{
|
||||||
|
TShock.Utils.SendMultipleMatchError(args.Player, players.Select(p => p.Name));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
playerToGod = players[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!args.Player.RealPlayer)
|
||||||
|
{
|
||||||
|
args.Player.SendErrorMessage("You cant god mode a non player!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
playerToGod = args.Player;
|
||||||
|
}
|
||||||
|
|
||||||
|
playerToGod.GodMode = !playerToGod.GodMode;
|
||||||
|
|
||||||
|
if (playerToGod == args.Player)
|
||||||
|
{
|
||||||
|
args.Player.SendSuccessMessage(string.Format("You are {0} in god mode.", args.Player.GodMode ? "now" : "no longer"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
args.Player.SendSuccessMessage(string.Format("{0} is {1} in god mode.", playerToGod.Name, playerToGod.GodMode ? "now" : "no longer"));
|
||||||
|
playerToGod.SendSuccessMessage(string.Format("You are {0} in god mode.", playerToGod.GodMode ? "now" : "no longer"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Cheat Comamnds
|
#endregion Cheat Comamnds
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -276,6 +276,7 @@ namespace TShockAPI
|
||||||
[Description("The number of reserved slots past your max server slot that can be joined by reserved players")] public int ReservedSlots = 20;
|
[Description("The number of reserved slots past your max server slot that can be joined by reserved players")] public int ReservedSlots = 20;
|
||||||
|
|
||||||
[Description("The number of reserved slots past your max server slot that can be joined by reserved players")] public bool LogRest = false;
|
[Description("The number of reserved slots past your max server slot that can be joined by reserved players")] public bool LogRest = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reads a configuration file from a given path
|
/// Reads a configuration file from a given path
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -1322,7 +1322,7 @@ namespace TShockAPI
|
||||||
args.Player.PlayerData.maxHealth = max;
|
args.Player.PlayerData.maxHealth = max;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.Player.Group.HasPermission(Permissions.godmode) && (cur < max))
|
if (args.Player.GodMode && (cur < max))
|
||||||
{
|
{
|
||||||
args.Player.Heal(args.TPlayer.statLifeMax);
|
args.Player.Heal(args.TPlayer.statLifeMax);
|
||||||
}
|
}
|
||||||
|
|
@ -2947,6 +2947,11 @@ namespace TShockAPI
|
||||||
if (TShock.Players[id] == null)
|
if (TShock.Players[id] == null)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (TShock.Players[id].GodMode)
|
||||||
|
{
|
||||||
|
TShock.Players[id].Heal(args.TPlayer.statLifeMax);
|
||||||
|
}
|
||||||
|
|
||||||
if (dmg > TShock.Config.MaxDamage && !args.Player.Group.HasPermission(Permissions.ignoredamagecap) && id != args.Player.Index)
|
if (dmg > TShock.Config.MaxDamage && !args.Player.Group.HasPermission(Permissions.ignoredamagecap) && id != args.Player.Index)
|
||||||
{
|
{
|
||||||
args.Player.Disable(String.Format("Player damage exceeded {0}.", TShock.Config.MaxDamage));
|
args.Player.Disable(String.Format("Player damage exceeded {0}.", TShock.Config.MaxDamage));
|
||||||
|
|
@ -2983,11 +2988,6 @@ namespace TShockAPI
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.Player.Group.HasPermission(Permissions.godmode))
|
|
||||||
{
|
|
||||||
args.Player.Heal(args.TPlayer.statLifeMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -175,24 +175,30 @@ namespace TShockAPI
|
||||||
/// <param name="permission">The permission to check.</param>
|
/// <param name="permission">The permission to check.</param>
|
||||||
/// <returns>Returns true if the user has that permission.</returns>
|
/// <returns>Returns true if the user has that permission.</returns>
|
||||||
public virtual bool HasPermission(string permission)
|
public virtual bool HasPermission(string permission)
|
||||||
{
|
{
|
||||||
if (String.IsNullOrEmpty(permission) || RealHasPermission(permission))
|
bool negated = false;
|
||||||
|
if (String.IsNullOrEmpty(permission) || (RealHasPermission(permission, ref negated) && !negated))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (negated)
|
||||||
|
return false;
|
||||||
|
|
||||||
string[] nodes = permission.Split('.');
|
string[] nodes = permission.Split('.');
|
||||||
for (int i = nodes.Length - 1; i >= 0; i--)
|
for (int i = nodes.Length - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
nodes[i] = "*";
|
nodes[i] = "*";
|
||||||
if (RealHasPermission(String.Join(".", nodes, 0, i + 1)))
|
if (RealHasPermission(String.Join(".", nodes, 0, i + 1), ref negated))
|
||||||
{
|
{
|
||||||
return true;
|
return !negated;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
private bool RealHasPermission(string permission)
|
private bool RealHasPermission(string permission, ref bool negated)
|
||||||
{
|
{
|
||||||
|
negated = false;
|
||||||
if (string.IsNullOrEmpty(permission))
|
if (string.IsNullOrEmpty(permission))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
@ -200,9 +206,12 @@ namespace TShockAPI
|
||||||
var traversed = new List<Group>();
|
var traversed = new List<Group>();
|
||||||
while (cur != null)
|
while (cur != null)
|
||||||
{
|
{
|
||||||
if (cur.negatedpermissions.Contains(permission))
|
if (cur.negatedpermissions.Contains(permission))
|
||||||
return false;
|
{
|
||||||
if (cur.permissions.Contains(permission))
|
negated = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (cur.permissions.Contains(permission))
|
||||||
return true;
|
return true;
|
||||||
if (traversed.Contains(cur))
|
if (traversed.Contains(cur))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -286,6 +286,9 @@ namespace TShockAPI
|
||||||
[Description("Player recovers health as damage is taken. Can be one shotted.")]
|
[Description("Player recovers health as damage is taken. Can be one shotted.")]
|
||||||
public static readonly string godmode = "tshock.godmode";
|
public static readonly string godmode = "tshock.godmode";
|
||||||
|
|
||||||
|
[Description("Player can chat")]
|
||||||
|
public static readonly string canchat = "tshock.canchat";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Lists all commands associated with a given permission
|
/// Lists all commands associated with a given permission
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -282,6 +282,11 @@ namespace TShockAPI
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool LoginHarassed = false;
|
public bool LoginHarassed = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Player cant die, unless onehit
|
||||||
|
/// </summary>
|
||||||
|
public bool GodMode = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whether the player is a real, human, player on the server.
|
/// Whether the player is a real, human, player on the server.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -921,21 +921,31 @@ namespace TShockAPI
|
||||||
Log.Error(ex.ToString());
|
Log.Error(ex.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!tsplr.mute && !TShock.Config.EnableChatAboveHeads)
|
else
|
||||||
{
|
{
|
||||||
Utils.Broadcast(
|
if (!tsplr.Group.HasPermission(Permissions.canchat))
|
||||||
String.Format(Config.ChatFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix, args.Text),
|
{
|
||||||
tsplr.Group.R, tsplr.Group.G, tsplr.Group.B);
|
args.Handled = true;
|
||||||
args.Handled = true;
|
}
|
||||||
} else if (!tsplr.mute && TShock.Config.EnableChatAboveHeads)
|
else if (tsplr.mute)
|
||||||
{
|
{
|
||||||
Utils.Broadcast(args.Who, String.Format(Config.ChatAboveHeadsFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix, args.Text), tsplr.Group.R, tsplr.Group.G, tsplr.Group.B);
|
tsplr.SendErrorMessage("You are muted!");
|
||||||
args.Handled = true;
|
args.Handled = true;
|
||||||
}
|
}
|
||||||
else if (tsplr.mute)
|
else if (!TShock.Config.EnableChatAboveHeads)
|
||||||
{
|
{
|
||||||
tsplr.SendErrorMessage("You are muted!");
|
Utils.Broadcast(
|
||||||
args.Handled = true;
|
String.Format(Config.ChatFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix, args.Text),
|
||||||
|
tsplr.Group.R, tsplr.Group.G, tsplr.Group.B);
|
||||||
|
args.Handled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Utils.Broadcast(args.Who,
|
||||||
|
String.Format(Config.ChatAboveHeadsFormat, tsplr.Group.Name, tsplr.Group.Prefix, tsplr.Name, tsplr.Group.Suffix,
|
||||||
|
args.Text), tsplr.Group.R, tsplr.Group.G, tsplr.Group.B);
|
||||||
|
args.Handled = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue