From 4dc5d7f58eadeab2ac8b9a2dc09c8a46b085a613 Mon Sep 17 00:00:00 2001 From: ricky Date: Fri, 17 Jun 2011 15:28:23 +1000 Subject: [PATCH] Added GiveItem in TSPlayer /heal using GiveItem from TSPlayer Added GetItemById and GetItemByName in Tools --- TShockAPI/Commands.cs | 40 +++++++++++++++++++--------------------- TShockAPI/TSPlayer.cs | 10 ++++++++++ TShockAPI/Tools.cs | 29 +++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 521b9d83..2d847e52 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1170,6 +1170,7 @@ namespace TShockAPI private static void Heal(CommandArgs args) { + TSPlayer playerToHeal; if (args.Parameters.Count > 0) { string plStr = String.Join(" ", args.Parameters); @@ -1177,45 +1178,42 @@ namespace TShockAPI if (players.Count == 0) { args.Player.SendMessage("Invalid player!", Color.Red); + return; } else if (players.Count > 1) { args.Player.SendMessage("More than one player matched!", Color.Red); + return; } else { - var plr = players[0]; - DropHearts(plr.X, plr.Y, 20); - if (plr == args.Player) - { - args.Player.SendMessage("You just got healed!"); - } - else - { - args.Player.SendMessage(string.Format("You just healed {0}", plr.Name)); - plr.SendMessage(string.Format("{0} just healed you!", args.Player.Name)); - } + playerToHeal = players[0]; } } else if (!args.Player.RealPlayer) { args.Player.SendMessage("You cant heal yourself!"); + return; } else { - DropHearts(args.Player.X, args.Player.Y, 20); + playerToHeal = args.Player; + } + + Item heart = Tools.GetItemById(58); + Item star = Tools.GetItemById(184); + for (int i = 0; i < 20; i++) + playerToHeal.GiveItem(heart.type, heart.name, heart.width, heart.height, heart.maxStack); + for (int i = 0; i < 10; i++) + playerToHeal.GiveItem(star.type, star.name, star.width, star.height, star.maxStack); + if (playerToHeal == args.Player) + { args.Player.SendMessage("You just got healed!"); } - } - - private static void DropHearts(float x, float y, int count) - { - for (int i = 0; i < count; i++) + else { - int itemid = Terraria.Item.NewItem(1, 1, 1, 1, 58); - Main.item[itemid].position.X = x; - Main.item[itemid].position.Y = y; - NetMessage.SendData(21, -1, -1, "", itemid, 0f, 0f, 0f); + args.Player.SendMessage(string.Format("You just healed {0}", playerToHeal.Name)); + playerToHeal.SendMessage(string.Format("{0} just healed you!", args.Player.Name)); } } diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index b283a99f..42fe1941 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -121,6 +121,16 @@ namespace TShockAPI NetMessage.SendData((int)PacketTypes.TileSendSquare, Index, -1, "", size, (float)(x - (size / 2)), (float)(y - (size / 2)), 0f); } + public virtual void GiveItem(int type, string name, int width, int height, int stack) + { + int itemid = Terraria.Item.NewItem((int)X, (int)Y, width, height, type, stack, true); + // This is for special pickaxe/hammers/swords etc + Main.item[itemid].SetDefaults(name); + Main.item[itemid].owner = Index; + NetMessage.SendData((int)PacketTypes.ItemDrop, -1, -1, "", itemid, 0f, 0f, 0f); + NetMessage.SendData((int)PacketTypes.ItemOwner, -1, -1, "", itemid, 0f, 0f, 0f); + } + public virtual void SendMessage(string msg) { SendMessage(msg, 0, 255, 0); diff --git a/TShockAPI/Tools.cs b/TShockAPI/Tools.cs index 66ca20d1..2865e998 100755 --- a/TShockAPI/Tools.cs +++ b/TShockAPI/Tools.cs @@ -186,6 +186,35 @@ namespace TShockAPI return !Main.tile[tileX, tileY].active; } + public static Item GetItemById(int id) + { + Item item = new Item(); + item.SetDefaults(id); + return item; + } + + public static List GetItemByName(string name) + { + //Method #1 - must be exact match, allows support for different pickaxes/hammers/swords etc + for (int i = 1; i < Main.maxItemTypes; i++) + { + Item item = new Item(); + item.SetDefaults(name); + if (item.name == name) + return new List { item }; + } + //Method #2 - allows impartial matching + var found = new List(); + for (int i = 1; i < Main.maxItemTypes; i++) + { + Item item = new Item(); + item.SetDefaults(i); + if (item.name.ToLower().StartsWith(name.ToLower())) + found.Add(item); + } + return found; + } + public static NPC GetNPCById(int id) { NPC npc = new NPC();