Fix Added text to godmode

Fixed negated permissions
This commit is contained in:
Zack Piispanen 2013-10-01 04:56:18 -04:00
parent 98a282cd2a
commit 6fd6bc9b9c
3 changed files with 32 additions and 13 deletions

View file

@ -3964,6 +3964,16 @@ namespace TShockAPI
} }
playerToGod.GodMode = !playerToGod.GodMode; 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

View file

@ -2959,6 +2959,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));
@ -2995,11 +3000,6 @@ namespace TShockAPI
return true; return true;
} }
if (args.Player.GodMode)
{
args.Player.Heal(args.TPlayer.statLifeMax);
}
return false; return false;
} }

View file

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