Merge pull request #322 from natrim/general-devel

Item bans additions
This commit is contained in:
Lucas Nicodemus 2012-01-10 20:28:07 -08:00
commit 5c5444dc83
2 changed files with 147 additions and 21 deletions

View file

@ -160,8 +160,11 @@ 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, 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");
@ -1737,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)
@ -1764,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)
@ -1797,10 +1800,113 @@ 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);
}
}
private static void ListItems(CommandArgs args)
{
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

View file

@ -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;
}
@ -209,5 +224,10 @@ namespace TShockAPI.DB
{
return AllowedGroups.Remove(groupName);
}
public override string ToString()
{
return Name + " (" + String.Join(",", AllowedGroups) + ")";
}
}
}