ServUO Version
Publish Unknown
Ultima Expansion
Stygian Abyss
Hello all!
Ive got "an activator",if you double click it,equip an armor for you.
What it does?
1)Got uses,if no uses,cant equip it. (Working).
2)If you click activator when stuff is on you,it unequip and delete all items.(Working).
3)Item not use charges on removing stuff.(Working).
4)If you use it,the activator got a timer to auto-unequip armor.(Not working!)
Timer is setup to 1 minute for testing,but do it in one second.I just need to convert seconds in minutes.(TimeLifeInterval).
Here the full code,is the first time i try to setup a timer on item looking around on other scripts,but cannot solve this,any help is really appreciated,thank you!
(For sure i can do "x" seconds * 60 to get minutes,but i need to understand).

C#:
using System;
using System.Collections;
using Server;
using Server.Prompts;
using Server.Mobiles;
using Server.Network;
using Server.Gumps;
using Server.Items;
using Server.Engines.VeteranRewards;
 
namespace Server.Items
{
    public class GenericEngineer : Item
    {
        //Timer
        private Timer m_Timer;
        public Mobile m;

        [CommandProperty(AccessLevel.GameMaster)]
        public DateTime ExpireTime { get; set; }
        [CommandProperty(AccessLevel.GameMaster)]
        public int TimeLifeInterval { get; set; } // Time interval in minutes.

        [CommandProperty(AccessLevel.GameMaster)]
        public TimeSpan TimeLeft
        {
            get { return ExpireTime - DateTime.UtcNow;  }
        }
        //Timer
        //Uses
        private int m_UsesRemaining;
        [CommandProperty(AccessLevel.GameMaster)]
        public int UsesRemaining { get { return m_UsesRemaining; } set { m_UsesRemaining = value; InvalidateProperties(); } }
        //Uses
        [Constructable]
        public GenericEngineer() : base( 0x2AAA )
        {
            TimeLifeInterval = 1;
            UsesRemaining = 10;
            Movable = true;
            Hue = 1989;
            Weight = 25.0;
            Name = "Generic Engineer Set";
        }
        //Timer action
        private void Expire(Mobile from)
        {
         this.UnequipArmor(from);
         if (m_Timer != null)
            m_Timer.Stop();
        }
        //Timer action

        public void DecreaseUses(Mobile from)
        {
            if (m_UsesRemaining > 1)
                m_UsesRemaining--;
            else if (m_UsesRemaining <= 1)
            {
                m_UsesRemaining--;
                from.SendLocalizedMessage(1042544); // This item is out of charges.
                //Delete();
             
            }

            InvalidateProperties();

        }

        public void UnequipArmor(Mobile from)
        {
            Item EquipArmor1 = from.FindItemOnLayer(Layer.Pants);
            Item EquipArmor2 = from.FindItemOnLayer(Layer.Gloves);
            Item EquipArmor3 = from.FindItemOnLayer(Layer.InnerTorso);
            Item EquipArmor4 = from.FindItemOnLayer(Layer.Arms);
            if (EquipArmor1 is WorkerLegs || EquipArmor2 is WorkerGloves || EquipArmor3 is WorkerChest ||
                    EquipArmor4 is WorkerArms)
                {
                    EquipArmor1.Delete();
                    EquipArmor2.Delete();
                    EquipArmor3.Delete();
                    EquipArmor4.Delete();
                    from.Skills.Alchemy.Base -= 10;
                    from.Skills.Mining.Base -= 10;
                    from.Skills.Blacksmith.Base -= 10;
                    from.Skills.Tailoring.Base -= 10;
                    from.RawStr -= 50;
                    return;
                }
        }

        public override void GetProperties(ObjectPropertyList list)
            {
 
            base.GetProperties(list);
         
            list.Add("Time to craft!\n[Uses Remaining : {0}]", m_UsesRemaining );
            }
   
        public override void OnDoubleClick( Mobile from )
        {
            //if (from.Race == Race.Human)
            //{
            if (!IsChildOf(from.Backpack))
            {
            from.SendLocalizedMessage(1042001);
            return; // That must be in your pack for you to use it.
            }

            if (m_UsesRemaining < 1)
            {
            this.UnequipArmor(from);
            from.SendLocalizedMessage(1042544); // This item is out of charges.
            return;
            }
            //////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////
                Item EquipArmor1 = from.FindItemOnLayer(Layer.Pants);
                Item EquipArmor2 = from.FindItemOnLayer(Layer.Gloves);
                Item EquipArmor3 = from.FindItemOnLayer(Layer.InnerTorso);
                Item EquipArmor4 = from.FindItemOnLayer(Layer.Arms);
             
                if (EquipArmor1 is WorkerLegs || EquipArmor2 is WorkerGloves || EquipArmor3 is WorkerChest ||
                    EquipArmor4 is WorkerArms)
                {
                    EquipArmor1.Delete();
                    EquipArmor2.Delete();
                    EquipArmor3.Delete();
                    EquipArmor4.Delete();
                    from.Skills.Alchemy.Base -= 10;
                    from.Skills.Mining.Base -= 10;
                    from.Skills.Blacksmith.Base -= 10;
                    from.Skills.Tailoring.Base -= 10;
                    from.RawStr -= 50;
                    return;
                }
                else if (EquipArmor1 is LegsOfBaal || EquipArmor1 is BardLegs || EquipArmor1 is NaturalLegs || EquipArmor1 is RigorLegs)
                {
                from.LocalOverheadMessage(MessageType.Emote, 0x59, true, "Please remove the current armor set first.");
                return;
                }
                else if ( !IsChildOf( from.Backpack ) )
                 {
                 from.SendLocalizedMessage(1042001);
                 return;
                 }
             
           
                if (EquipArmor1 != null)          
                    from.AddToBackpack(EquipArmor1);
           
                if (EquipArmor2 != null)
                    from.AddToBackpack(EquipArmor2);
           
                if (EquipArmor3 != null)
                    from.AddToBackpack(EquipArmor3);
           
                if (EquipArmor4 != null)
                    from.AddToBackpack(EquipArmor4);

                from.EquipItem(new WorkerLegs());
                from.EquipItem(new WorkerGloves());
                from.EquipItem(new WorkerChest());
                from.EquipItem(new WorkerArms());
                from.RawStr += 50;
                from.Skills.Alchemy.Base += 10;
                from.Skills.Mining.Base += 10;
                from.Skills.Blacksmith.Base += 10;
                from.Skills.Tailoring.Base += 10;
                this.DecreaseUses(from);
                ExpireTime = DateTime.UtcNow + TimeSpan.FromMinutes(TimeLifeInterval);
                m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(3), delegate { UnequipArmor(from); });
        }
 

 
     
        public GenericEngineer( Serial serial ) : base( serial )
        {
        }
 
        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );
            writer.Write(m_UsesRemaining);
            writer.Write(ExpireTime);
            writer.Write(TimeLifeInterval);
 
            writer.Write( (int) 0 ); // version
        }
 
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );
 
            int version = reader.ReadInt();

            switch (version)
            {
                case 0:
                    {
                        m_UsesRemaining = reader.ReadInt();
                        ExpireTime = reader.ReadDateTime();
                        TimeLifeInterval = reader.ReadInt();
                        break;
                    }
            }
        }
    }
}
 
Last edited:
Back