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 |