Hello im trying to mod ItemID skill so it let ''identify'' mounts. IF i undersand correctly it crash because the target is not an item?

I made 2 edits marked as

///EDITED BY ME////


This is what i have:



Code:
using System;
using Server.Mobiles;
using Server.Targeting;

namespace Server.Items
{
    public class ItemIdentification
    {
        public static void Initialize()
        {
            SkillInfo.Table[(int)SkillName.ItemID].Callback = OnUse;
        }

        public static TimeSpan OnUse( Mobile from )
        {
            if (from.BeginAction(typeof(IAction)))
            {
                from.SendLocalizedMessage(500343); // What do you wish to appraise and identify?
                from.Target = new InternalTarget();
            }
            else
                from.SendAsciiMessage("You must wait to perform another action.");

            return TimeSpan.Zero;
        }

        [PlayerVendorTarget]
        private class InternalTarget : Target, IAction
        {
            public InternalTarget() :  base ( 8, false, TargetFlags.None )
            {
                AllowNonlocal = true;
            }

            protected override void OnTarget( Mobile from, object o )
            {
                bool releaseLock = true;

             if (o is Item)
                {
                    releaseLock = false;
                    new InternalTimer(from, o as Item).Start();
                }
///EDITED BY ME number one///////
                 if (o is mustangid)
                {
                    releaseLock = false;
                    new InternalTimer(from, o as Item).Start();
                }
               ///END OF EDITED BY ME number one//////
                else if (o is Mobile)
                    from.SendAsciiMessage("Eso no es un objeto!");
                else
                    from.SendAsciiMessage("No estas muy seguro..."); // You are not certain...

                //allows the identify skill to reveal attachments
               // Server.Engines.XmlSpawner2.XmlAttach.RevealAttachments(from, o);

                if (releaseLock && from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
            }

            #region TargetFailed

            protected override void OnCantSeeTarget(Mobile from, object targeted)
            {
                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
                else
                    from.EndAction(typeof(IAction));

                base.OnCantSeeTarget(from, targeted);
            }

            protected override void OnTargetDeleted(Mobile from, object targeted)
            {
                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
                else
                    from.EndAction(typeof(IAction));

                base.OnTargetDeleted(from, targeted);
            }

            protected override void OnTargetUntargetable(Mobile from, object targeted)
            {
                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
                else
                    from.EndAction(typeof(IAction));

                base.OnTargetUntargetable(from, targeted);
            }

            protected override void OnNonlocalTarget(Mobile from, object targeted)
            {
                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
                else
                    from.EndAction(typeof(IAction));

                base.OnNonlocalTarget(from, targeted);
            }

            protected override void OnTargetInSecureTrade(Mobile from, object targeted)
            {
                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
                else
                    from.EndAction(typeof(IAction));

                base.OnTargetInSecureTrade(from, targeted);
            }

            protected override void OnTargetNotAccessible(Mobile from, object targeted)
            {
                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
                else
                    from.EndAction(typeof(IAction));

                base.OnTargetNotAccessible(from, targeted);
            }

            protected override void OnTargetOutOfLOS(Mobile from, object targeted)
            {
                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
                else
                    from.EndAction(typeof(IAction));

                base.OnTargetOutOfLOS(from, targeted);
            }

            protected override void OnTargetOutOfRange(Mobile from, object targeted)
            {
                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
                else
                    from.EndAction(typeof(IAction));

                base.OnTargetOutOfRange(from, targeted);
            }

            protected override void OnTargetCancel(Mobile from, TargetCancelType cancelType)
            {
                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();
                else
                    from.EndAction(typeof(IAction));

                base.OnTargetCancel(from, cancelType);
            }

            #endregion

            #region IAction Members

            public void AbortAction(Mobile from)
            {
            }

            #endregion
        }

        private class InternalTimer : Timer, IAction
        {
            private readonly Mobile m_From;
            private readonly Item m_Targeted;
            private readonly Mobile Targeted;

            public InternalTimer(Mobile from, Item targeted)
                : base(TimeSpan.FromSeconds(1.0))
            {
                m_From = from;
                m_Targeted = targeted;

                if (from is PlayerMobile)
                    ((PlayerMobile)from).ResetPlayerAction(this);
            }

            protected override void OnTick()
            {
                if (m_Targeted.Deleted)
                    return;

                if (m_From.CheckTargetSkill(SkillName.ItemID, m_Targeted, 0, 100))
                {
                    if (m_Targeted is BaseWeapon)
                    {
                        if (((BaseWeapon)m_Targeted).Identified)
                            m_From.SendAsciiMessage("Eso ya esta identificado.");
                        else
                            ((BaseWeapon)m_Targeted).Identified = true;
                    }
                    else if (m_Targeted is BaseArmor)
                    {
                        if (((BaseArmor)m_Targeted).Identified)
                            m_From.SendAsciiMessage("Eso ya esta identificado.");
                        else
                            ((BaseArmor)m_Targeted).Identified = true;
                    }
///EDITED BY ME number two///////
                    else if (!Targeted.Deleted && Targeted is BaseCreature && Targeted is mustangid)
                    {
                        Targeted.Name = "Mustang";
                       Targeted.Hue = Utility.RandomList( 1159, 1904, 2207, 1175, 2948, 1172, 2513, 1301, 1218, 1947, 1325, 2551, 2530, 2877, 1150, 2969, 1171, 1957, 1940, 1163, 2561, 2562, 2563, 2559, 2944, 2560, 2565,2564, 2589, 1158, 2545, 2514, 2535, 2580, 1173, 2546,2540,2529,2543,2544,2550,2549,2574,2578,2541,2577,1959,1960,2558,1965,2675,1932,2576, 2591,2573,1169,2516,2515,2526,2517,2974,2743,2746,2585,2574,1952,1961,1928,2571,2525,2518,2531,2524,1176,1153,1154,1157,1915,2496,1958,1954,1944,2527,1156,2579,2538,1160,2586,2532,2534,2523,2567,1962,1942,1943,1945,2533,2552,2569,1151,2583,2570,2557,1171,1170,1168,1167,1166,1164,1162,1161,1154,1153,1152 );
                            m_From.SendAsciiMessage(2548,"You identify the mount!.");
                  
                    }
///END EDITED BY ME number two///////
                    else if (m_Targeted is CustomQuestItem)
                    {
                        CustomQuestItem cqi = m_Targeted as CustomQuestItem;

                        if (!string.IsNullOrEmpty(cqi.HiddenMessage))
                            cqi.LabelTo(m_From, cqi.HiddenMessage);
                    }
                    else
                        m_From.SendAsciiMessage("Ya conoces que clase de objeto es.");

                    if (m_Targeted.LootType == LootType.Blessed || m_Targeted.LootType == LootType.Newbied)
                        m_From.SendAsciiMessage("Tiene una especie de aura magica...");
                }
                else
                    m_From.SendMessage("No estas muy seguro..."); // You are not certain...

                if (m_From is PlayerMobile)
                    ((PlayerMobile)m_From).EndPlayerAction();
            }

            #region IAction Members

            public void AbortAction(Mobile from)
            {
                from.SendMessage("No estas muy seguro..."); // You

                if (from is PlayerMobile)
                    ((PlayerMobile)from).EndPlayerAction();

                Stop();
            }

            #endregion
        }
    }
}

crash log:


Exception:
System.NullReferenceException: Object reference not set to an instance of an object.
at Server.Items.ItemIdentification.InternalTimer.OnTick() in c:\Users\sahi\Desktop\server\Scripts\Skills\ItemIdentification.cs:line 183
at Server.Timer.Slice()
at Server.Core.Main(String[] args)
 
Back