Add projectile bans and the commands needed to set them up.

This commit is contained in:
Zack Piispanen 2014-04-11 13:44:47 -04:00
parent 61d05ffdc6
commit 84d8049ac6
6 changed files with 456 additions and 4 deletions

View file

@ -235,6 +235,10 @@ namespace TShockAPI
{
HelpText = "Manages item bans."
});
add(new Command(Permissions.manageprojectile, ProjectileBan, "projban")
{
HelpText = "Manages item bans."
});
add(new Command(Permissions.manageregion, Region, "region")
{
HelpText = "Manages regions."
@ -2769,9 +2773,187 @@ namespace TShockAPI
}
#endregion Item Management
#region Server Config Commands
#region Projectile Management
private static void SetSpawn(CommandArgs args)
private static void ProjectileBan(CommandArgs args)
{
if (args.Parameters.Count == 0)
{
args.Player.SendInfoMessage("Invalid syntax! Proper syntax: /projban <command> [arguments]");
args.Player.SendInfoMessage("Commands: add, allow, del, disallow, list");
args.Player.SendInfoMessage("Arguments: add <proj id>, allow <proj id> <group name>");
args.Player.SendInfoMessage("Arguments: del <proj id>, disallow <proj id> <group name>, list [page]");
return;
}
switch (args.Parameters[0].ToLower())
{
case "add":
#region Add projectile
{
if (args.Parameters.Count != 2)
{
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /projban add <proj id>");
return;
}
short id;
if (Int16.TryParse(args.Parameters[1], out id))
{
TShock.ProjectileBans.AddNewBan(id);
args.Player.SendSuccessMessage("Banned Projectile: " + id + ".");
return;
}
else
{
args.Player.SendErrorMessage("Invalid syntax! Projectile Id must be a number.");
return;
}
}
#endregion
return;
case "allow":
#region Allow group to projectile
{
if (args.Parameters.Count != 3)
{
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /projban allow <id> <group name>");
return;
}
short id;
if (Int16.TryParse(args.Parameters[1], out id))
{
if (!TShock.Groups.GroupExists(args.Parameters[2]))
{
args.Player.SendErrorMessage("Invalid group.");
return;
}
ProjectileBan ban = TShock.ProjectileBans.GetBanById(id);
if (ban == null)
{
args.Player.SendErrorMessage("Projectile " + id + " is not banned.");
return;
}
if (!ban.AllowedGroups.Contains(args.Parameters[2]))
{
TShock.ProjectileBans.AllowGroup(id, args.Parameters[2]);
args.Player.SendSuccessMessage(String.Format("{0} has been allowed to use projectile {1}.", args.Parameters[2], id));
return;
}
else
{
args.Player.SendWarningMessage(String.Format("{0} is already allowed to use projectile {1}.", args.Parameters[2], id));
return;
}
}
else
{
args.Player.SendErrorMessage("Invalid syntax! Projectile Id must be a number.");
return;
}
}
#endregion
case "del":
#region Delete item
{
if (args.Parameters.Count != 2)
{
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /projban del <id>");
return;
}
short id;
if (Int16.TryParse(args.Parameters[1], out id))
{
TShock.ProjectileBans.RemoveBan(id);
args.Player.SendSuccessMessage("Unbanned Projectile: " + id + ".");
return;
}
else
{
args.Player.SendErrorMessage("Invalid syntax! Projectile Id must be a number.");
return;
}
}
#endregion
return;
case "disallow":
#region Allow group to item
{
if (args.Parameters.Count != 3)
{
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /projban disallow <id> <group name>");
return;
}
short id;
if (Int16.TryParse(args.Parameters[1], out id))
{
if (!TShock.Groups.GroupExists(args.Parameters[2]))
{
args.Player.SendErrorMessage("Invalid group.");
return;
}
ProjectileBan ban = TShock.ProjectileBans.GetBanById(id);
if (ban == null)
{
args.Player.SendErrorMessage("Projectile " + id + " is not banned.");
return;
}
if (ban.AllowedGroups.Contains(args.Parameters[2]))
{
TShock.ProjectileBans.RemoveGroup(id, args.Parameters[2]);
args.Player.SendSuccessMessage(String.Format("{0} has been disallowed from using projectile {1}.", args.Parameters[2], id));
return;
}
else
{
args.Player.SendWarningMessage(String.Format("{0} is already prevented from using projectile {1}.", args.Parameters[2], id));
return;
}
}
else
{
args.Player.SendErrorMessage("Invalid syntax! Projectile Id must be a number.");
return;
}
}
#endregion
return;
case "help":
args.Player.SendInfoMessage("Syntax: /projban <command> [arguments]");
args.Player.SendInfoMessage("Commands: add, allow, del, disallow, list");
args.Player.SendInfoMessage("Arguments: add <id>, allow <id> <group name>");
args.Player.SendInfoMessage("Arguments: del <id>, disallow <id> <group name>, list [page]");
return;
case "list":
#region List items
int pageNumber;
if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
return;
IEnumerable<Int16> projectileIds = from projectileBan in TShock.ProjectileBans.ProjectileBans
select projectileBan.ID;
PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(projectileIds),
new PaginationTools.Settings
{
HeaderFormat = "Projectile bans ({0}/{1}):",
FooterFormat = "Type /Projectile list {0} for more.",
NothingToDisplayString = "There are currently no banned projectiles."
});
#endregion
return;
}
}
#endregion Projectile Management
#region Server Config Commands
private static void SetSpawn(CommandArgs args)
{
Main.spawnTileX = args.Player.TileX + 1;
Main.spawnTileY = args.Player.TileY + 3;