Пример #1
0
        protected override void CompileOptions(ToolbarGump toolbar, GumpButton clicked, Point loc, MenuGumpOptions opts)
        {
            if (toolbar == null)
            {
                return;
            }

            base.CompileOptions(toolbar, clicked, loc, opts);

            var user = toolbar.State.User;

            if (CanEdit || user.AccessLevel >= Toolbars.Access)
            {
                opts.Replace(
                    "Set Value",
                    new ListGumpEntry(
                        "Set Spell",
                        b =>
                {
                    toolbar.Refresh(true);
                    MenuGump menu1 = null;
                    var menuOpts1  = new MenuGumpOptions();

                    foreach (var kvp1 in SpellUtility.TreeStructure)
                    {
                        var circle = kvp1.Key;
                        var types  = kvp1.Value;

                        menuOpts1.AppendEntry(
                            new ListGumpEntry(
                                circle,
                                b2 =>
                        {
                            var menuOpts2 = new MenuGumpOptions();

                            foreach (var kvp2 in types)
                            {
                                var id   = SpellRegistry.GetRegistryNumber(kvp2.Key);
                                var si   = kvp2.Value;
                                var book = Spellbook.Find(user, id);

                                if (book != null && book.HasSpell(id))
                                {
                                    menuOpts2.AppendEntry(
                                        new ListGumpEntry(
                                            si.Name,
                                            menu2Button =>
                                    {
                                        SpellID = id;
                                        Value   = si.Name;
                                        Label   = String.Empty;
                                        toolbar.Refresh(true);
                                    },
                                            (SpellID == id) ? toolbar.HighlightHue : toolbar.TextHue));
                                }
                            }

                            if (menu1 != null)
                            {
                                SuperGump.Send(new MenuGump(user, clicked.Parent, menuOpts2, clicked));
                            }
                        }));
                    }

                    menu1 = new MenuGump(user, clicked.Parent, menuOpts1, clicked);
                    SuperGump.Send(menu1);
                },
                        toolbar.HighlightHue));
            }
        }
Пример #2
0
        protected virtual void OpenGump(Mobile m, TEntity t)
        {
            if (_Gump != null)
            {
                _Gump.Close();
                _Gump = null;
            }

            if (Names != null && Names.Count > 0)
            {
                m.SendMessage("Select a name from the registry...");

                var opts = new MenuGumpOptions();

                foreach (var name in Names.OrderByNatural())
                {
                    var n = name;

                    opts.AppendEntry(
                        new ListGumpEntry(
                            n,
                            () =>
                    {
                        _Gump = null;
                        ApplyName(m, t, n);
                    }));
                }

                var menu = new MenuGump(m as PlayerMobile, null, opts);

                menu.OnActionClose += HandleGumpClose;
                _Gump = menu.Send();
            }
            else
            {
                string name;
                int    limit;

                if (t is Item)
                {
                    name  = (t as Item).Name;
                    limit = 20;
                }
                else if (t is Mobile)
                {
                    name  = (t as Mobile).RawName;
                    limit = 20;
                }
                else
                {
                    name  = String.Empty;
                    limit = 0;
                }

                var dialog = new InputDialogGump(m as PlayerMobile)
                {
                    Title     = "",
                    Html      = "",
                    InputText = name,
                    Limit     = limit,
                    Callback  = (b, n) =>
                    {
                        _Gump = null;
                        ApplyName(m, t, n);
                    }
                };

                dialog.OnActionClose += HandleGumpClose;
                _Gump = dialog.Send();
            }
        }