Exemple #1
0
        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;
 }