0

焦点头条

官方内置宏语法攻略

2014-02-23 07:56| 查看: 7490 |作者: 小雪+陈雨



5.读条状态
判断自身读条状态
/script N=GetClientPlayer()
/script bPrePare, dwID, dwLevel, fP = N.GetSkillPrepareState()
/script if bPrePare then N.StopCurrentAction() end
如果自身处于读条状态,则打断读条。

判断敌方读条状态
/script N=GetClientPlayer()
/script t=GetTargetHandle(N.GetTarget())
/script bPrePare, dwID, dwLevel, fP = t.GetSkillPrepareState()
/script if bPrePare then OnUseSkill(547,5) end
如果对方读条,则使用剑心通明打断。

判断敌方读条技能
/script N=GetClientPlayer()
/script t=GetTargetHandle(N.GetTarget())
/script bPrePare, dwID, dwLevel, fP = t.GetSkillPrepareState()
/script if bPrePare and dwID==367 then OnUseSkill(547,5) else OnUseSkill(553,10) end
如果对方读条技能为四象轮回,则使用剑心通明打断,反之使用江海凝光。
有心的同学们可以发现这里这个判断释放什么技能的很强力,嗯,确实很强力,例如BOSS使用读条技能,可以作为一个判断BOSS技能的,例如镇龙头。

问题:如何得知BOSS技能ID?
有一种笨办法就是自己去收集,嗯,如何收集见下:
/script N=GetClientPlayer()
/script t=GetTargetHandle(N.GetTarget())
/script bPrePare, dwID, dwLevel, fP = t.GetSkillPrepareState()
/script OutputMessage("MSG_SYS",dwID)
/script OutputMessage("MSG_SYS",",")
/script OutputMessage("MSG_SYS",dwLevel)
在BOSS读条的时候在聊天窗口返回两个数值,用逗号隔开,方便辨认,前一个数值就是BOSS技能的ID,后一个是技能等级。然后加入进判断条件里面就可以做到镇龙头开御,佛归西扶摇等。

另外一种方法通过技能名字来写判断。
/script N=GetClientPlayer()
/script t=GetTargetHandle(N.GetTarget())
/script bPrePare, dwID, dwLevel, fP = t.GetSkillPrepareState()
/script if bPrePare and Table_GetSkillName(dwID, dwLevel)=="四象轮回" then OnUseSkill(547,5) else OnUseSkill(553,10) end

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 t=GetTargetHandle(N.GetTarget())
/script m=GetCharacterDistance(N.dwID,t.dwID)
这种判断在判断距离的时候要除以64,才是真正的距离
为了方便加入一个封装
/script d=m/64
调用距离的时候就使用d
附带一个例子:
判断距离如果目标距离小于6尺使用冲脉太乙加九转归一,如果目标距离大于6尺并且小于8尺则使用九转归一。
/script N = GetClientPlayer();
/script t=GetTargetHandle(N.GetTarget())
/script m=GetCharacterDistance(N.dwID,t.dwID)
/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

收藏 分享 邀请

发表评论

关注订阅号"剑网3PVE"
获取第一手剑三资讯


您当前使用的浏览器版本过低,网站部分功能可能失效,请更换合适的浏览器。了解更多