From ce73b0c0b5a84d7f128bff2cbd14f37f428b71bd Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Tue, 1 Oct 2013 04:20:52 -0400 Subject: [PATCH] Add canchat permission as well as godmode being a toggle command. --- TShockAPI/Commands.cs | 36 ++++++++++++++++++++++++++++++++++ TShockAPI/ConfigFile.cs | 1 + TShockAPI/GetDataHandlers.cs | 4 ++-- TShockAPI/Permissions.cs | 3 +++ TShockAPI/TSPlayer.cs | 5 +++++ TShockAPI/TShock.cs | 38 +++++++++++++++++++++++------------- 6 files changed, 71 insertions(+), 16 deletions(-) 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; + } } }