示例#1
0
        public override bool OnTarget(Mobile m, Server.Targeting.Target t, object o)
        {
            if (m.AccessLevel >= AccessLevel.GameMaster)
            {
                return(true);
            }

            if (o is AddonComponent && ((AddonComponent)o).ItemData.Height + ((AddonComponent)o).Z > m.Z + 3)
            {
                return(false);
            }

            if (o is StaticTarget && ((StaticTarget)o).Z > m.Z + 3)
            {
                return(false);
            }

            if (t.Flags == Server.Targeting.TargetFlags.Harmful)
            {
                if (o is LadyMinax || (o is ShadowguardGreaterDragon && ((ShadowguardGreaterDragon)o).Z > m.Z))
                {
                    return(false);
                }
            }

            return(base.OnTarget(m, t, o));
        }
示例#2
0
            public override bool OnTarget(Mobile m, Targeting.Target t, object o)
            {
                if (Parent != null)
                {
                    return(Parent.OnTarget(m, t, o));
                }

                return(base.OnTarget(m, t, o));
            }
		public override bool OnTarget( Mobile m, Target t, object o )
		{
			if ( m.Spell != null && m.Spell is MarkSpell && m.AccessLevel == AccessLevel.Player )
			{
				m.SendLocalizedMessage( 501800 ); // You cannot mark an object at that location.
				return false;
			}

			return base.OnTarget( m, t, o );
		}
示例#4
0
		private void ProcessTarget( Target targ )
		{
			targ.Invoke( m_Mobile, m_Mobile );
		}
示例#5
0
		public override bool OnTarget(Mobile m, Target t, object o)
		{
			if (Battle != null && Battle.State != PvPBattleState.Internal && !Battle.Hidden && !Battle.OnTarget(m, t, o))
			{
				return false;
			}

			return base.OnTarget(m, t, o);
		}
示例#6
0
		private void ProcessTarget( Target targ )
		{
			bool isDispel = ( targ is DispelSpell.InternalTarget );
			bool isParalyze = ( targ is ParalyzeSpell.InternalTarget );
			bool isTeleport = ( targ is TeleportSpell.InternalTarget );
			bool teleportAway = false;

			Mobile toTarget;

			if ( isDispel )
			{
				toTarget = FindDispelTarget( false );

				if ( !SmartAI && toTarget != null )
					RunTo( toTarget );
				else if ( toTarget != null && m_Mobile.InRange( toTarget, 10 ) )
					RunFrom( toTarget );
			}
			else if ( SmartAI && (isParalyze || isTeleport) )
			{
				toTarget = FindDispelTarget( true );

				if ( toTarget == null )
				{
					toTarget = m_Mobile.Combatant;

					if ( toTarget != null )
						RunTo( toTarget );
				}
				else if ( m_Mobile.InRange( toTarget, 10 ) )
				{
					RunFrom( toTarget );
					teleportAway = true;
				}
				else
				{
					teleportAway = true;
				}
			}
			else
			{
				toTarget = m_Mobile.Combatant;

				if ( toTarget != null )
					RunTo( toTarget );
			}

			if ( (targ.Flags & TargetFlags.Harmful) != 0 && toTarget != null )
			{
				if ( (targ.Range == -1 || m_Mobile.InRange( toTarget, targ.Range )) && m_Mobile.CanSee( toTarget ) && m_Mobile.InLOS( toTarget ) )
				{
					targ.Invoke( m_Mobile, toTarget );
				}
				else if ( isDispel )
				{
					targ.Cancel( m_Mobile, TargetCancelType.Canceled );
				}
			}
			else if ( (targ.Flags & TargetFlags.Beneficial) != 0 )
			{
				targ.Invoke( m_Mobile, m_Mobile );
			}
			else if ( isTeleport && toTarget != null )
			{
				Map map = m_Mobile.Map;

				if ( map == null )
				{
					targ.Cancel( m_Mobile, TargetCancelType.Canceled );
					return;
				}

				int px, py;

				if ( teleportAway )
				{
					int rx = m_Mobile.X - toTarget.X;
					int ry = m_Mobile.Y - toTarget.Y;

					double d = m_Mobile.GetDistanceToSqrt( toTarget );

					px = toTarget.X + (int)(rx * (10 / d));
					py = toTarget.Y + (int)(ry * (10 / d));
				}
				else
				{
					px = toTarget.X;
					py = toTarget.Y;
				}

				for ( int i = 0; i < m_Offsets.Length; i += 2 )
				{
					int x = m_Offsets[i], y = m_Offsets[i + 1];

					Point3D p = new Point3D( px + x, py + y, 0 );

					LandTarget lt = new LandTarget( p, map );

					if ( (targ.Range == -1 || m_Mobile.InRange( p, targ.Range )) && m_Mobile.InLOS( lt ) && map.CanSpawnMobile( px + x, py + y, lt.Z ) && !SpellHelper.CheckMulti( p, map ) )
					{
						targ.Invoke( m_Mobile, lt );
						return;
					}
				}

				int teleRange = targ.Range;

				if ( teleRange < 0 )
					teleRange = 12;

				for ( int i = 0; i < 10; ++i )
				{
					Point3D randomPoint = new Point3D( m_Mobile.X - teleRange + Utility.Random( teleRange * 2 + 1 ), m_Mobile.Y - teleRange + Utility.Random( teleRange * 2 + 1 ), 0 );

					LandTarget lt = new LandTarget( randomPoint, map );

					if ( m_Mobile.InLOS( lt ) && map.CanSpawnMobile( lt.X, lt.Y, lt.Z ) && !SpellHelper.CheckMulti( randomPoint, map ) )
					{
						targ.Invoke( m_Mobile, new LandTarget( randomPoint, map ) );
						return;
					}
				}

				targ.Cancel( m_Mobile, TargetCancelType.Canceled );
			}
			else
			{
				targ.Cancel( m_Mobile, TargetCancelType.Canceled );
			}
		}
示例#7
0
 public void ClearTarget()
 {
     m_Target = null;
 }
示例#8
0
        private void ProcessTarget( Target targ, NeedDelegate[] func )
        {
            Mobile toHelp = Find( func );

            if ( toHelp != null )
            {
                if ( targ.Range != -1 && !m_Mobile.InRange( toHelp, targ.Range ) )
                {
                    DoMove( m_Mobile.GetDirectionTo( toHelp ) | Direction.Running );
                }
                else
                {
                    targ.Invoke( m_Mobile, toHelp );
                }
            }
            else
            {
                targ.Cancel( m_Mobile, TargetCancelType.Canceled );
            }
        }
示例#9
0
        public override bool CheckTarget( Mobile from, Target targ, object targeted )
        {
            if ( !base.CheckTarget( from, targ, targeted ) )
                return false;

            object root = this.RootParent;

            if ( root is PlayerVendor && ((PlayerVendor)root).IsOwner( from ) )
                return true;

            return ( targ is PlayerVendor.PVBuyTarget );
        }
示例#10
0
 public virtual bool CheckTarget( Mobile from, Target targ, object targeted )
 {
     return true;
 }
		public override bool CheckTarget( Mobile from, Target targ, object targeted )
		{
			if ( !base.CheckTarget( from, targ, targeted ) )
				return false;

			if ( from.AccessLevel >= AccessLevel.GameMaster )
				return true;

			return targ.GetType().IsDefined( typeof( PlayerVendorTargetAttribute ), false );
		}
示例#12
0
		public override void ProcessTarget(Target targ)
		{
			bool isDispel = (targ is DispelSpell.InternalTarget);
			bool isParalyze = (targ is ParalyzeSpell.InternalTarget);
			bool isTeleport = (targ is TeleportSpell.InternalTarget);
			bool isCrossHeal = (targ is GreaterHealSpell.InternalTarget);
			bool isTrap = (targ is MagicTrapSpell.InternalTarget);
			bool teleportAway = false;
			bool isReveal = (targ is RevealSpell.InternalTarget || targ is DetectHidden.InternalTarget);

			Mobile toTarget = null;
			Mobile toHeal = null;

			if (isReveal)
			{
				targ.Invoke(m_Mobile, m_Mobile);
			}

			if (isTrap)
			{
				Pouch p = FindPouch(m_Mobile);
				if (p != null)
				{
					targ.Invoke(m_Mobile, p);
				}
				else
					targ.Cancel(m_Mobile, TargetCancelType.Canceled);
			}

			if (isDispel)
			{
				toTarget = FindDispelTarget(false);

				if (toTarget != null && m_Mobile.InRange(toTarget, 10) && !toTarget.Paralyzed)
					RunFrom(toTarget);
			}

			if (CrossHeals && isCrossHeal)
			{
				toHeal = FindHealTarget(true);

				if (toHeal != null && !m_Mobile.InRange(toHeal, 8))
				{

					RunTo(toHeal, CanRun);
				}
			}

			else if (isParalyze || isTeleport)
			{
				toTarget = FindDispelTarget(true);

				if (toTarget == null)
				{
					toTarget = m_Mobile.Combatant;

					if (toTarget != null && !m_Mobile.InRange(toTarget, 8))
						RunTo(toTarget, CanRun);
				}
				else if (m_Mobile.InRange(toTarget, 10))
				{
					RunFrom(toTarget);
					teleportAway = true;
				}
				else
				{
					teleportAway = true;
				}
			}

			else
			{
				if (m_Mobile.ControlOrder == OrderType.Come && isTeleport)
				{
					toTarget = m_Mobile.ControlMaster;
				}
				else
				{
					toTarget = m_Mobile.Combatant;
				}

				if (toTarget != null)
				{

					RunTo(toTarget, CanRun);
				}
			}

			if ((targ.Flags & TargetFlags.Harmful) != 0 && toTarget != null)
			{
				if ((m_Mobile.InRange(toTarget, 10)) && m_Mobile.CanSee(toTarget) && m_Mobile.InLOS(toTarget))
				{
					targ.Invoke(m_Mobile, toTarget);
				}
				else if (isDispel)
				{
					targ.Cancel(m_Mobile, TargetCancelType.Canceled);
				}

			}

			else if ((targ.Flags & TargetFlags.Beneficial) != 0 && toHeal != null)
			{
				if ((m_Mobile.InRange(toHeal, 10)) && m_Mobile.CanSee(toHeal) && m_Mobile.InLOS(toHeal) && NeedGHeal(toHeal))
				{

					targ.Invoke(m_Mobile, toHeal);
				}
				else
				{
					Targeting.Target.Cancel(m_Mobile);
				}
			}

			else if ((targ.Flags & TargetFlags.Beneficial) != 0)
			{
				if (!isCrossHeal)
				{
					targ.Invoke(m_Mobile, m_Mobile);
				}
				if ((isCrossHeal) && (NeedGHeal(m_Mobile)))
				{
					targ.Invoke(m_Mobile, m_Mobile);
				}
				else
				{
					targ.Cancel(m_Mobile, TargetCancelType.Canceled);
				}



			}
			else if (isTeleport && toTarget != null)
			{
				Map map = m_Mobile.Map;

				if (map == null)
				{
					targ.Cancel(m_Mobile, TargetCancelType.Canceled);
					return;
				}

				int px, py;

				if (teleportAway)
				{
					int rx = m_Mobile.X - toTarget.X;
					int ry = m_Mobile.Y - toTarget.Y;

					double d = m_Mobile.GetDistanceToSqrt(toTarget);

					px = toTarget.X + (int)(rx * (10 / d));
					py = toTarget.Y + (int)(ry * (10 / d));
				}
				else
				{
					px = toTarget.X;
					py = toTarget.Y;
				}

				for (int i = 0; i < m_Offsets.Length; i += 2)
				{
					int x = m_Offsets[i], y = m_Offsets[i + 1];

					Point3D p = new Point3D(px + x, py + y, 0);

					LandTarget lt = new LandTarget(p, map);

					if ((targ.Range == -1 || m_Mobile.InRange(p, targ.Range)) && m_Mobile.InLOS(lt) && map.CanSpawnMobile(px + x, py + y, lt.Z) && !SpellHelper.CheckMulti(p, map))
					{
						targ.Invoke(m_Mobile, lt);
						return;
					}
				}

				int teleRange = targ.Range;

				if (teleRange < 0)
					teleRange = 12;

				for (int i = 0; i < 10; ++i)
				{
					Point3D randomPoint = new Point3D(m_Mobile.X - teleRange + Utility.Random(teleRange * 2 + 1), m_Mobile.Y - teleRange + Utility.Random(teleRange * 2 + 1), 0);

					LandTarget lt = new LandTarget(randomPoint, map);

					if (m_Mobile.InLOS(lt) && map.CanSpawnMobile(lt.X, lt.Y, lt.Z) && !SpellHelper.CheckMulti(randomPoint, map))
					{
						targ.Invoke(m_Mobile, new LandTarget(randomPoint, map));
						return;
					}
				}

				targ.Cancel(m_Mobile, TargetCancelType.Canceled);
			}
			else
			{
				targ.Cancel(m_Mobile, TargetCancelType.Canceled);
			}
		}
示例#13
0
 public virtual bool OnTarget( Mobile m, Target t, object o )
 {
     return true;
 }
示例#14
0
文件: Target.cs 项目: Leorgrium/runuo
            public TimeoutTimer( Target target, Mobile m, TimeSpan delay )
                : base(delay)
            {
                m_Target = target;
                m_Mobile = m;

                if ( delay >= ThirtySeconds )
                    Priority = TimerPriority.FiveSeconds;
                else if ( delay >= TenSeconds )
                    Priority = TimerPriority.OneSecond;
                else if ( delay >= OneSecond )
                    Priority = TimerPriority.TwoFiftyMS;
                else
                    Priority = TimerPriority.TwentyFiveMS;
            }
示例#15
0
        //This Wraps the target and resets the targeted ITEM to it's child BASECREATURE
        //Unfortunately, there is no accessible Array for a player's followers,
        //so we must use the GetMobilesInRage(int range) method for our reference checks!
        public override bool CheckTarget( Mobile from, Target targ, object targeted )
        {
            #region CheckEntity

            //Check to see if we have an Entity Link (Child BaseCreature)
            //If not, create one!
            //(Without Combatant Change, since this is for pets)

            PlayerMobile pm = from as PlayerMobile;

            if( pm != null )
            {

                if( m_Child != null && !m_Child.Deleted )
                {
                    m_Child.Update( );
                }
                else
                {
                    ProvideEntity( );

                    if( m_Child != null && !m_Child.Deleted )
                    {
                        m_Child.Update( );
                    }
                }
            }
            #endregion

            if( targ is AIControlMobileTarget && targeted == this )
            {
                //Wrap the target
                AIControlMobileTarget t = targ as AIControlMobileTarget;
                //Get the OrderType
                OrderType order = t.Order;

                //Search for our controlled pets within screen range
                foreach( Mobile m in from.GetMobilesInRange( 16 ) )
                {
                    if( !( m is BaseCreature ) )
                        continue;

                    BaseCreature bc = m as BaseCreature;

                    if( from != null && !from.Deleted && from.Alive )
                    {
                        if( bc == null || bc.Deleted || !bc.Alive || !bc.Controlled || bc.ControlMaster != from )
                            continue;

                        //Reset the pet's ControlTarget and OrderType.
                        bc.ControlTarget = m_Child;
                        bc.ControlOrder = t.Order;
                    }
                }
            }

            return base.CheckTarget( from, targ, targeted );
        }
示例#16
0
        private void ProcessTarget( Target targ )
        {
            bool isDispel = ( targ is DispelSpell.InternalTarget );
            bool isParalyze = ( targ is ParalyzeSpell.InternalTarget );

            Mobile toTarget;

            if ( isDispel )
            {
                toTarget = FindDispelTarget( false );

                if ( !SmartAI && toTarget != null )
                    RunTo( toTarget );
                else if ( toTarget != null && m_Mobile.InRange( toTarget, 8 ) )
                    RunFrom( toTarget );
            }
            else if ( SmartAI && isParalyze )
            {
                toTarget = FindDispelTarget( true );

                if ( toTarget == null )
                {
                    toTarget = m_Mobile.Combatant;

                    if ( toTarget != null )
                        RunTo( toTarget );
                }
            }
            else
            {
                toTarget = m_Mobile.Combatant;

                if ( toTarget != null )
                    RunTo( toTarget );
            }

            if ( (targ.Flags & TargetFlags.Harmful) != 0 && toTarget != null )
            {
                if ( (targ.Range == -1 || m_Mobile.InRange( toTarget, targ.Range )) && m_Mobile.CanSee( toTarget ) && m_Mobile.InLOS( toTarget ) )
                {
                    targ.Invoke( m_Mobile, toTarget );
                }
                else if ( isDispel )
                {
                    targ.Cancel( m_Mobile, TargetCancelType.Canceled );
                }
            }
            else if ( (targ.Flags & TargetFlags.Beneficial) != 0 )
            {
                targ.Invoke( m_Mobile, m_Mobile );
            }
            else
            {
                targ.Cancel( m_Mobile, TargetCancelType.Canceled );
            }
        }
示例#17
0
		public virtual bool OnTarget( Mobile m, Target t, object o )
		{
			if ( m_Parent != null )
				return m_Parent.OnTarget( m, t, o );

			return true;
		}
        public override bool OnTarget(Mobile m, Target t, object o)
        {
            if (!Participant(m))
                return false;

            return base.OnTarget(m, t, o);
        }
示例#19
0
		public override bool OnTarget( Mobile m, Target t, object o )
		{
			if( m_ExistingRegion != null )
			{
				return m_ExistingRegion.OnTarget(m,t,o);
			}
			else
			{
				return base.OnTarget(m,t,o);
			}
		}
示例#20
0
 public TargetReq( Target t )
     : base(0x6C, 19)
 {
     m_Stream.Write( (bool) t.AllowGround );
     m_Stream.Write( (int)  t.TargetID );
     m_Stream.Write( (byte) t.Flags );
     m_Stream.Fill();
 }
示例#21
0
文件: Region.cs 项目: Crome696/ServUO
		public override bool OnTarget( Mobile m, Target t, object o )
		{
			if(m.AccessLevel == AccessLevel.Player && t is Server.Spells.Third.TeleportSpell.InternalTarget)
			{
                m.SendLocalizedMessage(501802); // that spell doesn't seem to work.
				return false;
			}
				
			return base.OnTarget(m, t, o);
		}
示例#22
0
		public virtual bool OnTarget(Mobile m, Target target, object o)
		{
			return m != null && !m.Deleted && target != null && o != null;
		}
示例#23
0
 public TimeoutTimer( Target target, Mobile m, TimeSpan delay )
     : base(delay)
 {
     m_Target = target;
     m_Mobile = m;
 }