public virtual void AutoAddFixtures() { var components = MultiData.GetComponents(ItemID); var teleporters = new Dictionary <int, List <MultiTileEntry> >(); foreach (var entry in components.List.Where(e => e.m_Flags == 0)) { // Telepoters if (entry.m_ItemID >= 0x181D && entry.m_ItemID <= 0x1828) { if (teleporters.ContainsKey(entry.m_ItemID)) { teleporters[entry.m_ItemID].Add(entry); } else { teleporters[entry.m_ItemID] = new List <MultiTileEntry>(); teleporters[entry.m_ItemID].Add(entry); } } else { ItemData data = TileData.ItemTable[entry.m_ItemID & TileData.MaxItemValue]; // door if ((data.Flags & TileFlag.Door) != 0) { AddDoor(entry.m_ItemID, entry.m_OffsetX, entry.m_OffsetY, entry.m_OffsetZ); } else { Item st = new Static((int)entry.m_ItemID); st.MoveToWorld(new Point3D(X + entry.m_OffsetX, Y + entry.m_OffsetY, entry.m_OffsetZ), Map); AddFixture(st); } } } foreach (var door in Doors.OfType <BaseDoor>()) { foreach (var check in Doors.OfType <BaseDoor>().Where(d => d != door)) { if (door.InRange(check.Location, 1)) { door.Link = check; check.Link = door; } } } foreach (var kvp in teleporters) { if (kvp.Value.Count > 2) { Utility.WriteConsoleColor(ConsoleColor.Yellow, String.Format("Warning: More than 2 teleporters detected for {0}!", kvp.Key.ToString("X"))); } else if (kvp.Value.Count <= 1) { Utility.WriteConsoleColor(ConsoleColor.Yellow, String.Format("Warning: 1 or less teleporters detected for {0}!", kvp.Key.ToString("X"))); continue; } AddTeleporters(kvp.Key, new Point3D(kvp.Value[0].m_OffsetX, kvp.Value[0].m_OffsetY, kvp.Value[0].m_OffsetZ), new Point3D(kvp.Value[1].m_OffsetX, kvp.Value[1].m_OffsetY, kvp.Value[1].m_OffsetZ)); } teleporters.Clear(); }