I was wondering, If I wanted to make a pet that would require ie ninjitsu instead of lore/taming, how should I proceed? Thanks!
 
You can take a look in lesser hiryu,this pet requires Bushido.You can add the requeriment in a new ondoubleclick method.
 
You can take a look in lesser hiryu,this pet requires Bushido.You can add the requeriment in a new ondoubleclick method.

But people still can stand by and control them without bushido right?
Bushido would only make it so they can ride them
 
This is my zombie that you can tame. So you should be able to do something like that. Maybe if you give the creature a negativ taming value and just add the skill you want in animaltaming.cs. not sure if the negativ taming value works though.

C#:
using System;
using Server.Items;

namespace Server.Mobiles
{
    [CorpseName("a rotting corpse")]
    public class Zombie : BaseCreature
    {
        [Constructable]
        public Zombie()
            : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4)
        {
            Name = "a zombie";
            Body = 3;
            BaseSoundID = 471;

            SetStr(46, 70);
            SetDex(31, 50);
            SetInt(26, 40);

            SetHits(28, 42);

            SetDamage(3, 7);

            SetDamageType(ResistanceType.Physical, 100);

            SetResistance(ResistanceType.Physical, 15, 20);
            SetResistance(ResistanceType.Cold, 20, 30);
            SetResistance(ResistanceType.Poison, 5, 10);

            SetSkill(SkillName.MagicResist, 15.1, 40.0);
            SetSkill(SkillName.Tactics, 35.1, 50.0);
            SetSkill(SkillName.Wrestling, 35.1, 50.0);

            Fame = 600;
            Karma = -600;

            VirtualArmor = 18;
            
                if ( 0.05 > Utility.RandomDouble() )
            {
                switch ( Utility.Random( 12 ) )
                {
                    case 0: PackItem( new RunicPoisonScroll() ); break;
                    case 1: PackItem( new ZombieSlime() ); break;
                    case 2: PackItem( new SkeletalRib() ); break;
                    case 3: PackItem( new MinorPetDexterityScroll() ); break;
                    case 4: PackItem( new MinorPetIntelligenceScroll() ); break;
                    case 5: PackItem( new MinorPetHitScroll() ); break;
                    case 6: PackItem( new MinorPetStrengthScroll() ); break;
                    case 7: PackItem( new PetBondingDeed() ); break;
                    case 8: PackItem( new RunicColdScroll() ); break;
                    case 9: PackItem( new EnchantedEmerald() ); break;
                    case 10: PackItem( new PowerScroll( SkillName.SpiritSpeak, 105 ) ); break;
                    case 11: PackItem( new NameChangeDeed() ); break;
                }
            }
            
            this.Tamable = true;
            this.ControlSlots = 1;
            this.MinTameSkill = 5.0;

            PackBodyPartOrBones();
            
        }

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

        public override bool BleedImmune
        {
            get
            {
                return true;
            }
        }
        public override Poison PoisonImmune
        {
            get
            {
                return Poison.Regular;
            }
        }

        public override TribeType Tribe { get { return TribeType.Undead; } }

        public override OppositionGroup OppositionGroup
        {
            get
            {
                return OppositionGroup.FeyAndUndead;
            }
        }
        public override void GenerateLoot()
        {
            AddLoot(LootPack.Meager);
        }
        
        public override bool IsEnemy(Mobile m)
        {
            if(Region.IsPartOf("Haven Island"))
            {
                return false;
            }
            
            return base.IsEnemy(m);
        }

        public override void Serialize(GenericWriter writer)
        {
            base.Serialize(writer);
            writer.Write((int)0);
        }

        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();
        }
    }
}
And this is my from my animaltaming.cs around line 166 you should find how the cuchide works. just add the creature you want after that in a similar manner.

C#:
            protected override void OnTarget(Mobile from, object targeted)
            {
                from.RevealingAction();

                if (targeted is Mobile)
                {
                    if (targeted is BaseCreature)
                    {
                        BaseCreature creature = (BaseCreature)targeted;

                        if (!creature.Tamable)
                        {
                            creature.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 1049655, from.NetState);
                                // That creature cannot be tamed.
                        }
                        else if (creature.Controlled)
                        {
                            creature.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 502804, from.NetState);
                                // That animal looks tame already.
                        }
                        else if (from.Female && !creature.AllowFemaleTamer)
                        {
                            creature.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 1049653, from.NetState);
                                // That creature can only be tamed by males.
                        }
                        else if (!from.Female && !creature.AllowMaleTamer)
                        {
                            creature.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 1049652, from.NetState);
                                // That creature can only be tamed by females.
                        }
                        else if (creature is CuSidhe && from.Race != Race.Elf)
                        {
                            creature.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 502801, from.NetState); // You can't tame that!
                        }
                        else if ( creature is Zombie && from.Skills[SkillName.SpiritSpeak].Value <= 49.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is Skeleton && from.Skills[SkillName.SpiritSpeak].Value <= 49.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is Ghoul && from.Skills[SkillName.SpiritSpeak].Value <= 54.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is Shade && from.Skills[SkillName.SpiritSpeak].Value <= 54.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is Spectre && from.Skills[SkillName.SpiritSpeak].Value <= 54.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is SkeletalKnight && from.Skills[SkillName.SpiritSpeak].Value <= 64.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is BoneKnight && from.Skills[SkillName.SpiritSpeak].Value <= 64.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is BoneMagi && from.Skills[SkillName.SpiritSpeak].Value <= 64.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is SkeletalMage && from.Skills[SkillName.SpiritSpeak].Value <= 64.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is Lich && from.Skills[SkillName.Necromancy].Value <= 79.9)
                        {
                            from.SendMessage("Your necromantic powers are too weak to control this creature");
                        }
                        else if ( creature is Lich && from.Skills[SkillName.SpiritSpeak].Value <= 99.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is SkeletalDragon && from.Skills[SkillName.Necromancy].Value <= 114.9)
                        {
                            from.SendMessage("Your necromantic powers are too weak to control this creature");
                        }
                        else if ( creature is SkeletalDragon && from.Skills[SkillName.SpiritSpeak].Value <= 119.9)
                        {
                            from.SendMessage("You don't speak clearly enough for the spirit to hear you");
                        }
                        else if ( creature is AirElemental && from.Skills[SkillName.Magery].Value <= 84.9)
                        {
                            from.SendMessage("Your magical powers are too weak to bind this creature");
                        }
                        else if ( creature is EarthElemental && from.Skills[SkillName.Magery].Value <= 74.9)
                        {
                            from.SendMessage("Your magical powers are too weak to bind this creature");
                        }
                        else if ( creature is FireElemental && from.Skills[SkillName.Magery].Value <= 84.9)
                        {
                            from.SendMessage("Your magical powers are too weak to bind this creature");
                        }
                        else if ( creature is WaterElemental && from.Skills[SkillName.Magery].Value <= 84.9)
                        {
                            from.SendMessage("Your magical powers are too weak to bind this creature");
                        }
 
Back