diff --git a/Scripts/Engines/CannedEvil/ChampionSpawn.cs b/Scripts/Engines/CannedEvil/ChampionSpawn.cs index 6818a29c9..a674b92f8 100644 --- a/Scripts/Engines/CannedEvil/ChampionSpawn.cs +++ b/Scripts/Engines/CannedEvil/ChampionSpawn.cs @@ -11,6 +11,20 @@ namespace Server.Engines.CannedEvil { public class ChampionSpawn : Item { + [CommandProperty( AccessLevel.GameMaster )] + public int SpawnSzMod + { + get + { + return ( m_SPawnSzMod < 1 || m_SPawnSzMod > 12 ) ? 12 : m_SPawnSzMod; + } + set + { + m_SPawnSzMod = ( value < 1 || value > 12 ) ? 12 : value; + } + } + private int m_SPawnSzMod; + private bool m_Active; private bool m_RandomizeType; private ChampionSpawnType m_Type; @@ -273,7 +287,7 @@ namespace Server.Engines.CannedEvil { get { - return 250 - (Level * 12); + return ( m_SPawnSzMod * ( 250 / 12 ) ) - ( Level * m_SPawnSzMod ); } } @@ -655,14 +669,14 @@ namespace Server.Engines.CannedEvil if( !m_Active || Deleted || m_Champion != null ) return; - while( m_Creatures.Count < (200 - (GetSubLevel() * 40)) ) + while( m_Creatures.Count < ( ( m_SPawnSzMod * ( 200 / 12 ) ) ) - ( GetSubLevel() * ( m_SPawnSzMod * ( 40 / 12 ) ) ) ) { Mobile m = Spawn(); if( m == null ) return; - Point3D loc = GetSpawnLocation(); + Point3D loc = GetSpawnLocation(); // Allow creatures to turn into Paragons at Ilshenar champions. m.OnBeforeSpawn( loc, Map ); @@ -1096,8 +1110,9 @@ namespace Server.Engines.CannedEvil { base.Serialize( writer ); - writer.Write( (int)5 ); // version + writer.Write( (int)6 ); // version + writer.Write( ( int ) m_SPawnSzMod ); writer.Write( m_DamageEntries.Count ); foreach (KeyValuePair kvp in m_DamageEntries) { @@ -1143,6 +1158,11 @@ namespace Server.Engines.CannedEvil switch( version ) { + case 6: + { + m_SPawnSzMod = reader.ReadInt(); + goto case 5; + } case 5: { int entries = reader.ReadInt(); diff --git a/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs b/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs index 2a635b0b2..2c069b532 100644 --- a/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs +++ b/Scripts/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs @@ -83,6 +83,73 @@ namespace Server.Mobiles return 0x584; } + public override void OnDamage( int amount, Mobile from, bool willKill ) + { + if( Utility.RandomDouble() < 0.1 ) + DropOoze(); + + base.OnDamage( amount, from, willKill ); + } + + private int RandomPoint( int mid ) + { + return ( mid + Utility.RandomMinMax( -2, 2 ) ); + } + + public virtual Point3D GetSpawnPosition( int range ) + { + return GetSpawnPosition( Location, Map, range ); + } + + public virtual Point3D GetSpawnPosition( Point3D from, Map map, int range ) + { + if( map == null ) + return from; + + Point3D loc = new Point3D( ( RandomPoint( X ) ), ( RandomPoint( Y ) ), Z ); + + loc.Z = Map.GetAverageZ( loc.X, loc.Y ); + + return loc; + } + + public virtual void DropOoze() + { + int amount = Utility.RandomMinMax( 1, 3 ); + bool corrosive = Utility.RandomBool(); + + for( int i = 0; i < amount; i++ ) + { + Item ooze = new StainedOoze( corrosive ); + Point3D p = new Point3D( Location ); + + for( int j = 0; j < 5; j++ ) + { + p = GetSpawnPosition( 2 ); + bool found = false; + + foreach( Item item in Map.GetItemsInRange( p, 0 ) ) + if( item is StainedOoze ) + { + found = true; + break; + } + + if( !found ) + break; + } + + ooze.MoveToWorld( p, Map ); + } + + if( Combatant != null ) + { + if( corrosive ) + Combatant.SendLocalizedMessage( 1072071 ); // A corrosive gas seeps out of your enemy's skin! + else + Combatant.SendLocalizedMessage( 1072072 ); // A poisonous gas seeps out of your enemy's skin! + } + } /* public override bool OnBeforeDeath() { diff --git a/Scripts/Mobiles/Monsters/ML/Labyrinth/Miasma.cs b/Scripts/Mobiles/Monsters/ML/Labyrinth/Miasma.cs index 20f48cefe..62ca3ed44 100644 --- a/Scripts/Mobiles/Monsters/ML/Labyrinth/Miasma.cs +++ b/Scripts/Mobiles/Monsters/ML/Labyrinth/Miasma.cs @@ -19,7 +19,7 @@ namespace Server.Mobiles SetDex( 145, 428 ); SetInt( 26, 380 ); - SetHits( 272, 2000 ); + SetHits( 750, 2000 ); SetMana( 5, 60 ); SetDamage( 20, 30 ); @@ -33,8 +33,9 @@ namespace Server.Mobiles SetResistance( ResistanceType.Poison, 70, 80 ); SetResistance( ResistanceType.Energy, 40, 45 ); - SetSkill( SkillName.Wrestling, 64.9, 73.3 ); + SetSkill( SkillName.Wrestling, 84.9, 103.3 ); SetSkill( SkillName.Tactics, 98.4, 110.6 ); + SetSkill( SkillName.Anatomy, 0 ); SetSkill( SkillName.MagicResist, 74.4, 77.7 ); SetSkill( SkillName.Poisoning, 128.5, 143.6 ); @@ -43,16 +44,16 @@ namespace Server.Mobiles } /* yes, this is OSI style */ - public override double WeaponAbilityChance { get { return 0.6; } } - public override double HitPoisonChance { get { return 0.25; } } - public override Poison HitPoison { get { return ( Poison.Lethal ); } } + public override double WeaponAbilityChance { get { return 0.75; } } + public override double HitPoisonChance { get { return 0.35; } } + public override Poison HitPoison { get { return ( Poison.Lethal ); } } public override bool HasManaOveride { get { return true; } } public override bool GivesMLMinorArtifact { get { return true; } } public override int TreasureMapLevel { get { return 5; } } public override void GenerateLoot() { - AddLoot( LootPack.UltraRich, 2 ); + AddLoot( LootPack.UltraRich, 4 ); } public override WeaponAbility GetWeaponAbility()