Exemple #1
0
        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();
        }