using System; using Server; using Server.Mobiles; using Server.Items; using Server.Commands; using System.Collections.Generic; using System.Linq; namespace Server.Engines.ShameRevamped { public static class ShameGenerator { public static void Initialize() { CommandSystem.Register("GenerateNewShame", AccessLevel.Administrator, Generate); CommandSystem.Register("DeleteShame", AccessLevel.Administrator, Delete); } private static void Delete(CommandEventArgs e) { WeakEntityCollection.Delete("newshame"); ResetOldSpawners(false); } public static void Generate(CommandEventArgs e) { if (!Core.ML) return; RemoveItems(); CommandSystem.Handle(e.Mobile, Server.Commands.CommandSystem.Prefix + "XmlLoad RevampedSpawns/ShameRevamped.xml"); // Level 1 Point3D altarLoc = new Point3D(5403, 43, 30); if (!CheckForAltar(altarLoc, Map.Trammel)) { var altar = new ShameAltar(typeof(QuartzElemental), new Point3D(5490, 19, -25), new Point3D(5514, 10, 5), new Point3D(5387, 11, 30), 10); WeakEntityCollection.Add("newshame", altar); altar.MoveToWorld(altarLoc, Map.Trammel); } if (!CheckForAltar(altarLoc, Map.Felucca)) { var altar = new ShameAltar(typeof(QuartzElemental), new Point3D(5490, 19, -25), new Point3D(5514, 10, 5), new Point3D(5387, 11, 30), 10); WeakEntityCollection.Add("newshame", altar); altar.MoveToWorld(altarLoc, Map.Felucca); } // Level 2 altarLoc = new Point3D(5577, 54, 2); if (!CheckForAltar(altarLoc, Map.Trammel)) { var altar = new ShameAltar(typeof(FlameElemental), new Point3D(5604, 102, 5), new Point3D(5514, 147, 25), new Point3D(5571, 115, 3), 20); WeakEntityCollection.Add("newshame", altar); altar.MoveToWorld(altarLoc, Map.Trammel); } if (!CheckForAltar(altarLoc, Map.Felucca)) { var altar = new ShameAltar(typeof(FlameElemental), new Point3D(5604, 102, 5), new Point3D(5514, 147, 25), new Point3D(5571, 115, 3), 20); WeakEntityCollection.Add("newshame", altar); altar.MoveToWorld(altarLoc, Map.Felucca); } // Level 3 altarLoc = new Point3D(5390, 145, 20); if (!CheckForAltar(altarLoc, Map.Trammel)) { var altar = new ShameAltar(typeof(WindElemental), new Point3D(5538, 170, 5), new Point3D(5513, 176, 5), new Point3D(5618, 223, 0), 30); WeakEntityCollection.Add("newshame", altar); altar.MoveToWorld(altarLoc, Map.Trammel); } if (!CheckForAltar(altarLoc, Map.Felucca)) { var altar = new ShameAltar(typeof(WindElemental), new Point3D(5538, 170, 5), new Point3D(5513, 176, 5), new Point3D(5618, 223, 0), 30); WeakEntityCollection.Add("newshame", altar); altar.MoveToWorld(altarLoc, Map.Felucca); } // Wall 1 Dictionary dictionary = null; altarLoc = new Point3D(5403, 82, 10); if (!CheckForAltar(altarLoc, Map.Trammel)) { dictionary = new Dictionary(); dictionary[new Point3D(-1, 0, 0)] = 2272; dictionary[new Point3D(0, 0, 0)] = 2272; dictionary[new Point3D(2, 0, 0)] = 2272; dictionary[new Point3D(1, 0, 0)] = 2272; var wall = new ShameWall(dictionary, altarLoc, new Point3D(5405, 90, 10), Map.Trammel); WeakEntityCollection.Add("newshame", wall); wall.MoveToWorld(altarLoc, Map.Trammel); ShameWall.AddTeleporters(wall); } if (!CheckForAltar(altarLoc, Map.Felucca)) { dictionary = new Dictionary(); dictionary[new Point3D(-1, 0, 0)] = 2272; dictionary[new Point3D(0, 0, 0)] = 2272; dictionary[new Point3D(2, 0, 0)] = 2272; dictionary[new Point3D(1, 0, 0)] = 2272; var wall = new ShameWall(dictionary, altarLoc, new Point3D(5405, 90, 10), Map.Felucca); WeakEntityCollection.Add("newshame", wall); wall.MoveToWorld(altarLoc, Map.Felucca); ShameWall.AddTeleporters(wall); } // Wall 2 altarLoc = new Point3D(5465, 26, -10); if (!CheckForAltar(altarLoc, Map.Trammel)) { dictionary = new Dictionary(); dictionary[new Point3D(0, -1, 0)] = 2272; dictionary[new Point3D(0, 0, 0)] = 2272; dictionary[new Point3D(0, 1, 0)] = 2272; dictionary[new Point3D(0, 2, 0)] = 2272; var wall = new ShameWall(dictionary, altarLoc, new Point3D(5472, 26, -30), Map.Trammel); WeakEntityCollection.Add("newshame", wall); wall.MoveToWorld(altarLoc, Map.Trammel); ShameWall.AddTeleporters(wall); } if (!CheckForAltar(altarLoc, Map.Felucca)) { dictionary = new Dictionary(); dictionary[new Point3D(0, -1, 0)] = 2272; dictionary[new Point3D(0, 0, 0)] = 2272; dictionary[new Point3D(0, 1, 0)] = 2272; dictionary[new Point3D(0, 2, 0)] = 2272; var wall = new ShameWall(dictionary, altarLoc, new Point3D(5472, 26, -30), Map.Felucca); WeakEntityCollection.Add("newshame", wall); wall.MoveToWorld(altarLoc, Map.Felucca); ShameWall.AddTeleporters(wall); } // Wall 3 altarLoc = new Point3D(5619, 57, 0); if (!CheckForAltar(altarLoc, Map.Trammel)) { dictionary = new Dictionary(); dictionary[new Point3D(-1, 0, 0)] = 1059; dictionary[new Point3D(0, 0, 0)] = 1059; dictionary[new Point3D(1, 0, 0)] = 1059; var wall = new ShameWall(dictionary, altarLoc, new Point3D(5621, 43, 0), Map.Trammel); WeakEntityCollection.Add("newshame", wall); wall.MoveToWorld(altarLoc, Map.Trammel); ShameWall.AddTeleporters(wall); } if (!CheckForAltar(altarLoc, Map.Felucca)) { dictionary = new Dictionary(); dictionary[new Point3D(-1, 0, 0)] = 1059; dictionary[new Point3D(0, 0, 0)] = 1059; dictionary[new Point3D(1, 0, 0)] = 1059; var wall = new ShameWall(dictionary, altarLoc, new Point3D(5621, 43, 0), Map.Felucca); WeakEntityCollection.Add("newshame", wall); wall.MoveToWorld(altarLoc, Map.Felucca); ShameWall.AddTeleporters(wall); } e.Mobile.SendMessage("Shame Revamped setup!"); } public static void RemoveItems() { RemoveItem(new Point3D(5490, 19, -25), Map.Trammel, typeof(Teleporter)); RemoveItem(new Point3D(5490, 19, -25), Map.Felucca, typeof(Teleporter)); RemoveItem(new Point3D(5604, 102, 5), Map.Trammel, typeof(Teleporter)); RemoveItem(new Point3D(5604, 102, 5), Map.Felucca, typeof(Teleporter)); RemoveItem(new Point3D(5538, 170, 5), Map.Trammel, typeof(Teleporter)); RemoveItem(new Point3D(5538, 170, 5), Map.Felucca, typeof(Teleporter)); ResetOldSpawners(); } public static void ResetOldSpawners(bool reset = true) { Region r = Region.Find(new Point3D(5538, 170, 5), Map.Trammel); foreach (var spawner in r.GetEnumeratedItems().OfType()) { if (spawner.Name.ToLower() != "shame_revamped" && spawner.Name.ToLower() != "shame_chest") { if (reset) spawner.DoReset = true; else spawner.DoRespawn = true; } } r = Region.Find(new Point3D(5538, 170, 5), Map.Felucca); foreach (var spawner in r.GetEnumeratedItems().OfType()) { if (spawner.Name.ToLower() != "shame_revamped" && spawner.Name.ToLower() != "shame_chest") { if (reset) spawner.DoReset = true; else spawner.DoRespawn = true; } } } public static bool RemoveItem(Point3D p, Map map, Type t) { IPooledEnumerable eable = map.GetItemsInRange(p, 0); foreach (Item i in eable) { if (i.GetType() == t) { i.Delete(); eable.Free(); return true; } } eable.Free(); return false; } public static bool CheckForAltar(Point3D p, Map map) { IPooledEnumerable eable = map.GetItemsInRange(p, 0); foreach (Item i in eable) { if (i is ShameAltar || i is ShameWall) { eable.Free(); return true; } } eable.Free(); return false; } } }