diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs
index e134c472..91a8a6ff 100755
--- a/TShockAPI/Commands.cs
+++ b/TShockAPI/Commands.cs
@@ -3964,6 +3964,16 @@ namespace TShockAPI
}
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
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index 77694a23..312c2e1c 100755
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -2959,6 +2959,11 @@ namespace TShockAPI
if (TShock.Players[id] == null)
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)
{
args.Player.Disable(String.Format("Player damage exceeded {0}.", TShock.Config.MaxDamage));
@@ -2995,11 +3000,6 @@ namespace TShockAPI
return true;
}
- if (args.Player.GodMode)
- {
- args.Player.Heal(args.TPlayer.statLifeMax);
- }
-
return false;
}
diff --git a/TShockAPI/Group.cs b/TShockAPI/Group.cs
index 08a2aa9b..7aa25b6f 100644
--- a/TShockAPI/Group.cs
+++ b/TShockAPI/Group.cs
@@ -175,24 +175,30 @@ namespace TShockAPI
/// The permission to check.
/// Returns true if the user has that 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;
}
+
+ if (negated)
+ return false;
+
string[] nodes = permission.Split('.');
for (int i = nodes.Length - 1; i >= 0; 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;
}
- private bool RealHasPermission(string permission)
+ private bool RealHasPermission(string permission, ref bool negated)
{
+ negated = false;
if (string.IsNullOrEmpty(permission))
return true;
@@ -200,9 +206,12 @@ namespace TShockAPI
var traversed = new List();
while (cur != null)
{
- if (cur.negatedpermissions.Contains(permission))
- return false;
- if (cur.permissions.Contains(permission))
+ if (cur.negatedpermissions.Contains(permission))
+ {
+ negated = true;
+ return false;
+ }
+ if (cur.permissions.Contains(permission))
return true;
if (traversed.Contains(cur))
{