Server.Misc.NotorietyHandlers.CorpseNotoriety C# (CSharp) Méthode

CorpseNotoriety() public static méthode

public static CorpseNotoriety ( Server.Mobile source, Corpse target ) : int
source Server.Mobile
target Server.Items.Corpse
Résultat int
        public static int CorpseNotoriety( Mobile source, Corpse target )
        {
            if( target.AccessLevel > AccessLevel.Player )
                return Notoriety.CanBeAttacked;

            Body body = (Body)target.Amount;

            BaseCreature cretOwner = target.Owner as BaseCreature;

            if( cretOwner != null )
            {
                Guild sourceGuild = GetGuildFor( source.Guild as Guild, source );
                Guild targetGuild = GetGuildFor( target.Guild as Guild, target.Owner );

                if( sourceGuild != null && targetGuild != null )
                {
                    if( sourceGuild == targetGuild || sourceGuild.IsAlly( targetGuild ) )
                        return Notoriety.Ally;
                    else if( sourceGuild.IsEnemy( targetGuild ) )
                        return Notoriety.Enemy;
                }

                Faction srcFaction = Faction.Find( source, true, true );
                Faction trgFaction = Faction.Find( target.Owner, true, true );

                if( srcFaction != null && trgFaction != null && srcFaction != trgFaction && source.Map == Faction.Facet )
                    return Notoriety.Enemy;

                if( CheckHouseFlag( source, target.Owner, target.Location, target.Map ) )
                    return Notoriety.CanBeAttacked;

                int actual = Notoriety.CanBeAttacked;

                if( target.Kills >= 5 || (body.IsMonster && IsSummoned( target.Owner as BaseCreature )) || (target.Owner is BaseCreature && (((BaseCreature)target.Owner).AlwaysMurderer || ((BaseCreature)target.Owner).IsAnimatedDead)) )
                    actual = Notoriety.Murderer;

                if( DateTime.Now >= (target.TimeOfDeath + Corpse.MonsterLootRightSacrifice) )
                    return actual;

                Party sourceParty = Party.Get( source );

                List<Mobile> list = target.Aggressors;

                for( int i = 0; i < list.Count; ++i )
                {
                    if( list[i] == source || (sourceParty != null && Party.Get( list[i] ) == sourceParty) )
                        return actual;
                }

                return Notoriety.Innocent;
            }
            else
            {
                if( target.Kills >= 5 || (body.IsMonster && IsSummoned( target.Owner as BaseCreature )) || (target.Owner is BaseCreature && (((BaseCreature)target.Owner).AlwaysMurderer || ((BaseCreature)target.Owner).IsAnimatedDead)) )
                    return Notoriety.Murderer;

                if (target.Criminal && target.Map != null && ((target.Map.Rules & MapRules.HarmfulRestrictions) == 0))
                    return Notoriety.Criminal;

                Guild sourceGuild = GetGuildFor( source.Guild as Guild, source );
                Guild targetGuild = GetGuildFor( target.Guild as Guild, target.Owner );

                if( sourceGuild != null && targetGuild != null )
                {
                    if( sourceGuild == targetGuild || sourceGuild.IsAlly( targetGuild ) )
                        return Notoriety.Ally;
                    else if( sourceGuild.IsEnemy( targetGuild ) )
                        return Notoriety.Enemy;
                }

                Faction srcFaction = Faction.Find( source, true, true );
                Faction trgFaction = Faction.Find( target.Owner, true, true );

                if( srcFaction != null && trgFaction != null && srcFaction != trgFaction && source.Map == Faction.Facet )
                {
                    List<Mobile> secondList = target.Aggressors;

                    for( int i = 0; i < secondList.Count; ++i )
                    {
                        if( secondList[i] == source || secondList[i] is BaseFactionGuard )
                            return Notoriety.Enemy;
                    }
                }

                if( target.Owner != null && target.Owner is BaseCreature && ((BaseCreature)target.Owner).AlwaysAttackable )
                    return Notoriety.CanBeAttacked;

                if( CheckHouseFlag( source, target.Owner, target.Location, target.Map ) )
                    return Notoriety.CanBeAttacked;

                if( !(target.Owner is PlayerMobile) && !IsPet( target.Owner as BaseCreature ) )
                    return Notoriety.CanBeAttacked;

                List<Mobile> list = target.Aggressors;

                for( int i = 0; i < list.Count; ++i )
                {
                    if( list[i] == source )
                        return Notoriety.CanBeAttacked;
                }

                return Notoriety.Innocent;
            }
        }