2014-02-23 07:56| 查看: 7486 |作者: 小雪+陈雨
7.其他 关于玩家的移动状态 剑三之中有各种状态判定,以下为一个列表。 MOVE_STATE.ON_STAND = "站立", MOVE_STATE.ON_WALK = "走路", MOVE_STATE.ON_RUN = "跑步", MOVE_STATE.ON_JUMP = "跳跃", MOVE_STATE.ON_SWIM_JUMP = "水中跳跃", MOVE_STATE.ON_SWIM = "游泳", MOVE_STATE.ON_FLOAT = "水中悬浮", MOVE_STATE.ON_SIT = "坐下", MOVE_STATE.ON_KNOCKED_DOWN = "被击倒", MOVE_STATE.ON_KNOCKED_BACK = "被击退", MOVE_STATE.ON_KNOCKED_OFF = "被击飞", MOVE_STATE.ON_HALT = "眩晕", MOVE_STATE.ON_FREEZE = "定身", MOVE_STATE.ON_ENTRAP = "锁足", MOVE_STATE.ON_AUTO_FLY = "乘坐交通工具", MOVE_STATE.ON_DEATH = "重伤", MOVE_STATE.ON_DASH = "冲刺", MOVE_STATE.ON_PULL = "被抓", MOVE_STATE.ON_REPULSED = "滑行", MOVE_STATE.ON_RISE = "爬起", MOVE_STATE.ON_SKID = "滑行", 一般常用的就只有站立,倒地,眩晕,定身,跟锁足 以下为格式 /script N=GetClientPlayer() /script if N.nMoveState == MOVE_STATE.ON_KNOCKED_DOWN then 执行命令 end 例: /script N=GetClientPlayer() /script t=GetTargetHandle(N.GetTarget()) /script if t.nMoveState == MOVE_STATE.ON_KNOCKED_DOWN then OnUseSkill(402,N.GetSkillLevel(402)) end 目标倒地则使用定军 关于目标类型判断 剑三里面的目标有三种类型,敌对,中立跟友善,其中敌对包括了黄名,但是鼠标移上去是剑符号那种,判断目标是否敌对对于藏剑来说是个不小的帮助,当然对于其他职业来说也有帮助。 判断的三个参数: IsEnemy 敌对 IsAlly 友善 IsNeutrality 中立 以下为万花治疗判断宏: /script N=GetClientPlayer() /script t=GetTargetHandle(N.GetTarget()) /script tT,tID=N.GetTarget() /script if IsEnemy(N.dwID,tID) then thp=N.nCurrentLife/N.nMaxLife elseif IsAlly(N.dwID,tID) or IsNeutrality(N.dwID,tID) then thp=t.nCurrentLife/t.nMaxLife end /script function run(id) A,B,C=N.GetSkillCDProgress(id,N.GetSkillLevel(id)) if C==0 then OnUseSkill(id,N.GetSkillLevel(id)) end end /script function buff(mb,id,lvl) for _, D in pairs(mb.GetBuffList() or {}) do if D.dwID==id and (lvl==nil or D.dwLevel==lvl) then return true end end return false end /script if thp<=0.3 then run(136) end /script if buff(N,722) or buff(N,412) then run(142) end /script if buff(t,631) then run(137) end /script run(101) 如果目标是敌对,则判断自身血量,血量少于30%进行水月长针急救措施 如果目标是友方或者中立,则判断目标血量,血量少于30%进行水月长针救急 自动补握针,出逐流效果后自动转为施放长针,其余时间无脑局针。 /script N=GetClientPlayer() /script tT,tID=N.GetTarget() /script kungfu=N.GetKungfuMount().dwSkillID /script function run(id) A,B,C=N.GetSkillCDProgress(id,N.GetSkillLevel(id)) if C==0 then OnUseSkill(id,N.GetSkillLevel(id)) end end /script if kungfu==10144 then if IsEnemy(N.dwID,tID) then run(1577) elseif IsAlly(N.dwID,tID) or IsNeutrality(N.dwID,tID) then run(1655) end elseif kungfu==10145 then if IsEnemy(N.dwID,tID) then run(1613) elseif IsAlly(N.dwID,tID) or IsNeutrality(N.dwID,tID) then run(1655) end end 轻剑下目标为友方就探梅,敌方就玉虹贯日 重剑下目标友方就探梅,敌方就放云景 /script tT,tID=N.GetTarget(); 这一行其实是个简写,其中tT是target type,tID是target ID 为获取当前目标定义两个值,一个是目标的类型,一个是目标ID 而IsEnemy(N.dwID,tID),IsAlly(N.dwID,tID) ,IsNeutrality(N.dwID,tID) 是判断目标类型是否为敌人,(N.dwID,tID)这个就是说这项判断是在自身与自身目标两个之间进行,可以换成他人与他人之间的关系判定。这是用ID来判断,所以说,这个就是判断自身跟目标之间的关系。 关于范围内敌人数量判断(感谢呆瓜) /script N=GetClientPlayer() /script tT,tID=N.GetTarget() /script EnemyNum=0 /script for _,dwNpcID in pairs(GetNpcList()) do hNpc = GetNpc(dwNpcID) if IsEnemy(hNpc.dwID, N.dwID) and GetCharacterDistance(N.dwID,hNpc.dwID)<=8*64 then EnemyNum=EnemyNum+1 end end 参考呆瓜的藏剑一键DPS,感谢作者 这个是一个判断8尺内敌人数目的宏 1,2行不解释,3行定义一个值EnemyNum为0,4行是获取周围NPC列表,然后定义一个hNpc的值为获取NPC的ID,如果该NPC与玩家为敌对,该NPC与玩家距离小于8尺,则在前面定义的值上+1。那么EnemyNum就成为了一个8尺内敌对目标的判断数据。 至于这里距离判断为什么是乘以64而不是除以64,这跟开始定义的值有关系 /script N = GetClientPlayer() /script t=GetTargetHandle(N.GetTarget()) /script m=GetCharacterDistance(N.dwID,t.dwID) 这里判断的是当前目标的TargetHandle这个东西 /script tT,tID=N.GetTarget() 而这里是获取当前目标类型与ID 定义的东西不一样,所以一个是乘一个是除,很容易搞混乱 |