diff --git a/Scripts/Mobiles/Animals/Mounts/Ethereals.cs b/Scripts/Mobiles/Animals/Mounts/Ethereals.cs index 4f03b94d8..bba696b1f 100644 --- a/Scripts/Mobiles/Animals/Mounts/Ethereals.cs +++ b/Scripts/Mobiles/Animals/Mounts/Ethereals.cs @@ -766,7 +766,7 @@ namespace Server.Mobiles public class EtherealHiryu : EtherealMount { - public override int LabelNumber { get { return 1080458; } } // 1080458 + public override int LabelNumber { get { return 1113813; } } // Ethereal Hiryu Statuette [Constructable] public EtherealHiryu() @@ -796,7 +796,7 @@ namespace Server.Mobiles public class EtherealReptalon : EtherealMount { - public override int LabelNumber { get { return 1113813; } } // reptalon statuette + public override int LabelNumber { get { return 1113812; } } // Ethereal Reptalon Statuette [Constructable] public EtherealReptalon() diff --git a/Scripts/Spells/Fourth/ArchCure.cs b/Scripts/Spells/Fourth/ArchCure.cs index b45d90331..0dbcdd9a8 100644 --- a/Scripts/Spells/Fourth/ArchCure.cs +++ b/Scripts/Spells/Fourth/ArchCure.cs @@ -29,7 +29,7 @@ namespace Server.Spells.Fourth Caster.Target = new InternalTarget( this ); } - // Archcure is now 1/4th of a second faster + // Arch cure is now 1/4th of a second faster public override TimeSpan CastDelayBase{ get{ return base.CastDelayBase - TimeSpan.FromSeconds( 0.25 ); } } public void Target( IPoint3D p ) @@ -47,28 +47,24 @@ namespace Server.Spells.Fourth List targets = new List(); Map map = Caster.Map; - Mobile m_directtarget = p as Mobile; + Mobile directTarget = p as Mobile; if ( map != null ) { - //you can target directly someone/something and become criminal if it's a criminal action - if ( m_directtarget != null ) - targets.Add ( m_directtarget ); + bool feluccaRules = ( map.Rules == MapRules.FeluccaRules ); + + // You can target any living mobile directly, beneficial checks apply + if ( directTarget != null && Caster.CanBeBeneficial( directTarget, false ) ) + targets.Add( directTarget ); IPooledEnumerable eable = map.GetMobilesInRange( new Point3D( p ), 2 ); foreach ( Mobile m in eable ) { - // Archcure area effect won't cure aggressors or victims, nor murderers, criminals or monsters - // plus Arch Cure Area will NEVER work on summons/pets if you are in Felucca facet - // red players can cure only themselves and guildies with arch cure area. + if ( m == directTarget ) + continue; - if ( map.Rules == MapRules.FeluccaRules ) - { - if ( Caster.CanBeBeneficial( m, false ) && ( !Core.AOS || !IsAggressor( m ) && !IsAggressed( m ) && (( IsInnocentTo ( Caster, m ) && IsInnocentTo ( m, Caster ) ) || ( IsAllyTo ( Caster, m ) )) && m != m_directtarget && m is PlayerMobile || m == Caster && m != m_directtarget )) - targets.Add( m ); - } - else if ( Caster.CanBeBeneficial( m, false ) && ( !Core.AOS || !IsAggressor( m ) && !IsAggressed( m ) && (( IsInnocentTo ( Caster, m ) && IsInnocentTo ( m, Caster ) ) || ( IsAllyTo ( Caster, m ) )) && m != m_directtarget || m == Caster && m != m_directtarget )) + if ( AreaCanTarget( m, feluccaRules ) ) targets.Add( m ); } @@ -111,6 +107,31 @@ namespace Server.Spells.Fourth FinishSequence(); } + private bool AreaCanTarget( Mobile target, bool feluccaRules ) + { + /* Arch cure area effect won't cure aggressors, victims, murderers, criminals or monsters. + * In Felucca, it will also not cure summons and pets. + * For red players it will only cure themselves and guild members. + */ + + if ( !Caster.CanBeBeneficial( target, false ) ) + return false; + + if ( Core.AOS && target != Caster ) + { + if ( IsAggressor( target ) || IsAggressed( target ) ) + return false; + + if ( ( !IsInnocentTo( Caster, target ) || !IsInnocentTo( target, Caster ) ) && !IsAllyTo( Caster, target ) ) + return false; + + if ( feluccaRules && !( target is PlayerMobile ) ) + return false; + } + + return true; + } + private bool IsAggressor( Mobile m ) { foreach ( AggressorInfo info in Caster.Aggressors ) @@ -137,7 +158,7 @@ namespace Server.Spells.Fourth { return ( Notoriety.Compute( from, (Mobile)to ) == Notoriety.Innocent ); } - + private static bool IsAllyTo( Mobile from, Mobile to ) { return ( Notoriety.Compute( from, (Mobile)to ) == Notoriety.Ally );