private void GenerateMapListing(int page)
        {
            if (m_Page == 0)
            {
                m_Page = page;
            }
            else if (page != m_Page)
            {
                return;
            }

            string name = m_Entries[page - 1];

            TAEntry[] me = (TAEntry[])TravelAtlas.GlobalEntries[name];
            if (me == null)
            {
                return;
            }

            int  offset = m_Page * 100;
            bool gates  = name == "Custom Areas";

            for (int i = 0, l = 0; i < me.Length; i++)
            {
                TAEntry entry = me[i];

                if (((gates || name == "Felucca") && entry.Map == Map.Felucca && !m_TravelAtlas.Felucca))
                {
                    continue;
                }
                else if ((gates || name == "Trammel") && entry.Map == Map.Trammel && (!m_TravelAtlas.Trammel || !m_Reds))
                {
                    continue;
                }
                else if (entry.Map == Map.Ilshenar && (!m_TravelAtlas.Ilshenar || !m_HasLBR || !m_Reds))
                {
                    continue;
                }
                else if (entry.Map == Map.Malas && (!Core.AOS || !m_HasAOS || !m_TravelAtlas.Malas || !m_Reds))
                {
                    continue;
                }
                else if (entry.Map == Map.Tokuno && (!Core.SE || !m_HasSE || !m_TravelAtlas.Tokuno || !m_Reds))
                {
                    continue;
                }
                else
                {
                    string label = String.Format("<basefont color=#{0}>{1}</basefont>", MapHue(entry.Map), entry.Name);
                    AddHtml(180, 20 + (l * 20), 150, 20, label, false, false);
                    AddButton(145, 20 + (l * 20), 4015, 4016, (i + offset), GumpButtonType.Reply, 0);
                    l++;
                }
            }
        }
        public override void OnResponse(NetState state, RelayInfo info)
        {
            Mobile from = state.Mobile;

            if (info.ButtonID <= 0 || from == null || from.Deleted || m_TravelAtlas == null || m_TravelAtlas.Deleted)
            {
                return;
            }

            int id    = info.ButtonID / 100;
            int count = info.ButtonID % 100;

            if (id == 0 && count < 12)
            {
                from.SendGump(new TravelAtlasGump(from, m_TravelAtlas, count));
                return;
            }

            //Invalid checks
            if (id < 1 || id > 11 || (id == 10 && from.AccessLevel < AccessLevel.GameMaster))
            {
                id = 1;
            }

            string name = m_Entries[id - 1];

            TAEntry entry = GetEntry(name, count);

            bool gates = name == "Custom Areas";

            if (entry == null)
            {
                from.SendMessage("Error: Invalid Button Response - No Map Entries");
            }
            else if (((gates || name == "Felucca") && entry.Map == Map.Felucca && !m_TravelAtlas.Felucca))
            {
                from.SendMessage("Error: Invalid Button Response - Felucca Disabled");
            }
            else if ((gates || name == "Trammel") && entry.Map == Map.Trammel && (!m_TravelAtlas.Trammel || !m_Reds))
            {
                from.SendMessage("Error: Invalid Button Response - Trammel Disabled");
            }
            else if ((name == "Ilshenar") && entry.Map == Map.Ilshenar && (!m_TravelAtlas.Ilshenar || !m_HasLBR || !m_Reds))
            {
                from.SendMessage("Error: Invalid Button Response - Ilshenar Disabled");
            }
            else if (entry.Map == Map.Malas && (!Core.AOS || !m_HasAOS || !m_TravelAtlas.Malas || !m_Reds))
            {
                from.SendMessage("Error: Invalid Button Response - Malas Disabled");
            }
            else if (entry.Map == Map.Tokuno && (!Core.SE || !m_HasSE || !m_TravelAtlas.Tokuno || !m_Reds))
            {
                from.SendMessage("Error: Invalid Button Response - Tokuno Disabled");
            }
            else if (!from.InRange(m_TravelAtlas.GetWorldLocation(), 1) || from.Map != m_TravelAtlas.Map)
            {
                from.SendLocalizedMessage(1019002);                   // You are too far away to use the gate.
            }
            else if (from.Criminal)
            {
                from.SendLocalizedMessage(1005561, "", 0x22);                   // Thou'rt a criminal and cannot escape so easily.
            }
            else if (Server.Spells.SpellHelper.CheckCombat(from))
            {
                from.SendLocalizedMessage(1005564, "", 0x22);                   // Wouldst thou flee during the heat of battle??
            }
            else if (from.Spell != null)
            {
                from.SendLocalizedMessage(1049616);                   // You are too busy to do that at the moment.
            }
            else if (from.Map == entry.Map && from.InRange(entry.Destination, 1))
            {
                from.SendLocalizedMessage(1019003);                   // You are already there.
            }
            else
            {
                BaseCreature.TeleportPets(from, entry.Destination, entry.Map);

                from.Combatant = null;

                from.MoveToWorld(entry.Destination, entry.Map);

                if (!from.Hidden || from.AccessLevel == AccessLevel.Player)
                {
                    Effects.PlaySound(entry.Destination, entry.Map, 0x1FE);
                }
            }
        }