From b4d6908f98f0f09a0608db255429b3b5d855e415 Mon Sep 17 00:00:00 2001 From: Natrim Date: Tue, 10 Jan 2012 10:29:53 +0100 Subject: [PATCH 1/3] add list items command to display banned items --- TShockAPI/Commands.cs | 6 ++++++ TShockAPI/DB/ItemManager.cs | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 45c95d6b..0232153d 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -162,6 +162,7 @@ namespace TShockAPI add(Permissions.managegroup, ModifyGroup, "modgroup"); add(Permissions.manageitem, AddItem, "additem"); add(Permissions.manageitem, DeleteItem, "delitem"); + add(Permissions.manageitem, ListItems, "listitems"); add(Permissions.cfg, SetSpawn, "setspawn"); add(Permissions.cfg, Reload, "reload"); add(Permissions.cfg, ServerPassword, "serverpassword"); @@ -1800,6 +1801,11 @@ namespace TShockAPI args.Player.SendMessage("Invalid use: /delItem \"item name\" or /delItem ##", Color.Red); } } + + private static void ListItems(CommandArgs args) + { + args.Player.SendMessage("The banned items are: " + String.Join(",", TShock.Itembans.ItemBans), Color.Yellow); + } #endregion Item Management diff --git a/TShockAPI/DB/ItemManager.cs b/TShockAPI/DB/ItemManager.cs index 1b84e1b7..bc75881e 100644 --- a/TShockAPI/DB/ItemManager.cs +++ b/TShockAPI/DB/ItemManager.cs @@ -209,5 +209,10 @@ namespace TShockAPI.DB { return AllowedGroups.Remove(groupName); } + + public override string ToString() + { + return Name; + } } } \ No newline at end of file From 50eeae2a86ba00977ad3d5dc5dfb59c8c4dbdf13 Mon Sep 17 00:00:00 2001 From: Natrim Date: Tue, 10 Jan 2012 10:35:00 +0100 Subject: [PATCH 2/3] aliases for item banning --- TShockAPI/Commands.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 0232153d..3d9b73df 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -160,9 +160,9 @@ namespace TShockAPI add(Permissions.managegroup, AddGroup, "addgroup"); add(Permissions.managegroup, DeleteGroup, "delgroup"); add(Permissions.managegroup, ModifyGroup, "modgroup"); - add(Permissions.manageitem, AddItem, "additem"); - add(Permissions.manageitem, DeleteItem, "delitem"); - add(Permissions.manageitem, ListItems, "listitems"); + add(Permissions.manageitem, AddItem, "additem", "banitem"); + add(Permissions.manageitem, DeleteItem, "delitem", "unbanitem"); + add(Permissions.manageitem, ListItems, "listitems", "listbanneditems"); add(Permissions.cfg, SetSpawn, "setspawn"); add(Permissions.cfg, Reload, "reload"); add(Permissions.cfg, ServerPassword, "serverpassword"); From 2e7fa14a91e187ab03881a1baa9661ae1c853cc2 Mon Sep 17 00:00:00 2001 From: Natrim Date: Tue, 10 Jan 2012 11:09:04 +0100 Subject: [PATCH 3/3] add commands for allowed groups for banned items --- TShockAPI/Commands.cs | 108 ++++++++++++++++++++++++++++++++++-- TShockAPI/DB/ItemManager.cs | 47 ++++++++++------ 2 files changed, 135 insertions(+), 20 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 3d9b73df..4f5e36fc 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -163,6 +163,8 @@ namespace TShockAPI add(Permissions.manageitem, AddItem, "additem", "banitem"); add(Permissions.manageitem, DeleteItem, "delitem", "unbanitem"); add(Permissions.manageitem, ListItems, "listitems", "listbanneditems"); + add(Permissions.manageitem, AddItemGroup, "additemgroup"); + add(Permissions.manageitem, DeleteItemGroup, "delitemgroup"); add(Permissions.cfg, SetSpawn, "setspawn"); add(Permissions.cfg, Reload, "reload"); add(Permissions.cfg, ServerPassword, "serverpassword"); @@ -1738,7 +1740,7 @@ namespace TShockAPI private static void AddItem(CommandArgs args) { - if (args.Parameters.Count > 0) + if (args.Parameters.Count == 1) { var items = TShock.Utils.GetItemByIdOrName(args.Parameters[0]); if (items.Count == 0) @@ -1765,13 +1767,13 @@ namespace TShockAPI } else { - args.Player.SendMessage("Invalid use: /addItem \"item name\" or /addItem ##", Color.Red); + args.Player.SendMessage("Invalid use: /additem \"item name\" or /additem ##", Color.Red); } } private static void DeleteItem(CommandArgs args) { - if (args.Parameters.Count > 0) + if (args.Parameters.Count == 1) { var items = TShock.Utils.GetItemByIdOrName(args.Parameters[0]); if (items.Count == 0) @@ -1798,7 +1800,7 @@ namespace TShockAPI } else { - args.Player.SendMessage("Invalid use: /delItem \"item name\" or /delItem ##", Color.Red); + args.Player.SendMessage("Invalid use: /delitem \"item name\" or /delitem ##", Color.Red); } } @@ -1806,7 +1808,105 @@ namespace TShockAPI { args.Player.SendMessage("The banned items are: " + String.Join(",", TShock.Itembans.ItemBans), Color.Yellow); } + + private static void AddItemGroup(CommandArgs args) + { + if (args.Parameters.Count == 2) + { + var items = TShock.Utils.GetItemByIdOrName(args.Parameters[0]); + if (items.Count == 0) + { + args.Player.SendMessage("Invalid item type!", Color.Red); + } + else if (items.Count > 1) + { + args.Player.SendMessage(string.Format("More than one ({0}) item matched!", items.Count), Color.Red); + } + else + { + var item = items[0]; + if (item.type >= 1) + { + if(TShock.Groups.GroupExists(args.Parameters[1])) + { + ItemBan ban = TShock.Itembans.GetItemBanByName(item.name); + + if(!ban.AllowedGroups.Contains(args.Parameters[1])) + { + TShock.Itembans.AllowGroup(item.name, args.Parameters[1]); + args.Player.SendMessage("Banned item " + item.name + " has been allowed for group " + args.Parameters[1] + ".", Color.Green); + } + else + { + args.Player.SendMessage("Banned item " + item.name + " is already allowed for group " + args.Parameters[1] + "!", Color.OrangeRed); + } + } + else + { + args.Player.SendMessage("Group " + args.Parameters[1] + " not found!", Color.Red); + } + } + else + { + args.Player.SendMessage("Invalid item type!", Color.Red); + } + } + } + else + { + args.Player.SendMessage("Invalid use: /additemgroup \"item name\" \"group name\"", Color.Red); + } + } + private static void DeleteItemGroup(CommandArgs args) + { + if (args.Parameters.Count == 2) + { + var items = TShock.Utils.GetItemByIdOrName(args.Parameters[0]); + if (items.Count == 0) + { + args.Player.SendMessage("Invalid item type!", Color.Red); + } + else if (items.Count > 1) + { + args.Player.SendMessage(string.Format("More than one ({0}) item matched!", items.Count), Color.Red); + } + else + { + var item = items[0]; + if (item.type >= 1) + { + if(TShock.Groups.GroupExists(args.Parameters[1])) + { + ItemBan ban = TShock.Itembans.GetItemBanByName(item.name); + + if(ban.AllowedGroups.Contains(args.Parameters[1])) + { + TShock.Itembans.RemoveGroup(item.name, args.Parameters[1]); + args.Player.SendMessage("Removed access for group " + args.Parameters[1] + " to banned item " + item.name + ".", Color.Green); + } + else + { + args.Player.SendMessage("Group " + args.Parameters[1] + " has not access to banned item " + item.name + "!", Color.Red); + } + } + else + { + args.Player.SendMessage("Group " + args.Parameters[1] + " not found!", Color.Red); + } + } + else + { + args.Player.SendMessage("Invalid item type!", Color.Red); + } + } + } + else + { + args.Player.SendMessage("Invalid use: /delitemgroup \"item name\" \"group name\"", Color.Red); + } + } + #endregion Item Management #region Server Config Commands diff --git a/TShockAPI/DB/ItemManager.cs b/TShockAPI/DB/ItemManager.cs index bc75881e..e0819cf2 100644 --- a/TShockAPI/DB/ItemManager.cs +++ b/TShockAPI/DB/ItemManager.cs @@ -115,16 +115,23 @@ namespace TShockAPI.DB ItemBan b = GetItemBanByName(item); if (b != null) { - groupsNew = String.Join(",", b.AllowedGroups); - if (groupsNew.Length > 0) - groupsNew += ","; - groupsNew += name; - b.SetAllowedGroups(groupsNew); + try + { + groupsNew = String.Join(",", b.AllowedGroups); + if (groupsNew.Length > 0) + groupsNew += ","; + groupsNew += name; + b.SetAllowedGroups(groupsNew); - int q = database.Query("UPDATE ItemBans SET AllowedGroups=@0 WHERE ItemName=@1", groupsNew, - item); - - return q > 0; + int q = database.Query("UPDATE ItemBans SET AllowedGroups=@0 WHERE ItemName=@1", groupsNew, + item); + + return q > 0; + } + catch (Exception ex) + { + Log.Error(ex.ToString()); + } } return false; @@ -135,12 +142,20 @@ namespace TShockAPI.DB ItemBan b = GetItemBanByName(item); if (b != null) { - b.RemoveGroup(group); - string groups = string.Join(",", b.AllowedGroups); - int q = database.Query("UPDATE ItemBans SET AllowedGroups=@0 WHERE ItemName=@1", groups, - item); - if (q > 0) - return true; + try + { + b.RemoveGroup(group); + string groups = string.Join(",", b.AllowedGroups); + int q = database.Query("UPDATE ItemBans SET AllowedGroups=@0 WHERE ItemName=@1", groups, + item); + + if (q > 0) + return true; + } + catch (Exception ex) + { + Log.Error(ex.ToString()); + } } return false; } @@ -212,7 +227,7 @@ namespace TShockAPI.DB public override string ToString() { - return Name; + return Name + " (" + String.Join(",", AllowedGroups) + ")"; } } } \ No newline at end of file