diff --git a/Scripts/Mobiles/AI/Creature/BaseCreature.cs b/Scripts/Mobiles/AI/Creature/BaseCreature.cs index 7deb415f5..291106d0d 100644 --- a/Scripts/Mobiles/AI/Creature/BaseCreature.cs +++ b/Scripts/Mobiles/AI/Creature/BaseCreature.cs @@ -464,6 +464,9 @@ namespace Server.Mobiles public virtual int BreathColdDamage{ get{ return 0; } } public virtual int BreathPoisonDamage{ get{ return 0; } } public virtual int BreathEnergyDamage{ get{ return 0; } } + + // Is immune to breath damages + public virtual bool BreathImmune{ get{ return false; } } // Effect details and sound public virtual int BreathEffectItemID{ get{ return 0x36D4; } } @@ -535,6 +538,9 @@ namespace Server.Mobiles public virtual void BreathDamage_Callback( object state ) { Mobile target = (Mobile)state; + + if ( target is BaseCreature && ((BaseCreature)target).BreathImmune ) + return; if ( CanBeHarmful( target ) ) { diff --git a/Scripts/Mobiles/Monsters/Ore Elementals/ShadowIronElemental.cs b/Scripts/Mobiles/Monsters/Ore Elementals/ShadowIronElemental.cs index e340eb9a8..8a8504359 100644 --- a/Scripts/Mobiles/Monsters/Ore Elementals/ShadowIronElemental.cs +++ b/Scripts/Mobiles/Monsters/Ore Elementals/ShadowIronElemental.cs @@ -56,6 +56,8 @@ namespace Server.Mobiles public override bool AutoDispel{ get{ return true; } } public override bool BleedImmune{ get{ return true; } } public override int TreasureMapLevel{ get{ return 1; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override bool BreathImmune{ get{ return true; } } public override void AlterMeleeDamageFrom( Mobile from, ref int damage ) { @@ -72,6 +74,11 @@ namespace Server.Mobiles { scalar = 0.0; // Immune to magic } + + public override void AlterSpellDamageFrom( Mobile from, ref int damage ) + { + damage = 0; + } public ShadowIronElemental( Serial serial ) : base( serial ) { diff --git a/Scripts/Mobiles/PlayerMobile.cs b/Scripts/Mobiles/PlayerMobile.cs index 81bebf7c1..1ee9dde74 100644 --- a/Scripts/Mobiles/PlayerMobile.cs +++ b/Scripts/Mobiles/PlayerMobile.cs @@ -442,13 +442,16 @@ namespace Server.Mobiles IPooledEnumerable mobiles = Map.GetMobilesInRange( location, 0 ); - if ( mobiles.GetEnumerator().MoveNext() ) + foreach ( Mobile m in mobiles ) { - mobiles.Free(); - return false; + if ( m.Z >= location.Z && m.Z < location.Z + 16 ) + { + mobiles.Free(); + return false; + } } - else - mobiles.Free(); + + mobiles.Free(); BounceInfo bi = item.GetBounce();