diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs
index 2a47663b..521b9d83 100755
--- a/TShockAPI/Commands.cs
+++ b/TShockAPI/Commands.cs
@@ -111,6 +111,7 @@ namespace TShockAPI
ChatCommands.Add(new Command("invade", "causeevents", Invade));
ChatCommands.Add(new Command("eater", "spawnboss", Eater));
ChatCommands.Add(new Command("eye", "spawnboss", Eye));
+ ChatCommands.Add(new Command("king", "spawnboss", King));
ChatCommands.Add(new Command("skeletron", "spawnboss", Skeletron));
ChatCommands.Add(new Command("hardcore", "spawnboss", Hardcore));
ChatCommands.Add(new Command("spawnmob", "spawnmob", SpawnMob));
@@ -510,29 +511,101 @@ namespace TShockAPI
private static void Eater(CommandArgs args)
{
- Tools.NewNPC(NPCList.WORLD_EATER, args.Player);
- Tools.Broadcast(string.Format("{0} has spawned an eater of worlds!", args.Player.Name));
+ if (args.Parameters.Count > 1)
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /eater [amount]", Color.Red);
+ return;
+ }
+ int amount = 1;
+ if (args.Parameters.Count == 1 && !int.TryParse(args.Parameters[0], out amount))
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /eater [amount]", Color.Red);
+ return;
+ }
+ NPC eater = Tools.GetNPCById(13);
+ TSPlayer.Server.SpawnNPC(eater.type, eater.name, amount, (int)args.Player.TileX, (int)args.Player.TileY);
+ Tools.Broadcast(string.Format("{0} has spawned eater of worlds {1} times!", args.Player.Name, amount));
}
private static void Eye(CommandArgs args)
{
- Tools.NewNPC(NPCList.EYE, args.Player);
- Tools.Broadcast(string.Format("{0} has spawned an eye!", args.Player.Name));
+ if (args.Parameters.Count > 1)
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /eye [amount]", Color.Red);
+ return;
+ }
+ int amount = 1;
+ if (args.Parameters.Count == 1 && !int.TryParse(args.Parameters[0], out amount))
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /eye [amount]", Color.Red);
+ return;
+ }
+ NPC eye = Tools.GetNPCById(4);
+ TSPlayer.Server.SetTime(false, 0.0);
+ TSPlayer.Server.SpawnNPC(eye.type, eye.name, amount, (int)args.Player.TileX, (int)args.Player.TileY);
+ Tools.Broadcast(string.Format("{0} has spawned eye {1} times!", args.Player.Name, amount));
+ }
+
+ private static void King(CommandArgs args)
+ {
+ if (args.Parameters.Count > 1)
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /king [amount]", Color.Red);
+ return;
+ }
+ int amount = 1;
+ if (args.Parameters.Count == 1 && !int.TryParse(args.Parameters[0], out amount))
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /king [amount]", Color.Red);
+ return;
+ }
+ NPC king = Tools.GetNPCById(50);
+ TSPlayer.Server.SpawnNPC(king.type, king.name, amount, (int)args.Player.TileX, (int)args.Player.TileY);
+ Tools.Broadcast(string.Format("{0} has spawned king slime {1} times!", args.Player.Name, amount));
}
private static void Skeletron(CommandArgs args)
{
- Tools.NewNPC(NPCList.SKELETRON, args.Player);
- Tools.Broadcast(string.Format("{0} has spawned skeletron!", args.Player.Name));
+ if (args.Parameters.Count > 1)
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /skeletron [amount]", Color.Red);
+ return;
+ }
+ int amount = 1;
+ if (args.Parameters.Count == 1 && !int.TryParse(args.Parameters[0], out amount))
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /skeletron [amount]", Color.Red);
+ return;
+ }
+ NPC skeletron = Tools.GetNPCById(35);
+ TSPlayer.Server.SetTime(false, 0.0);
+ TSPlayer.Server.SpawnNPC(skeletron.type, skeletron.name, amount, (int)args.Player.TileX, (int)args.Player.TileY);
+ Tools.Broadcast(string.Format("{0} has spawned skeletron {1} times!", args.Player.Name, amount));
}
private static void Hardcore(CommandArgs args)
{
- foreach (NPCList type in Enum.GetValues(typeof(NPCList)))
+ if (args.Parameters.Count > 1)
{
- Tools.NewNPC(type, args.Player);
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /hardcore [amount]", Color.Red);
+ return;
}
- Tools.Broadcast(string.Format("{0} has spawned all bosses!", args.Player.Name));
+ int amount = 1;
+ if (args.Parameters.Count == 1 && !int.TryParse(args.Parameters[0], out amount))
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /hardcore [amount]", Color.Red);
+ return;
+ }
+ NPC eater = Tools.GetNPCById(13);
+ NPC eye = Tools.GetNPCById(4);
+ NPC king = Tools.GetNPCById(50);
+ NPC skeletron = Tools.GetNPCById(35);
+ TSPlayer.Server.SetTime(false, 0.0);
+ TSPlayer.Server.SpawnNPC(eater.type, eater.name, amount, (int)args.Player.TileX, (int)args.Player.TileY);
+ TSPlayer.Server.SpawnNPC(eye.type, eye.name, amount, (int)args.Player.TileX, (int)args.Player.TileY);
+ TSPlayer.Server.SpawnNPC(king.type, king.name, amount, (int)args.Player.TileX, (int)args.Player.TileY);
+ TSPlayer.Server.SpawnNPC(skeletron.type, skeletron.name, amount, (int)args.Player.TileX, (int)args.Player.TileY);
+ Tools.Broadcast(string.Format("{0} has spawned all bosses {1} times!", args.Player.Name, amount));
}
private static void SpawnMob(CommandArgs args)
@@ -582,13 +655,7 @@ namespace TShockAPI
if (npc.type >= 1 && npc.type < Main.maxNPCTypes)
{
- for (int i = 0; i < amount; i++)
- {
- int spawnTileX;
- int spawnTileY;
- Tools.GetRandomClearTileWithInRange((int)args.Player.TileX, (int)args.Player.TileY, 50, 20, out spawnTileX, out spawnTileY);
- TSPlayer.Server.SpawnNPC(npc.type, npc.name, spawnTileX, spawnTileY);
- }
+ TSPlayer.Server.SpawnNPC(npc.type, npc.name, amount, (int)args.Player.TileX, (int)args.Player.TileY, 50, 20);
Tools.Broadcast(string.Format("{0} was spawned {1} time(s).", npc.name, amount));
}
else
@@ -969,6 +1036,12 @@ namespace TShockAPI
private static void Butcher(CommandArgs args)
{
+ if (args.Parameters.Count > 1)
+ {
+ args.Player.SendMessage("Invalid syntax! Proper syntax: /butcher [killFriendly(true/false)]", Color.Red);
+ return;
+ }
+
bool killFriendly = true;
if (args.Parameters.Count == 1)
bool.TryParse(args.Parameters[0], out killFriendly);
diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs
index b605a165..b283a99f 100644
--- a/TShockAPI/TSPlayer.cs
+++ b/TShockAPI/TSPlayer.cs
@@ -195,12 +195,17 @@ namespace TShockAPI
NetMessage.syncPlayers();
}
- public int SpawnNPC(int type, string name, int tileX, int tileY)
+ public void SpawnNPC(int type, string name, int amount, int startTileX, int startTileY, int tileXRange = 50, int tileYRange = 20)
{
- int npcid = NPC.NewNPC(tileX * 16, tileY * 16, type, 0);
- // This is for special slimes
- Main.npc[npcid].SetDefaults(name);
- return npcid;
+ for (int i = 0; i < amount; i++)
+ {
+ int spawnTileX;
+ int spawnTileY;
+ Tools.GetRandomClearTileWithInRange(startTileX, startTileY, tileXRange, tileYRange, out spawnTileX, out spawnTileY);
+ int npcid = NPC.NewNPC(spawnTileX * 16, spawnTileY * 16, type, 0);
+ // This is for special slimes
+ Main.npc[npcid].SetDefaults(name);
+ }
}
public void StrikeNPC(int npcid, int damage, float knockBack, int hitDirection)
diff --git a/TShockAPI/Tools.cs b/TShockAPI/Tools.cs
index 4e7bc924..66ca20d1 100755
--- a/TShockAPI/Tools.cs
+++ b/TShockAPI/Tools.cs
@@ -24,13 +24,6 @@ using Terraria;
namespace TShockAPI
{
- internal enum NPCList
- {
- WORLD_EATER = 0,
- EYE = 1,
- SKELETRON = 2
- }
-
internal class Tools
{
private static Random random = new Random();
@@ -222,33 +215,6 @@ namespace TShockAPI
return found;
}
- ///
- /// Creates an NPC
- ///
- /// Type is defined in the enum NPC list
- /// int player that the npc targets
- public static void NewNPC(NPCList type, TSPlayer player)
- {
- switch (type)
- {
- case NPCList.WORLD_EATER:
- WorldGen.shadowOrbSmashed = true;
- WorldGen.shadowOrbCount = 3;
- int w = NPC.NewNPC((int)player.X, (int)player.Y, 13, 1);
- Main.npc[w].target = player.Index;
- break;
- case NPCList.EYE:
- Main.time = 4861;
- Main.dayTime = false;
- WorldGen.spawnEye = true;
- break;
- case NPCList.SKELETRON:
- int enpeecee = NPC.NewNPC((int)player.X, (int)player.Y, 0x23, 0);
- Main.npc[enpeecee].netUpdate = true;
- break;
- }
- }
-
///
/// Kicks all player from the server without checking for immunetokick permission.
///