[打印本页]
《超级宏官方教程》第四章·第8节:唐门实例—— 主稿:爱与正义
作者: 无色幽明    时间: 2014-03-26 17:38

标题: 《超级宏官方教程》第四章·第8节:唐门实例—— 主稿:爱与正义

唐门实例
主稿:爱与正义、主公快走





前言
我的机关门已经饥渴难耐了—–浅析唐门宏的编写与逆向判断实例
其实唐门 一直以来就是一个有意思的门派,和其他门派大相径庭的门派宗旨、百花缭乱的攻击方式,以及十大门派中数一数二的搅混水能力都让这个门派魅力♂四射。
这节的教程就一田螺唐的输出循环为例,由我来和大家简单的介绍下唐门宏的编写方式和利用/VAR自定义变量来实现逆向判断的方法。


第一节:何为逆向判断。
要是从技能数目来讲,唐门的技能并不比少林多,无非就是埋蛋,爆弹,千机变,天绝,暴雨和鸡蛋。但是为什么唐门的宏会那么长?因为作者脑残吗?明显是的。明显不是。在一个唐门的眼里,技能的收益并不是一成不变的,如果你是一个少林,那么无论何时三豆的拿云式都会是最佳的选择,但是考虑到技能的消耗和续航为题, 唐门会比其他职业更加重视“什么时候该干什么”。这就造成了田螺唐的宏往往利用大量的语句去判断什么时候应该干什么。
这种需要对整个输出循环进行判断的宏其实并不难,无非就是体力活。举个之前藏剑宏的例子:
/skill [status:run|jump;buff:夜雨,cdtime:云飞玉皇>1.2;cdtime:云飞玉皇>1;nobuff:夜雨-织炎断尘-凤鸣-本神,cd:云飞玉皇;buff:剑鸣,cdtime:云飞玉皇>1.5,cd:断潮;nobuff:剑鸣,cdtime:云飞玉皇>1.5]夕照雷峰
这条命令写于12年2月,目的是确认藏剑的夕照雷锋只会在需要打出的时候打出,事实证明如此长的宏语句是在太容易出错了,实际上这条宏语句纠错了,不过哪句错了那不重要。
当时的藏剑无非就是判断剑气以及剑鸣,香梅,寻梅这几个buff外加云飞的cd时间,而唐门需要判断的东西则更多,所以总管我烛龙时代的宏,每一个都在和1024字节的宏语句上线做斗争,并且满地都是bug,在这种我他妈快死了极限的状态下,逆向判断的优势开始体现出来。
所谓逆向判断,即不去想“现在该干什么”而是以“现在不该干什么”为中心思想,限制填充技能的运行。再举个例子。
/end [tm<71,nocd:暴雨梨花针;nobuff:气魄,nocd:暴雨梨花针;buff:孔雀羽,nocd:暴雨梨花针]
/skill [puppet,cd:天绝地灭]蚀肌弹
这是我半年前的宏语句,这条命令分为两行,简单概括来就是第一行:需要打暴雨的时候,不可以打鸡蛋,第二行:如果第一行不生效,地上有弩和天绝,那就打鸡蛋到爽吧!
在主要填充技能上实现了逆向判断后宏的运行效率得到了。不会得到任何的提升,但是会让宏作者的工作难度极大的降低。
简言之,如何编辑一个逆向判断的宏:
1,确定最紧急状态最应该释放的技能
2,将这个技能的释放条件作为紧急状态第二应该释放技能的限制条件。
3,逐步往后推,一直到最低级的填充技能为止。


第二节:逆向判断宏的编辑方法。
在这里以我自己的唐门宏为例做一个简单的例子。
首先,确定田螺唐门最不确定,最乱七八糟的技能……当然是暗藏杀机了还想个屁啊!
然后确定暗藏杀机和其配套技能图穷匕见的使用条件,条件如下:
/var [nocd:暗藏杀机,mount:天罗诡道,!v_群怪=3,vbomb<3,tstate:stand,((buff:心无旁骛;v_暴雨模式,tm>=65);nobuff:奥妙,(tm>=85;buff:心无旁边骛;vbomb=2,tm>=55;cdtime:心无旁骛<8,tm>=55;puppet,cdtime:心无旁骛<2,cdtime:天绝地灭>=1.5))]v_需要下蛋
/var [vbomb=3,(cdtime:心无旁骛>=3,(buff:心无旁骛|扬威|朝圣);v_群怪=2,temdis:10>2);nobuff:心无旁骛,nobuff:奥妙,cdtime:心无旁骛>8,(vbomb>0,tm<25;vbomb=3,tm<=60);cdtime:暗藏杀机>1.5,vbomb>1,(buff:鬼斧神工,nobuff:心无旁骛,bufftime:鬼斧神工<1.5;buff:心无旁骛,nobuff:鬼斧神工,bufftime:心无旁骛<1.5;tstate:run);v_暴雨模式,bomb=3]v_需要爆蛋
在这里/var 的意思可以理解成把符合条件的所有内容简略的称呼为一个条件,节省空间,这也是/var 命令最基础的用法。
然后将其加入最不需要考虑闭着眼睛就能放的技能—-即鸡蛋的限制里,在这里,鸡蛋的限制也用/var 做了简化,即
/var [v_需要下蛋;v_需要爆蛋]v_填充去死
此条命令的意思是:在爆弹和下蛋的时机满足的时候,确定一个叫“填充去死”的条件。

然后就是最后两步,
1,这个条件加上叹号,即:!v_填充去死,意为:不是这样的时候。
2,将此限制条件加到鸡蛋的释放条件前面,即:
/if [!v_填充去死]
/skill 蚀肌弹
/end
这句的意思就相当简单了,意为:当不满足不可以释放鸡蛋的条件(即可以释放鸡蛋的时候)释放鸡蛋。大家可以看到,宏语句从上至下一步步简化,到了鸡蛋这一步已经极端的短了。
所以简言之,逆向判断不同于逐步复杂的正向判断,是一种逐步将判断简化的过程。
以上是逆向宏的编辑思路,接下来我们将结合实例解释一下如何在高度契合的逆向命令中修改语句,以及如何对抗我们最大的敌人,延迟。


关于如何解决暴雨流惊羽唐门暴雨梨花针相关问题集序言
暴雨梨花针这个技能是暴雨流惊羽唐门的最重要的技能,没有之一!
性质:逆读条技能,逆读条时间大于公CD
伤害模式:5次伤害,依次递增
总DPS占比:60%以上(木桩60%左右,实战65%左右)
特效:完整释放一次暴雨梨花针会叠1层无声buff,三次完整暴雨梨花针叠追命无声buff(瞬发追命),出现无声追命后不打瞬发追命箭打暴雨梨花针无法或者一次无声buff。
在超级宏环境使用下可能会出现以下各种情况:

情况一:暴雨打断的解决方案
由于逆读条时间大于公CD导致第一次暴雨没打完整的情况下打了第二次暴雨梨花针或者穿插其他技能使其被打断。
解决办法:/Return指令
/return [otaleft]
/cast 其他穿插技能
/cast 暴雨梨花针
/return [otaleft] 意思是逆读条引导保护,建议放在其他穿插技能之前
/cast 其他技能 如果放在顶部会打断引导保护使其失效,如果放在最后又会延迟释放失去实际技能价值,所以需要穿插的技能请放在中间(包括移动输出技能)。
/cast 暴雨梨花针 作为结尾起到引导保护最终技能的目的

情况二:延迟的时间戳解决方案
由于客户端延迟问题导致追命无声buff延迟出现。
解决办法:/var 变量赋值指令+/nowtime时间戳指令+/Return终止运行指令可以理解成保护引导配合使用(这个有点难,真的有点难)
/var [buff:无声=2,0.5<otaleft:暴雨梨花针<1,otaleft:暴雨梨花针+now+0.8;v_prota]v_prota
/return [otaleft>0.7*ping]
/cast [buff:追命无声; now<=v_prota]追命箭
/cast其他穿插技能
/cast 暴雨梨花针
/var [buff:无声=2,0.5<otaleft:暴雨梨花针<1,otaleft:暴雨梨花针+now+0.8;v_prota]v_prota
这句命令的意思是当无声buff两层时,逆读条技能暴雨梨花针引导保护,其他时候暴雨梨花针延迟判定时间为nowtime+0.8秒的延迟且引导保护,v_prota为变量赋值设定的名字
/return [otaleft>0.7*ping]
暴雨打断出第五次伤害判定,前两次暴雨,会根据延迟提前断判定时间为0.7*你的延迟时间(惊羽中玩以上水平的选择不要问我为什么,自己去看高玩们的攻略视频,如果你延迟实在厉害就吧这句命令改成:/return [otaleft])
/cast [buff:追命无声; now<=v_prota]追命箭
nowtime小于等于变量赋值时则延迟判定打追命
/cast其他穿插技能
/cast [buff:追命无声]追命箭
/cast 暴雨梨花针
这三句不解释了自己看情况