public virtual void AggressiveAction( Mobile aggressor, bool criminal ) { if ( aggressor == this ) return; AggressiveActionEventArgs args = AggressiveActionEventArgs.Create( this, aggressor, criminal ); EventSink.InvokeAggressiveAction( args ); args.Free(); if ( Combatant == aggressor ) { if ( m_ExpireCombatant == null ) m_ExpireCombatant = new ExpireCombatantTimer( this ); else m_ExpireCombatant.Stop(); m_ExpireCombatant.Start(); } bool addAggressor = true; AggressorInfo info = FindAggressorByAttacker(aggressor); if (info != null) { info.Refresh(); info.CriminalAggression = criminal; info.CanReportMurder = criminal; addAggressor = false; } info = aggressor.FindAggressorByAttacker(this); if (info != null) { info.Refresh(); addAggressor = false; } bool addAggressed = true; info = FindAggressedByDefender(aggressor); if (info != null) { info.Refresh(); addAggressed = false; } info = aggressor.FindAggressedByDefender(this); if (info != null) { info.Refresh(); info.CriminalAggression = criminal; info.CanReportMurder = criminal; addAggressed = false; } bool setCombatant = false; if ( addAggressor ) { if (m_Aggressors == null) m_Aggressors = new ArrayList(1); m_Aggressors.Add( AggressorInfo.Create( aggressor, this, criminal ) ); // new AggressorInfo( aggressor, this, criminal, true ) ); if ( this.CanSee( aggressor ) && m_NetState != null ) m_NetState.Send( new MobileIncoming( this, aggressor ) ); if ( Combatant == null ) setCombatant = true; UpdateAggrExpire(); } if ( addAggressed ) { if (aggressor.m_Aggressed == null) aggressor.m_Aggressed = new ArrayList(1); aggressor.m_Aggressed.Add( AggressorInfo.Create( aggressor, this, criminal ) ); // new AggressorInfo( aggressor, this, criminal, false ) ); if ( this.CanSee( aggressor ) && m_NetState != null ) m_NetState.Send( new MobileIncoming( this, aggressor ) ); if ( Combatant == null ) setCombatant = true; UpdateAggrExpire(); } if ( setCombatant ) Combatant = aggressor; Region.OnAggressed( aggressor, this, criminal ); }
private static bool CheckAggressed( Mobile from, Mobile target ) { AggressorInfo info = from.FindAggressedByDefender(target); return info != null && !info.CriminalAggression; }