using System; using System.IO; using Server; using Server.Items; using Server.Multis; using Server.Commands; namespace Server.Custom.StaticHousing { public class GenStaticHouses { public static void Initialize() { CommandSystem.Register("GenStaticHouses", AccessLevel.Administrator, new CommandEventHandler(GenStaticHouses_OnCommand)); } [Usage("GenStaticHouses")] [Description("Generates Static House signs from a configuration file.")] public static void GenStaticHouses_OnCommand(CommandEventArgs e) { string filePath = Path.Combine(Core.BaseDirectory, "Data", "Config", "statichouses.cfg"); if (!File.Exists(filePath)) { e.Mobile.SendMessage(33, "Error: Data/Config/statichouses.cfg not found!"); return; } int count = 0; using (StreamReader ip = new StreamReader(filePath)) { string line; while ((line = ip.ReadLine()) != null) { line = line.Trim(); if (line.Length == 0 || line.StartsWith("#")) continue; string[] split = line.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); if (split.Length >= 13) { try { Map map = Map.Parse(split[0]); Point3D signLoc = new Point3D(int.Parse(split[1]), int.Parse(split[2]), int.Parse(split[3])); Point2D start = new Point2D(int.Parse(split[4]), int.Parse(split[5])); Point2D end = new Point2D(start.X + int.Parse(split[6]), start.Y + int.Parse(split[7])); Rectangle2D area = new Rectangle2D(start, end); int minZ = int.Parse(split[8]); int maxZ = int.Parse(split[9]); int price = int.Parse(split[10]); int locks = int.Parse(split[11]); int secures = int.Parse(split[12]); // --- NEW ITEM ID PARSING --- int itemID = 0xC0B; // Defaults to the East-facing sign if (split.Length >= 14) { if (split[13].StartsWith("0x", StringComparison.OrdinalIgnoreCase)) itemID = Convert.ToInt32(split[13], 16); else itemID = int.Parse(split[13]); } if (map != null && !CheckForExistingHouse(map, signLoc)) { // Pass the parsed itemID into the new sign! StaticHouseSign sign = new StaticHouseSign(itemID, area, minZ, maxZ, price, locks, secures); sign.MoveToWorld(signLoc, map); count++; } } catch (Exception ex) { Console.WriteLine($"Error parsing statichouses.cfg line: {line}\n{ex.Message}"); } } } } e.Mobile.SendMessage(68, $"Generation complete. {count} new Static House signs were spawned."); } private static bool CheckForExistingHouse(Map map, Point3D loc) { bool exists = false; IPooledEnumerable eable = map.GetItemsInRange(loc, 0); foreach (Item item in eable) { if (item is StaticHouseSign || item is HouseSign) { exists = true; break; } } eable.Free(); return exists; } } }