字号:

教你从零开始一步步做官方宏

时间:2010-03-16 09:33 作者:风雨潇潇梦无痕 手机订阅 参与评论(0) 【投稿】
文 章
摘 要
开贴说明:本贴只做到抛砖引玉,希望大家能多多能够做到举一反三,学会的东西,才是自己,过分的依赖别人只会产生对自己的惰性。本人已经重新编辑和改写了很多东西,希望大家重新学习。最后说明:宏只是减少你的快捷键,并不能做到按一下,出3个或者更多的技能,那样的效果就不是宏,是外挂。如果本贴

第三步:表达式

表达式就是算式概念的扩展。

数学表达式的运算符有 +, -, * (乘), / (除), ^ (指数),- (负号)

如果操作数是字符串类型,并可以被转换成数值,则将自动转换成数值

关系运算符返回布尔值true或false,有:== (等于),~= (不等于),< (小于),> (大于),<= (小于等于),>= (大于等于)

注意,对数值类型不要用==比较,应判断两数的差是否小于一个足够小的数,否则对有些数看起来相等却不相等。0 除外。

逻辑运算符包括:and (和,并且), or (或者),not (非,不)

逻辑运算的操作数一定要是布尔类型或nil,nil表示空,被当作false处理。使用其他类型的操作数不会报错,因为有其特定的功能,但坚决不推荐使用。

字符串连接运算符:.. (取得两个字符串连接后的字符串)

如果操作数是数值型,则自动转换为字符串

优先级,从底到高:

or

and

< > <= >= ~= ==

..

+ -

* /

not - (负号)

^

..和^是右结合,就是说 2^2^3 == 2^(2^3)。

例:

hp < 10 and not player.frozen -- hp小于10 并且 玩家没有被冰冻 时为真

第四步:写出你的第一个宏

宏解说:

纯阳的自动生太极,当自身无生太极是,对自己释放生太极

宏语句:

/script N = GetClientPlayer();

/script SelectPlayer()

/script for _, pB in pairs(N.GetBuffList()) do

if pB.dwID~=374 thenOnUseSkill(358,1) end

end;

第一句:/script N = GetClientPlayer();

申请一个变量 N,且获得当前客户端玩家,并赋值于N。简单说来,就相当于你出生的,你爸妈给你取的名字一样,只是个代号,随便你取什么。

第二句:

/script SelectPlayer()

这个语句的意思就是选择你自己,也就是把你自己作为当前目标。SelectPlayer() 这个函数,无可解说,是客户端的API,目前没有被和谐掉的选择人的函数,期待不要被和谐了

第三句:

/script for _, pB in pairs(N.GetBuffList()) do

if pB.dwID~=374 thenOnUseSkill(358,1) end

end;

这里涉及到一句判断自身buff的语句(不是debuff):

/script for _, pB in pairs(GetClientPlayer().GetBuffList()) do

if pB.dwID == BUFF的ID then 执行语句 end

end;

格式套用而已

if pB.dwID == BUFF的ID then 执行语句 end

详细解说:

  374为自己生太极buff的ID,358为生太极的技能ID,1是生太极等级

  pB.dwID~=374 判断自身buff列表中是否有生太极buff,没有为真 ( ~= 不等于)

  此为一个典型的if语句块。

  这个宏有一定的错误,不知道大家发现没有,将会在下一步中指出

第五步: 建议添加的函数封装

说明:在本步骤中,所有的id都指的是 buff的id或者debuff的ID

/script N = GetClientPlayer()

/script t=GetTargetHandle(N.GetTarget())

/script function checkbuff(id)

for _, D in pairs(N.GetBuffList()) do if D.dwID==id then

returntrue else return flase end endend

/script function checknobuff(id) for _, D in pairs(N.GetBuffList()) do if D.dwID~=id then returntrue else return false end endend

/script N = GetClientPlayer()

/script t=GetTargetHandle(N.GetTarget())

这2句我不就解说了,相信仔细看过的人都知道。

/script function checkbuff(id)

for _, D in pairs(N.GetBuffList()) do if D.dwID==id then

returntrue else return flase end endend

这个函数是检查自己是否有buff 有则返回true 没有则返回false.

建议大家采用我这个步骤中给大家的编辑的函数来判断是否有无buff

如果要判断目标的buff呢? 则这样改:

/script function checkbuff(id)

for _, D in pairs(T.GetBuffList()) do if D.dwID==id then

returntrue else return flase end endend

如果要判断自身的debuff呢?则这样改:

/script function checkbuff(id)

for _, D in pairs(N.GetBuffList() or {}) do if D.dwID==id then

returntrue else return flase end endend

那么判断目标的debuff怎么改?请大家自己琢磨……

/script function checknobuff(id) for _, D in pairs(N.GetBuffList()) do if D.dwID~=id then returntrue else return false end endend

这个函数是检查自己是否有buff 没有则返回true 有则返回false.

而在lua中 not表示非

那么我们可以省略第四句

用not checkbuff(ID)可以表达和第四句一模一样的意思

这里大家如果觉得有难度,多看看,多用下就理解了

最后建议大家在写宏之前,添加的函数

/script N = GetClientPlayer()

/script t=GetTargetHandle(N.GetTarget() )

/script function checkbuff(id)

for _, D in pairs(N.GetBuffList() or {}) do if D.dwID==id then

returntrue else return flase end endend

这个是判断自身的buff和debuff,如果需要判断目标的buff和debuff,相信大家如果理解了,就会改

第六步:一键系列基本的写法:

下面介绍的是一个纯阳自动插剑:

一键插三剑:冲阴阳,化三清,破苍穹

/script N = GetClientPlayer();

/script A,B,C=N.GetSkillCDProgress(360,1);

/script a1,b1,c1=N.GetSkillCDProgress(357,1);

/script a3,b3,c3=N.GetSkillCDProgress(359,N.GetSkillLevel(359));

/script if (C==0) then OnUseSkill(360,1) end;

/script if (c1==0) then OnUseSkill(357,1) end;

/script if (c3==0) then OnUseSkill(359,N.GetSkillLevel(359)) end;

解说:

冲阴阳 ID:360

化三清 ID:357

破苍穹 ID:359

上面宏所用到的语法:

OnUseSkill(技能ID,N.GetSkillLevel(技能ID))

OnUseSkill(技能ID,技能等级)

这2个都是 释放技能的函数。

上面2个语句是一样的效果,第一个可以不用烦恼技能等级的提升。

/script PX1,PX2,PX3=N.GetSkillCDProgress(技能ID,N.GetSkillLevel(技能ID));

N.GetSkillLevel(技能ID)获取技能的等级

申请3个变量PX1,PX2,PX3,然后获得N(你)技能的冷却时间,第一个参数PX1我不清楚含义,第二个公共冷却所剩时间,第三个是技能冷却所剩时间

那么久可以很简单看透上面宏的用法:

if (C==0) then OnUseSkill(360,1) end;

如果 冲阴阳冷却了,则释放冲阴阳

加入17173玩家俱乐部,100%领《原神》月卡、《王者荣耀》888点券、《魔兽世界》T恤等周边好礼!
加入方式:微信关注“17173服务号”

最近更新

全球新闻