|
@@ -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;
|