using System; using System.Collections; using Server.Items; using Server.Engines.CannedEvil; namespace Server.Mobiles { public class Meraktus : BaseChampion { public override string CorpseName => "the remains of Meraktus"; public override ChampionSkullType SkullType => ChampionSkullType.Pain; public override Type[] UniqueList => new [] { typeof( Subdue ) }; public override Type[] SharedList => new Type[] { }; public override Type[] DecorativeList => new[] { typeof(ArtifactLargeVase), typeof(ArtifactVase), typeof(MinotaurStatueDeed), }; public override MonsterStatuetteType[] StatueTypes => new [] { MonsterStatuetteType.Minotaur }; public override WeaponAbility GetWeaponAbility() => WeaponAbility.Dismount; public override string DefaultName => "Meraktus"; [Constructible] public Meraktus() : base(AIType.AI_Melee) { Title = "the Tormented"; Body = 263; BaseSoundID = 680; Hue = 0x835; SetStr( 1419, 1438 ); SetDex( 309, 413 ); SetInt( 129, 131 ); SetHits( 4100, 4200 ); SetDamage( 16, 30 ); SetDamageType( ResistanceType.Physical, 100 ); SetResistance( ResistanceType.Physical, 65, 90 ); SetResistance( ResistanceType.Fire, 65, 70 ); SetResistance( ResistanceType.Cold, 50, 60 ); SetResistance( ResistanceType.Poison, 40, 60 ); SetResistance( ResistanceType.Energy, 50, 55 ); //SetSkill( SkillName.Meditation, Unknown ); //SetSkill( SkillName.EvalInt, Unknown ); //SetSkill( SkillName.Magery, Unknown ); //SetSkill( SkillName.Poisoning, Unknown ); SetSkill( SkillName.Anatomy, 0); SetSkill( SkillName.MagicResist, 107.0, 111.3 ); SetSkill( SkillName.Tactics, 107.0, 117.0 ); SetSkill( SkillName.Wrestling, 100.0, 105.0 ); Fame = 70000; Karma = -70000; VirtualArmor = 28; // Don't know what it should be if ( Core.ML ) { PackResources(8); PackTalismans(5); } Timer.DelayCall(TimeSpan.FromSeconds(1), new TimerCallback(SpawnTormented)); } public virtual void PackResources(int amount) { for (int i = 0; i < amount; i++) switch (Utility.Random(6)) { case 0: PackItem(new Blight()); break; case 1: PackItem(new Scourge()); break; case 2: PackItem(new Taint()); break; case 3: PackItem(new Putrefication()); break; case 4: PackItem(new Corruption()); break; case 5: PackItem(new Muculent()); break; } } public virtual void PackTalismans(int amount) { int count = Utility.Random(amount); for (int i = 0; i < count; i++) PackItem(new RandomTalisman()); } public override void OnDeath( Container c ) { base.OnDeath( c ); if ( Core.ML ) { c.DropItem( new MalletAndChisel() ); switch ( Utility.Random( 3 ) ) { case 0: c.DropItem( new MinotaurHedge() ); break; case 1: c.DropItem( new BonePile() ); break; case 2: c.DropItem( new LightYarn() ); break; } if ( Utility.RandomBool() ) c.DropItem( new TormentedChains() ); if ( Utility.RandomDouble() < 0.025 ) c.DropItem(new CrimsonCincture()); } } public override void GenerateLoot() { if ( Core.ML ) { AddLoot( LootPack.AosSuperBoss, 5 ); // Need to verify } } public override int GetAngerSound() { return 0x597; } public override int GetIdleSound() { return 0x596; } public override int GetAttackSound() { return 0x599; } public override int GetHurtSound() { return 0x59a; } public override int GetDeathSound() { return 0x59c; } public override int Meat => 2; public override int Hides => 10; public override HideType HideType => HideType.Regular; public override Poison PoisonImmune => Poison.Regular; public override int TreasureMapLevel => 3; public override bool BardImmune => true; public override bool Unprovokable => true; public override bool Uncalmable => true; public override void OnGaveMeleeAttack(Mobile defender) { base.OnGaveMeleeAttack(defender); if (0.2 >= Utility.RandomDouble()) Earthquake(); } public void Earthquake() { Map map = Map; if (map == null) return; ArrayList targets = new ArrayList(); foreach (Mobile m in GetMobilesInRange(8)) { if (m == this || !CanBeHarmful(m)) continue; if (m is BaseCreature creature && (creature.Controlled || creature.Summoned || creature.Team != Team)) targets.Add(m); else if (m.Player) targets.Add(m); } PlaySound(0x2F3); for (int i = 0; i < targets.Count; ++i) { Mobile m = (Mobile)targets[i]; if ( m != null && !m.Deleted && m is PlayerMobile pm ) { if (pm.Mounted) { pm.Mount.Rider = null; } } double damage = m.Hits * 0.6; //was .6 if (damage < 10.0) damage = 10.0; else if (damage > 75.0) damage = 75.0; DoHarmful(m); AOS.Damage(m, this, (int)damage, 100, 0, 0, 0, 0); if (m.Alive && m.Body.IsHuman && !m.Mounted) m.Animate(20, 7, 1, true, false, 0); // take hit } } public Meraktus( Serial serial ) : base( serial ) { } 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(); } #region SpawnHelpers public void SpawnTormented() { BaseCreature spawna = new TormentedMinotaur(); spawna.MoveToWorld(Location, Map); BaseCreature spawnb = new TormentedMinotaur(); spawnb.MoveToWorld(Location, Map); BaseCreature spawnc = new TormentedMinotaur(); spawnc.MoveToWorld(Location, Map); BaseCreature spawnd = new TormentedMinotaur(); spawnd.MoveToWorld(Location, Map); } #endregion } }