using System; using System.Collections.Generic; using Server.ContextMenus; using Server.Items; namespace Server.Mobiles { [CorpseName("a giant beetle corpse")] public class Beetle : BaseMount { public virtual double BoostedSpeed { get { return 0.1; } } [Constructable] public Beetle() : this("a giant beetle") { } public override bool SubdueBeforeTame { get { return true; } }// Must be beaten into submission public override bool ReduceSpeedWithDamage { get { return false; } } [Constructable] public Beetle(string name) : base(name, 0x317, 0x3EBC, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.25, 0.5) { SetStr(300); SetDex(100); SetInt(500); SetHits(200); SetDamage(7, 20); SetDamageType(ResistanceType.Physical, 100); SetResistance(ResistanceType.Physical, 30, 40); SetResistance(ResistanceType.Fire, 20, 30); SetResistance(ResistanceType.Cold, 20, 30); SetResistance(ResistanceType.Poison, 20, 30); SetResistance(ResistanceType.Energy, 20, 30); SetSkill(SkillName.MagicResist, 80.0); SetSkill(SkillName.Tactics, 100.0); SetSkill(SkillName.Wrestling, 100.0); Fame = 4000; Karma = -4000; Tamable = true; ControlSlots = 3; MinTameSkill = 29.1; Container pack = Backpack; if (pack != null) pack.Delete(); pack = new StrongBackpack(); pack.Movable = false; AddItem(pack); } public override int GetAngerSound() { return 0x21D; } public override int GetIdleSound() { return 0x21D; } public override int GetAttackSound() { return 0x162; } public override int GetHurtSound() { return 0x163; } public override int GetDeathSound() { return 0x21D; } public override FoodType FavoriteFood { get { return FoodType.Meat; } } public override bool CanAutoStable { get { return (Backpack == null || Backpack.Items.Count == 0) && base.CanAutoStable; } } public Beetle(Serial serial) : base(serial) { } public override void OnHarmfulSpell(Mobile from) { if (!Controlled && ControlMaster == null) CurrentSpeed = BoostedSpeed; } public override void OnCombatantChange() { if (Combatant == null && !Controlled && ControlMaster == null) CurrentSpeed = PassiveSpeed; } #region Pack Animal Methods public override bool OnBeforeDeath() { if (!base.OnBeforeDeath()) return false; PackAnimal.CombineBackpacks(this); return true; } public override DeathMoveResult GetInventoryMoveResultFor(Item item) { return DeathMoveResult.MoveToCorpse; } public override bool IsSnoop(Mobile from) { if (PackAnimal.CheckAccess(this, from)) return false; return base.IsSnoop(from); } public override bool OnDragDrop(Mobile from, Item item) { if (CheckFeed(from, item)) return true; if (PackAnimal.CheckAccess(this, from)) { AddToBackpack(item); return true; } return base.OnDragDrop(from, item); } public override bool CheckNonlocalDrop(Mobile from, Item item, Item target) { return PackAnimal.CheckAccess(this, from); } public override bool CheckNonlocalLift(Mobile from, Item item) { return PackAnimal.CheckAccess(this, from); } public override void GetContextMenuEntries(Mobile from, List list) { base.GetContextMenuEntries(from, list); PackAnimal.GetContextMenuEntries(this, from, list); } #endregion public override void OnAfterTame(Mobile tamer) { base.OnAfterTame(tamer); if (Owners.Count == 0 && PetTrainingHelper.Enabled) { SetInt(500); } } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)1); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); if (version < 1 && PetTrainingHelper.Enabled && ControlSlots <= 3) { var profile = PetTrainingHelper.GetAbilityProfile(this); if (profile == null || !profile.HasCustomized()) { MinTameSkill = 98.7; ControlSlotsMin = 1; ControlSlots = 1; } if ((ControlMaster != null || IsStabled) && Int < 500) { SetInt(500); } } } } }