Added in support for giving certain amounts of items.

/item <id/name> [amount]
It tries to parse it as an int, if it fails( or there is no amount specified ) it defaults to item.maxStack.

If it succeeds it sets the amount to whichever is larger, the amount or the items max stack.

Closes Issue #202
This commit is contained in:
Zack Piispanen 2011-07-16 16:11:46 -04:00
parent 141e2eec64
commit 7e4c851297

View file

@ -1778,7 +1778,7 @@ namespace TShockAPI
{ {
if (args.Parameters.Count < 1) if (args.Parameters.Count < 1)
{ {
args.Player.SendMessage("Invalid syntax! Proper syntax: /item <item name/id>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /item <item name/id> [item amount]", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
@ -1786,8 +1786,9 @@ namespace TShockAPI
args.Player.SendMessage("Missing item name/id", Color.Red); args.Player.SendMessage("Missing item name/id", Color.Red);
return; return;
} }
int itemAmount = 0;
var items = Tools.GetItemByIdOrName(String.Join(" ", args.Parameters)); int.TryParse( args.Parameters[args.Parameters.Count - 1 ], out itemAmount );
var items = Tools.GetItemByIdOrName(args.Parameters[0]);
if (items.Count == 0) if (items.Count == 0)
{ {
args.Player.SendMessage("Invalid item type!", Color.Red); args.Player.SendMessage("Invalid item type!", Color.Red);
@ -1803,8 +1804,10 @@ namespace TShockAPI
{ {
if (args.Player.InventorySlotAvailable || item.name.Contains("Coin")) if (args.Player.InventorySlotAvailable || item.name.Contains("Coin"))
{ {
args.Player.GiveItem(item.type, item.name, item.width, item.height, item.maxStack); if( itemAmount == 0 || itemAmount > item.maxStack )
args.Player.SendMessage(string.Format("Got some {0}.", item.name)); itemAmount = item.maxStack;
args.Player.GiveItem(item.type, item.name, item.width, item.height, itemAmount);
args.Player.SendMessage(string.Format("Gave {0} {1}(s).", itemAmount.ToString(), item.name));
} }
else else
{ {
@ -1820,9 +1823,9 @@ namespace TShockAPI
private static void Give(CommandArgs args) private static void Give(CommandArgs args)
{ {
if (args.Parameters.Count != 2) if (args.Parameters.Count < 2)
{ {
args.Player.SendMessage("Invalid syntax! Proper syntax: /give <item type/id> <player>", Color.Red); args.Player.SendMessage("Invalid syntax! Proper syntax: /give <item type/id> <player> [item amount]", Color.Red);
return; return;
} }
if (args.Parameters[0].Length == 0) if (args.Parameters[0].Length == 0)
@ -1835,7 +1838,8 @@ namespace TShockAPI
args.Player.SendMessage("Missing player name", Color.Red); args.Player.SendMessage("Missing player name", Color.Red);
return; return;
} }
int itemAmount = 0;
int.TryParse(args.Parameters[args.Parameters.Count - 1], out itemAmount);
var items = Tools.GetItemByIdOrName(args.Parameters[0]); var items = Tools.GetItemByIdOrName(args.Parameters[0]);
if (items.Count == 0) if (items.Count == 0)
@ -1866,9 +1870,11 @@ namespace TShockAPI
var plr = players[0]; var plr = players[0];
if (plr.InventorySlotAvailable || item.name.Contains("Coin")) if (plr.InventorySlotAvailable || item.name.Contains("Coin"))
{ {
plr.GiveItem(item.type, item.name, item.width, item.height, item.maxStack); if (itemAmount == 0 || itemAmount > item.maxStack)
args.Player.SendMessage(string.Format("Gave {0} some {1}.", plr.Name, item.name)); itemAmount = item.maxStack;
plr.SendMessage(string.Format("{0} gave you some {1}.", args.Player.Name, item.name)); plr.GiveItem(item.type, item.name, item.width, item.height, itemAmount);
args.Player.SendMessage(string.Format("Gave {0} {1} {2}(s).", plr.Name, itemAmount.ToString(), item.name));
plr.SendMessage(string.Format("{0} gave you {1} {2}(s).", args.Player.Name, itemAmount.ToString(), item.name));
} }
else else
{ {