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)); } }
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(); } }