From 6fd6bc9b9c8e50dc4d8335d0a4ac00709b773220 Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Tue, 1 Oct 2013 04:56:18 -0400 Subject: [PATCH] Fix Added text to godmode Fixed negated permissions --- TShockAPI/Commands.cs | 10 ++++++++++ TShockAPI/GetDataHandlers.cs | 10 +++++----- TShockAPI/Group.cs | 25 +++++++++++++++++-------- 3 files changed, 32 insertions(+), 13 deletions(-) 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)) {