label correction in ethies, correct notoriety checks for archcure

This commit is contained in:
xavier 2011-09-25 03:42:01 +00:00
parent 6ca4b73ea3
commit 8fa0b41e09
2 changed files with 38 additions and 17 deletions

View file

@ -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()

View file

@ -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<Mobile> targets = new List<Mobile>();
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 );