using System; using Server.Items; namespace Server.Mobiles { [CorpseName("a krakens corpse")] public class Kraken : BaseCreature { private DateTime m_NextWaterBall; [Constructable] public Kraken() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4) { this.m_NextWaterBall = DateTime.UtcNow; this.Name = "a kraken"; this.Body = 77; this.BaseSoundID = 353; this.SetStr(756, 780); this.SetDex(226, 245); this.SetInt(26, 40); this.SetHits(454, 468); this.SetMana(0); this.SetDamage(19, 33); this.SetDamageType(ResistanceType.Physical, 70); this.SetDamageType(ResistanceType.Cold, 30); this.SetResistance(ResistanceType.Physical, 45, 55); this.SetResistance(ResistanceType.Fire, 30, 40); this.SetResistance(ResistanceType.Cold, 30, 40); this.SetResistance(ResistanceType.Poison, 20, 30); this.SetResistance(ResistanceType.Energy, 10, 20); this.SetSkill(SkillName.MagicResist, 15.1, 20.0); this.SetSkill(SkillName.Tactics, 45.1, 60.0); this.SetSkill(SkillName.Wrestling, 45.1, 60.0); this.Fame = 11000; this.Karma = -11000; this.VirtualArmor = 50; this.CanSwim = true; this.CantWalk = true; //Rope is supposed to be a rare drop. ref UO Guide Kraken if (Utility.RandomDouble() < .05) { Rope rope = new Rope(); rope.ItemID = 0x14F8; this.PackItem(rope); } } public Kraken(Serial serial) : base(serial) { } public override int TreasureMapLevel { get { return 4; } } public override void OnActionCombat() { Mobile combatant = this.Combatant as Mobile; if (combatant == null || combatant.Deleted || combatant.Map != this.Map || !this.InRange(combatant, 12) || !this.CanBeHarmful(combatant) || !this.InLOS(combatant)) return; if (DateTime.UtcNow >= this.m_NextWaterBall) { double damage = combatant.Hits * 0.3; if (damage < 10.0) damage = 10.0; else if (damage > 40.0) damage = 40.0; this.DoHarmful(combatant); this.MovingParticles(combatant, 0x36D4, 5, 0, false, false, 195, 0, 9502, 3006, 0, 0, 0); AOS.Damage(combatant, this, (int)damage, 100, 0, 0, 0, 0); if (combatant is PlayerMobile && combatant.Mount != null) { (combatant as PlayerMobile).SetMountBlock(BlockMountType.DismountRecovery, TimeSpan.FromSeconds(10), true); } m_NextWaterBall = DateTime.UtcNow + TimeSpan.FromMinutes(1); } } public override void GenerateLoot() { this.AddLoot(LootPack.Rich); } 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(); m_NextWaterBall = DateTime.UtcNow; } } }