< 魔兽世界百科 >
|
![]() |
作者:kurapica
下面显示的是一整套宏,意思就是,所有宏的使用都是相关的,不是单独使用的。在我的前几套里面,使用技能时,会因为切换武器而多做一次按键。本来没有意思想做的,后来被Deric问到了,仔细的思考后就有了下面的语句。下面的宏里,我使用了Cosmos提供的延迟语句来作判断,尽量避免了两次按键的问题(看过我的宏和类似宏的人估计都知道这个问题).
MACRO 19 "潜行" Ability_Ambush.blp
/施放 潜行(等级 3)
/script if(isnot("匕首")) then change(0,1) end
END
MACRO 24 "背刺" Ability_BackStab.blp
/script start()
/script if(is("匕首")) then CastSpellByName("背刺(等级 6)") else change(0,1) end
/in 0.5 /script if(finish() and mode==1) then change(0,1) end
END
MACRO 26 "邪恶攻击" Spell_Shadow_RitualOfSacrifice.blp
/script if(isnot("匕首")) then CastSpellByName("邪恶攻击(等级 6)") else change(0,1) end
END
MACRO 29 "消失" Ability_Vanish.blp
/施放 消失(等级 2)
/script if(isnot("匕首")) then change(0,1) end
END
MACRO 46 "模式" Spell_Shadow_EnslaveDemon.blp
/script if mode == 1 then mode = 2 DEFAULT_CHAT_FRAME:AddMessage("进入队伍模式,背刺结束不再切换武器.") else mode = 1 DEFAULT_CHAT_FRAME:AddMessage("进入单人模式,背刺结束切换武器.") end
END
MACRO 47 "凿击" Ability_Gouge.blp
/script start()
/施放 凿击(等级 3)
/in 0.5 /script if(finish() and isnot("匕首")) then change(0,1) end
END
MACRO 48 "伏击" Ability_Rogue_Ambush.blp
/script start()
/施放 伏击(等级 4)
/in 0.5 /script if(finish() and mode==1) then change(0,1) end
END
MACRO 44 "初始" Spell_Shadow_ScourgeBuild.blp
/script function isTwoH() GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")) GameTooltip:Hide() if(GameTooltipTextLeft3:GetText()=="双手" or GameTooltipTextLeft4:GetText()=="双手") then return true else return false end end;
/script function isDag() GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")) GameTooltip:Hide() if(GameTooltipTextRight3:GetText()=="匕首" or GameTooltipTextRight4:GetText()=="匕首") then return true else return false end end;
/script function is(loc) if(loc=="双手") then return isTwoH() else return isDag() end end;
/script function isnot(loc) return (is(loc)==false) end;
/script function lefttoright() PickupInventoryItem(16) PickupInventoryItem(17) end;
/script function change(bag,slot) PickupContainerItem(bag, slot) PickupInventoryItem(16) end;
/script mode=1;
/script function start() point=GetComboPoints() end;
/script function finish() if(GetComboPoints()~=point) then return true else return false end end;
END
补充一个宏 肾击
/script start()
/施放 肾击(等级 2)
/in 0.5 /script if(finish() and isnot("匕首")) then change(0,1) end
===================================================================================
I. 首先说一下这套宏的插件需求。 这套宏使用了/in这样的延迟语句,所以必须要有Cosmos插件的支持,Cosmos的中文化版本有一个叫魔兽小强http://www.365wave.com/wow,不过魔兽小强集成功能很多,昨天进去报错了,因为插件使用内存超过40M,这个最好先关掉一些不用的插件,或者把内存份额调高。:P
我的初始宏有978字节,这是我用了SuperMacro写成的,如果没有的请按照颜色区分把它分成几个宏,调用时请按顺序调用(初始宏是刚运行游戏时运行的,直接运行就可以了,不需要其他操作)。不过建议安装SuperMacro,很不错可以上http://www.wowui.cn下载。
魔兽小强有点不好,他有个自动整理的功能,会把不属于他的插件删除(用来保证插件不冲突),这样SuperMacro在更新时会被删掉,备份也好,关掉自动整理(过一段时间最好整理一次)也好,这个自己处理了。
===================================================================================
II. 宏的使用:这套宏只要在游戏运行开始时,使用了初始宏后,就可以正常运行了。请将对应技能名字的宏替换掉动作栏的技能就可以了。我还提供了一个名字叫做"模式"的宏,用来切换作战模式,决定在背刺成功后,是否把武器切换回来,自带说明提示,为什么这样设置的原因在后面说到。
这套宏我使用了三件武器,一把副手保持不变,一把主手,一把放在第一个包的第一格里面,上面的change(0,1)就是表示取包中武器到主手。 如果你只是想左右手互换的话把所有的change(0,1)全部改成lefttoright()。
另外,记得把技能等级改成自己对应的,原本想在初始宏里写个自动取得技能等级的语句,不过已经太长了。考虑到也就每两级换几个,也就无所谓了。
还是以前说的话,记的直接copy的话,会由于自动添加的每行末尾的回车,造成宏出错,记得修改一下。
===================================================================================
III. 设计思路(有兴趣地看吧):最初我设计宏(刚接触宏)时,就是想凿击后切换到匕首,背刺,伏击完了后切换回剑锤,潜行时切换到匕首而已。后来的实验,一碰到技能miss,就只能看着它错误切换。因为找不到判断技能使用成功并同时反馈的办法,所以放弃了这条路。
我改用了比较合理而且简单的另外一套http://bbs.ngacn.com/read.php?tid=205170(这套我还是很喜欢,因为它没有任何插件的需求,维护修改也很方便,比我现在这套看起来漂亮多了)。然后碰到Deric的问题,仔细考虑下,由于最近在尝试/in的用法,所以想到在技能使用后0.5秒的时间后判断技能是否使用成功,然后就可以依次来做武器切换了。
判断技能成功的依据我这里用考察连击点的变化来判断,如果增加或者减少了,说明技能必然使用成功。当然,如果你5星了,还要用邪恶攻击,背刺之类,那么我也没办法。如果你升了持续攻击,那么可能1星终结又得到一星,不过终结技里,我只修改了肾击,你也没办法一直用肾击把。这样来说,基本上用连击点变化判断技能使用成功与否是没有什么问题的。
重点在于背刺结束后是否切换的问题,平时solo时,背刺结束正常是要切换回去的。但是组队或者一些情况下,比如战士抗怪,你只要背后戳就行了,那么不需要换回来,这种情况很多,我没办法一一纳入宏的判断中,所以加了一个"模式"的宏,用来决定这些问题。这个自己用一下,就知道意思了。
===================================================================================
IV. 初始宏的说明
MACRO 44 "初始" Spell_Shadow_ScourgeBuild.blp
/script function isTwoH() GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")) GameTooltip:Hide() if(GameTooltipTextLeft3:GetText()=="双手" or GameTooltipTextLeft4:GetText()=="双手") then return true else return false end end;
这里定义了一个函数isTwoH(),用来判断主手是不是双手武器,也就是说,盗贼就不要管了,这个是我为了练战士准备的。
/script function isDag() GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")) GameTooltip:Hide() if(GameTooltipTextRight3:GetText()=="匕首" or GameTooltipTextRight4:GetText()=="匕首") then return true else return false end end;
这个定义了一个函数isDag(),判断主手武器是不是匕首,如果是,返回true,不是返回false
/script function is(loc) if(loc=="双手") then return isTwoH() else return isDag() end end;
这个函数is(loc)是上面两个函数的封装,参数是loc,如果loc是"双手",那么做双手武器判断,如果不是,则判断主手是不是匕首(这里,loc随便取,只要不是"双手",我使用"匕首"传入,意思明显点),如果是返回true,不是返回false
/script function isnot(loc) return (is(loc)==false) end;
这个就是is(loc)的反函数了,传入"匕首",那么如果是匕首,返回false,否则返回true
/script function lefttoright() PickupInventoryItem(16) PickupInventoryItem(17) end;
这个函数没有返回值,它唯一作的就是左右手武器交换。
/script function change(bag,slot) PickupContainerItem(bag, slot) PickupInventoryItem(16) end;
这个函数也没有返回值,它就是上面我用到的,从第bag个包中取第slot个格的武器换到主手。例如
change(0,1),取第一格包中第一格武器装上。
/script mode=1;
这个不是函数,只是定义全局变量mode,也就是战斗模式区分。不用管了。
/script function start() point=GetComboPoints() end;
这个宏就是用来记录技能使用前的连击点数的。
/script function finish() if(GetComboPoints()~=point) then return true else return false end end;
这个宏用来判断当前连击点与前面纪录的有没有变化,有返回true,否则返回false
END
===================================================================================
V. 模式宏的说明
/script if mode == 1 then mode = 2 DEFAULT_CHAT_FRAME:AddMessage("进入队伍模式,背刺结束不再切换武器.") else mode = 1 DEFAULT_CHAT_FRAME:AddMessage("进入单人模式,背刺结束切换武器.") end
这个实际上没什么好说的,初始宏后,模式mode为1,那么按一下这个宏,mode变成2,同时给出提示"进入队伍模式,背刺结束不再切换武器",再按一次,mode变回1,给出提示。恩,很简单把。
这个宏在于你要自己准确判断使用哪种模式作战。
===================================================================================
VI. 技能宏
MACRO 19 "潜行"
/施放 潜行(等级 3)
/script if(isnot("匕首")) then change(0,1) end
END
潜行宏,第一句使用潜行技能,第二句判断isnot("匕首"),还记得这句的说明把,第二句翻译成中文就是,如果不是匕首,那么change(0,1),即切换武器成匕首,记得匕首放好位置。
MACRO 24 "背刺"
/script start()
/script if(is("匕首")) then CastSpellByName("背刺(等级 6)") else change(0,1) end
/in 0.5 /script if(finish() and mode==1) then change(0,1) end
END
是的,这个宏是一个重点,
第一句, let’s start,是的,我调用了start()方法,宏时并发执行的,所以,第一句执行时,我们就已经记录了现在的连击点。
第二句,如果是匕首那么使用背刺,否则交换武器,看,我还保留着以前的语句,所以使用习惯那些宏的人不用担心自己的习惯被打破,这里只是更方便而以。
第三句,/in 0.5等待0.5S,很好理解,不是吗。finish()函数使我们得到连击点变更情况,如果是true,那么技能使用成功了,如果这个时候我在SOLO,我会开了模式mode==1,那么我将切换掉现在的武器,锤子比匕首更有压迫感,不是吗。
MACRO 26 "邪恶攻击"
/script if(isnot("匕首")) then CastSpellByName("邪恶攻击(等级 6)") else change(0,1) end
END
好的,这也是一个重要的宏,不过更重要的是邪恶攻击后,我们什么也不需要做。翻译成中文:
如果主手不是匕首,那么我就SS。噢,我拿着匕首,这样砍起来多不爽,那么我就先换掉好了。
MACRO 29 "消失"
/施放 消失(等级 2)
/script if(isnot("匕首")) then change(0,1) end
END
这个没有说的必要,消失不就是强化的潜行,一切照做就ok了。
MACRO 47 "凿击"
/script start()
/施放 凿击(等级 3)
/in 0.5 /script if(finish() and isnot("匕首")) then change(0,1) end
END
恩,背刺前的准备活动,start() /in 0.5这些没必要解释了吧。最后那句if就是如果凿击成功,而且主手不是匕首,那么让我们交换把
MACRO 48 "伏击"
/script start()
/施放 伏击(等级 4)
/in 0.5 /script if(finish() and mode==1) then change(0,1) end
END
so,潜行的加强背刺,照搬背刺的就ok了。
MACRO 49 "肾击"
/script start()
/施放 肾击(等级 2)
/in 0.5 /script if(finish() and isnot("匕首")) then change(0,1) end
END
本来没有想过要加它,肾击后的操作很多,如果不喜欢肾击后背刺的人,那么请无视掉它。只是有时觉得看到没有反抗的人,不给他下狠的,真是对不起自己。
上面的技能使用宏都是取背包物品的。如果只想左右手互换的话,请把所有的change(0,1)换成lefttoright()
===================================================================================
算是结束了吧。如果你使用不成功的话,请把邮箱地址发给我,短消息也好,这里回帖也好,不过记得先准备好环境。
引用本页地址(点击复制到粘贴板) 粘贴到你想引用的网页。
HTML形式的传播:
论坛形式的传播: