ServUO Version
Publish Unknown
Ultima Expansion
The Second Age
I'm trying to add a single click to open a gump to change the ethereal into a ethereal deed
this is what I have added but the gump doesn't appear in game
ethereal gump:
        public override void OnSingleClick(Mobile from)
        {
            if (!IsChildOf(from.Backpack))
            {
                from.SendLocalizedMessage(1042001);
            }
            else
            {
                from.SendGump(new EtherealREScrollGump(from, this));
            }
        }
 
Add this method to your item to replace the onsingleclick
Code:
        public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
        {
            base.GetContextMenuEntries(from, list);

            if (RootParent == from && from.Alive && Movable)
                list.Add(new EtherealDeedEntry(from));
        }

then create a class
Code:
public class EtherealDeedEntry : ContextMenuEntry
{
    private Mobile user;

    public EtherealDeedEntry(Mobile m) : base(1025359) // deed 1025359
    {
        user = m;
    }

    public override void OnClick()
    {
        if (Owner.Target is Item i && !i.IsChildOf(user.Backpack))
        {
            user.SendLocalizedMessage(1042001);
        }
        else
        {
            user.SendGump(new EtherealREScrollGump(user, Owner.Target));
        }
    }
}

you can swap out if (Owner.Target is Item i ...for your ethereal class name ie: if (Owner.Target is SomeEthereal se && se.IsChildOf() ...
 
my server is old runuo 1.0 and uses Arraylist rather then context.
here are my errors
- Error: Scripts\Mobiles\Animals\Mounts\Ethereals.cs: CS1026: (line 90, column 34) ) expected
- Error: Scripts\Mobiles\Animals\Mounts\Ethereals.cs: CS1002: (line 90, column 66) ; expected
- Error: Scripts\Mobiles\Animals\Mounts\Ethereals.cs: CS1525: (line 90, column 66) Invalid expression term ')'
- Error: Scripts\Mobiles\Animals\Mounts\Ethereals.cs: CS1002: (line 90, column 67) ; expected
- Error: Scripts\Mobiles\Animals\Mounts\Ethereals.cs: CS1525: (line 94, column 9) Invalid expression term 'else'
- Error: Scripts\Mobiles\Animals\Mounts\Ethereals.cs: CS1002: (line 94, column 13) ; expected

this is the full script
ethereal:
using System;
using Server.Mobiles;
using Server.Items;
using Server.Spells;
using Server.Gumps;
using Server.ContextMenus;
using System.Collections;

namespace Server.Mobiles
{
    public class EtherealMount : Item, IMount, IMountItem, Engines.VeteranRewards.IRewardItem
    {
        private int m_MountedID;
        private int m_RegularID;
        private Mobile m_Rider;
        private bool m_IsRewardItem;

        [CommandProperty( AccessLevel.GameMaster )]
        public bool IsRewardItem
        {
            get{ return m_IsRewardItem; }
            set{ m_IsRewardItem = value; }
        }

        [Constructable]
        public EtherealMount( int itemID, int mountID ) : base( itemID )
        {
            m_MountedID = mountID;
            m_RegularID = itemID;
            m_Rider = null;

            Layer = Layer.Invalid;

            LootType = LootType.Blessed;
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public int MountedID
        {
            get
            {
                return m_MountedID;
            }
            set
            {
                if ( m_MountedID != value )
                {
                    m_MountedID = value;

                    if ( m_Rider != null )
                        ItemID = value;
                }
            }
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public int RegularID
        {
            get
            {
                return m_RegularID;
            }
            set
            {
                if ( m_RegularID != value )
                {
                    m_RegularID = value;

                    if ( m_Rider == null )
                        ItemID = value;
                }
            }
        }

        public EtherealMount( Serial serial ) : base( serial )
        {
        }

public class EtherealDeedEntry : ContextMenuEntry
{
    private Mobile user;

    public EtherealDeedEntry(Mobile m) : base(1025359) // deed 1025359
    {
        user = m;
    }

    public override void OnClick()
    {
        if (Owner.Target is Item i && !i.IsChildOf(user.Backpack))
        {
            user.SendLocalizedMessage(1042001);
        }
        else
        {
            user.SendGump(new EtherealREScrollGump(user, Owner.Target));
        }
    }
}       

        public override bool DisplayLootType{ get{ return false; } }

        public virtual int FollowerSlots{ get{ return 0; } }

        public void RemoveFollowers()
        {
            if ( m_Rider != null )
                m_Rider.Followers -= FollowerSlots;

            if ( m_Rider != null && m_Rider.Followers < 0 )
                m_Rider.Followers = 0;
        }

        public void AddFollowers()
        {
            if ( m_Rider != null )
                m_Rider.Followers += FollowerSlots;
        }

        public override void GetContextMenuEntries(Mobile from, ArrayList list)
        {
            base.GetContextMenuEntries(from, list);

            if (RootParent == from && from.Alive && Movable)
                list.Add(new EtherealDeedEntry(from));
        }       


        public override void OnDoubleClick( Mobile from )
        {
            if ( !IsChildOf( from.Backpack ) )
                from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
            else if ( m_IsRewardItem && !Engines.VeteranRewards.RewardSystem.CheckIsUsableBy( from, this, null ) )
                return;
            else if ( !from.CanBeginAction( typeof( BaseMount ) ) )
                from.SendLocalizedMessage( 1040024 ); // You are still too dazed from being knocked off your mount to ride!
            else if ( from.Mounted )
                from.SendLocalizedMessage( 1005583 ); // Please dismount first.
            else if ( from.IsBodyMod && !from.Body.IsHuman )
                from.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed.
            else if ( from.HasTrade )
                from.SendLocalizedMessage( 1042317, "", 0x41 ); // You may not ride at this time
            else if ( (from.Followers + FollowerSlots) > from.FollowersMax )
                from.SendLocalizedMessage( 1049679 ); // You have too many followers to summon your mount.
            else if ( Multis.DesignContext.Check( from ) )
                new EtherealSpell( this, from ).Cast();
        }

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 2 ); // version

            writer.Write( (bool) m_IsRewardItem );

            writer.Write( (int)m_MountedID );
            writer.Write( (int)m_RegularID );
            writer.Write( m_Rider );
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );
            LootType = LootType.Blessed;

            int version = reader.ReadInt();

            switch ( version )
            {
                case 2:
                {
                    m_IsRewardItem = reader.ReadBool();
                    goto case 0;
                }
                case 1: reader.ReadInt(); goto case 0;
                case 0:
                {
                    m_MountedID = reader.ReadInt();
                    m_RegularID = reader.ReadInt();
                    m_Rider = reader.ReadMobile();

                    if ( m_MountedID == 0x3EA2 )
                        m_MountedID = 0x3EAA;

                    break;
                }
            }

            AddFollowers();
        }

        public override DeathMoveResult OnParentDeath( Mobile parent )
        {
            Rider = null;//get off, move to pack

            return DeathMoveResult.RemainEquiped;
        }

        public static void Dismount( Mobile m )
        {
            IMount mount = m.Mount;

            if ( mount != null )
                mount.Rider = null;
        }

        [CommandProperty( AccessLevel.GameMaster )]
        public Mobile Rider
        {
            get
            {
                return m_Rider;
            }
            set
            {
                if ( value != m_Rider )
                {
                    if ( value == null )
                    {
                        Internalize();
                        UnmountMe();

                        RemoveFollowers();
                        m_Rider = value;
                    }
                    else
                    {
                        if ( m_Rider != null )
                            Dismount( m_Rider );

                        Dismount( value );

                        RemoveFollowers();
                        m_Rider = value;
                        AddFollowers();

                        MountMe();
                    }
                }
            }
        }

        public void UnmountMe()
        {
            Container bp = m_Rider.Backpack;

            ItemID = m_RegularID;
            Layer = Layer.Invalid;
            Movable = true;

            if ( Hue == 0x4001 )
                Hue = 0;
                            
            if ( bp != null )
            {
                bp.DropItem( this );
            }
            else
            {
                Point3D loc = m_Rider.Location;
                Map map = m_Rider.Map;

                if ( map == null || map == Map.Internal )
                {
                    loc = m_Rider.LogoutLocation;
                    map = m_Rider.LogoutMap;
                }

                MoveToWorld( loc, map );
            }
        }

        public void MountMe()
        {
            ItemID = m_MountedID;
            Layer = Layer.Mount;
            Movable = false;

//            if ( Hue == 0 )
//                Hue = 0x4001;
            if ( Hue == 0x4001 )
                Hue = 0x4001;               

            ProcessDelta();
            m_Rider.ProcessDelta();
            m_Rider.EquipItem( this );
            m_Rider.ProcessDelta();
            ProcessDelta();
        }

        public IMount Mount
        {
            get
            {
                return this;
            }
        }

        public static void StopMounting( Mobile mob )
        {
            if ( mob.Spell is EtherealSpell )
                ((EtherealSpell)mob.Spell).Stop();
        }

        private class EtherealSpell : Spell
        {
            private static SpellInfo m_Info = new SpellInfo( "Ethereal Mount", "", SpellCircle.Second, 230 );

            private EtherealMount m_Mount;
            private Mobile m_Rider;

            public EtherealSpell( EtherealMount mount, Mobile rider ) : base( rider, null, m_Info )
            {
                m_Rider = rider;
                m_Mount = mount;
            }

            public override bool ClearHandsOnCast{ get{ return false; } }
            public override bool RevealOnCast{ get{ return false; } }

            public override TimeSpan GetCastRecovery()
            {
                return TimeSpan.Zero;
            }

            public override TimeSpan GetCastDelay()
            {
                return TimeSpan.FromSeconds( 3.0 );
            }

            public override int GetMana()
            {
                return 0;
            }

            public override bool ConsumeReagents()
            {
                return true;
            }

            public override bool CheckFizzle()
            {
                return true;
            }

            private bool m_Stop;

            public void Stop()
            {
                m_Stop = true;
                Disturb( DisturbType.Hurt, false, false );
            }

            public override bool CheckDisturb( DisturbType type, bool checkFirst, bool resistable )
            {
                if ( type == DisturbType.EquipRequest || type == DisturbType.UseRequest/* || type == DisturbType.Hurt*/ )
                    return false;

                return true;
            }

            public override void DoHurtFizzle()
            {
                if ( !m_Stop )
                    base.DoHurtFizzle();
            }

            public override void DoFizzle()
            {
                if ( !m_Stop )
                    base.DoFizzle();
            }

            public override void OnDisturb( DisturbType type, bool message )
            {
                if ( message && !m_Stop )
                    Caster.SendLocalizedMessage( 1049455 ); // You have been disrupted while attempting to summon your ethereal mount!

                //m_Mount.UnmountMe();
            }

            public override void OnCast()
            {
                if ( !m_Mount.Deleted && m_Mount.Rider == null && m_Mount.IsChildOf( m_Rider.Backpack ) )
                    m_Mount.Rider = m_Rider;

                FinishSequence();
            }
        }
    }

    public class EtherealHorse : EtherealMount
    {
        public override int LabelNumber{ get{ return 1041298; } } // Ethereal Horse Statuette

        [Constructable]
        public EtherealHorse() : base( 0x20DD, 0x3EAA )
        {
        }

        public EtherealHorse( Serial serial ) : base( serial )
        {
        }

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 0 ); // version
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            if ( Name == "an ethereal horse" )
                Name = null;

            if ( ItemID == 0x2124 )
                ItemID = 0x20DD;
        }
    }

    public class EtherealLlama : EtherealMount
    {
        public override int LabelNumber{ get{ return 1041300; } } // Ethereal Llama Statuette

        [Constructable]
        public EtherealLlama() : base( 0x20F6, 0x3EAB )
        {
        }

        public EtherealLlama( Serial serial ) : base( serial )
        {
        }       

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 0 ); // version
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            if ( Name == "an ethereal llama" )
                Name = null;
        }
    }

    public class EtherealOstard : EtherealMount
    {
        public override int LabelNumber{ get{ return 1041299; } } // Ethereal Ostard Statuette

        [Constructable]
        public EtherealOstard() : base( 0x2135, 0x3EAC )
        {
        }

        public EtherealOstard( Serial serial ) : base( serial )
        {
        }

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 0 ); // version
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            if ( Name == "an ethereal ostard" )
                Name = null;
        }
    }

    public class EtherealRidgeback : EtherealMount
    {
        public override int LabelNumber{ get{ return 1049747; } } // Ethereal Ridgeback Statuette

        [Constructable]
        public EtherealRidgeback() : base( 0x2615, 0x3E9A )
        {
        }

        public EtherealRidgeback( Serial serial ) : base( serial )
        {
        }

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 0 ); // version
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            if ( Name == "an ethereal ridgeback" )
                Name = null;
        }
    }

    public class EtherealUnicorn : EtherealMount
    {
        public override int LabelNumber{ get{ return 1049745; } } // Ethereal Unicorn Statuette

        [Constructable]
        public EtherealUnicorn() : base( 0x25CE, 0x3E9B )
        {
        }

        public EtherealUnicorn( Serial serial ) : base( serial )
        {
        }

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 0 ); // version
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            if ( Name == "an ethereal unicorn" )
                Name = null;
        }
    }

    public class EtherealBeetle : EtherealMount
    {
        public override int LabelNumber{ get{ return 1049748; } } // Ethereal Beetle Statuette

        [Constructable]
        public EtherealBeetle() : base( 0x260F, 0x3E97 )
        {
        }

        public EtherealBeetle( Serial serial ) : base( serial )
        {
        }

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 0 ); // version
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            if ( Name == "an ethereal beetle" )
                Name = null;
        }
    }

    public class EtherealKirin : EtherealMount
    {
        public override int LabelNumber{ get{ return 1049746; } } // Ethereal Ki-Rin Statuette

        [Constructable]
        public EtherealKirin() : base( 0x25A0, 0x3E9C )
        {
        }

        public EtherealKirin( Serial serial ) : base( serial )
        {
        }

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 0 ); // version
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            if ( Name == "an ethereal kirin" )
                Name = null;
        }
    }

    public class EtherealSwampDragon : EtherealMount
    {
        public override int LabelNumber{ get{ return 1049749; } } // Ethereal Swamp Dragon Statuette

        [Constructable]
        public EtherealSwampDragon() : base( 0x2619, 0x3E98 )
        {
        }

        public EtherealSwampDragon( Serial serial ) : base( serial )
        {
        }

        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );

            writer.Write( (int) 0 ); // version
        }

        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            if ( Name == "an ethereal swamp dragon" )
                Name = null;
        }
    }
}
 
Last edited:
Ah, RunUO 1.0 : I stopped working on that almost 20 years ago, sorry your on your own unless someone else wants to mess around with that old server!
 
Back