前言
独自摸索了宏将近2个来月,作为一个研究宏的应用但是却不用宏的人,我感觉鸭梨很大。好吧,我不是标题党,不很写很引人注目的标题。通常这类帖子沉得很快(详情请参考前面写的的两篇七秀攻略贴),我也不想弄什么回复可见。如果大家觉得好的话就回一个帖子,作为对我的一种支持。
如果喷,请不要人身攻击,虽然我很淡定,但是不想口水。自从第一篇攻略帖子开始,就习惯写些有的没有的前言,主要介绍下为什么会写这篇攻略,嗯,其实我的志向是当作者。
言归正传,很多朋友们都在论坛上发帖求宏,我都尽量去满足。我个人认为给你宏,不如给你方法,我想很多研究宏的,写宏的,钻研程序的都有这种感觉,就像他们说的受人之鱼不如受人之渔。很多人都喜欢不劳而获,这种现象是很不正确的,你有一个脑子不是用来控制你的口和手来索要,而是用来思考。
好了,就说不说太多废话,以下文章中的实例大部分都在近期进行过实验,证明有效,没有实验过的请慎用(会特别标明)。如果有任何疑问,欢迎大家发帖询问,只要是我能力范围内能做到的,一定给你一个满意的答复。
在此,感谢陈雨姐姐技术上的支持,回答我一些很傻得问题。同时感谢各位分享宏的先驱们,你们的例子,给了我一些新的想法,才有了我的研究和这篇帖子。如有错误请指正,核实后会进行修改,感谢肯花时间看帖的童鞋们。
这篇帖子起到一个整合的作用,几乎包含了常用的宏,可以作为一个检索以及研究方向,欢迎广大研究人士参考学习指正,在此抛砖引玉。
什么是宏?
我相信很多朋友们都不知道什么是宏,老听别人说用宏用宏,自己却不知道是啥意思,特此在这里扫盲一下。在计算机科学里的宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式。简单来说,可以把他想像成一个小程序,按照特定的指令来执行命令。
例:
比如说气纯的爆发宏:两仪化形+韬光养晦+两仪化形+带脉光明+韬光养晦+两仪化形。
按照平常时候,这样的一个组合操作需要3个键位。在不考虑心理因素,网络因素下,这一套爆发需要将近5秒的时间。然而,在理论上,宏可以将这一套爆发的时间缩短为3秒,而考虑到各种原因,也就4到5秒的时间。既然时间差不多那么为什么要用宏?
首先,是结合了按键,再来是简化了操作,从而起到在紧张时候不容易按错,最后,起到了缓和网络延迟的作用。这个就是最常见的一种宏,人们口中常说的一键爆发。
宏的入门
首先写宏必须知道宏语言以及命令格式,API等等,没有这些东西,是写不出来宏的。
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。简单的说就是金山给我们写宏的基础语言,例如魔兽中的/cast。
因为金山的宏没有通过封装,所以不宜推广,这也是为什么很多人觉得困难的原因。但是如果了解了这些未封装的语言(其实只需要懂一点点英文)是什么意思,那么就可以进行套用,这也是一个学习宏的方法。根据先驱者们所发的宏跟作用解释,来推断每一行的意思,在进行验证,那么可以说是懂得了这个宏。
下面介绍一些常用的API
GetCientPlayer()
字面上的意思为获取客户端玩家,实际效果也是如此,以下同理
GetTarget()
获取目标
GetTargetHandle()
获取指定目标ID
GetKungfuMount()
获取当前装备内功
GetDistanceByTarget(target1, target2)
获取target1跟target2指间的距离
GetSkillPrepareState()
获取读条状态
GetSkillCDProgress()
获取技能冷却时间
PLAYER_TALK_CHANNEL
玩家说话频道
OnUseSkill()
使用技能
GetSkillLevel()
获取技能等级
StopCurrentAction()
停止当前动作
nCurrentLife
当前生命
nMaxLife
最大生命
nCurrentMana
当前内力
nMaxMana
最大内力
bFightState
战斗状态,true为战斗状态,false为非战斗状态
bOnHorse
是否在马上
nAccumulateValue
纯阳或和尚的气或豆的个数
纯阳为半个气为1,也就是0-10之间的数,比如7就是3个半气。和尚为0-3指间的数,一比一。
基本上常用的就是这些了,光是知道这些也是写不出来宏的,只有知道如何运用他们才能写出一个可用的宏来。
如何写宏
步骤1:
写宏最先要知道的就是技能的ID,将鼠标移到技能上面按住CTRL,会出现一个调试用信息,如下图
由于金山截图机制貌似有点改动,所以图片不是很清楚。
如图所示,有个ID的地方写着561,level 9。
这就是技能的ID与等级,在写使用技能的宏时非常有用。
步骤2:
基本语句:
这是剑三宏里面最常用的语句,其他的语句类型由于不常用则不做另外介绍。
if 条件then
语句
end ;
if就是如果的意思,如果“条件” 则执行“语句” 如果达不到条件,则直接结束 if 语句块。
扩展格式:
if 条件 then
语句
else (if条件 then)
语句
end
如果“条件” 则执行“语句” 如果达不到条件,则执行ELSE的语句,然后结束 if 语句块。
for 循环变量 = 初值, 终值 do
语句块
end
扩展格式:
for 循环变量 = 初值, 终值,每次的增量 do
语句块
end
函数封装:
function 函数名(参数列表)
语句块
end
这是比较高级的运用,目的是为了简化宏,在判断同一类型条件的时候会用到,后面会详细介绍。
步骤3:
判断条件以及数值的表达式。
最常用的表达式为and,用于判断多个条件。其次是一些数值的判断例如:
<
>
<=
>=
=
==
~=
双等号是判断,单等号是赋值,最后一个是不等于,其他的,嗯,不多解释。
步骤4:
思考要做一个什么宏。
例如我想做一个减少键位的宏,将坐忘无我,回春妙手跟猛虎下山这三个技能合并为一个键上,属于装备猛虎下山秘籍后的PVP宏。
首先去寻找技能ID:
猛虎下山 58,1
回春妙手 52,2
坐忘无我 312,X
这里由于坐忘没有满级,可能在战斗中提升等级,而导致宏不能用,那么在下面将提出解决方法。
步骤5:
写一个宏。
写宏的时候尤其要注意大小写的问题以及括号的问题,本人多次因为有一个字母本该小写却打成大写后导致运行不成功。
看以下例子:
/script N=GetClientPlayer()
/script a,b,c=N.GetSkillCDProgress(312,N.GetSkillLevel(312))
/script d,e,f=N.GetSkil)
DProgress(58,1)
/script g,h,i=N.GetSkillCDProgress(52,2)
/scriptif f==0 then OnUseSkill(58,1) end
/scriptif c==0 then OnUseSkill(312,N.GetSkillLevel(312)) end
/script ifi==0 then OnUseSkill(52,2) end
第一行是宣告一个变量N作为GetClientPlayer()的代替,大致上就跟数学里的设X一样,属于一种简单的函数封装,为了简化下面的语句。
第二,三,四行为判断技能冷却的语句,由于这里并不是很多,所以不用通过FUNCTION来封装。
第二行有一个获取技能等级的是因为不确定技能等级为多少,如果错误的填一个数字进去,则整个宏作用失效。当然如果知道技能等级则可以像第三,四行一样简化。
这里每行设置的三个数,a到i,其中每行的第二个字母,为该技能的公共冷却,第三个字母为技能冷却。
则:b,e,h为技能公共调息时间,c,f,i为技能冷却时间。
第五行,如果技能猛虎下山(58)冷却为零,则使用猛虎下山
第六行,如果技能坐忘无我(312)冷却为零,则使用坐忘无我
第七行,如果技能回春妙手(52)冷却为零,则使用回春妙手
步骤6:
检查宏的效果,如果达到预期效果,那么这个宏就算做好了。
如果出错则要看看错误是在哪里,比如说,回春妙手用不出来,那么就检查第四跟七行是否有语句上的基本错误,如果没有再从第一行开始检查。
宏的基本运用
一键多技能
如上面得例子,将所有的技能合并到一个键上,通过各种条件判断技能释放前后。
注意事项:所有有公共冷却以及冷却时间的技能,都需要加入冷却时间判断,才能整合在一起。
例外:名动四方。这是判断公**跟技能CD,一般情况下只用判断技能CD,格式如下:
/script N=GetClientPlayer()
/script XX1,XX2,XX3=N.GetSkillCDProgress(XXX,X)
/script YY1,YY2,YY3=N.GetSkillCDProgress(YYY,Y)
/script ZZ1,ZZ2,ZZ3=N.GetSkillCDProgress(ZZZ,Z)
/scriptif XX2==0 and XX3==0 then OnUseSkill(XXX,X) end
/scriptif YY2==0 and YY3==0 then OnUseSkill(YYY,Y) end
/script ifZZ2==0 and ZZ3==0 then OnUseSkill(ZZZ,Z) end
这是一个简单的技能冷却一到就使用技能的宏,适合于练第二门派技能的时候。
如果技能多了,可以进行函数封装:
下面是技能冷却的封装,调用的时候作为一个条件来用,只用改变括号里的ID就行了。
/scrpit function cd(id) A,B,C=N.GetSkillCDProgress(id,N.GetSkillLevel(id)) return C end
如果是判断坐忘无我的话就这样
/script if cd(312)==0 then OnUseSkill(312,N.GetSkillLevel(312)) end
这个是一个判断技能冷却以及使用技能的封装,一般情况下只需要直接使用就好了。
/script function use(id) A,B,C=N.GetSkillCDProgress(id,N.GetSkillLevel(id)) if C==0 then OnUseSkill(id,N.GetSkillLevel(id)) end end
如果是判断坐忘无我的话就这样
/script use(312)
buff判断封装
/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
可以判断自己或者敌人的BUFF跟DEBUFF,以及BUFF跟DEBUFF的等级,作为一个条件,下面有实例。
省事很多。
关于七秀的一键整合
由于名动四方这个特殊的BUFF,需要加入一个判断BUFF的判断。
下面就以一键爆发来说明
满堂势+繁音急节+冲脉关门+剑气长江+剑主天地+剑心通明。
剑舞BUFF(409)
名动四方(537,7)
满堂势(573,1)
繁音急节(568,4)
冲脉关门(168,1)
剑气长江(561,9)
剑主天地(562,10)
剑心通明(547,5)
有这么多技能就需要一些封装,不然写出来都是一大串。
/script N=GetClientPlayer()
/script function use(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 use(547)
/script if not buff(N,409,35) then use(573) end
/script if not buff(N,409) then use(537) end
/script if not buff(N,568) then use(568) end
/script use(168)
/script if buff(N,409) then use(561) end
/script if buff(N,409) then use(562) end
第一行是一个小封装,详细见上面。
第二行一个使用技能的封装,use(id)括号里的ID替代为技能ID。宣告ABC为获取技能冷却,如果技能CD等于0,则使用该技能。
第三行是一个判断BUFF的封装,buff(mb,id,lvl)括号里前面一个代表目标,后面一个是buffID,最后一个是判断BUFF等级,如果不填就不判断。这是一个判断目标BUFF跟DEBUFF的封装,只要需要判断BUFF就可以用到这个函数,我们这里目标是我们自己所以为N,剑舞BUFF为 409。在这里是为了判断剑舞是不是达到满堂势剑舞的等级,满堂势剑舞等级为35,而满层剑舞等级为34。
第四行是使用剑心通明
第五行是如果没有剑舞则使用满堂势
第六行是如果没有剑舞则使用剑舞(怕有些时候满堂势被去掉)
第七行是如果没有繁音,则使用繁音
第八行是使用冲脉关门
第九行是如果有剑舞则使用剑气长江
第十行是如果有剑舞则使用剑主天地
喜欢研究的同学可以对照研究,喜欢照搬的同学可以直接搬走。其他的一键输出可以参考这一项,后面会给一些实际例子。
关于其他技能整合
除了一键输出,宏可以用来解决键位问题,主要用于辅助技能整理,两个门派技能键位整合。
/script N=GetClientPlayer()
/script P=N.nAccumulateValue
/script function use(id) A,B,C=N.GetSkillCDProgress(id,N.GetSkillLevel(id)) if C==0 then OnUseSkill(id,N.GetSkillLevel(id)) end end
/script K=N.GetKungfuMount().dwSkillID
/script if K==10080 or K==10081 then use(544) end
/script if K==10014 and P>0 then use(303) end
第一二三四行为封装,不多解释。
第五行,如果内功为冰心或者云裳,则使用技能帝骖龙翔
第六行,如果内功为紫霞功(俗称气纯)以及气大于半格,则使用三才化生。
嗯,这是一个比较简单的不同门派内功绑定同一个键位的,由于这两种都是同一类型的技能,所以归类在一起。
内功的ID如下:
10002 洗髓经
10003 易筋经
10014 紫霞功
10015 太虚剑意
10021 花间游
10026 傲血战意
10028 离经易道
10062 铁牢律
10080 云裳心经
10081 冰心诀
判断其他内功的将那个数字替换就可以了,例如剑纯跟气纯的气场其实可以整合在一起。例如碎星辰+冲阴阳为一组等等,请自行组合。
喊话宏
/script for i=1,1 do GetClientPlayer().Talk(PLAYER_TALK_CHANNEL.NEARBY, "密语对象", {{type = "text", text = "请输入内容"}}) end;
简单明了,作用于循环喊话。
前面的for i=1,1 是喊话一次, for i=1,2 是喊话2次
另外一个比较简化的是一个封装,可以用作判断。
/script N=GetClientPlayer()
/script function say() N.Talk(PLAYER_TALK_CHANNEL.NEARBY,"密语对象",{{type="text",text ="请输入内容"}}) end;
其他频道喊话只需要把NEARBY更换掉就好了(全部为大写):
NEARBY 近聊
SENCE 地图
WORLD 世界
TEAM 队伍
RAID团队
BATTLE战场
TONG帮会
SCHOOL门派
CAMP 阵营
FRIENDS 好友
附带一个上马下马不同喊话的喊话宏:
/script N=GetClientPlayer()
/script function say1()N.Talk(PLAYER_TALK_CHANNEL.NEARBY,"",{{type="text",text ="我有一头小毛驴,但我从来也不骑"}}) end
/script function say2() N.Talk(PLAYER_TALK_CHANNEL.NEARBY,"",{{type="text",text ="小毛驴累了"}}) 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 OnUseSkill(605,1)
/script if buff(N,244) then say2() else say1() end
或者是
/script N=GetClientPlayer()
/script H=N.bOnHorse
/script function say1()N.Talk(PLAYER_TALK_CHANNEL.NEARBY,"",{{type="text",text ="我有一头小毛驴,但我从来也不骑"}}) end
/script function say2() N.Talk(PLAYER_TALK_CHANNEL.NEARBY,"",{{type="text",text ="小毛驴累了"}}) end;
/script if H==true then say2() else say1() end
/script OnUseSkill(605,1)
前者与后者的不同之处在于前者是判断骑马时的增益状态,后者是判断是否在马上。
关于智能判断
这里介绍下比较常用的几项判断:
1、增益与减益的判断(buff或者debuff,见上)
2、技能冷却判断(见上)
3、纯阳与和尚的集气判断(见上)
4、气血以及内力的值或者比的判断
5、读条状态
6、距离判断
7、其他
前四项可以在上面找到解释,这里只是重复解释一下。
1、增益于减益判断
建议使用函数封装,以下为原始语句:。
以下为自身增益的检测
/script for _, D in pairs(GetClientPlayer().GetBuffList()) doif D.dwID == 增益的ID then 执行语句 end end;
以下为自身减益的检测
/script for _, D in pairs(GetClientPlayer().GetBuffList() or {}) doif D.dwID == 减益的ID then 执行语句 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
如果前面加入了小封装,则N=自身,T等于敌对目标的话,在这里,MB=N就是判断自身状态,MB=T就是判断敌方状态。ID就是增益减益的ID,等级对应BUFF等级,有些BUFF有层数的,如剑舞。
2、技能冷却判断
同样建议使用函数封装,以下为原始语句
/script XX1,XX2,XX3=N.GetSkillCDProgress(技能ID,技能等级)
这XX1用不到,XX2是代表公共冷却,XX3则是代表技能冷却。
进行下简单的封装
/scrpit function cd(id) A,B,C=N.GetSkillCDProgress(id,N.GetSkillLevel(id)) return C end
如果要将技能冷却判断跟使用技能一起封装的话就这样
/script function use(id) A,B,C=N.GetSkillCDProgress(id,N.GetSkillLevel(id)) if C==0 then OnUseSkill(id,N.GetSkillLevel(id)) end end
3、纯阳与和尚的集气判断
判断集气的API是
nAccumulateValue
纯阳或和尚的气或豆的个数
纯阳为半个气为1,也就是0-10之间的数,比如7就是3个半气
和尚为0-3指间的数,一比一
只能判断自身集气数,没有强大到判断敌方集气数。
使用方法如下
/script if GetClientPlayer.nAccumulateValue==10 then OnUseSkill(301,X) end
进行下封装
/script P=GetClientPlayer.nAccumulateValue
/script if P==10 then OnUseSkill(301,X) end
4、气血以及内力值或者比的判断
关于这类的判断会用到以下几个API
nCurrentLife
当前生命
nMaxLife
最大生命
nCurrentMana
当前内力
nMaxMana
最大内力
判断自身当前生命值
/script HP=GetClientPlayer.nCurrentLife
/script if HP=<5000 then OnUseSkill(XXX,X) end
判断内力值就把nCurrentLife换成nCurrentMana
判断自身生命比
/script HPR=GetClientPlayer.nCurrentLife/GetCLientPlayer.nMaxLife
/script if HPR<=0.5 then OnUseSkill(XXX,X) end
判断自身当前内力比就将nCurrentLife以及nMaxLife,换成对应的nCurrentMana跟nMaxMana
判断敌方当前生命值
/script T=GetTargetHandle(GetClientPlayer.GetTarget())
/script tHP=T.nCurrentLife
/script if tHP<=5000 then OnUseSkill(XXX,X) end
判断内力值就把nCurrentLife换成nCurrentMana
判断敌方生命比
/script T=GetTargetHandle(GetClientPlayer.GetTarget())
/script tHPR=T.nCurrentLife/T.nMaxLife
/script if tHPR<=0.5 then OnUseSkill(XXX,X) end
判断自身当前内力比就将nCurrentLife以及nMaxLife,换成对应的nCurrentMana跟nMaxMana
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)
在BOSS读条的时候在聊天窗口返回一个数值,这个数值就是BOSS技能的ID,然后加入进判断条件里面就可以做到镇龙头开御,佛归西扶摇等。
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 tT,tID=N.GetTarget();
/script t = GetTargetHandle(tT,tID);
/script m=GetCharacterDistance(N.dwID,tID);
这种判断在判断距离的时候要除以64,才是真正的距离
为了方便加入一个封装
/script d=m/64
调用距离的时候就使用d
附带一个例子:
判断距离如果目标距离小于6尺使用冲脉太乙加九转归一,如果目标距离大于6尺并且小于8尺则使用九转归一。
/script N = GetClientPlayer();
/script tT,tID=N.GetTarget();
/script t = GetTargetHandle(tT,tID);
/script m=GetCharacterDistance(N.dwID,tID);
/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
7、其他
当然,出了以上的智能判断以外,还有其他的比较没用或者BT的判断,如状态剩余时间等,比较复杂而且用处不大,我依旧在研究中,于是在此不多解释。
宏实例
以下这些宏都是这两个月来四处收集的,由于收集的时候并没有复制作者名字,在此向宏的作者们致歉。感谢那些无私贡献分享宏的先驱们(由于时间有限,以下宏部分未经实验)。
1、一键后跳
/script OnUseSkill(9007,1)
2、一键打断自身读条
/script GetClientPlayer().StopCurrentAction()
3、延时宏
/delay 1
下一行命令延时1S执行
4、剑纯DPS
/script N=GetClientPlayer();
/script Power=N.nAccumulateValue;
/script Fight=N.bFightState;
/script MH1,MH2,MH3=N.GetSkillCDProgress(58,N.GetSkillLevel(58));
/script if MH2==0 and MH3==0 and Fight==true then OnUseSkill(58,N.GetSkillLevel(58)) end;
/script TD1,TD2,TD3=N.GetSkillCDProgress(309,N.GetSkillLevel(309));
/script SH1,SH2,SH3=N.GetSkillCDProgress(364,N.GetSkillLevel(364));
/script if Power>7 then OnUseSkill(365,N.GetSkillLevel(365)) end;
/script if Power<8 and TD2==0 and TD3==0 then OnUseSkill(309,N.GetSkillLevel(309)) end;
/script if Power<8 and SH2==0 and SH3==0 then OnUseSkill(364,N.GetSkillLevel(364)) end;
/script OnUseSkill(13,N.GetSkillLevel(13));
猛虎下山冷却好了就使用。
如果气大于3格半则使用无我无剑如果气小于4格,天地无极或者三环套月没有冷却,则释放天地无极跟三环套月,天地无极优先于三环套月释放。
其余时间释放三柴剑法。
5、离经无脑治疗
/script player=GetClientPlayer()
/script target=GetTargetHandle(player.GetTarget())
/script CDA,CDB,CDC=player.GetSkillCDProgress(136,player.GetSkillLevel(136))
/script if target.nCurrentLife/target.nMaxLife<=0.3 and CDC==0 then OnUseSkill(136,1) end
/script for _, v in pairs(player.GetBuffList()) do if (v.dwID==722 or v.dwID==412) then OnUseSkill(142,player.GetSkillLevel(142)) end end
/script for _, v in pairs(target.GetBuffList()) do if (v.dwID==631) then OnUseSkill(137,player.GetSkillLevel(137)) end end
/script OnUseSkill(101,player.GetSkillLevel(101))
自动补握针,出逐流效果后自动转为施放长针,目标血量少于30%水月无间+长针瞬加。其余时间无脑局针。
6、气纯无脑输出
/script N=GetClientPlayer()
/script p=N.nAccumulateValue
/script sx1,sx2,sx3=N.GetSkillCDProgress(367,N.GetSkillLevel(367));
/script ly1,ly2,ly3=N.GetSkillCDProgress(301,N.GetSkillLevel(301));
/script if sx2>=1then OnUseSkill(300,N.GetSkillLevel(300)) end;
/script if p>=8 then OnUseSkill(301,N.GetSkillLevel(301)) end;
/script if p<=7then OnUseSkill(367,N.GetSkillLevel(367)) end;
如果公共冷却大于等于1,则释放凝神聚气。
如果气大于等于4格,则释放两仪化形。
如果气小于或等于3格半,则释放四象轮回。
7、气纯无脑输出(回蓝版)
/script N=GetClientPlayer()
/script p=N.nAccumulateValue
/script sx1,sx2,sx3=N.GetSkillCDProgress(367,N.GetSkillLevel(367));
/script ly1,ly2,ly3=N.GetSkillCDProgress(301,N.GetSkillLevel(301));
/script by1,by2,by3=N.GetSkillCDProgress(316,N.GetSkillLevel(316));
/script a=0
/script m=N.nCurrentMana
/script if sx2>=1then OnUseSkill(300,N.GetSkillLevel(300)) end;
/script if m<=7500 and by2==0 then a=1 end;
/script if p<=9 and a==1 then OnUseSkill(367,N.GetSkillLevel(367)) end;
/script if p==10 and a==1 then OnUseSkill(316,N.GetSkillLevel(316)) end;
/script if p>=8and a==0 then OnUseSkill(301,N.GetSkillLevel(301)) end;
/script if p<=7and a==0 then OnUseSkill(367,N.GetSkillLevel(367)) end;
增加了一个判断是否需要回蓝的变量a,当蓝少于7500且抱元冷却时,判断a=1也就是进入需要回蓝状态,此时如果气不满则不停释放四象集气,一直到满气后释放抱元回蓝。(7500是参考数,可以自行调节)
8、上下马,一键后跳
/script N = GetClientPlayer();
/script Fight=N.bFightState;
/script Horse=N.bOnHorse;
/script if Fight==false then OnUseSkill(605,N.GetSkillLevel(605)) end;
/script if Horse==true and Fight==true then OnUseSkill(605,N.GetSkillLevel(605)) end;
/script if Horse==false and Fight==true then OnUseSkill(9007,N.GetSkillLevel(9007)) end;
不在战斗中,就是上下马的快捷键。
如果在战斗时,分两种情况,一种是在马上就是下马,一种是在马下,则为后跳。
备注:不在战斗中,是不会后跳的。
9、剑纯爆发宏
/script N = GetClientPlayer();
/script Power=N.nAccumulateValue;
/script Fight=N.bFightState;
/script WW=0;
/script TG=0;
/script GM=0;
/script WQ=0;
/script WW1,WW2,WW3=N.GetSkillCDProgress(365,N.GetSkillLevel(365));
/script TG1,TG2,TG3=N.GetSkillCDProgress(313,N.GetSkillLevel(313));
/script GM1,GM2,GM3=N.GetSkillCDProgress(153,N.GetSkillLevel(153));
/script WQ1,WQ2,WQ3=N.GetSkillCDProgress(154,N.GetSkillLevel(154));
/script if WW3<1 and WW==0 and Power>2 then OnUseSkill(365,N.GetSkillLevel(365)) end;
/script if TG3<1 and TG==0 and Power<3 and Fight==true then OnUseSkill(313,N.GetSkillLevel(313)) end;
/script if WQ3<1 and WQ==0 and Power>9 and Fight==true then OnUseSkill(154,N.GetSkillLevel(154)) end;
/script if TG3>1 and GM==0 and Fight==true then OnUseSkill(153,N.GetSkillLevel(153)) end;
/script OnUseSkill(13,N.GetSkillLevel(13));
当韬光养晦,或是带脉·光明不处于冷却时,无我必须在1格气以上(不含1格气)时方可释放,否则无效。
带脉·外丘只有满豆时,会自动释放。
10、气纯爆发宏
/script N = GetClientPlayer();
/script Fight=N.bFightState;
/script LY=0;
/script TG=0;
/script GM=0;
/script CG=0;
/script LY1,LY2,LY3=N.GetSkillCDProgress(301,N.GetSkillLevel(301));
/script TG1,TG2,TG3=N.GetSkillCDProgress(313,N.GetSkillLevel(313));
/script GM1,GM2,GM3=N.GetSkillCDProgress(153,N.GetSkillLevel(153));
/script CG1,CG2,CG3=N.GetSkillCDProgress(168,N.GetSkillLevel(168));
/script if LY3<1 and LY==0 then OnUseSkill(301,N.GetSkillLevel(301)) end;
/script if TG3<1 and TG==0 and Power<2 and Fight==true then OnUseSkill(313,N.GetSkillLevel(313)) end;
/script if CG3<1 and CG==0 and Power>9 and Fight==true then OnUseSkill(168,N.GetSkillLevel(168)) end;
/script if TG3>1 and GM==0 and Fight==true then OnUseSkill(153,N.GetSkillLevel(153)) end;
如果你有冲脉关门,带脉光明都点出来,这个宏足够支持你强大的爆发(3个两仪)。
如果你没有点带脉光明,这个宏也是可以使用的(只有2个两仪)。
不在战斗中光明,关门是不会释放的。
11、天策宏
/script N = GetClientPlayer();
/script A,B,C=N.GetSkillCDProgress(418,N.GetSkillLevel(418));
/script a1,b1,c1=N.GetSkillCDProgress(482,N.GetSkillLevel(482));
/script a2,b2,c2=N.GetSkillCDProgress(401,N.GetSkillLevel(401));
/script a3,b3,c3=N.GetSkillCDProgress(402,N.GetSkillLevel(402));
/script a4,b4,c4=N.GetSkillCDProgress(441,N.GetSkillLevel(441));
/script if (C==0) then OnUseSkill(418,N.GetSkillLevel(418)) end;
/script if (c1==0) then OnUseSkill(482,N.GetSkillLevel(482)) end;
/script if (c2==0) then OnUseSkill(401,N.GetSkillLevel(401)) end;
/script if (c3==0) then OnUseSkill(402,N.GetSkillLevel(402)) end;
/script if (c4==0) then OnUseSkill(441,N.GetSkillLevel(441)) end;
突+崩+破风 + 定军 + 穿
12、天策宏OT后补救
/script N = GetClientPlayer()
/script t=GetTargetHandle(N.GetTarget())
/script u=GetTargetHandle(t.GetTarget())
/script function Juli(target1, target2)
if not target1 or not target2 then return flase end
if target1.nMapID ~= target2.nMapID then return false end
strdis=(((target1.nX - target2.nX) ^ 2 + (target1.nY - target2.nY) ^ 2) ^ 0.5)/64 return strdis end
/script function checkbuff(id)
for _, D in pairs(t.GetBuffList() or {}) do if D.dwID==id then
returntrue end end return false end
/script m=Juli(t,N)
/script A,B,C=N.GetSkillCDProgress(402,6)
/script function ot(sw) if sw.dwSchoolID==2 or sw.dwSchoolID==3 or sw.dwSchoolID==4 then return true else return flase end end
/script if ot(u) and m<4.5 then OnUseSkill(402,6) end
/script if ot(u) and m<4.5 and (not checkbuff(199)) and C>0 then OnUseSkill(411,6) end
/script if m>8.5 and m<25.5 then OnUseSkill(418,6) end
/script if not ot(u) and m<4.5 then OnUseSkill(401,10) end
/script if not ot(u) and m<4.5 then OnUseSkill(12,1) end
当前目标的目标是七秀或者万花或者纯阳,则释放定军。
当定军miss时,则释放火+定军。
当目标在8尺以外时 则释放突。
当目标的目标不是七秀或者万花或者纯阳时,在4尺以内,则释放破风,梅花枪
此宏做完FB有人OT时的抢怪……勿用为野外开怪第一个突来用,否则会悲剧的
13、天策输出宏
/script N = GetClientPlayer()
/script t=GetTargetHandle(N.GetTarget())
/script function checkbuff(id)
for _, D in pairs(t.GetBuffList() or {}) do if D.dwID==id then
returntrue end end return false end
/script function checktbuff(bp)
for _, D in pairs(N.GetBuffList() or {}) do if D.dwID==bp then
returntrue end end return false end
/script A,B,C=N.GetSkillCDProgress(403,N.GetSkillLevel(403));
/script A1,B1,C1=N.GetSkillCDProgress(415,N.GetSkillLevel(415));
/script A2,B2,C2=N.GetSkillCDProgress(423,N.GetSkillLevel(423));
/script A3,B3,C3=N.GetSkillCDProgress(400,N.GetSkillLevel(400));
/script if checktbuff(366) then OnUseSkill(403,N.GetSkillLevel(403)) end
/script if checkbuff(540) then OnUseSkill(415,N.GetSkillLevel(415)) end
/script if not checkbuff(540) and not checkbuff(366) and C2==0 then OnUseSkill(423,N.GetSkillLevel(423)) end
/script if not checkbuff(540) and not checkbuff(366) and C3==0 and C2>0 then OnUseSkill(400,N.GetSkillLevel(400)) end
当本身有克敌状态时,则释放龙吟
当目标有致残状态时,则释放龙牙
当目标无克敌或者致残时,则释放灭
当目标无克敌或者致残,且灭在CD时,则释放穿云
14、离经水月长针
/script N = GetClientPlayer();
/script A,B,C=N.GetSkillCDProgress(136,1);
/script a,b,c=N.GetSkillCDProgress(167,1);
/script for _, D in pairs(N.GetBuffList()) do if (D.dwID==722 or D.dwID==412) then OnUseSkill(142,6)end end;
/script if (C==0) then OnUseSkill(136,1) end;
/script if (C>0 and c==0) then OnUseSkill(167,1) end;
首先判断是否有逐流BUFF,有就放长针没有就放水月+长针。
如果水月在CD中放“冲脉.幽门”+ 水月+长针
如果没有幽门,去掉第三行跟最后一行。
15、气纯一键四气场
/script N = GetClientPlayer();
/script A,B,C=N.GetSkillCDProgress(360,1);
/script a1,b1,c1=N.GetSkillCDProgress(357,1);
/script a2,b2,c2=N.GetSkillCDProgress(358,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 (c2==0) then OnUseSkill(358,1) end;
顺序是:冲阴阳,化三清,生太极,破苍穹 分别对应下面这个宏的最后四行
16、自动生太极
/script N = GetClientPlayer();
/script SelectPlayer()
/script for _, pB in pairs(GetClientPlayer().GetBuffList()) do if pB.dwID~=374 thenOnUseSkill(358,1) end end;
/script if (c3==0) then OnUseSkill(359,N.GetSkillLevel(359)) end;
17、自动扶摇
/script GetClientPlayer().StopCurrentAction()
/Delay 1
/script OnUseSkill(9002,N.GetSkillLevel(9002))
/script Jump()
打断当前读条 延时1s,然后扶摇+起跳
18、万花春泥毫针宏:
/script N = GetClientPlayer()
/script t=GetTargetHandle(N.GetTarget())
/script if t==nil then SelectPlayer() end
/script function checkbuff(id) for _, D in pairs(t.GetBuffList() or {}) do if D.dwID==id then return true end end return false end
/script function sk(ss) OnUseSkill(ss,N.GetSkillLevel(ss)) end
/script A,B,C=N.GetSkillCDProgress(141,N.GetSkillLevel(141));
/script if C==0 then sk(141) end
/script if not checkbuff(1674) and not checkbuff(684)then sk(132) end
如果目标没有则选择自己 此时目标为自己
毫针冷却则放毫针
如果目标身上没有 春泥的负面buff以及没有天地低昂 时释放春泥
19、自动无敌附加喊话
/script N = GetClientPlayer();
/script for i=1,3 do GetClientPlayer().Talk(PLAYER_TALK_CHANNEL.TEAM, "", {{type = "text", text = "马上释放无敌,迅速向我靠拢…… 马上释放无敌,迅速向我靠拢…… "}}) end;
/Delay 2
/script SelectPlayer();
/script a1,a2,a3=N.GetSkillCDProgress(371,1);
/script if a3<1 then OnUseSkill(371,1)elseOnUseSkill(167,1)end;
/Delay 2这句是在延迟2s后才可以释放无敌,大家可以删去,也可以更改2这个数字,2在这里代表2秒 请注意多按几次……避免喊话后,你没有再按,则无敌释放不出来……
20、气纯坐忘+吐纳故新
/script N = GetClientPlayer();
/script function checkbuff(id)
for _, D in pairs(N.GetBuffList()) do if D.dwID==id then
returntrue end end return false end
/script if not checkbuff(136) then OnUseSkill(314,N.GetSkillLevel(314)) end
/script if not checkbuff(1376) then OnUseSkill(312,N.GetSkillLevel(312)) end
21、七秀逃命宏
帝骖龙翔 +蝶弄足 +鹊踏枝+邻里曲 +天地低昂
/script N=GetClientPlayer()
/script A,B,C=N.GetSkillCDProgress(544,N.GetSkillLevel(544))
/script A1,B1,C1=N.GetSkillCDProgress(574,N.GetSkillLevel(574))
/script A2,B2,C2=N.GetSkillCDProgress(568,N.GetSkillLevel(568))
/script A3,B3,C3=N.GetSkillCDProgress(561,N.GetSkillLevel(561))
/script A4,B4,C4=N.GetSkillCDProgress(562,N.GetSkillLevel(562))
/script if C==0 then OnUseSkill(544,N.GetSkillLevel(544)) end
/script if C2==0 then OnUseSkill(574,N.GetSkillLevel(574)) end
/script if C3==0 then OnUseSkill(550,N.GetSkillLevel(550)) end
/script if C4==0 then OnUseSkill(557,N.GetSkillLevel(557)) end
22、离经一键治疗宏(节蓝版)
/script p=GetClientPlayer();
/script t=GetTargetHandle(p.GetTarget());
/script tl=t.nCurrentLife/t.nMaxLife;
/script A,B,C=p.GetSkillCDProgress(136,1);
/script a,b,c=p.GetSkillCDProgress(167,1);
/script D,E,F=p.GetSkillCDProgress(141,5);
/script for _,v in pairs(p.GetBuffList())do if (v.dwID==722 or v.dwID==412 and tl>0.7) then OnUseSkill(137,7) end end;
/script for _,v in pairs(p.GetBuffList())do if (v.dwID==722 or v.dwID==412 and tl <=0.7 and tl>0.5) then OnUseSkill(138,8) end end;
/script for _,v in pairs(p.GetBuffList())do if (v.dwID==722 or v.dwID==412 and tl <=0.5) then OnUseSkill(142,6) end end;
/script if (tl<=0.3 and C==0) then OnUseSkill(136,1) end;
/script if (tl<=0.3 and C>0 and c==0) then OnUseSkill(167,1) end;
/script for _, v in pairs(t.GetBuffList()) do if (v.dwID==631 and F==0) then OnUseSkill(141,5) end end;
/script for _, v in pairs(t.GetBuffList()) do if (v.dwID==631 and F>0) then OnUseSkill(137,7) end end;
/script OnUseSkill(101,9);
本宏作用:
普通情况下没握针就补握针,毫针CD一到就用。其它时间无脑局针。不喜欢这么用毫针的同学可以去掉橙色部分
特殊情况1:触发逐流BUFF。
目标血量大于70%局针
目标血量小于70%大于50%提针
目标血量小于50%长针
特殊情况2:目标血量低于30%,且没有逐流BUFF
水月不在CD中开水月+长针
水月CD了且冲脉幽门不在CD中,放幽门+水月+长针。没有点出冲脉幽门的请去掉宏命令中红色部分。
由于字符数的限制没有把冲脉关门做进去,同样是字符限制,只能在写宏的时候把详细的技能等级加上去,而不能用GetSkillLevel()函数,这样技能没有练满的童鞋需要根据自己实际情况改宏。
修改处1:p.GetSkillCDProgress(141,5)改成 p.GetSkillCDProgress(141,x) x为你的毫针等级。
修改处2:OnUseSkill(137,7) 改成 OnUseSkill(137,x) x为你的局针等级。
修改处3:OnUseSkill(138,8) 改成 OnUseSkill(138,x) x为你的提针等级。
修改处4:OnUseSkill(142,6) 改成 OnUseSkill(142,x) x为你的长针等级。
修改处5:OnUseSkill(141,5) 改成 OnUseSkill(141,x) x为你的毫针等级。
修改处6:OnUseSkill(101,9) 改成 OnUseSkill(101,x) x为你的握针等级。
23、花间无限定身宏
/script N = GetClientPlayer();
/script t=GetTargetHandle(N.GetTarget());
/script A,B,C=N.GetSkillCDProgress(186,N.GetSkillLevel(186));
/script for _, v in pairs(t.GetBuffList()) do if (v.dwID==675) then OnUseSkill(179,N.GetSkillLevel(179)) end end;
/script if (C==0) then OnUseSkill(186,N.GetSkillLevel(186)) end;
/script if (C>0) then OnUseSkill(181,N.GetSkillLevel(181)) end;
/script if (C>0) then OnUseSkill(228,N.GetSkillLevel(228)) end;
本宏作用:芙蓉并蒂=>阳明指=>芙蓉并蒂=>阳明指。。。。。。。。。偏离了循环中断,就放少阳指减速,或者放太阴指拉开距离。重要:红色部分和橙色部分只能二选一。像我上面写的那样,橙色部分是不会起任何作用的。
目前缺陷:1、进入战斗状态后才有用2、芙蓉并蒂后第一个阳明指结束,目标还处于定身状态,所以会继续放第二个阳明指然后才芙蓉,所以实际上的循环是1-2-2-1-2-2……
24、花间一键打断宏
/script p=GetClientPlayer();
/script t=GetTargetHandle(p.GetTarget());
/script A,B,C=p.GetSkillCDProgress(183,1);
/script if t.GetSkillPrepareState() and p.GetSkillPrepareState() then p.StopCurrentAction() end;
/script if C==0 and t.GetSkillPrepareState() then OnUseSkill(183,1) end;
如果其他职业的打断技能就将183改成对应ID。
宏功能说明:
1、如果目标正在施法,且自己也在施法,则打断当前施法条。
2、如果目标正在施法,且厥阴指不在CD中,则释放厥阴指。
如果你正在读条,那么要连点2下才能打断目标的施法。
25、智能春泥宏
/script p=GetClientPlayer();
/script t=GetTargetHandle(p.GetTarget());
/script for _,v in pairs(t.GetBuffList())do if (v.dwID==684) then OnUseSkill(141,5) end end;
/script OnUseSkill(132,7);
26、传说中的万花一键PK天策宏
/script P=GetClientPlayer()
/script tT,tID=P.GetTarget()
/script T=GetTargetHandle(P.GetTarget())
/script tBuff=T.GetBuffList()
/script pBuff=P.GetBuffList()
/script JL=GetCharacterDistance(P.dwID,tID)
/script AA,BB,CC=P.GetSkillCDProgress(228,P.GetSkillLevel(228))
/script DD,EE,FF=P.GetSkillCDProgress(181,P.GetSkillLevel(181))
/script mount=0
/script if pBuff~=nil then for _, v in pairs(pBuff) do if (v.dwID==994) then OnUseSkill(100,1) end end end
/script if tBuff~=nil then for _, v in pairs(tBuff) do if (v.dwID==244) then mount=1 end end end
/script if mount==1 and JL<=8*64 and CC==0 then OnUseSkill(228,P.GetSkillLevel(228)) end
/script if mount==0 and JL<=12*64 and EE==0 then OnUseSkill(181,P.GetSkillLevel(181)) end
/script OnUseSkill(9007,1)
27、点奇穴宏(配合去确认框插件,适合冲10的同胞们)
/script GetClientPlayer().OpenVenation(dwID)
/delay 1
/script GetClientPlayer().OpenVenation(dwID)
/delay 1
/script GetClientPlayer().OpenVenation(dwID)
/delay 1
奇穴·任脉·气端 40
奇穴·督脉·腰眼 41
奇穴·督脉·抬肩 42
奇穴·督脉·睛中 43
奇穴·带脉·曲泉 44
奇穴·带脉·龙玄 45
奇穴·冲脉·极泉 46
奇穴·冲脉·合阳 170
奇穴·任脉·下极俞9
奇穴·任脉·崇骨 1206
延时是有作用的,嗯,属于机密。
28、少林宏
/script N=GetClientPlayer();
/script P=N.nAccumulateValue;
/script target=GetTargetHandle(N.GetTarget());
/script hp=target.nCurrentLife/target.nMaxLife;
/script if hp<0.3 and P>2 then OnUseSkill(243,1) else if P>2 then OnUseSkill(233,1) end end;
以上就是必须3豆才能打出韦陀,以及血量低于30%同样必须3豆才能打出拿云的宏
如果想要2豆就出韦陀,只需要把if P>2 then OnUseSkill(233,1) end end; 里面的P>2改成P>1就成)
29、抱残+守缺
/script N=GetClientPlayer();
/script BC1,BC2,BC3=N.GetSkillCDProgress(239,N.GetSkillLevel(239));
/script SQ1,SQ2,SQ3=N.GetSkillCDProgress(241,N.GetSkillLevel(241));
/script if BC3==0 then OnUseSkill(239,1) end;
/script if SQ3==0 then OnUseSkill(241,1) end;
30、五蕴+抢珠
/script N=GetClientPlayer();
/script WY1,WY2,WY3=N.GetSkillCDProgress(249,N.GetSkillLevel(249));
/script QZ1,QZ2,QZ3=N.GetSkillCDProgress(240,N.GetSkillLevel(240));
/script if WY3==0 then OnUseSkill(249,1) end;
/script if QZ3==0 then OnUseSkill(240,1) end;
五蕴加抢珠的宏,经过测试,可能是因为相应速度太快,经常会发生对方身上有五蕴,但是还能到处跑的情况,相比单纯手工点击反而这种情况发生几率会小很多,请慎用。
31、抱残后抢珠
/script N=GetClientPlayer();
/script T,ID=N.GetTarget();
/script t=GetTargetHandle(T,ID);
/script tBUFF=t.GetBuffList();
/script if tBUFF~=nil then for _, pB in pairs(tBUFF) do if pB.dwID==563 then OnUseSkill(240,1) end end end;
以上是判断对方状态的一个宏,我这边设置的是如果对方身上有抱残的效果(pB.dwID==563 ) ,那么就释放抢珠OnUseSkill(240,1)
已经过测试,可用。
就这么多吧,其实还有更BT的宏,但是个人觉得如果拿出来了可能影响平衡。嗯,少林跟天策的宏有点少,将就一下吧。
另,以上宏为两个月内收集做来研究的,宏的创作以及功能解说属于原作者,我只是稍微修改。
后记
看了上面的一些东西可能大家觉得宏有点影响平衡,我却不这么认为。
作为一个研究宏而不使用宏的人来说,我认为宏的缺陷很大,而这缺陷不是简单的通过更多判断条件能弥补的。
我相信人的操作就是一个很强力的宏,而且很灵活。如果说作为一个一键输出宏,幽门关门CD好了就用,那么在BOSS战的时候就不能最大化输出。
我想如果通过人工判断是可以避免这种情况的,在离BOSS还有2分钟的时候就不去动这两个先天穴。
另外一个缺陷就是人的反应,我个人感觉按不同的两个键要比一直按一个键要速度,大家可以去试试。
至于为什么一键爆发在PVP中被鄙视就是因为他的死板,死板所以不论什么情况都会执行这些命令。
而人在PVP的时候是会有心情波动的,所以不一定是完美的执行出来。
我不用宏的原因就是不想产生对宏的依赖,没宏走遍天下,有宏只能局限于自己的电脑上,久而久之形成一种无脑玩游戏的状态,那么游戏也随之无聊。
游戏就是因为他的复杂性才持久,长时间机械性的刷怪,按技能我想谁都受不了。因为有了变化才使得你惊奇,才使得你思考,才使得你有了成就感。游戏因此才有了他的乐趣。
国际惯例。ID:云莎枫雪,帮会:冰恋倾城,服务器:杨宁。