Ejemplo n.º 1
0
            public override void OnResponse(NetState state, RelayInfo info)
            {
                if (info == null || state == null || state.Mobile == null)
                {
                    return;
                }

                int radiostate = -1;

                if (info.Switches.Length > 0)
                {
                    radiostate = info.Switches[0];
                }
                switch (info.ButtonID)
                {
                default:
                {
                    if (radiostate == 1)
                    {                                // accept
                        // add the attachment
                        XmlDialog xd = new XmlDialog();
                        XmlAttach.AttachTo(state.Mobile, m_Targeted, xd);

                        // open the editing gump
                        state.Mobile.SendGump(new XmlEditDialogGump(state.Mobile, true, xd, -1, 0, null, false, null, 0, 0));
                    }
                    break;
                }
                }
            }
Ejemplo n.º 2
0
 public TalkingBaseVendor(string title)
     : base(title)
 {
     // add the XmlDialog attachment
     m_DialogAttachment = new XmlDialog((string)null);
     XmlAttach.AttachTo(this, m_DialogAttachment);
 }
Ejemplo n.º 3
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                if (from == null)
                {
                    return;
                }

                PlayerMobile pm = targeted as PlayerMobile;

                if (pm != null && from.AccessLevel <= pm.AccessLevel)
                {
                    from.SendAsciiMessage("You can only do this to staff with lower privs");
                    return;
                }

                // does it have an xmldialog attachment?
                XmlDialog xd = XmlAttach.FindAttachment(targeted, typeof(XmlDialog)) as XmlDialog;

                if (xd == null)
                {
                    from.SendMessage("Target has no XmlDialog attachment");

                    // TODO: ask whether they would like to add one
                    from.SendGump(new XmlConfirmAddGump(from, targeted));

                    return;
                }

                from.SendGump(new XmlEditDialogGump(from, true, xd, -1, 0, null, false, null, 0, 0));
            }
Ejemplo n.º 4
0
 public TalkingBaseCreature(
     AIType ai, FightMode mode, int iRangePerception, int iRangeFight, double dActiveSpeed, double dPassiveSpeed)
     : base(ai, mode, iRangePerception, iRangeFight, dActiveSpeed, dPassiveSpeed)
 {
     // add the XmlDialog attachment
     m_DialogAttachment = new XmlDialog((string)null);
     XmlAttach.AttachTo(this, m_DialogAttachment);
 }
Ejemplo n.º 5
0
        public void Execute()
        {
            logger.WriteLine("ShowXmlCommand.Execute()");

            using (var dialog = new XmlDialog())
            {
                dialog.ShowDialog(owner);
            }
        }
Ejemplo n.º 6
0
 public static void Initialize()
 {
     // reestablish the DialogAttachment assignment
     foreach (Mobile m in World.Mobiles.Values)
     {
         if (m is TalkingBaseCreature)
         {
             XmlDialog xa = XmlAttach.FindAttachment(m, typeof(XmlDialog)) as XmlDialog;
             ((TalkingBaseCreature)m).DialogAttachment = xa;
         }
     }
 }
Ejemplo n.º 7
0
        public static new void Initialize()
        {
            foreach (Mobile m in World.Mobiles.Values)
            {
                if (m is TalkingBaseEscortable)
                {
                    // reestablish the DialogAttachment assignment
                    XmlDialog xa = (XmlDialog)XmlAttach.FindAttachment(m, typeof(XmlDialog));
                    ((TalkingBaseCreature)m).DialogAttachment = xa;

                    // initialize Destination after world load (now, regions are loaded)
                    TalkingBaseEscortable t = ((TalkingBaseEscortable)m);
                    t.Destination = t.m_DestinationString;
                }
            }
        }
Ejemplo n.º 8
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                if (from == null)
                {
                    return;
                }

                // does it have an xmldialog attachment?
                XmlDialog xd = XmlAttach.FindAttachment(targeted, typeof(XmlDialog)) as XmlDialog;

                if (xd == null)
                {
                    from.SendMessage("Target has no XmlDialog attachment");

                    // TODO: ask whether they would like to add one
                    from.SendGump(new XmlConfirmAddGump(from, targeted));

                    return;
                }

                from.SendGump(new XmlEditDialogGump(from, true, xd, -1, 0, null, false, null, 0, 0));
            }
Ejemplo n.º 9
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            if (version < 5)
            {
                // have to add the XmlDialog attachment
                m_DialogAttachment = new XmlDialog((string)null);
                XmlAttach.AttachTo(this, m_DialogAttachment);
            }

            switch (version)
            {
            case 7:
                m_EItemID  = reader.ReadInt();
                m_Duration = reader.ReadInt();
                m_Offset   = reader.ReadPoint3D();
                m_EHue     = reader.ReadInt();
                goto case 6;

            case 6:
                TalkText = reader.ReadString();
                break;

            case 5:
            {
                break;
            }

            case 4:
            {
                int count = reader.ReadInt();

                SpeechEntries = new ArrayList();
                for (int i = 0; i < count; i++)
                {
                    XmlDialog.SpeechEntry newentry = new XmlDialog.SpeechEntry();

                    newentry.Condition = reader.ReadString();

                    SpeechEntries.Add(newentry);
                }

                goto case 3;
            }

            case 3:
            {
                TriggerOnCarried   = reader.ReadString();
                NoTriggerOnCarried = reader.ReadString();
                goto case 2;
            }

            case 2:
            {
                SpeechPace = reader.ReadInt();

                int count = reader.ReadInt();
                if (version < 4)
                {
                    SpeechEntries = new ArrayList();
                }
                for (int i = 0; i < count; i++)
                {
                    if (version < 4)
                    {
                        XmlDialog.SpeechEntry newentry = new XmlDialog.SpeechEntry();

                        newentry.PrePause         = reader.ReadInt();
                        newentry.LockConversation = reader.ReadBool();
                        newentry.AllowNPCTrigger  = reader.ReadBool();
                        newentry.SpeechStyle      = (MessageType)reader.ReadInt();

                        SpeechEntries.Add(newentry);
                    }
                    else
                    {
                        XmlDialog.SpeechEntry newentry = (XmlDialog.SpeechEntry)SpeechEntries[i];

                        newentry.PrePause         = reader.ReadInt();
                        newentry.LockConversation = reader.ReadBool();
                        newentry.AllowNPCTrigger  = reader.ReadBool();
                        newentry.SpeechStyle      = (MessageType)reader.ReadInt();
                    }
                }
                goto case 1;
            }

            case 1:
            {
                ActivePlayer = reader.ReadMobile();
                goto case 0;
            }

            case 0:
            {
                IsActive        = reader.ReadBool();
                ResetTime       = reader.ReadTimeSpan();
                LastInteraction = reader.ReadDateTime();
                AllowGhostTrig  = reader.ReadBool();
                ProximityRange  = reader.ReadInt();
                Running         = reader.ReadBool();
                ConfigFile      = reader.ReadString();
                int count = reader.ReadInt();
                if (version < 2)
                {
                    SpeechEntries = new ArrayList();
                }
                for (int i = 0; i < count; i++)
                {
                    if (version < 2)
                    {
                        XmlDialog.SpeechEntry newentry = new XmlDialog.SpeechEntry();

                        newentry.EntryNumber = reader.ReadInt();
                        newentry.ID          = reader.ReadInt();
                        newentry.Text        = reader.ReadString();
                        newentry.Keywords    = reader.ReadString();
                        newentry.Action      = reader.ReadString();
                        newentry.DependsOn   = reader.ReadInt().ToString();
                        newentry.Pause       = reader.ReadInt();

                        SpeechEntries.Add(newentry);
                    }
                    else
                    {
                        XmlDialog.SpeechEntry newentry = (XmlDialog.SpeechEntry)SpeechEntries[i];

                        newentry.EntryNumber = reader.ReadInt();
                        newentry.ID          = reader.ReadInt();
                        newentry.Text        = reader.ReadString();
                        newentry.Keywords    = reader.ReadString();
                        newentry.Action      = reader.ReadString();
                        newentry.DependsOn   = reader.ReadInt().ToString();
                        newentry.Pause       = reader.ReadInt();
                    }
                }
                // read in the current entry number. Note this will also set the current entry
                EntryNumber = reader.ReadInt();
                // restart the timer if it was active
                bool isrunning = reader.ReadBool();
                if (isrunning)
                {
                    Mobile   trigmob = reader.ReadMobile();
                    TimeSpan delay   = reader.ReadTimeSpan();
                    if (DialogAttachment != null)
                    {
                        DialogAttachment.DoTimer(delay, trigmob);
                    }
                }
                break;
            }
            }
        }
Ejemplo n.º 10
0
        public static void ProcessXmlEditBookEntry(Mobile from, object[] args, string text)
        {
            if (from == null || args == null || args.Length < 6)
            {
                return;
            }

            XmlDialog dialog = (XmlDialog)args[0];

            XmlDialog.SpeechEntry entry = (XmlDialog.SpeechEntry)args[1];
            int    textid      = (int)args[2];
            int    selected    = (int)args[3];
            int    displayfrom = (int)args[4];
            string savefile    = (string)args[5];

            // place the book text into the entry by type
            switch (textid)
            {
            case 0:                     // text
                if (entry != null)
                {
                    entry.Text = text;
                }
                break;

            case 1:                     // keywords
                if (entry != null)
                {
                    entry.Keywords = text;
                }
                break;

            case 2:                     // condition
                if (entry != null)
                {
                    entry.Condition = text;
                }
                break;

            case 3:                     // action
                if (entry != null)
                {
                    entry.Action = text;
                }
                break;

            case 4:                     // gump
                if (entry != null)
                {
                    entry.Gump = text;
                }
                break;

            case 5:                     // trigoncarried
                if (dialog != null)
                {
                    dialog.TriggerOnCarried = text;
                }
                break;

            case 6:                     // notrigoncarried
                if (dialog != null)
                {
                    dialog.NoTriggerOnCarried = text;
                }
                break;
            }


            from.CloseGump(typeof(XmlEditDialogGump));

            //from.SendGump( new XmlEditDialogGump(from, false, m_Dialog, selected, displayfrom, savefilename, false, null, X, Y) );
            from.SendGump(new XmlEditDialogGump(from, true, dialog, selected, displayfrom, savefile, false, null, 0, 0));
        }
Ejemplo n.º 11
0
        public XmlEditDialogGump(Mobile from, bool firststart,
                                 XmlDialog dialog, int selected, int displayfrom, string savefilename,
                                 bool selectall, bool [] selectionlist, int X, int Y) : base(X, Y)
        {
            if (from == null || dialog == null)
            {
                return;
            }

            m_Dialog = dialog;
            m_From   = from;

            m_SelectionList = selectionlist;
            if (m_SelectionList == null)
            {
                m_SelectionList = new bool[MaxEntries];
            }
            SaveFilename = savefilename;

            DisplayFrom = displayfrom;
            Selected    = selected;

            // fill the list with the XmlDialog entries
            m_SearchList = dialog.SpeechEntries;

            // prepare the page
            int height = 500;


            AddPage(0);

            AddBackground(0, 0, 755, height, 5054);
            AddAlphaRegion(0, 0, 755, height);

            // add the separators
            AddImageTiled(10, 80, 735, 4, 0xBB9);
            AddImageTiled(10, height - 212, 735, 4, 0xBB9);
            AddImageTiled(10, height - 60, 735, 4, 0xBB9);

            // add the xmldialog properties
            int y  = 5;
            int w  = 140;
            int x  = 5;
            int lw = 0;

            // the dialog name
            AddImageTiled(x, y, w, 21, 0x23F4);
            // get the name of the object this is attached to

            if (m_Dialog.AttachedTo is Item)
            {
                Name = ((Item)m_Dialog.AttachedTo).Name;
            }
            else
            if (m_Dialog.AttachedTo is Mobile)
            {
                Name = ((Mobile)m_Dialog.AttachedTo).Name;
            }
            if (Name == null && m_Dialog.AttachedTo != null)
            {
                Name = m_Dialog.AttachedTo.GetType().Name;
            }
            AddLabelCropped(x, y, w, 21, 0, Name);


            x += w + lw + 20;
            w  = 40;
            lw = 90;
            // add the proximity range
            AddLabel(x, y, 0x384, "ProximityRange");
            AddImageTiled(x + lw, y, w, 21, 0xBBC);
            AddTextEntry(x + lw, y, w, 21, 0, 140, m_Dialog.ProximityRange.ToString());

            x += w + lw + 20;
            w  = 100;
            lw = 60;
            // reset time
            AddLabel(x, y, 0x384, "ResetTime");
            AddImageTiled(x + lw, y, w, 21, 0xBBC);
            AddTextEntry(x + lw, y, w, 21, 0, 141, m_Dialog.ResetTime.ToString());

            x += w + lw + 20;
            w  = 40;
            lw = 65;
            // speech pace
            AddLabel(x, y, 0x384, "SpeechPace");
            AddImageTiled(x + lw, y, w, 21, 0xBBC);
            AddTextEntry(x + lw, y, w, 21, 0, 142, m_Dialog.SpeechPace.ToString());

            x += w + lw + 20;
            w  = 30;
            lw = 55;
            // allow ghost triggering
            AddLabel(x, y, 0x384, "GhostTrig");
            AddCheck(x + lw, y, 0xD2, 0xD3, m_Dialog.AllowGhostTrig, 260);

            // add the triggeroncarried
            y += 27;
            w  = 600;
            x  = 10;
            lw = 100;
            AddLabel(10, y, 0x384, "TrigOnCarried");
            AddImageTiled(x + lw, y, w, 21, 0xBBC);
            AddTextEntry(x + lw, y, w, 21, 0, 150, TruncateLabel(m_Dialog.TriggerOnCarried));
            AddButton(720, y, 0xFAB, 0xFAD, 5005, GumpButtonType.Reply, 0);

            // add the notriggeroncarried
            y += 22;
            w  = 600;
            x  = 10;
            lw = 100;
            AddLabel(x, y, 0x384, "NoTrigOnCarried");
            AddImageTiled(x + lw, y, w, 21, 0xBBC);
            AddTextEntry(x + lw, y, w, 21, 0, 151, TruncateLabel(m_Dialog.NoTriggerOnCarried));
            AddButton(720, y, 0xFAB, 0xFAD, 5006, GumpButtonType.Reply, 0);

            y = 88;
            // column labels
            AddLabel(10, y, 0x384, "Edit");
            AddLabel(45, y, 0x384, "#");
            AddLabel(95, y, 0x384, "ID");
            AddLabel(145, y, 0x384, "Depends");
            AddLabel(195, y, 0x384, "Keywords");
            AddLabel(295, y, 0x384, "Text");
            AddLabel(540, y, 0x384, "Action");
            AddLabel(602, y, 0x384, "Condition");
            AddLabel(664, y, 0x384, "Gump");

            // display the select-all-displayed toggle
            AddButton(730, y, 0xD2, 0xD3, 3999, GumpButtonType.Reply, 0);

            y -= 10;
            for (int i = 0; i < MaxEntries; i++)
            {
                int index = i + DisplayFrom;
                if (m_SearchList == null || index >= m_SearchList.Count)
                {
                    break;
                }
                int page = (int)(i / MaxEntriesPerPage);
                if (i % MaxEntriesPerPage == 0)
                {
                    AddPage(page + 1);
                    // add highlighted page button
                    //AddImageTiled( 235+page*25, 448, 25, 25, 0xBBC );
                    //AddImage( 238+page*25, 450, 0x8B1+page );
                }

                // background for search results area
                AddImageTiled(235, y + 22 * (i % MaxEntriesPerPage) + 30, 386, 23, 0x52);
                AddImageTiled(236, y + 22 * (i % MaxEntriesPerPage) + 31, 384, 21, 0xBBC);


                XmlDialog.SpeechEntry s = (XmlDialog.SpeechEntry)m_SearchList[index];

                if (s == null)
                {
                    continue;
                }

                int texthue = 0;

                bool sel = false;

                if (m_SelectionList != null && i < m_SelectionList.Length)
                {
                    sel = m_SelectionList[i];
                }

                // entries with the selection box checked are highlighted in red
                if (sel)
                {
                    texthue = 33;
                }

                // the selected entry is highlighted in green
                if (i == Selected)
                {
                    texthue = 68;
                }

                x = 10;
                w = 35;
                // add the Edit button for each entry
                AddButton(10, y + 22 * (i % MaxEntriesPerPage) + 30, 0xFAE, 0xFAF, 1000 + i, GumpButtonType.Reply, 0);

                x += w;
                w  = 50;
                // display the entry number
                AddImageTiled(x, y + 22 * (i % MaxEntriesPerPage) + 31, w, 21, 0xBBC);
                AddLabel(x, y + 22 * (i % MaxEntriesPerPage) + 31, texthue, s.EntryNumber.ToString());

                x += w;
                w  = 50;
                // display the entry ID
                AddImageTiled(x, y + 22 * (i % MaxEntriesPerPage) + 31, w, 21, 0x23F4);
                AddLabel(x, y + 22 * (i % MaxEntriesPerPage) + 31, texthue, s.ID.ToString());

                x += w;
                w  = 50;
                // display the entry dependson
                AddImageTiled(x, y + 22 * (i % MaxEntriesPerPage) + 31, w, 21, 0xBBC);
                AddLabel(x, y + 22 * (i % MaxEntriesPerPage) + 31, texthue, s.DependsOn);

                x += w;
                w  = 100;
                // display the entry keywords
                AddImageTiled(x, y + 22 * (i % MaxEntriesPerPage) + 31, w, 21, 0x23F4);
                AddLabelCropped(x, y + 22 * (i % MaxEntriesPerPage) + 31, w - 5, 21, texthue, TruncateLabel(s.Keywords));

                x += w;
                w  = 245;
                // display the entry text
                AddImageTiled(x, y + 22 * (i % MaxEntriesPerPage) + 31, w, 21, 0xBBC);
                AddLabelCropped(x, y + 22 * (i % MaxEntriesPerPage) + 31, w - 5, 21, texthue, TruncateLabel(s.Text));

                x += w;
                w  = 62;
                // display the action text
                AddImageTiled(x, y + 22 * (i % MaxEntriesPerPage) + 31, w, 21, 0x23F4);
                AddLabelCropped(x, y + 22 * (i % MaxEntriesPerPage) + 31, w - 5, 21, texthue, TruncateLabel(s.Action));

                x += w;
                w  = 62;
                // display the condition text
                AddImageTiled(x, y + 22 * (i % MaxEntriesPerPage) + 31, w, 21, 0xBBC);
                AddLabelCropped(x, y + 22 * (i % MaxEntriesPerPage) + 31, w - 5, 21, texthue, TruncateLabel(s.Condition));

                x += w;
                w  = 62;
                // display the gump text
                AddImageTiled(x, y + 22 * (i % MaxEntriesPerPage) + 31, w, 21, 0x23F4);
                AddLabelCropped(x, y + 22 * (i % MaxEntriesPerPage) + 31, w - 5, 21, texthue, TruncateLabel(s.Gump));

                // display the selection button
                AddButton(730, y + 22 * (i % MaxEntriesPerPage) + 32, (sel? 0xD3:0xD2), (sel? 0xD2:0xD3), 4000 + i, GumpButtonType.Reply, 0);
            }


            // display the selected entry information for editing
            XmlDialog.SpeechEntry sentry = null;
            if (Selected >= 0 && Selected + DisplayFrom >= 0 && Selected + DisplayFrom < m_SearchList.Count)
            {
                sentry = (XmlDialog.SpeechEntry)m_SearchList[Selected + DisplayFrom];
            }

            if (sentry != null)
            {
                y = height - 200;

                // add the entry parameters
                lw = 15;
                w  = 40;
                x  = 10;
                int spacing = 11;

                // entry number
                AddLabel(x, y, 0x384, "#");
                AddImageTiled(x + lw, y, w, 21, 0xBBC);
                AddTextEntry(x + lw, y, w, 21, 0, 200, sentry.EntryNumber.ToString());

                x += w + lw + spacing;
                w  = 40;
                lw = 17;
                // ID number
                AddLabel(x, y, 0x384, "ID");
                AddImageTiled(x + lw, y, w, 21, 0xBBC);
                AddTextEntry(x + lw, y, w, 21, 0, 201, sentry.ID.ToString());

                x += w + lw + spacing;
                w  = 40;
                lw = 65;
                // depends on
                AddLabel(x, y, 0x384, "DependsOn");
                AddImageTiled(x + lw, y, w, 21, 0xBBC);
                AddTextEntry(x + lw, y, w, 21, 0, 202, sentry.DependsOn);

                x += w + lw + spacing;
                w  = 35;
                lw = 57;
                // prepause
                AddLabel(x, y, 0x384, "PrePause");
                AddImageTiled(x + lw, y, w, 21, 0xBBC);
                AddTextEntry(x + lw, y, w, 21, 0, 203, sentry.PrePause.ToString());

                x += w + lw + spacing;
                w  = 35;
                lw = 37;
                // pause
                AddLabel(x, y, 0x384, "Pause");
                AddImageTiled(x + lw, y, w, 21, 0xBBC);
                AddTextEntry(x + lw, y, w, 21, 0, 204, sentry.Pause.ToString());

                x += w + lw + spacing;
                w  = 37;
                lw = 26;
                // speech hue
                AddLabel(x, y, 0x384, "Hue");
                AddImageTiled(x + lw, y, w, 21, 0xBBC);
                AddTextEntry(x + lw, y, w, 21, 0, 205, sentry.SpeechHue.ToString());

                x += w + lw + spacing;
                w  = 20;
                lw = 52;
                // lock conversation
                AddLabel(x, y, 0x384, "IgnoreCar");
                AddCheck(x + lw, y, 0xD2, 0xD3, sentry.IgnoreCarried, 252);

                x += w + lw + spacing;
                w  = 20;
                lw = 42;
                // lock conversation
                AddLabel(x, y, 0x384, "LockOn");
                AddCheck(x + lw, y, 0xD2, 0xD3, sentry.LockConversation, 250);

                x += w + lw + spacing;
                w  = 20;
                lw = 54;
                // npctrigger
                AddLabel(x, y, 0x384, "AllowNPC");
                AddCheck(x + lw, y, 0xD2, 0xD3, sentry.AllowNPCTrigger, 251);


                w = 650;
                x = 70;

                y += 27;
                // add the keyword entry
                AddLabel(10, y, 0x384, "Keywords");
                AddImageTiled(x, y, w, 21, 0xBBC);
                AddTextEntry(x + 1, y, w, 21, 0, 101, sentry.Keywords);
                AddButton(720, y, 0xFAB, 0xFAD, 5001, GumpButtonType.Reply, 0);

                y += 22;
                // add the text entry
                AddLabel(10, y, 0x384, "Text");
                AddImageTiled(x, y, w, 21, 0xBBC);
                AddTextEntry(x + 1, y, w, 21, 0, 100, sentry.Text);
                AddButton(720, y, 0xFAB, 0xFAD, 5000, GumpButtonType.Reply, 0);


                y += 22;
                // add the condition string entry
                AddLabel(10, y, 0x384, "Condition");
                AddImageTiled(x, y, w, 21, 0xBBC);
                AddTextEntry(x + 1, y, w, 21, 0, 102, sentry.Condition);
                AddButton(720, y, 0xFAB, 0xFAD, 5002, GumpButtonType.Reply, 0);

                y += 22;
                // add the action string entry
                AddLabel(10, y, 0x384, "Action");
                AddImageTiled(x, y, w, 21, 0xBBC);
                AddTextEntry(x + 1, y, w, 21, 0, 103, sentry.Action);
                AddButton(720, y, 0xFAB, 0xFAD, 5003, GumpButtonType.Reply, 0);

                y += 22;
                // add the gump string entry
                AddLabel(10, y, 0x384, "Gump");
                AddImageTiled(x, y, w, 21, 0xBBC);
                AddTextEntry(x + 1, y, w, 21, 0, 104, sentry.Gump);
                AddButton(720, y, 0xFAB, 0xFAD, 5004, GumpButtonType.Reply, 0);
            }

            y = height - 50;

            AddLabel(10, y, 0x384, "Config:");
            AddImageTiled(50, y, 120, 19, 0x23F4);
            AddLabel(50, y, 0, m_Dialog.ConfigFile);

            if (from.AccessLevel >= XmlSpawner.DiskAccessLevel)
            {
                // add the save entry
                AddButton(185, y, 0xFA8, 0xFAA, 159, GumpButtonType.Reply, 0);
                AddLabel(218, y, 0x384, "Save to file:");
                AddImageTiled(300, y, 180, 19, 0xBBC);
                AddTextEntry(300, y, 180, 19, 0, 300, SaveFilename);
            }

            // display the item list
            if (m_SearchList != null)
            {
                AddLabel(495, y, 68, String.Format("{0} Entries", m_SearchList.Count));
                int last = DisplayFrom + MaxEntries < m_SearchList.Count ? DisplayFrom + MaxEntries : m_SearchList.Count;
                if (last > 0)
                {
                    AddLabel(595, y, 68, String.Format("Displaying {0}-{1}", DisplayFrom, last - 1));
                }
            }

            y = height - 25;

            // add run status display
            if (m_Dialog.Running)
            {
                AddButton(10, y - 5, 0x2A4E, 0x2A3A, 100, GumpButtonType.Reply, 0);
                AddLabel(43, y, 0x384, "On");
            }
            else
            {
                AddButton(10, y - 5, 0x2A62, 0x2A3A, 100, GumpButtonType.Reply, 0);
                AddLabel(43, y, 0x384, "Off");
            }

            // add the Refresh/Sort button
            AddButton(80, y, 0xFAB, 0xFAD, 700, GumpButtonType.Reply, 0);
            AddLabel(113, y, 0x384, "Refresh");

            // add the Add button
            AddButton(185, y, 0xFAB, 0xFAD, 155, GumpButtonType.Reply, 0);
            AddLabel(218, y, 0x384, "Add");

            // add the Delete button
            AddButton(255, y, 0xFB1, 0xFB3, 156, GumpButtonType.Reply, 0);
            AddLabel(283, y, 0x384, "Delete");

            // add the page buttons
            for (int i = 0; i < (int)(MaxEntries / MaxEntriesPerPage); i++)
            {
                AddButton(513 + i * 25, y, 0x8B1 + i, 0x8B1 + i, 0, GumpButtonType.Page, 1 + i);
            }

            // add the advance pageblock buttons
            AddButton(510 + 25 * (int)(MaxEntries / MaxEntriesPerPage), y, 0x15E1, 0x15E5, 201, GumpButtonType.Reply, 0); // block forward
            AddButton(490, y, 0x15E3, 0x15E7, 202, GumpButtonType.Reply, 0);                                              // block backward

            // add the displayfrom entry
            AddLabel(555, y, 0x384, "Display");
            AddImageTiled(595, y, 60, 21, 0xBBC);
            AddTextEntry(595, y, 60, 21, 0, 400, DisplayFrom.ToString());
            AddButton(655, y, 0xFAB, 0xFAD, 9998, GumpButtonType.Reply, 0);

            //AddLabel( 610, y, 0x384, "Select All" );
            // display the select-all toggle
            //AddButton( 670, y, (SelectAll? 0xD3:0xD2), (SelectAll? 0xD2:0xD3), 3998, GumpButtonType.Reply, 0 );
        }