Represents a single entry of a context menu. ContextMenu
Beispiel #1
0
        /// <summary>
        ///     Instantiates a new ContextMenu instance.
        /// </summary>
        /// <param name="from">
        ///     The <see cref="Mobile" /> who opened this ContextMenu.
        ///     <seealso cref="From" />
        /// </param>
        /// <param name="target">
        ///     The <see cref="Mobile" /> or <see cref="Item" /> for which this ContextMenu is on.
        ///     <seealso cref="Target" />
        /// </param>
        public ContextMenu(Mobile from, IEntity target)
        {
            From   = from;
            Target = target;

            List <ContextMenuEntry> list = new List <ContextMenuEntry>();

            if (target is Mobile mobile)
            {
                mobile.GetContextMenuEntries(from, list);
            }
            else if (target is Item item)
            {
                item.GetContextMenuEntries(from, list);
            }

            EventSink.InvokeContextMenu(new ContextMenuEventArgs(From, Target, list));

            for (var index = 0; index < list.Count; index++)
            {
                ContextMenuEntry e = list[index];

                e.Owner = this;
            }

            Entries = list.ToArray();

            list.Clear();
            list.TrimExcess();
        }
Beispiel #2
0
        public static bool Display(Mobile m, IEntity target)
        {
            if (m == null || target == null || m.Map != target.Map)
            {
                return(false);
            }

            if (target is Mobile && !Utility.InUpdateRange(m, target.Location))
            {
                return(false);
            }

            if (target is Item item && !Utility.InUpdateRange(m, item.GetWorldLocation()))
            {
                return(false);
            }

            if (!m.CheckContextMenuDisplay(target))
            {
                return(false);
            }

            ContextMenu c = new ContextMenu(m, target);

            if (c.Entries.Length <= 0)
            {
                return(false);
            }

            if (target is Item i)
            {
                object root = i.RootParent;

                if (root is Mobile mobile && mobile != m && mobile.AccessLevel >= m.AccessLevel)
                {
                    for (var index = 0; index < c.Entries.Length; index++)
                    {
                        ContextMenuEntry e = c.Entries[index];

                        if (!e.NonLocalUse)
                        {
                            e.Enabled = false;
                        }
                    }
                }
            }

            m.ContextMenu = c;

            return(true);
        }
Beispiel #3
0
        public void Dispose()
        {
            if (IsDisposed)
            {
                return;
            }

            IsDisposed = true;

            if (Entries != null)
            {
                for (var index = 0; index < Entries.Length; index++)
                {
                    ContextMenuEntry e = Entries[index];

                    if (e != null)
                    {
                        e.Dispose();
                    }
                }

                Entries = null;
            }

            if (From != null)
            {
                if (From.ContextMenu == this)
                {
                    From.ContextMenu = null;
                }

                From = null;
            }

            Target = null;
        }
Beispiel #4
0
        public static void AddContextMenuEntries(Mobile from, Item item, List<ContextMenuEntry> list)
        {
            if (!item.IsChildOf(from.Backpack) && item.Parent != from)
                return;

            PlayerMobile pm = from as PlayerMobile;

            if (pm == null)
                return;

            int typeentry = 0;
            if (pm.ToggleCutClippings)
                typeentry = 1112282;
            if (pm.ToggleCutReeds)
                typeentry = 1112283;

            ContextMenuEntry clippingEntry = new ContextMenuEntry(typeentry);
            clippingEntry.Color = 0x421F;
            //list.Add( clippingEntry );

            list.Add(new ToggleClippings(pm, true, false, 1112282)); //set to clip plants
            list.Add(new ToggleClippings(pm, false, true, 1112283)); //Set to cut reeds
        }
        public static void AddContextMenuEntries( Mobile from, Item item, ArrayList list, HarvestSystem system )
        {
            if ( system != Mining.System )
                return;

            if ( !item.IsChildOf( from.Backpack ) && item.Parent != from )
                return;

            PlayerMobile pm = from as PlayerMobile;

            if ( pm == null )
                return;

            ContextMenuEntry miningEntry = new ContextMenuEntry( pm.ToggleMiningStone ? 6179 : 6178 );
            miningEntry.Color = 0x421F;
            list.Add( miningEntry );

            list.Add( new ToggleMiningStoneEntry( pm, false, 6176 ) );
            list.Add( new ToggleMiningStoneEntry( pm, true, 6177 ) );
        }
Beispiel #6
0
        public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
        {
            base.GetContextMenuEntries( from, list );

            if ( !IsChildOf( from.Backpack ) )
                return;

            PlayerMobile pm = from as PlayerMobile;

            if ( pm.BardMastery == BardMastery.Discordance )
            {
                foreach ( var element in ElementalDamages )
                {
                    if ( element != pm.BardElementDamage )
                        list.Add( new SwitchDamageEntry( pm, this, element ) );
                }
            }

            if ( DateTime.Now > pm.NextBardMasterySwitch )
            {
                ContextMenuEntry titleEntry = new ContextMenuEntry( 1151948 ); // Switch Mastery
                titleEntry.Enabled = false;
                list.Add( titleEntry );

                foreach ( var mastery in BardMastery.AllMasteries )
                {
                    if ( mastery != pm.BardMastery )
                        list.Add( new SwitchMasteryEntry( pm, this, mastery ) );
                }
            }
        }
Beispiel #7
0
        public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
        {
            base.GetContextMenuEntries( from, list );

            if ( Controlled && ControlMaster == from )
            {
                PlayerMobile pm = from as PlayerMobile;

                if ( pm == null )
                    return;

                ContextMenuEntry miningEntry = new ContextMenuEntry( pm.ToggleMiningStone ? 6179 : 6178 );
                miningEntry.Color = 0x421F;
                list.Add( miningEntry );

                list.Add( new BaseHarvestTool.ToggleMiningStoneEntry( pm, false, 6176 ) );
                list.Add( new BaseHarvestTool.ToggleMiningStoneEntry( pm, true, 6177 ) );
            }
        }
Beispiel #8
0
        public static void AddContextMenuEntries(Mobile from, Item item, List<ContextMenuEntry> list, HarvestSystem system)
        {
            if (system != Mining.System)
                return;

            if (!item.IsChildOf(from.Backpack) && item.Parent != from)
                return;

            PlayerMobile pm = from as PlayerMobile;

            if (pm == null)
                return;

            int typeentry = 0;

            if (pm.ToggleMiningStone)
                typeentry = 6179;
            if (pm.ToggleMiningGem)
                typeentry = 1112239;
            if (!pm.ToggleMiningStone && !pm.ToggleMiningGem)
                typeentry = 6178;

            ContextMenuEntry miningEntry = new ContextMenuEntry(typeentry);
            miningEntry.Color = 0x421F;
            list.Add(miningEntry);

            list.Add(new ToggleMiningStoneEntry(pm, false, false, 6176));
            list.Add(new ToggleMiningStoneEntry(pm, true, false, 6177));
            list.Add(new ToggleMiningStoneEntry(pm, false, true, 1112237));
        }