label correction in ethies, correct notoriety checks for archcure
This commit is contained in:
parent
6ca4b73ea3
commit
8fa0b41e09
2 changed files with 38 additions and 17 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue