From 8dc1bcff0dd04dadfc28885ed8c40e18c1f79e40 Mon Sep 17 00:00:00 2001 From: ricky Date: Fri, 17 Jun 2011 14:29:48 +1000 Subject: [PATCH] Added /king to spawn king slime. /eater, /eye, /king, /skeletron and /hardcore accept an optional amount arg /skeletron changes time to night before spawning (still have to set time manually if using /spawnmob "Skeletron Head") --- TShockAPI/Commands.cs | 105 +++++++++++++++++++++++++++++++++++------- TShockAPI/TSPlayer.cs | 15 ++++-- TShockAPI/Tools.cs | 34 -------------- 3 files changed, 99 insertions(+), 55 deletions(-) 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. ///