57游戏  www.57yx.com  -  最全面的游戏资讯门户

一键MC—深入研究奶妈宏

  第1步,我们需要做的是了解UnitDebuff,也就是一个单位的Debuff,UnitDebuff得到的结果是一个字符串,一般都是当前Debuff的图标:Interface\\\\\\\\Icons\\\\\\\\XXXX,由于我并没有收集所有MC、BWL等地方的Debuff,所以有兴趣,你可以自己收集一下,因为前16个字符总是Interface\\\\\\\\Icons\\\\\\\\所以你可以通过/script for i=1,17,1 do if UnitDebuff(‘Player’,i)~=nil then SendChatMessage(string.sub(UnitDebuff(‘Player’,i),17),’SAY’);end;end;

  这条指令来得到当前你自己身上的所有Debuff,你可以做一个宏执行当前指令,也可以直接打开对话框输入然后回车,他便会把你身上的所有Debuff在说话频道显示出来(如果不对,可能就是end;多了或者少了……后同),幸好世界上有插件,不然被小白看到举报GM了……这里我还要介绍一条UseAction(ID);这条是一个呼叫其他宏的好办法之一(只是之一),ID就是宏所在的技能栏位,ID=(技能栏的页数-1)*12+所在位置号,譬如第2页2号栏就是12+2=14号,第11页第1栏就是121号。(如果你不知道*就是乘号,恐怕后面的就比较难理解了)

  第2步,这才是我们真正的开始,你需要新建一个宏,贴上自己喜欢的图标,起个酷点的名字,这个宏,将是一键MC的触发按钮,你可以把它摆在技能栏1,因为要狂按这个快捷图标,所以1可能方便一点,但这并不代表你一定得把它放在1。这个宏的主要功能是初始化一些变量:

  /script PM={‘Party1’,’Party2’,’Party3’,’Party4’,’Player’}; PMCount=5; DB={XXX,XXXX}; DBCount=2; CheckBar=X; WorkBar=Y; DoBar=Z; UseHL=60; NeedCheck=1; UseAction(CheckBar);

  这段宏的功能是定义PM数组,每次MC被分组后就可以自己设定一下,我这里设定的是根据队友1,队友2……队友4,最后自己的顺序,这个顺序很重要,越前面的越受照顾,而PMCount就是PM数组的单元个数。之后定义DB数组,这个数组的单元就是所有的你需要解的Debuff的名字,越前面的越受关心,而这里的XXX和XXXX之类的就是第一步中获得的,请注意千万不要打错,还要注意大小写。DBCount就是DB数组的单元个数。CheckBar就是把用来检测(第三步会说到)的宏的位置,WorkBar是用来工作的宏的位置,DoBar就是干活的宏的位置。UseHL是一个1~100的数字,用来比对加血时机,这些都将在后面说到。NeedCheck作用在于是否继续循环的标记。最后就是呼叫下一个宏。

  第3步,检测的宏(CheckBar指向的),这个宏的工作很简单,只是检测需要对某个角色进行“帮助”

  /script for i=0,PMCount,1 do if NeedCheck==1 then if PM~=nil then Targ=PM;if UnitHealth(Targ)>0 then UseAction(WorkBar);end;end;end;end;

  这个宏功能是:从0到PM个数-1检查对象是否存在,如果存在并且活着,就检测是否需要帮助他,之所以这里用了for i=0,PMCount,1而不是PMCount-1是因为我觉得这里的for语句对应Vc的应该是for(int i=0;i第4步,帮助的宏(DoBar指向的),这个宏的工作就是检测我该如何帮助一个对象

  /script if UnitHealth(Targ)*100/UnitHealthMax(Targ)<=UseHL then CastSpellByName(‘你的魔法(注意还得有等级)’); else for m=1,17,1 do if UnitDebuff(Targ,m)~=nil then for n=0,DBCount,1 do if string.sub(UnitDebuff(Targ,m),17)==DB then UseAction(X);break; end;end;end;end;end;

  这个宏的作用是:首先检测玩家是否需要加血(生命值低于UseHL%),如果是则给与加血,如果不是,那么就检查是否需要接触异常状态,如果需要则使用放在X号栏位的宏来解决这个Debuff。

  第5步,解决Debuff的宏

  /script TargetUnit(Targ);CastSpellByName(‘清洁型的法术’);TargetLastEnemy();NeedCheck=0;

  这是一个比较常用的给某个对象使用某个魔法之后立即点到最后一个有敌意的敌人的宏,最后多了一个NeedCheck=0,把当前循环需要继续的标志设为0,来结束当前循环。

  备注:

  1)只要1个按钮,你就可以干所有Mc BWL里面一个治疗者该干的事情,很是轻松,但我并不认为我所提供的是一条最好的思路,因为你可以看得出,这还能扩展,譬如首先还可以检测角色是否有你需要加的BUFF之类,仅仅只是抛砖引玉而已。

  2)宏的一个基本原理就是它只是一种指令式的对话,你可以完全在对话框内输入来完成指令,宏只是更快更方便的代替你输入了指令而已,因此从你进入游戏到结束游戏的这个过程,就是在一个对象上进行操作,也就是说,当你进入游戏后输入一条/script Targ=’target’,那么在你下线之前,只要你没有重新赋值Targ,那么Targ就永远是一个String,值为’target’,看到这个,如果以前不知道,现在是否有点感觉心花怒放了?256字符已经不是限制了,只要你善用UseAction。

  3)使用UseAction调用的是指令栏内的东西,你必须保证指令栏有东西,但是你可以不必翻页,如果你当前的快捷栏是第1页,而你使用了UseAction(121)则它会自动使用第10页第1个,而不会替你翻页。

  4)如果你试图自己制作一个Addon,最好先和Blizzard或者9C打个招呼,因为每次使用任何插件,都会上传一个插件的信息,这完全就是你“数据异常”的原因之一。但是如果你希望能够有一个自动执行按键的东西,你可以自己动手:

  首先打开Delphi(讲究效率的年代,开发小工具还是用它吧),托一个Timer组件,设定Interval为100,100毫秒一次我觉得挺快了。然后编写双击他自动生成的函数,现在Private下声明一个Work:boolean;在FormCreate中将它设置为false

  procedure TForm1.Timer1Timer(Sender: TObject);

  begin

  if GetAsyncKeyState(VK_XXX)<>0 then

  if Work=false then Work:=true else Work:=false;

  if Work=true then

  begin

  //PostMessage或者keybd_event

  end;

  end;

  当然这个程序并没有挂上WOW的句柄,只是向Windows发布了按键指令而已,并且通过获得VK_XXX(开启、关闭的快捷键)来决定是否打开100毫秒按一次按钮的指令。

  关于其他的:

  看过不少关于QS很弱的说法,我觉得如果你是一个正常人的话,你也应该有同感,我觉得一篇比较DND和WOW骑士差距的分析和一篇没有QS之神的文章都很有道理,的确QS太弱小了,因为你没有远程有效的大范围攻击,所以我都开始玩猎人了,猎人很舒服,在山体内我的一支箭绕着S型飞向一个正在努力躲开它的对手,而我根本就没瞄准,只是扣动了扳机而已……但我并不否认QS会有强大的表现,至少我60级半身骑士队长和光铸的QS杀一个20多级的法师,追杀个5分钟,加上一些运气还是能成功击杀的,虽然1个60的SM杀一个20的法师只要10秒。最可怜的是我花了3倍的时间到了60,却可以被一个法师完胜,毫无办法。也许无敌炉石很强,但法师完全可以变羊炉石,为什么他没有这么做?因为一个法师把我变羊以后,他完全必然可以反败为胜。

  牢骚发完,很高兴,1区迪托马斯31防护20惩戒的QS:乌瑟再世(装备不如别人帅,逃跑不如别人快,技能不如别人赖,副本砍怪别人踹——这就是我悲惨的QS命运了)


图片资讯 1 2 3

Powered by 57游戏 ©2004-2009