diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs
index a9d33958..e5bf39d6 100755
--- a/TShockAPI/Commands.cs
+++ b/TShockAPI/Commands.cs
@@ -231,6 +231,7 @@ namespace TShockAPI
add(Permissions.whisper, Reply, "reply", "r");
add(Permissions.annoy, Annoy, "annoy");
add(Permissions.kill, Kill, "kill");
+ add(Permissions.godmode, ToggleGodMode, "godmode");
add(Permissions.butcher, Butcher, "butcher");
add(Permissions.item, Give, "give", "g");
add(Permissions.clearitems, ClearItems, "clear", "clearitems");
@@ -3922,6 +3923,41 @@ namespace TShockAPI
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;
+ }
+
#endregion Cheat Comamnds
}
}
diff --git a/TShockAPI/ConfigFile.cs b/TShockAPI/ConfigFile.cs
index c032da71..0474ef60 100644
--- a/TShockAPI/ConfigFile.cs
+++ b/TShockAPI/ConfigFile.cs
@@ -270,6 +270,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 bool LogRest = false;
+
///
/// Reads a configuration file from a given path
///
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index e352e15f..c54236af 100755
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -1322,7 +1322,7 @@ namespace TShockAPI
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);
}
@@ -2937,7 +2937,7 @@ namespace TShockAPI
return true;
}
- if (args.Player.Group.HasPermission(Permissions.godmode))
+ if (args.Player.GodMode)
{
args.Player.Heal(args.TPlayer.statLifeMax);
}
diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs
index 0f55cd5d..8d55a56e 100644
--- a/TShockAPI/Permissions.cs
+++ b/TShockAPI/Permissions.cs
@@ -286,6 +286,9 @@ namespace TShockAPI
[Description("Player recovers health as damage is taken. Can be one shotted.")]
public static readonly string godmode = "tshock.godmode";
+ [Description("Player can chat")]
+ public static readonly string canchat = "tshock.canchat";
+
///
/// Lists all commands associated with a given permission
///
diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs
index 1f695a20..267ca7dd 100644
--- a/TShockAPI/TSPlayer.cs
+++ b/TShockAPI/TSPlayer.cs
@@ -282,6 +282,11 @@ namespace TShockAPI
///
public bool LoginHarassed = false;
+ ///
+ /// Player cant die, unless onehit
+ ///
+ public bool GodMode = false;
+
///
/// Whether the player is a real, human, player on the server.
///
diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index 290c1a27..f67e2df2 100755
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -914,21 +914,31 @@ namespace TShockAPI
Log.Error(ex.ToString());
}
}
- else if (!tsplr.mute && !TShock.Config.EnableChatAboveHeads)
+ else
{
- Utils.Broadcast(
- 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 if (!tsplr.mute && TShock.Config.EnableChatAboveHeads)
- {
- 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;
- }
- else if (tsplr.mute)
- {
- tsplr.SendErrorMessage("You are muted!");
- args.Handled = true;
+ if (!tsplr.Group.HasPermission(Permissions.canchat))
+ {
+ args.Handled = true;
+ }
+ else if (tsplr.mute)
+ {
+ tsplr.SendErrorMessage("You are muted!");
+ args.Handled = true;
+ }
+ else if (!TShock.Config.EnableChatAboveHeads)
+ {
+ Utils.Broadcast(
+ 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;
+ }
}
}