6、距离判断
嗯,关于距离判断的比较复杂,我尽量解释清楚。
第一种是:
/script N = GetClientPlayer()
/script t=GetTargetHandle(N.GetTarget())
/script function GetDistanceByTarget(target1, target2)
if not target1 or not target2 then return false end
if target1.nMapID ~= target2.nMapID then return false end
nX1= target1.nX
nX2 = target2.nX
nY1 = target1.nY
nY2 = target2.nY
strdis=(((nX1 - nX2) ^ 2 + (nY1 - nY2) ^ 2) ^ 0.5)/64
return strdis
end
/script d=GetDistanceByTarget(t,N)
中间那个函数就是计算距离的,通过人工的方式来计算。
如果没有目标则返回FALSE
如果两个目标不在一个地图,则返回FALSE
NX1是目标1的X坐标
NX2是目标2的X坐标
NY1是目标1的Y坐标
NY2是目标2的Y坐标
直线距离等于((X1-X2)的平方加上(Y1-Y2)的平方)的0.5次方除以64
返回直线距离
另外一种比较简单的
/script N = GetClientPlayer();
/script tT,tID=N.GetTarget();
/script t = GetTargetHandle(tT,tID);
/script m=GetCharacterDistance(N.dwID,tID);
这种判断在判断距离的时候要除以64,才是真正的距离
为了方便加入一个封装
/script d=m/64
调用距离的时候就使用d
附带一个例子:
判断距离如果目标距离小于6尺使用冲脉太乙加九转归一,如果目标距离大于6尺并且小于8尺则使用九转归一。
/script N = GetClientPlayer();
/script tT,tID=N.GetTarget();
/script t = GetTargetHandle(tT,tID);
/script m=GetCharacterDistance(N.dwID,tID);
/script d=m/64
/script if d<=6 then OnUseSkill(169,1) end
/script if d<=6 then OnUseSkill(305,1) end
/script if d>6 and d<8 then OnUseSkill(305,1) end
7、其他
当然,出了以上的智能判断以外,还有其他的比较没用或者BT的判断,如状态剩余时间等,比较复杂而且用处不大,我依旧在研究中,于是在此不多解释。