Clean up /itemban, /projban and tempbans

This commit is contained in:
MarioE 2014-07-02 10:51:06 -04:00
parent 6d3bb30c7c
commit 3e12e80a89
3 changed files with 184 additions and 194 deletions

View file

@ -1148,7 +1148,8 @@ namespace TShockAPI
int time; int time;
if (!TShock.Utils.TryParseTime(args.Parameters[2], out time)) if (!TShock.Utils.TryParseTime(args.Parameters[2], out time))
{ {
args.Player.SendErrorMessage("Invalid time string! Proper format: 0d0h0m0s, with at least one time specifier."); args.Player.SendErrorMessage("Invalid time string! Proper format: _d_h_m_s, with at least one time specifier.");
args.Player.SendErrorMessage("For example, 1d and 10h-30m+2m are both valid time strings, but 2 is not.");
return; return;
} }
@ -2192,9 +2193,9 @@ namespace TShockAPI
private static void Group(CommandArgs args) private static void Group(CommandArgs args)
{ {
string subcmd = args.Parameters.Count == 0 ? "help" : args.Parameters[0].ToLower(); string subCmd = args.Parameters.Count == 0 ? "help" : args.Parameters[0].ToLower();
switch (subcmd) switch (subCmd)
{ {
case "add": case "add":
#region Add group #region Add group
@ -2596,16 +2597,8 @@ namespace TShockAPI
private static void ItemBan(CommandArgs args) private static void ItemBan(CommandArgs args)
{ {
if (args.Parameters.Count == 0) string subCmd = args.Parameters.Count == 0 ? "help" : args.Parameters[0].ToLower();
{ switch (subCmd)
args.Player.SendInfoMessage("Invalid syntax! Proper syntax: /itemban <command> [arguments]");
args.Player.SendInfoMessage("Commands: add, allow, del, disallow, list");
args.Player.SendInfoMessage("Arguments: add <item name>, allow <item name> <group name>");
args.Player.SendInfoMessage("Arguments: del <item name>, disallow <item name> <group name>, list [page]");
return;
}
switch (args.Parameters[0].ToLower())
{ {
case "add": case "add":
#region Add item #region Add item
@ -2662,17 +2655,17 @@ namespace TShockAPI
ItemBan ban = TShock.Itembans.GetItemBanByName(items[0].name); ItemBan ban = TShock.Itembans.GetItemBanByName(items[0].name);
if (ban == null) if (ban == null)
{ {
args.Player.SendErrorMessage(items[0].name + " is not banned."); args.Player.SendErrorMessage("{0} is not banned.", items[0].name);
return; return;
} }
if (!ban.AllowedGroups.Contains(args.Parameters[2])) if (!ban.AllowedGroups.Contains(args.Parameters[2]))
{ {
TShock.Itembans.AllowGroup(items[0].name, args.Parameters[2]); TShock.Itembans.AllowGroup(items[0].name, args.Parameters[2]);
args.Player.SendSuccessMessage(String.Format("{0} has been allowed to use {1}.", args.Parameters[2], items[0].name)); args.Player.SendSuccessMessage("{0} has been allowed to use {1}.", args.Parameters[2], items[0].name);
} }
else else
{ {
args.Player.SendWarningMessage(String.Format("{0} is already allowed to use {1}.", args.Parameters[2], items[0].name)); args.Player.SendWarningMessage("{0} is already allowed to use {1}.", args.Parameters[2], items[0].name);
} }
} }
} }
@ -2705,7 +2698,7 @@ namespace TShockAPI
#endregion #endregion
return; return;
case "disallow": case "disallow":
#region Allow group to item #region Disllow group from item
{ {
if (args.Parameters.Count != 3) if (args.Parameters.Count != 3)
{ {
@ -2733,30 +2726,51 @@ namespace TShockAPI
ItemBan ban = TShock.Itembans.GetItemBanByName(items[0].name); ItemBan ban = TShock.Itembans.GetItemBanByName(items[0].name);
if (ban == null) if (ban == null)
{ {
args.Player.SendErrorMessage(items[0].name + " is not banned."); args.Player.SendErrorMessage("{0} is not banned.", items[0].name);
return; return;
} }
if (ban.AllowedGroups.Contains(args.Parameters[2])) if (ban.AllowedGroups.Contains(args.Parameters[2]))
{ {
TShock.Itembans.RemoveGroup(items[0].name, args.Parameters[2]); TShock.Itembans.RemoveGroup(items[0].name, args.Parameters[2]);
args.Player.SendSuccessMessage(String.Format("{0} has been disallowed to use {1}.", args.Parameters[2], items[0].name)); args.Player.SendSuccessMessage("{0} has been disallowed to use {1}.", args.Parameters[2], items[0].name);
} }
else else
{ {
args.Player.SendWarningMessage(String.Format("{0} is already disallowed to use {1}.", args.Parameters[2], items[0].name)); args.Player.SendWarningMessage("{0} is already disallowed to use {1}.", args.Parameters[2], items[0].name);
} }
} }
} }
#endregion #endregion
return; return;
case "help": case "help":
args.Player.SendInfoMessage("Syntax: /itemban <command> [arguments]"); #region Help
args.Player.SendInfoMessage("Commands: add, allow, del, disallow, list"); {
args.Player.SendInfoMessage("Arguments: add <item name>, allow <item name> <group name>"); int pageNumber;
args.Player.SendInfoMessage("Arguments: del <item name>, disallow <item name> <group name>, list [page]"); if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
return;
var lines = new List<string>
{
"add <item> - Adds an item ban.",
"allow <item> <group> - Allows a group to use an item.",
"del <item> - Deletes an item ban.",
"disallow <item> <group> - Disallows a group from using an item.",
"list [page] - Lists all item bans."
};
PaginationTools.SendPage(args.Player, pageNumber, lines,
new PaginationTools.Settings
{
HeaderFormat = "Item Ban Sub-Commands ({0}/{1}):",
FooterFormat = "Type /itemban help {0} for more sub-commands."
}
);
}
#endregion
return; return;
case "list": case "list":
#region List items #region List items
{
int pageNumber; int pageNumber;
if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
return; return;
@ -2769,6 +2783,7 @@ namespace TShockAPI
FooterFormat = "Type /itemban list {0} for more.", FooterFormat = "Type /itemban list {0} for more.",
NothingToDisplayString = "There are currently no banned items." NothingToDisplayString = "There are currently no banned items."
}); });
}
#endregion #endregion
return; return;
} }
@ -2779,21 +2794,11 @@ namespace TShockAPI
private static void ProjectileBan(CommandArgs args) private static void ProjectileBan(CommandArgs args)
{ {
if (args.Parameters.Count == 0) string subCmd = args.Parameters.Count == 0 ? "help" : args.Parameters[0].ToLower();
{ switch (subCmd)
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": case "add":
#region Add projectile #region Add projectile
{ {
if (args.Parameters.Count != 2) if (args.Parameters.Count != 2)
{ {
@ -2801,36 +2806,27 @@ namespace TShockAPI
return; return;
} }
short id; short id;
if (Int16.TryParse(args.Parameters[1], out id)) if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Main.maxProjectileTypes)
{ {
TShock.ProjectileBans.AddNewBan(id); TShock.ProjectileBans.AddNewBan(id);
args.Player.SendSuccessMessage("Banned Projectile: " + id + "."); args.Player.SendSuccessMessage("Banned projectile {0}.", id);
return;
} }
else else
{ args.Player.SendErrorMessage("Invalid projectile ID!");
args.Player.SendErrorMessage("Invalid syntax! Projectile Id must be a number.");
return;
} }
}
#endregion #endregion
return; return;
case "allow": case "allow":
#region Allow group to projectile #region Allow group to projectile
{ {
if (args.Parameters.Count != 3) if (args.Parameters.Count != 3)
{ {
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /projban allow <id> <group name>"); args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /projban allow <id> <group>");
return; return;
} }
short id; short id;
if (Int16.TryParse(args.Parameters[1], out id)) if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Main.maxProjectileTypes)
{ {
if (!TShock.Groups.GroupExists(args.Parameters[2])) if (!TShock.Groups.GroupExists(args.Parameters[2]))
{ {
@ -2841,36 +2837,24 @@ namespace TShockAPI
ProjectileBan ban = TShock.ProjectileBans.GetBanById(id); ProjectileBan ban = TShock.ProjectileBans.GetBanById(id);
if (ban == null) if (ban == null)
{ {
args.Player.SendErrorMessage("Projectile " + id + " is not banned."); args.Player.SendErrorMessage("Projectile {0} is not banned.", id);
return; return;
} }
if (!ban.AllowedGroups.Contains(args.Parameters[2])) if (!ban.AllowedGroups.Contains(args.Parameters[2]))
{ {
TShock.ProjectileBans.AllowGroup(id, 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], args.Player.SendSuccessMessage("{0} has been allowed to use projectile {1}.", args.Parameters[2], id);
id));
return;
} }
else else
{ args.Player.SendWarningMessage("{0} is already allowed to use projectile {1}.", args.Parameters[2], id);
args.Player.SendWarningMessage(String.Format("{0} is already allowed to use projectile {1}.", args.Parameters[2],
id));
return;
}
} }
else else
{ args.Player.SendErrorMessage("Invalid projectile ID!");
args.Player.SendErrorMessage("Invalid syntax! Projectile Id must be a number.");
return;
} }
}
#endregion #endregion
return;
case "del": case "del":
#region Delete projectile
#region Delete item
{ {
if (args.Parameters.Count != 2) if (args.Parameters.Count != 2)
{ {
@ -2879,26 +2863,19 @@ namespace TShockAPI
} }
short id; short id;
if (Int16.TryParse(args.Parameters[1], out id)) if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Main.maxProjectileTypes)
{ {
TShock.ProjectileBans.RemoveBan(id); TShock.ProjectileBans.RemoveBan(id);
args.Player.SendSuccessMessage("Unbanned Projectile: " + id + "."); args.Player.SendSuccessMessage("Unbanned projectile {0}.", id);
return; return;
} }
else else
{ args.Player.SendErrorMessage("Invalid projectile ID!");
args.Player.SendErrorMessage("Invalid syntax! Projectile Id must be a number.");
return;
} }
}
#endregion #endregion
return; return;
case "disallow": case "disallow":
#region Disallow group from projectile
#region Allow group to item
{ {
if (args.Parameters.Count != 3) if (args.Parameters.Count != 3)
{ {
@ -2907,7 +2884,7 @@ namespace TShockAPI
} }
short id; short id;
if (Int16.TryParse(args.Parameters[1], out id)) if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Main.maxProjectileTypes)
{ {
if (!TShock.Groups.GroupExists(args.Parameters[2])) if (!TShock.Groups.GroupExists(args.Parameters[2]))
{ {
@ -2918,43 +2895,52 @@ namespace TShockAPI
ProjectileBan ban = TShock.ProjectileBans.GetBanById(id); ProjectileBan ban = TShock.ProjectileBans.GetBanById(id);
if (ban == null) if (ban == null)
{ {
args.Player.SendErrorMessage("Projectile " + id + " is not banned."); args.Player.SendErrorMessage("Projectile {0} is not banned.", id);
return; return;
} }
if (ban.AllowedGroups.Contains(args.Parameters[2])) if (ban.AllowedGroups.Contains(args.Parameters[2]))
{ {
TShock.ProjectileBans.RemoveGroup(id, args.Parameters[2]); TShock.ProjectileBans.RemoveGroup(id, args.Parameters[2]);
args.Player.SendSuccessMessage(String.Format("{0} has been disallowed from using projectile {1}.", args.Player.SendSuccessMessage("{0} has been disallowed from using projectile {1}.", args.Parameters[2], id);
args.Parameters[2], id));
return; return;
} }
else else
{ args.Player.SendWarningMessage("{0} is already prevented from using projectile {1}.", args.Parameters[2], id);
args.Player.SendWarningMessage(String.Format("{0} is already prevented from using projectile {1}.",
args.Parameters[2], id));
return;
}
} }
else else
{ args.Player.SendErrorMessage("Invalid projectile ID!");
args.Player.SendErrorMessage("Invalid syntax! Projectile Id must be a number.");
return;
} }
}
#endregion #endregion
return; return;
case "help": case "help":
args.Player.SendInfoMessage("Syntax: /projban <command> [arguments]"); #region Help
args.Player.SendInfoMessage("Commands: add, allow, del, disallow, list"); {
args.Player.SendInfoMessage("Arguments: add <id>, allow <id> <group name>"); int pageNumber;
args.Player.SendInfoMessage("Arguments: del <id>, disallow <id> <group name>, list [page]"); if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
return;
var lines = new List<string>
{
"add <projectile ID> - Adds a projectile ban.",
"allow <projectile ID> <group> - Allows a group to use a projectile.",
"del <projectile ID> - Deletes an projectile ban.",
"disallow <projectile ID> <group> - Disallows a group from using a projectile.",
"list [page] - Lists all projectile bans."
};
PaginationTools.SendPage(args.Player, pageNumber, lines,
new PaginationTools.Settings
{
HeaderFormat = "Projectile Ban Sub-Commands ({0}/{1}):",
FooterFormat = "Type /projban help {0} for more sub-commands."
}
);
}
#endregion
return; return;
case "list": case "list":
#region List projectiles
#region List items {
int pageNumber; int pageNumber;
if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber)) if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
return; return;
@ -2964,16 +2950,14 @@ namespace TShockAPI
new PaginationTools.Settings new PaginationTools.Settings
{ {
HeaderFormat = "Projectile bans ({0}/{1}):", HeaderFormat = "Projectile bans ({0}/{1}):",
FooterFormat = "Type /Projectile list {0} for more.", FooterFormat = "Type /projban list {0} for more.",
NothingToDisplayString = "There are currently no banned projectiles." NothingToDisplayString = "There are currently no banned projectiles."
}); });
}
#endregion #endregion
return; return;
} }
} }
#endregion Projectile Management #endregion Projectile Management
#region Server Config Commands #region Server Config Commands

View file

@ -968,12 +968,16 @@ namespace TShockAPI
player.Disconnect(String.Format("You are banned for {0} hour{1} and {2} minute{3}: {4}", player.Disconnect(String.Format("You are banned for {0} hour{1} and {2} minute{3}: {4}",
ts.Hours, ts.Hours == 1 ? "" : "s", ts.Minutes, ts.Minutes == 1 ? "" : "s", ban.Reason)); ts.Hours, ts.Hours == 1 ? "" : "s", ts.Minutes, ts.Minutes == 1 ? "" : "s", ban.Reason));
} }
else if (ts.Minutes > 0)
{
player.Disconnect(String.Format("You are banned for {0} minute{1} and {2} second{3}: {4}",
ts.Minutes, ts.Minutes == 1 ? "" : "s", ts.Seconds, ts.Seconds == 1 ? "" : "s", ban.Reason));
}
else else
{ {
player.Disconnect(String.Format("You are banned for {0} minute{1}: {2}", player.Disconnect(String.Format("You are banned for {0} second{1}: {2}",
ts.Minutes, ts.Minutes == 1 ? "" : "s", ban.Reason)); ts.Seconds, ts.Seconds == 1 ? "" : "s", ban.Reason));
} }
} }
args.Handled = true; args.Handled = true;
} }

View file

@ -893,7 +893,7 @@ namespace TShockAPI
var sb = new StringBuilder(3); var sb = new StringBuilder(3);
for (int i = 0; i < str.Length; i++) for (int i = 0; i < str.Length; i++)
{ {
if (char.IsDigit(str[i]) || (str[i] == '-' || str[i] == '+')) if (Char.IsDigit(str[i]) || (str[i] == '-' || str[i] == '+'))
sb.Append(str[i]); sb.Append(str[i]);
else else
{ {
@ -921,6 +921,8 @@ namespace TShockAPI
} }
} }
} }
if (sb.Length != 0)
return false;
return true; return true;
} }