0
焦点头条

官方内置宏语法攻略

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




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
定义的东西不一样,所以一个是乘一个是除,很容易搞混乱


收藏 分享 邀请

发表评论

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

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