瀏覽代碼

【需求】MMO-19349:增加超小范围挂机

meijun 3 年之前
父節點
當前提交
de354f1381
共有 1 個文件被更改,包括 36 次插入24 次删除
  1. 36 24
      XmdsCommonServer/Plugin/Units/XmdsInstancePlayer.cs

+ 36 - 24
XmdsCommonServer/Plugin/Units/XmdsInstancePlayer.cs

@@ -225,14 +225,16 @@ namespace XmdsCommonServer.Plugin.Units
 
         //索敌范围.
         private int mGuardSearchRange = XmdsConfig.Instance.NORMALSCENE_AUTO_GUARD_RANGE;
+		private int mGuardSearchRangeExt = XmdsConfig.Instance.NORMALSCENE_AUTO_GUARD_RANGE * XmdsConfig.Instance.NORMALSCENE_AUTO_GUARD_RANGE;
 
-        /// <summary>
-        /// 设置自动战斗索敌范围.
-        /// </summary>
-        /// <param name="v"></param>
-        public void SetGuardSearchRange(int v)
+		/// <summary>
+		/// 设置自动战斗索敌范围.
+		/// </summary>
+		/// <param name="v"></param>
+		public void SetGuardSearchRange(int v)
         {
 			mGuardSearchRange = v;
+			mGuardSearchRangeExt = mGuardSearchRange * mGuardSearchRange;
 		}
 
         /// <summary>
@@ -555,21 +557,21 @@ namespace XmdsCommonServer.Plugin.Units
                 InstanceUnit enemy = null;
 
                 if (lastAttackUnit != null && lastAttackUnit.IsActive == true)//上一次攻击的单位如果没死且能攻击,继续攻击他.
-                {
-                    //上次攻击的单位如果超过了一屏范围,取消攻击.
-                    if (CMath.getDistance(this.X, this.Y, lastAttackUnit.X, lastAttackUnit.Y) > this.mGuardSearchRange)
-                    {
-                        lastAttackUnit = null;
-                    }
-                    else
-                    {
-                        enemy = lastAttackUnit;
-                    }
-                }
-                else
-                {
-                    lastAttackUnit = null;
-                }
+					{
+						//上次攻击的单位如果超过了一屏范围,取消攻击.
+						//if (CMath.getDistance(this.X, this.Y, lastAttackUnit.X, lastAttackUnit.Y) > this.mGuardSearchRange)
+						//{
+						//    lastAttackUnit = null;
+						//}
+						//else
+						{
+							enemy = lastAttackUnit;
+						}
+					}
+					else
+					{
+						lastAttackUnit = null;
+					}
 
                 if (enemy == null)//如果无效再找一次.
                 {
@@ -1004,9 +1006,14 @@ namespace XmdsCommonServer.Plugin.Units
                     {
                         Parent.ForEachNearObjects(GetGuardPosX(), GetGuardPosY(), mGuardSearchRange, (InstanceUnit u, ref bool cancel) =>
                         {
-                            if (Parent.IsAttackable(this, u, expect, reason, Info))
+							if (mCurGuardMode == GuardMode.Mode_Point && (MathVector.getDistanceSquare(u.X, u.Y, this.X, this.Y) > mGuardSearchRangeExt))
+							{								
+								return;
+							}
+
+							if (Parent.IsAttackable(this, u, expect, reason, Info))
                             {
-                                XmdsVirtual zv = u.Virtual as XmdsVirtual;
+								XmdsVirtual zv = u.Virtual as XmdsVirtual;
                                 if (zv != null)
                                 {
                                     if (mAutoGuardTargetList.Contains(zv.GetVirtualTemplateID()))
@@ -1071,6 +1078,12 @@ namespace XmdsCommonServer.Plugin.Units
 								return;
 							}
 
+							float len = MathVector.getDistanceSquare(u.X, u.Y, this.X, this.Y);
+							if (mCurGuardMode == GuardMode.Mode_Point && len > mGuardSearchRangeExt)
+							{
+								return;
+							}
+							
 							if (Parent.IsAttackable(this, u, expect, reason, Info))
                             {
 #if OPNE_JSG_AI_TOOLS
@@ -1091,9 +1104,8 @@ namespace XmdsCommonServer.Plugin.Units
 									cancel = true;
 									return;
 								}
-#endif
+#endif								
 
-								float len = MathVector.getDistanceSquare(u.X, u.Y, this.X, this.Y);
                                 if (min_len > len)
                                 {
                                     min_len = len;