add commands for allowed groups for banned items

This commit is contained in:
Natrim 2012-01-10 11:09:04 +01:00
parent 50eeae2a86
commit 2e7fa14a91
2 changed files with 135 additions and 20 deletions

View file

@ -163,6 +163,8 @@ namespace TShockAPI
add(Permissions.manageitem, AddItem, "additem", "banitem"); add(Permissions.manageitem, AddItem, "additem", "banitem");
add(Permissions.manageitem, DeleteItem, "delitem", "unbanitem"); add(Permissions.manageitem, DeleteItem, "delitem", "unbanitem");
add(Permissions.manageitem, ListItems, "listitems", "listbanneditems"); add(Permissions.manageitem, ListItems, "listitems", "listbanneditems");
add(Permissions.manageitem, AddItemGroup, "additemgroup");
add(Permissions.manageitem, DeleteItemGroup, "delitemgroup");
add(Permissions.cfg, SetSpawn, "setspawn"); add(Permissions.cfg, SetSpawn, "setspawn");
add(Permissions.cfg, Reload, "reload"); add(Permissions.cfg, Reload, "reload");
add(Permissions.cfg, ServerPassword, "serverpassword"); add(Permissions.cfg, ServerPassword, "serverpassword");
@ -1738,7 +1740,7 @@ namespace TShockAPI
private static void AddItem(CommandArgs args) private static void AddItem(CommandArgs args)
{ {
if (args.Parameters.Count > 0) if (args.Parameters.Count == 1)
{ {
var items = TShock.Utils.GetItemByIdOrName(args.Parameters[0]); var items = TShock.Utils.GetItemByIdOrName(args.Parameters[0]);
if (items.Count == 0) if (items.Count == 0)
@ -1765,13 +1767,13 @@ namespace TShockAPI
} }
else 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) private static void DeleteItem(CommandArgs args)
{ {
if (args.Parameters.Count > 0) if (args.Parameters.Count == 1)
{ {
var items = TShock.Utils.GetItemByIdOrName(args.Parameters[0]); var items = TShock.Utils.GetItemByIdOrName(args.Parameters[0]);
if (items.Count == 0) if (items.Count == 0)
@ -1798,7 +1800,7 @@ namespace TShockAPI
} }
else 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);
} }
} }
@ -1807,6 +1809,104 @@ namespace TShockAPI
args.Player.SendMessage("The banned items are: " + String.Join(",", TShock.Itembans.ItemBans), Color.Yellow); 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 #endregion Item Management
#region Server Config Commands #region Server Config Commands

View file

@ -114,6 +114,8 @@ namespace TShockAPI.DB
string groupsNew = ""; string groupsNew = "";
ItemBan b = GetItemBanByName(item); ItemBan b = GetItemBanByName(item);
if (b != null) if (b != null)
{
try
{ {
groupsNew = String.Join(",", b.AllowedGroups); groupsNew = String.Join(",", b.AllowedGroups);
if (groupsNew.Length > 0) if (groupsNew.Length > 0)
@ -126,6 +128,11 @@ namespace TShockAPI.DB
return q > 0; return q > 0;
} }
catch (Exception ex)
{
Log.Error(ex.ToString());
}
}
return false; return false;
} }
@ -134,14 +141,22 @@ namespace TShockAPI.DB
{ {
ItemBan b = GetItemBanByName(item); ItemBan b = GetItemBanByName(item);
if (b != null) if (b != null)
{
try
{ {
b.RemoveGroup(group); b.RemoveGroup(group);
string groups = string.Join(",", b.AllowedGroups); string groups = string.Join(",", b.AllowedGroups);
int q = database.Query("UPDATE ItemBans SET AllowedGroups=@0 WHERE ItemName=@1", groups, int q = database.Query("UPDATE ItemBans SET AllowedGroups=@0 WHERE ItemName=@1", groups,
item); item);
if (q > 0) if (q > 0)
return true; return true;
} }
catch (Exception ex)
{
Log.Error(ex.ToString());
}
}
return false; return false;
} }
@ -212,7 +227,7 @@ namespace TShockAPI.DB
public override string ToString() public override string ToString()
{ {
return Name; return Name + " (" + String.Join(",", AllowedGroups) + ")";
} }
} }
} }