RunUO Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Resource icon

[2.x] RoninGT's FS: Animal Taming Systems Gen2 (for RunUO 2.3) 1.0.0

No permission to download

fffkingrage

Sorceror
With the fixes from Hammerhand, I am able to TURN IN taming BODs that I manually create (with [add smalltamingbod), however, when I or my players try to get a BOD from animal trainer, it simply says "You may recieve a bulk order deed now." and nothing happens. I try again and it says 'You must wait 30 minutes yadda yadda".

I've got the 13 .cfg files in data/bulk order deeds/taming, was there something else I'm missing?
 

fffkingrage

Sorceror
They are literally the exact same as the ones posted at the top:

Code:
using System;
using System.Collections;
using System.Collections.Generic;
using Server;
using Server.ContextMenus;
using Server.Gumps;
using Server.Items;
using Server.Network;
using Server.Targeting;
using Server.Engines.BulkOrders;
 
namespace Server.Mobiles
{
    public class AnimalTrainer : BaseVendor
    {
        private List<SBInfo> m_SBInfos = new List<SBInfo>();
        protected override List<SBInfo> SBInfos{ get { return m_SBInfos; } }
 
        [Constructable]
        public AnimalTrainer() : base( "the animal trainer" )
        {
            SetSkill( SkillName.AnimalLore, 64.0, 100.0 );
            SetSkill( SkillName.AnimalTaming, 90.0, 100.0 );
            SetSkill( SkillName.Veterinary, 65.0, 88.0 );
        }
 
        public override void InitSBInfo()
        {
            m_SBInfos.Add( new SBAnimalTrainer() );
        }
 
        public override VendorShoeType ShoeType
        {
            get{ return Female ? VendorShoeType.ThighBoots : VendorShoeType.Boots; }
        }
 
        #region Bulk Orders
        public override Item CreateBulkOrder( Mobile from, bool fromContextMenu )
        {
            PlayerMobile pm = from as PlayerMobile;
 
            if ( pm != null && pm.NextTamingBulkOrder == TimeSpan.Zero && (fromContextMenu || 0.2 > Utility.RandomDouble()) )
            {
                double theirSkill = pm.Skills[SkillName.AnimalTaming].Base;
 
                if ( theirSkill >= 70.1 )
                    pm.NextTamingBulkOrder = TimeSpan.FromHours( 2.0 );
                else if ( theirSkill >= 50.1 )
                    pm.NextTamingBulkOrder = TimeSpan.FromHours( 2.0 );
                else
                    pm.NextTamingBulkOrder = TimeSpan.FromMinutes( 30.0 );
 
                if ( theirSkill >= 70.1 && ((theirSkill - 40.0) / 300.0) > Utility.RandomDouble() )
                    return new LargeTamingBOD();
 
                return SmallTamingBOD.CreateRandomFor( from );
            }
 
            return null;
        }
 
        public override bool IsValidBulkOrder( Item item )
        {
            return ( item is SmallTamingBOD || item is LargeTamingBOD );
        }
 
        public override bool SupportsBulkOrders( Mobile from )
        {
            return ( from is PlayerMobile && from.Skills[SkillName.AnimalTaming].Base > 0 && FSATS.EnableTamingBODs == true );
        }
 
        public override TimeSpan GetNextBulkOrder( Mobile from )
        {
            if ( from is PlayerMobile )
                return ((PlayerMobile)from).NextTamingBulkOrder;
 
            return TimeSpan.Zero;
        }
        #endregion
 
        public override int GetShoeHue()
        {
            return 0;
        }
 
        public override void InitOutfit()
        {
            base.InitOutfit();
 
            AddItem( Utility.RandomBool() ? (Item)new QuarterStaff() : (Item)new ShepherdsCrook() );
        }
 
        private class StableEntry : ContextMenuEntry
        {
            private AnimalTrainer m_Trainer;
            private Mobile m_From;
 
            public StableEntry( AnimalTrainer trainer, Mobile from ) : base( 6126, 12 )
            {
                m_Trainer = trainer;
                m_From = from;
            }
 
            public override void OnClick()
            {
                m_Trainer.BeginStable( m_From );
            }
        }
 
        private class ClaimListGump : Gump
        {
            private AnimalTrainer m_Trainer;
            private Mobile m_From;
            private List<BaseCreature> m_List;
 
            public ClaimListGump( AnimalTrainer trainer, Mobile from, List<BaseCreature> list ) : base( 50, 50 )
            {
                m_Trainer = trainer;
                m_From = from;
                m_List = list;
 
                from.CloseGump( typeof( ClaimListGump ) );
 
                AddPage( 0 );
 
                AddBackground( 0, 0, 325, 50 + (list.Count * 20), 9250 );
                AddAlphaRegion( 5, 5, 315, 40 + (list.Count * 20) );
 
                AddHtml( 15, 15, 275, 20, "<BASEFONT COLOR=#FFFFFF>Select a pet to retrieve from the stables:</BASEFONT>", false, false );
 
                for ( int i = 0; i < list.Count; ++i )
                {
                    BaseCreature pet = list[i];
 
                    if ( pet == null || pet.Deleted )
                        continue;
 
                    AddButton( 15, 39 + (i * 20), 10006, 10006, i + 1, GumpButtonType.Reply, 0 );
                    AddHtml( 32, 35 + (i * 20), 275, 18, String.Format( "<BASEFONT COLOR=#C0C0EE>{0}</BASEFONT>", pet.Name ), false, false );
                }
            }
 
            public override void OnResponse( NetState sender, RelayInfo info )
            {
                int index = info.ButtonID - 1;
 
                if ( index >= 0 && index < m_List.Count )
                    m_Trainer.EndClaimList( m_From, m_List[index] );
            }
        }
 
        private class ClaimAllEntry : ContextMenuEntry
        {
            private AnimalTrainer m_Trainer;
            private Mobile m_From;
 
            public ClaimAllEntry( AnimalTrainer trainer, Mobile from ) : base( 6127, 12 )
            {
                m_Trainer = trainer;
                m_From = from;
            }
 
            public override void OnClick()
            {
                m_Trainer.Claim( m_From );
            }
        }
 
        public override void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
        {
            if ( from.Alive )
            {
                list.Add( new StableEntry( this, from ) );
 
                if ( from.Stabled.Count > 0 )
                    list.Add( new ClaimAllEntry( this, from ) );
            }
 
            base.AddCustomContextEntries( from, list );
        }
 
        public static int GetMaxStabled( Mobile from )
        {
            double taming = from.Skills[SkillName.AnimalTaming].Value;
            double anlore = from.Skills[SkillName.AnimalLore].Value;
            double vetern = from.Skills[SkillName.Veterinary].Value;
            double sklsum = taming + anlore + vetern;
 
            int max;
 
            if ( sklsum >= 240.0 )
                max = 5;
            else if ( sklsum >= 200.0 )
                max = 4;
            else if ( sklsum >= 160.0 )
                max = 3;
            else
                max = 2;
 
            if ( taming >= 100.0 )
                max += (int)((taming - 90.0) / 10);
 
            if ( anlore >= 100.0 )
                max += (int)((anlore - 90.0) / 10);
 
            if ( vetern >= 100.0 )
                max += (int)((vetern - 90.0) / 10);
 
            return max;
        }
 
        private class StableTarget : Target
        {
            private AnimalTrainer m_Trainer;
 
            public StableTarget( AnimalTrainer trainer ) : base( 12, false, TargetFlags.None )
            {
                m_Trainer = trainer;
            }
 
            protected override void OnTarget( Mobile from, object targeted )
            {
                if ( targeted is BaseCreature )
                    m_Trainer.EndStable( from, (BaseCreature)targeted );
                else if ( targeted == from )
                    m_Trainer.SayTo( from, 502672 ); // HA HA HA! Sorry, I am not an inn.
                else
                    m_Trainer.SayTo( from, 1048053 ); // You can't stable that!
            }
        }
 
        private void CloseClaimList( Mobile from )
        {
            from.CloseGump( typeof( ClaimListGump ) );
        }
 
        public void BeginClaimList( Mobile from )
        {
            if ( Deleted || !from.CheckAlive() )
                return;
 
            List<BaseCreature> list = new List<BaseCreature>();
 
            for ( int i = 0; i < from.Stabled.Count; ++i )
            {
                BaseCreature pet = from.Stabled[i] as BaseCreature;
 
                if ( pet == null || pet.Deleted )
                {
                    pet.IsStabled = false;
                    pet.StabledBy = null;
                    from.Stabled.RemoveAt( i );
                    --i;
                    continue;
                }
 
                list.Add( pet );
            }
 
            if ( list.Count > 0 )
                from.SendGump( new ClaimListGump( this, from, list ) );
            else
                SayTo( from, 502671 ); // But I have no animals stabled with me at the moment!
        }
 
        public void EndClaimList( Mobile from, BaseCreature pet )
        {
            if ( pet == null || pet.Deleted || from.Map != this.Map || !from.Stabled.Contains( pet ) || !from.CheckAlive() )
                return;
 
            if ( !from.InRange( this, 14 ) )
            {
                from.SendLocalizedMessage( 500446 ); // That is too far away.
                return;
            }
 
            if ( CanClaim( from, pet ) )
            {
                DoClaim( from, pet );
 
                from.Stabled.Remove( pet );
 
                if ( from is PlayerMobile )
                    ((PlayerMobile)from).AutoStabled.Remove( pet );
            }
            else
            {
                SayTo( from, 1049612, pet.Name ); // ~1_NAME~ remained in the stables because you have too many followers.
            }
        }
 
        public void BeginStable( Mobile from )
        {
            if ( Deleted || !from.CheckAlive() )
                return;
 
            Container bank = from.FindBankNoCreate();
 
            if ( ( from.Backpack == null || from.Backpack.GetAmount( typeof( Gold ) ) < 30 ) && ( bank == null || bank.GetAmount( typeof( Gold ) ) < 30 ) )
            {
                SayTo( from, 1042556 ); // Thou dost not have enough gold, not even in thy bank account.
            }
            else
            {
                /* I charge 30 gold per pet for a real week's stable time.
                * I will withdraw it from thy bank account.
                * Which animal wouldst thou like to stable here?
                */
                from.SendLocalizedMessage(1042558);
 
                from.Target = new StableTarget( this );
            }
        }
 
        public void EndStable( Mobile from, BaseCreature pet )
        {
            if ( Deleted || !from.CheckAlive() )
                return;
 
            if ( pet.Body.IsHuman )
            {
                SayTo( from, 502672 ); // HA HA HA! Sorry, I am not an inn.
            }
            else if ( !pet.Controlled )
            {
                SayTo( from, 1048053 ); // You can't stable that!
            }
            else if ( pet.ControlMaster != from )
            {
                SayTo( from, 1042562 ); // You do not own that pet!
            }
            else if ( pet.IsDeadPet )
            {
                SayTo( from, 1049668 ); // Living pets only, please.
            }
            else if ( pet.Summoned )
            {
                SayTo( from, 502673 ); // I can not stable summoned creatures.
            }
/*
            else if ( pet.Allured )
            {
                SayTo( from, 1048053 ); // You can't stable that!
            }
*/
            else if ( (pet is PackLlama || pet is PackHorse || pet is Beetle) && (pet.Backpack != null && pet.Backpack.Items.Count > 0) )
            {
                SayTo( from, 1042563 ); // You need to unload your pet.
            }
            else if ( pet.Combatant != null && pet.InRange( pet.Combatant, 12 ) && pet.Map == pet.Combatant.Map )
            {
                SayTo( from, 1042564 ); // I'm sorry.  Your pet seems to be busy.
            }
            else if ( from.Stabled.Count >= GetMaxStabled( from ) )
            {
                SayTo( from, 1042565 ); // You have too many pets in the stables!
            }
            else
            {
                Container bank = from.FindBankNoCreate();
 
                if ( ( from.Backpack != null && from.Backpack.ConsumeTotal( typeof( Gold ), 30 ) ) || ( bank != null && bank.ConsumeTotal( typeof( Gold ), 30 ) ) )
                {
                    pet.ControlTarget = null;
                    pet.ControlOrder = OrderType.Stay;
                    pet.Internalize();
 
                    pet.SetControlMaster( null );
                    pet.SummonMaster = null;
 
                    pet.IsStabled = true;
                    pet.StabledBy = from;
 
                    if ( Core.SE )
                        pet.Loyalty = BaseCreature.MaxLoyalty; // Wonderfully happy
 
                    from.Stabled.Add( pet );
 
                    SayTo( from, Core.AOS ? 1049677 : 502679 ); // [AOS: Your pet has been stabled.] Very well, thy pet is stabled. Thou mayst recover it by saying 'claim' to me. In one real world week, I shall sell it off if it is not claimed!
                }
                else
                {
                    SayTo( from, 502677 ); // But thou hast not the funds in thy bank account!
                }
            }
        }
 
        public void Claim( Mobile from )
        {
            Claim( from, null );
        }
 
        public void Claim( Mobile from, string petName )
        {
            if ( Deleted || !from.CheckAlive() )
                return;
 
            bool claimed = false;
            int stabled = 0;
 
            bool claimByName = ( petName != null );
 
            for ( int i = 0; i < from.Stabled.Count; ++i )
            {
                BaseCreature pet = from.Stabled[i] as BaseCreature;
 
                if ( pet == null || pet.Deleted )
                {
                    pet.IsStabled = false;
                    pet.StabledBy = null;
                    from.Stabled.RemoveAt( i );
                    --i;
                    continue;
                }
 
                ++stabled;
 
                if ( claimByName && !Insensitive.Equals( pet.Name, petName ) )
                    continue;
 
                if ( CanClaim( from, pet ) )
                {
                    DoClaim( from, pet );
 
                    from.Stabled.RemoveAt( i );
 
                    if ( from is PlayerMobile )
                        ((PlayerMobile)from).AutoStabled.Remove( pet );
 
                    --i;
 
                    claimed = true;
                }
                else
                {
                    SayTo( from, 1049612, pet.Name ); // ~1_NAME~ remained in the stables because you have too many followers.
                }
            }
 
            if ( claimed )
                SayTo( from, 1042559 ); // Here you go... and good day to you!
            else if ( stabled == 0 )
                SayTo( from, 502671 ); // But I have no animals stabled with me at the moment!
            else if ( claimByName )
                BeginClaimList( from );
        }
 
        public bool CanClaim( Mobile from, BaseCreature pet )
        {
            return ((from.Followers + pet.ControlSlots) <= from.FollowersMax);
        }
 
        private void DoClaim( Mobile from, BaseCreature pet )
        {
            pet.SetControlMaster( from );
 
            if ( pet.Summoned )
                pet.SummonMaster = from;
 
            pet.ControlTarget = from;
            pet.ControlOrder = OrderType.Follow;
 
            pet.MoveToWorld( from.Location, from.Map );
 
            pet.IsStabled = false;
            pet.StabledBy = null;
 
            if ( Core.SE )
                pet.Loyalty = BaseCreature.MaxLoyalty; // Wonderfully Happy
        }
 
        public override bool HandlesOnSpeech( Mobile from )
        {
            return true;
        }
 
        public override void OnSpeech( SpeechEventArgs e )
        {
            if ( !e.Handled && e.HasKeyword( 0x0008 ) ) // *stable*
            {
                e.Handled = true;
 
                CloseClaimList( e.Mobile );
                BeginStable( e.Mobile );
            }
            else if ( !e.Handled && e.HasKeyword( 0x0009 ) ) // *claim*
            {
                e.Handled = true;
 
                CloseClaimList( e.Mobile );
 
                int index = e.Speech.IndexOf( ' ' );
 
                if ( index != -1 )
                    Claim( e.Mobile, e.Speech.Substring( index ).Trim() );
                else
                    Claim( e.Mobile );
            }
            else
            {
                base.OnSpeech( e );
            }
        }
 
        public AnimalTrainer( 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();
        }
    }
}

Code:
using System;
using System.Collections.Generic;
using Server.Items;
 
namespace Server.Mobiles
{
    public class SBAnimalTrainer : SBInfo
    {
        private List<GenericBuyInfo> m_BuyInfo = new InternalBuyInfo();
        private IShopSellInfo m_SellInfo = new InternalSellInfo();
 
        public SBAnimalTrainer()
        {
        }
 
        public override IShopSellInfo SellInfo { get { return m_SellInfo; } }
        public override List<GenericBuyInfo> BuyInfo { get { return m_BuyInfo; } }
 
        public class InternalBuyInfo : List<GenericBuyInfo>
        {
            public InternalBuyInfo()
            {
                Add( new AnimalBuyInfo( 1, typeof( Cat ), 132, 10, 201, 0 ) );
                Add( new AnimalBuyInfo( 1, typeof( Dog ), 170, 10, 217, 0 ) );
                Add( new AnimalBuyInfo( 1, typeof( Horse ), 550, 10, 204, 0 ) );
                Add( new AnimalBuyInfo( 1, typeof( PackHorse ), 631, 10, 291, 0 ) );
                Add( new AnimalBuyInfo( 1, typeof( PackLlama ), 565, 10, 292, 0 ) );
                Add( new AnimalBuyInfo( 1, typeof( Rabbit ), 106, 10, 205, 0 ) );
 
                if( !Core.AOS )
                {
                    Add( new AnimalBuyInfo( 1, typeof( Eagle ), 402, 10, 5, 0 ) );
                    Add( new AnimalBuyInfo( 1, typeof( BrownBear ), 855, 10, 167, 0 ) );
                    Add( new AnimalBuyInfo( 1, typeof( GrizzlyBear ), 1767, 10, 212, 0 ) );
                    Add( new AnimalBuyInfo( 1, typeof( Panther ), 1271, 10, 214, 0 ) );
                    Add( new AnimalBuyInfo( 1, typeof( TimberWolf ), 768, 10, 225, 0 ) );
                    Add( new AnimalBuyInfo( 1, typeof( Rat ), 107, 10, 238, 0 ) );
                }
 
                if ( FSATS.EnableTamingCraft == true )
                    Add( new AnimalBuyInfo( 1, typeof( Brush ), 72, 10, 0x1373, 0 ) );
 
                if ( FSATS.EnableTamingCraft == false )
                {
                    Add( new AnimalBuyInfo( 1, typeof( PetShrinkPotion ), 16, 10, 0xE26, 0 ) );
                    Add( new AnimalBuyInfo( 1, typeof( PetLeash ), 1456, 10, 0x1374, 0 ) );
                    Add( new AnimalBuyInfo( 1, typeof( HitchingPostEastDeed ), 1456, 10, 0x14F0, 0 ) );
                    Add( new AnimalBuyInfo( 1, typeof( HitchingPostSouthDeed ), 1456, 10, 0x14F0, 0 ) );
                }
 
                if ( FSATS.EnableTamingBODs == false && FSATS.EnableBioEngineer == true )
                {
                    Add( new AnimalBuyInfo( 1, typeof( BioTool ), 72, 10, 0x1373, 1175 ) );
                    Add( new AnimalBuyInfo( 1, typeof( BioEnginerBook ), 10001, 10, 4084, 0 ) );
                }
                   
            }
        }
 
        public class InternalSellInfo : GenericSellInfo
        {
            public InternalSellInfo()
            {
            }
        }
    }
}
 

Hammerhand

Knight
Ok, for the Large & Small Mobile BOD scripts... change the using statements at the top to
Code:
using System;
using System.Collections;
using Server;
using Server.Items;
using System.Collections.Generic;
using Server.Mobiles;
And for the Large & Small Taming BOD scripts, change them to
Code:
using System;
using System.Collections;
using Server;
using Server.Items;
using System.Collections.Generic;
using Server.Mobiles;
using Server.Engines.Craft;
I just tested this & got a large BOD instantly. Hope this helps.
 

fffkingrage

Sorceror
Replaced the using statements on all four files as you outlined, still same exact problem. "You can get an order now." But nothing pops up. Try again and it says to come back in 30 minutes.
Hmmm...
 

Hammerhand

Knight
It works fine for the large taming bods, but the small ones arent doing as they're told. For some reason they are actually spawning to the internal map instead of the pack. Trying to sort it out...
 

fffkingrage

Sorceror
You know, I'd almost forgotten about that since I already SEMI resolved it and put up big orange warning signs for my players.

After investigating and testing, it turned out they were attempting to breed Mercenaries. As in the Mercs from... I believe it was Xanthos' EVO system.
I bred cows, dragons, evo daemons, etc etc just fine... But for some reason the Merc script crashed it out.

I just told them not to do it. Not sure what caused the crash, but I wasn't sure that those were even SUPPOSED to be breedable. :D
 

Hammerhand

Knight
You could always add the mercs into the FSATSSettings.cs They would no longer level with FSATS (not that it should matter since they have their own leveling system), but players wouldnt be able to breed them.
 

milva

Sorceror
Hammerhand is correct you will need to add those to the Fs settings script for "not to breed"
also any evo system which will return an egg- will need to be added in the settings script also or it will crash the server.
 

土豆丝

Traveler
AnimalTrainer.cs Copy to Scripts\Mobiles\Vendors\NPC
BaseCreature.cs Copy to \Scripts\Mobiles
BasePotion.cs Copy to Scripts\Items\Skill Items\Magical\Potions
BaseVendor.cs Copy to Scripts\Mobiles\Vendors
DefInscription.cs Copy to Scripts\Engines\Craft
PlayerMobile.cs Copy to Scripts\Mobiles
PlayerVendor.cs Copy to Scripts\Mobiles\Vendors
PotionKeg.cs Copy to Scripts\Items\Skill Items\Magical\Misc
SBAnimalTrainer.cs Copy to Scripts\Mobiles\Vendors\SBInfo
Taming file put into Data\Bulk
Other file put into customs
After the compiler
RunUO - [www.runuo.com] Version 2.3, Build 4856.25877
Core: Running on .NET Framework Version 4.0.30319
Core: Optimizing for 2 processors
Scripts: Compiling C# scripts...failed (2 errors, 3 warnings)
Warnings:
+ Customs/Nerun's Distro/SA/Mobiles/TerMur/Korpre/Korpre 1/Evolution Korpre.cs:

CS0108: Line 41: 'Server.Mobiles.EvolutionKorpre.AllowMating' hides inherite
d member 'Server.Mobiles.BaseCreature.AllowMating'. Use the new keyword if hidin
g was intended.
+ Customs/Nerun's Distro/SA/Mobiles/TerMur/Korpre/Korpre 2/Evolution Korpre 2.c
s:
CS0108: Line 41: 'Server.Mobiles.EvolutionKorpre2.AllowMating' hides inherit
ed member 'Server.Mobiles.BaseCreature.AllowMating'. Use the new keyword if hidi
ng was intended.
+ Customs/Nerun's Distro/SA/Mobiles/TerMur/Korpre/Korpre 3/Evolution Korpre 3.c
s:
CS0108: Line 41: 'Server.Mobiles.EvolutionKorpre3.AllowMating' hides inherit
ed member 'Server.Mobiles.BaseCreature.AllowMating'. Use the new keyword if hidi
ng was intended.
Errors:
+ Mobiles/AI/BaseAI.cs:
CS0117: Line 217: 'Server.Mobiles.OrderType' does not contain a definition f
or 'Dismiss'
CS0117: Line 795: 'Server.Mobiles.OrderType' does not contain a definition f
or 'Dismiss'
CS0117: Line 1105: 'Server.Mobiles.OrderType' does not contain a definition
for 'Dismiss'
CS0117: Line 1203: 'Server.Mobiles.OrderType' does not contain a definition
for 'Dismiss'
CS0117: Line 162: 'Server.Mobiles.OrderType' does not contain a definition f
or 'Dismiss'
+ Gumps/ConfirmReleaseGump.cs:
CS0117: Line 44: 'Server.Mobiles.OrderType' does not contain a definition fo
r 'Dismiss'
Scripts: One or more scripts failed to compile or no script files were found.

- Press return to exit, or R to try again.
I can't solve it for me
 

Hammerhand

Knight
The warnings you dont need to worry about. However, the Dismiss errors are from Neruns Distro BaseAI.cs edits. If you have Neruns added in, make sure you have all the edits merged properly. And never just copy files over, use WinMerge to merge the differences into the original files.
 

ByAccident

Wanderer
I'm trying to implent this system to my 2.3 server but I'm stuck with these 2 errors,
can anyone point me in the right direction?

Errors:
+ Mobiles/Vendors/NPC/AnimalTrainer.cs:
CS0246: Line 56: Het type of de naamruimtenaam LargeTamingBOD is niet gevond
en (ontbreekt er een gebruiksinstructie of assembly-verwijzing?)
CS0103: Line 58: De naam SmallTamingBOD bestaat niet in de huidige context
CS0246: Line 66: Het type of de naamruimtenaam SmallTamingBOD is niet gevond
en (ontbreekt er een gebruiksinstructie of assembly-verwijzing?)
CS0246: Line 66: Het type of de naamruimtenaam LargeTamingBOD is niet gevond
en (ontbreekt er een gebruiksinstructie of assembly-verwijzing?)
+ Mobiles/PlayerMobile.cs:
CS0266: Line 1443: Kan type System.Collections.Generic.IEnumerable<Server.Gu
mps.Gump> niet impliciet converteren naar System.Collections.Generic.List<Server
.Gumps.Gump>. Er bestaat een expliciete conversie (ontbreekt er een conversie?)
CS0246: Line 1552: Het type of de naamruimtenaam s is niet gevonden (ontbree
kt er een gebruiksinstructie of assembly-verwijzing?)


Animaltrainer file:

Code:
using System;
using System.Collections;
using System.Collections.Generic;
using Server;
using Server.ContextMenus;
using Server.Gumps;
using Server.Items;
using Server.Network;
using Server.Targeting;
using Server.Engines.BulkOrders;
 
namespace Server.Mobiles
{
    public class AnimalTrainer : BaseVendor
    {
        private List<SBInfo> m_SBInfos = new List<SBInfo>();
        protected override List<SBInfo> SBInfos{ get { return m_SBInfos; } }
 
        [Constructable]
        public AnimalTrainer() : base( "the animal trainer" )
        {
            SetSkill( SkillName.AnimalLore, 64.0, 100.0 );
            SetSkill( SkillName.AnimalTaming, 90.0, 100.0 );
            SetSkill( SkillName.Veterinary, 65.0, 88.0 );
        }
 
        public override void InitSBInfo()
        {
            m_SBInfos.Add( new SBAnimalTrainer() );
        }
 
        public override VendorShoeType ShoeType
        {
            get{ return Female ? VendorShoeType.ThighBoots : VendorShoeType.Boots; }
        }
 
        #region Bulk Orders
        public override Item CreateBulkOrder( Mobile from, bool fromContextMenu )
        {
            PlayerMobile pm = from as PlayerMobile;
 
            if ( pm != null && pm.NextTamingBulkOrder == TimeSpan.Zero && (fromContextMenu || 0.2 > Utility.RandomDouble()) )
            {
                double theirSkill = pm.Skills[SkillName.AnimalTaming].Base;
 
                if ( theirSkill >= 70.1 )
                    pm.NextTamingBulkOrder = TimeSpan.FromHours( 2.0 );
                else if ( theirSkill >= 50.1 )
                    pm.NextTamingBulkOrder = TimeSpan.FromHours( 2.0 );
                else
                    pm.NextTamingBulkOrder = TimeSpan.FromMinutes( 30.0 );
 
                if ( theirSkill >= 70.1 && ((theirSkill - 40.0) / 300.0) > Utility.RandomDouble() )
                    return new LargeTamingBOD();
 
                return SmallTamingBOD.CreateRandomFor( from );
            }
 
            return null;
        }
 
        public override bool IsValidBulkOrder( Item item )
        {
            return ( item is SmallTamingBOD || item is LargeTamingBOD );
        }
 
        public override bool SupportsBulkOrders( Mobile from )
        {
            return ( from is PlayerMobile && from.Skills[SkillName.AnimalTaming].Base > 0 && FSATS.EnableTamingBODs == true );
        }
 
        public override TimeSpan GetNextBulkOrder( Mobile from )
        {
            if ( from is PlayerMobile )
                return ((PlayerMobile)from).NextTamingBulkOrder;
 
            return TimeSpan.Zero;
        }
        #endregion
 
        public override int GetShoeHue()
        {
            return 0;
        }
 
        public override void InitOutfit()
        {
            base.InitOutfit();
 
            AddItem( Utility.RandomBool() ? (Item)new QuarterStaff() : (Item)new ShepherdsCrook() );
        }
 
        private class StableEntry : ContextMenuEntry
        {
            private AnimalTrainer m_Trainer;
            private Mobile m_From;
 
            public StableEntry( AnimalTrainer trainer, Mobile from ) : base( 6126, 12 )
            {
                m_Trainer = trainer;
                m_From = from;
            }
 
            public override void OnClick()
            {
                m_Trainer.BeginStable( m_From );
            }
        }
 
        private class ClaimListGump : Gump
        {
            private AnimalTrainer m_Trainer;
            private Mobile m_From;
            private List<BaseCreature> m_List;
 
            public ClaimListGump( AnimalTrainer trainer, Mobile from, List<BaseCreature> list ) : base( 50, 50 )
            {
                m_Trainer = trainer;
                m_From = from;
                m_List = list;
 
                from.CloseGump( typeof( ClaimListGump ) );
 
                AddPage( 0 );
 
                AddBackground( 0, 0, 325, 50 + (list.Count * 20), 9250 );
                AddAlphaRegion( 5, 5, 315, 40 + (list.Count * 20) );
 
                AddHtml( 15, 15, 275, 20, "<BASEFONT COLOR=#FFFFFF>Select a pet to retrieve from the stables:</BASEFONT>", false, false );
 
                for ( int i = 0; i < list.Count; ++i )
                {
                    BaseCreature pet = list[i];
 
                    if ( pet == null || pet.Deleted )
                        continue;
 
                    AddButton( 15, 39 + (i * 20), 10006, 10006, i + 1, GumpButtonType.Reply, 0 );
                    AddHtml( 32, 35 + (i * 20), 275, 18, String.Format( "<BASEFONT COLOR=#C0C0EE>{0}</BASEFONT>", pet.Name ), false, false );
                }
            }
 
            public override void OnResponse( NetState sender, RelayInfo info )
            {
                int index = info.ButtonID - 1;
 
                if ( index >= 0 && index < m_List.Count )
                    m_Trainer.EndClaimList( m_From, m_List[index] );
            }
        }
 
        private class ClaimAllEntry : ContextMenuEntry
        {
            private AnimalTrainer m_Trainer;
            private Mobile m_From;
 
            public ClaimAllEntry( AnimalTrainer trainer, Mobile from ) : base( 6127, 12 )
            {
                m_Trainer = trainer;
                m_From = from;
            }
 
            public override void OnClick()
            {
                m_Trainer.Claim( m_From );
            }
        }
 
        public override void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
        {
            if ( from.Alive )
            {
                list.Add( new StableEntry( this, from ) );
 
                if ( from.Stabled.Count > 0 )
                    list.Add( new ClaimAllEntry( this, from ) );
            }
 
            base.AddCustomContextEntries( from, list );
        }
 
        public static int GetMaxStabled( Mobile from )
        {
            double taming = from.Skills[SkillName.AnimalTaming].Value;
            double anlore = from.Skills[SkillName.AnimalLore].Value;
            double vetern = from.Skills[SkillName.Veterinary].Value;
            double sklsum = taming + anlore + vetern;
 
            int max;
 
            if ( sklsum >= 240.0 )
                max = 5;
            else if ( sklsum >= 200.0 )
                max = 4;
            else if ( sklsum >= 160.0 )
                max = 3;
            else
                max = 2;
 
            if ( taming >= 100.0 )
                max += (int)((taming - 90.0) / 10);
 
            if ( anlore >= 100.0 )
                max += (int)((anlore - 90.0) / 10);
 
            if ( vetern >= 100.0 )
                max += (int)((vetern - 90.0) / 10);
 
            return max;
        }
 
        private class StableTarget : Target
        {
            private AnimalTrainer m_Trainer;
 
            public StableTarget( AnimalTrainer trainer ) : base( 12, false, TargetFlags.None )
            {
                m_Trainer = trainer;
            }
 
            protected override void OnTarget( Mobile from, object targeted )
            {
                if ( targeted is BaseCreature )
                    m_Trainer.EndStable( from, (BaseCreature)targeted );
                else if ( targeted == from )
                    m_Trainer.SayTo( from, 502672 ); // HA HA HA! Sorry, I am not an inn.
                else
                    m_Trainer.SayTo( from, 1048053 ); // You can't stable that!
            }
        }
 
        private void CloseClaimList( Mobile from )
        {
            from.CloseGump( typeof( ClaimListGump ) );
        }
 
        public void BeginClaimList( Mobile from )
        {
            if ( Deleted || !from.CheckAlive() )
                return;
 
            List<BaseCreature> list = new List<BaseCreature>();
 
            for ( int i = 0; i < from.Stabled.Count; ++i )
            {
                BaseCreature pet = from.Stabled[i] as BaseCreature;
 
                if ( pet == null || pet.Deleted )
                {
                    pet.IsStabled = false;
                    pet.StabledBy = null;
                    from.Stabled.RemoveAt( i );
                    --i;
                    continue;
                }
 
                list.Add( pet );
            }
 
            if ( list.Count > 0 )
                from.SendGump( new ClaimListGump( this, from, list ) );
            else
                SayTo( from, 502671 ); // But I have no animals stabled with me at the moment!
        }
 
        public void EndClaimList( Mobile from, BaseCreature pet )
        {
            if ( pet == null || pet.Deleted || from.Map != this.Map || !from.Stabled.Contains( pet ) || !from.CheckAlive() )
                return;
 
            if ( !from.InRange( this, 14 ) )
            {
                from.SendLocalizedMessage( 500446 ); // That is too far away.
                return;
            }
 
            if ( CanClaim( from, pet ) )
            {
                DoClaim( from, pet );
 
                from.Stabled.Remove( pet );
 
                if ( from is PlayerMobile )
                    ((PlayerMobile)from).AutoStabled.Remove( pet );
            }
            else
            {
                SayTo( from, 1049612, pet.Name ); // ~1_NAME~ remained in the stables because you have too many followers.
            }
        }
 
        public void BeginStable( Mobile from )
        {
            if ( Deleted || !from.CheckAlive() )
                return;
 
            Container bank = from.FindBankNoCreate();
 
            if ( ( from.Backpack == null || from.Backpack.GetAmount( typeof( Gold ) ) < 30 ) && ( bank == null || bank.GetAmount( typeof( Gold ) ) < 30 ) )
            {
                SayTo( from, 1042556 ); // Thou dost not have enough gold, not even in thy bank account.
            }
            else
            {
                /* I charge 30 gold per pet for a real week's stable time.
                * I will withdraw it from thy bank account.
                * Which animal wouldst thou like to stable here?
                */
                from.SendLocalizedMessage(1042558);
 
                from.Target = new StableTarget( this );
            }
        }
 
        public void EndStable( Mobile from, BaseCreature pet )
        {
            if ( Deleted || !from.CheckAlive() )
                return;
 
            if ( pet.Body.IsHuman )
            {
                SayTo( from, 502672 ); // HA HA HA! Sorry, I am not an inn.
            }
            else if ( !pet.Controlled )
            {
                SayTo( from, 1048053 ); // You can't stable that!
            }
            else if ( pet.ControlMaster != from )
            {
                SayTo( from, 1042562 ); // You do not own that pet!
            }
            else if ( pet.IsDeadPet )
            {
                SayTo( from, 1049668 ); // Living pets only, please.
            }
            else if ( pet.Summoned )
            {
                SayTo( from, 502673 ); // I can not stable summoned creatures.
            }
/*
            else if ( pet.Allured )
            {
                SayTo( from, 1048053 ); // You can't stable that!
            }
*/
            else if ( (pet is PackLlama || pet is PackHorse || pet is Beetle) && (pet.Backpack != null && pet.Backpack.Items.Count > 0) )
            {
                SayTo( from, 1042563 ); // You need to unload your pet.
            }
            else if ( pet.Combatant != null && pet.InRange( pet.Combatant, 12 ) && pet.Map == pet.Combatant.Map )
            {
                SayTo( from, 1042564 ); // I'm sorry.  Your pet seems to be busy.
            }
            else if ( from.Stabled.Count >= GetMaxStabled( from ) )
            {
                SayTo( from, 1042565 ); // You have too many pets in the stables!
            }
            else
            {
                Container bank = from.FindBankNoCreate();
 
                if ( ( from.Backpack != null && from.Backpack.ConsumeTotal( typeof( Gold ), 30 ) ) || ( bank != null && bank.ConsumeTotal( typeof( Gold ), 30 ) ) )
                {
                    pet.ControlTarget = null;
                    pet.ControlOrder = OrderType.Stay;
                    pet.Internalize();
 
                    pet.SetControlMaster( null );
                    pet.SummonMaster = null;
 
                    pet.IsStabled = true;
                    pet.StabledBy = from;
 
                    if ( Core.SE )
                        pet.Loyalty = BaseCreature.MaxLoyalty; // Wonderfully happy
 
                    from.Stabled.Add( pet );
 
                    SayTo( from, Core.AOS ? 1049677 : 502679 ); // [AOS: Your pet has been stabled.] Very well, thy pet is stabled. Thou mayst recover it by saying 'claim' to me. In one real world week, I shall sell it off if it is not claimed!
                }
                else
                {
                    SayTo( from, 502677 ); // But thou hast not the funds in thy bank account!
                }
            }
        }
 
        public void Claim( Mobile from )
        {
            Claim( from, null );
        }
 
        public void Claim( Mobile from, string petName )
        {
            if ( Deleted || !from.CheckAlive() )
                return;
 
            bool claimed = false;
            int stabled = 0;
 
            bool claimByName = ( petName != null );
 
            for ( int i = 0; i < from.Stabled.Count; ++i )
            {
                BaseCreature pet = from.Stabled[i] as BaseCreature;
 
                if ( pet == null || pet.Deleted )
                {
                    pet.IsStabled = false;
                    pet.StabledBy = null;
                    from.Stabled.RemoveAt( i );
                    --i;
                    continue;
                }
 
                ++stabled;
 
                if ( claimByName && !Insensitive.Equals( pet.Name, petName ) )
                    continue;
 
                if ( CanClaim( from, pet ) )
                {
                    DoClaim( from, pet );
 
                    from.Stabled.RemoveAt( i );
 
                    if ( from is PlayerMobile )
                        ((PlayerMobile)from).AutoStabled.Remove( pet );
 
                    --i;
 
                    claimed = true;
                }
                else
                {
                    SayTo( from, 1049612, pet.Name ); // ~1_NAME~ remained in the stables because you have too many followers.
                }
            }
 
            if ( claimed )
                SayTo( from, 1042559 ); // Here you go... and good day to you!
            else if ( stabled == 0 )
                SayTo( from, 502671 ); // But I have no animals stabled with me at the moment!
            else if ( claimByName )
                BeginClaimList( from );
        }
 
        public bool CanClaim( Mobile from, BaseCreature pet )
        {
            return ((from.Followers + pet.ControlSlots) <= from.FollowersMax);
        }
 
        private void DoClaim( Mobile from, BaseCreature pet )
        {
            pet.SetControlMaster( from );
 
            if ( pet.Summoned )
                pet.SummonMaster = from;
 
            pet.ControlTarget = from;
            pet.ControlOrder = OrderType.Follow;
 
            pet.MoveToWorld( from.Location, from.Map );
 
            pet.IsStabled = false;
            pet.StabledBy = null;
 
            if ( Core.SE )
                pet.Loyalty = BaseCreature.MaxLoyalty; // Wonderfully Happy
        }
 
        public override bool HandlesOnSpeech( Mobile from )
        {
            return true;
        }
 
        public override void OnSpeech( SpeechEventArgs e )
        {
            if ( !e.Handled && e.HasKeyword( 0x0008 ) ) // *stable*
            {
                e.Handled = true;
 
                CloseClaimList( e.Mobile );
                BeginStable( e.Mobile );
            }
            else if ( !e.Handled && e.HasKeyword( 0x0009 ) ) // *claim*
            {
                e.Handled = true;
 
                CloseClaimList( e.Mobile );
 
                int index = e.Speech.IndexOf( ' ' );
 
                if ( index != -1 )
                    Claim( e.Mobile, e.Speech.Substring( index ).Trim() );
                else
                    Claim( e.Mobile );
            }
            else
            {
                base.OnSpeech( e );
            }
        }
 
        public AnimalTrainer( 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();
        }
    }
}
 
Top