[原]魔兽世界宏命令上手指南

说明:本文自发出起一个月内不接受任何形式的转载。本文中依然存在一些错误。作者不承担对魔兽世界软件进行技术支持的义务。

“宏”在程序员眼中是一个很常见的字眼,它一般指代一小段能够实现对批量的数据进行固定方式的处理的程序段。这里的“宏”和编程语言中的“宏”的区别并不是很大,只是我们编写宏的目的不是为了处理数据,而是使我们玩游戏更加得心应手。

如果你玩过EQ之类的欧美网络游戏,当然对其提供的宏功能不会陌生。不过我们今天介绍的魔兽世界(以下简称WOW)中的宏,其功能之强大可非这些游戏提供的宏命令功能所可比的。

 

 

批处理命令:最简单的宏

 

 

按下回车,打上“/p +++”……这样的命令我相信你一定用过,它的作用是给小队频道发送一条内容是“+++”的消息:这一定是队里的“奶妈”有点玩忽职守了。类似的还有“/g ××××”(公会聊天)、“/raid ××××”(团队聊天)等等,以及“/dance”(跳舞)、“/cry”(哭)等等表情命令。

最基本的宏就由这些命令构成,如果你接触过DOS中的批处理文件(*.bat),你会发现这和批处理文件的编写别无二致:将一系列命令按照顺序写出来。

让我们来写一个最简单的宏:(德鲁伊)施放休眠术并且通知小队成员不要惊醒目标。

在游戏中按下ESC,在弹出的窗口中选择“宏命令设置”;或者在游戏中按下enter键输入“/macro”并且回车;或者单击聊天信息窗口左侧最下面的气泡按钮选择“宏”,都可以进入宏命令设置窗口。首先单击“新建”按钮创建一个宏,接下来为宏取个名字并且选择一个图标。这里就选择和休眠术相同的图标,名字就叫“休眠”吧。按确定以后这个窗口关闭,接下来就可以在上一个窗口的大文本框里面输入宏的内容了:

 

 

/p [Auto]先让%t睡上20秒,谁惊动它我跟谁急!

/施放 休眠(等级 2)

 

 

然后按确定即可。这时候你就可以把宏命令设置窗口中的“休眠”图标拖动到快捷栏中取代原有的休眠图标了。我们来看看这个宏的语句:第一行是给小队频道发送一条信息,告诉队友我即将催眠目标——%t用于代表你选择的目标,比如你选择了一只淡水鳄,那么这条消息发出后“%t”就会自动被替换为“淡水鳄”,信息头部标上“[Auto]”用来区分于普通的聊天信息;第二行用于对目标施放一个二级的催眠术。

试一试,如果你现在处在一个小队里,你就会先告诉队友目标即将被催眠,接着对它使用休眠术。如果你不在小队里,会有信息提示你“不在一个小队中”,但是休眠术依然会被施放。

 

 

小技巧:如果要在宏里面加入一个施放法术的命令,可以在编写宏命令的同时打开法术书窗口,按住shift单击你要施放的法术。当然这里的法术不仅仅指魔法,也包括战士、盗贼等职业的技能。

 

 

接下来再看看这样一个宏:

 

 

/p [Auto]正在施放宁静,要命的往我身边靠。

/施放 宁静(等级 2)

 

 

这个宏的作用是在施放宁静(德鲁伊的群体治疗法术)之前提醒队友进入法术有效范围。

使用简单的枚举命令的方式写出来的宏能够实现一些普通的功能,当然不正当的使用也可能给其它玩家带来麻烦(例如:使用宏刷屏,这样有可能打乱聊天频道的秩序,并有可能导致你的名字进入成百上千人的屏蔽名单)。在WOW中文官方网站http://www.wowchina.com/info/basic/emotion.htm上给出了一系列的表情命令,可以用于宏的编写。在游戏中输入/help可以获取部分命令列表,它们都可以写入宏中。

 

 

函数使用:接触LUA语言

 

 

LUA是一种脚本语言,在WOW里面,这种语言得到了广泛的应用。你可以使用它配合XML语言编写插件,当然这要求你有一定的编程功底;它也被应用到WOW的宏当中,使用LUA语言编写的宏所具有的功能可以强大到难以想象的程度,当然这依然是和你的编程水平所挂钩的,但是我相信一些简单的LUA语句并不会让你感到头疼。

我们先看一个例子:

 

 

/Assist ×××

/script PetAttack();

 

 

这个例子可以用于猎人或者术士,前提是猎人或者术士带着宠物。第一行依然是一个普通的命令语句,这是在较高级副本中常用的一个命令,作用是协助指定的队友进行攻击,命令中的×××可以替换为任何一个队友的名字(别打错别字哦),一般应该是队中的坦克;第二句就用到了一个LUA语句:

首先使用/script来区分这是一个LUA语句而非普通的命令,在一个空格后面跟上这个LUA语句。在这个例子中,我们调用了一个函数“PetAttack();”它的作用是命令宠物攻击目标。很显然,这个宏的作用就是:把目标转向队伍中坦克正在顶的敌人,然后命令宠物上去攻击它。最后请注意,一切函数语句的后面都要加上一个半角的分号(“;”)。

 

 

再来看看这个例子:

/target ×××

/施放 回春术(等级 8)

/script TargetLastEnemy();

/script AttackTarget();

 

 

这个宏的作用是(在战斗中)给自己加血,然后继续攻击目标。第一行使用/target命令选定目标,这里把×××换成自己的名字以示选定自己;第二行的命令用于施放一个等级8的回春术(你可以把它换成你常用的治疗法术,但一定要是瞬发法术);接下来的两行分别用到了两个函数:TargetLastEnemy();这个函数用于把目标转向上次选定的敌人;AttackTarget();这个函数用于攻击选定的敌人。

暴雪为WOW提供了很多函数接口,你可以在http://www.wowwiki.com/index.php/World_of_Warcraft_API查阅到全部开放函数的信息和一些没有开放的(术语叫undocumented)函数的信息,不过这就不仅仅要求你有一定的编程功底了,你的英文也得过关才行。在“基本功能的载体:常用函数”一节我给出了一些常用的函数。

 

 

 

 

延时操作:COSMOS插件的应用

 

 

在上一个例子中,我们使用的治疗法术一定要是瞬发的。这是因为法术后面的语句不会等到法术施放完毕之后再执行,而是在法术开始发出后立即执行。所以这时候选定目标并对其进行攻击是没有效果的。如果要在这里用上非瞬发法术(例如:治疗之触),则必须用到延时语句:让TargetLastEnemy()语句在施放法术后3.5秒再执行(治疗之触的吟唱时间是3.5秒)。

WOWLUA接口中并没有与延时有关的函数,如果要在宏中实现延时,我们要用到一个叫做COSMOS的插件。

COSMOS的官方网站地址在http://www.cosmosui.org/,你可以从这里下载到COSMOS。注意这是一个英文插件集合,并且有可能和你安装的其它插件集合或者插件相冲突。安装之后就可以在宏中使用延时命令了。例如,上面一个例子可以改成:

 

 

/target ×××

/施放 治疗之触(等级 7)

/in 3.5 /script TargetLastEnemy();

/script AttackTarget();

 

 

这里改动的重点在第三行,在原有语句之前加上了“/in 3.5。它的作用就是提供3.5秒的延时,在这个延时之后继续执行下面的语句。依次类推,延时2秒即为/in 2,延时10秒即为/in 10,等等等等。

 

 

条件判断语句:具体情况具体对待

 

 

接下来这个例子使用到了条件判断语句:

 

 

/target ×××

/script

    if(UnitMana("×××") >= 545) then

        CastSpellByName("治疗之触(等级 7)");

    else if(UnitMana("×××") >= 445) then

        CastSpellByName("治疗之触(等级 6)");

    else

        UseContainerItem(0, 2);

    end

end

 

 

这个例子首先将目标定为自己,接下来用了一个条件判断语句:获取指定对象的法力值,接下来判断:如果法力值大于或者等于545(足以施放7级治疗之触),则施放7级治疗之触;如果小于545,再进行判断:如果法力值大于或者等于445,则施放6级的治疗之触。如果法力值不足445,则使用最右侧背包里面第二格的物品,我们假设它是超强治疗药水。

来解释一下这个宏里面使用到的函数:UnitMana()函数用于获取指定对象的Mana值(针对不同职业,可能是法力值、能量值或怒气值,下同),括号里应该指定对象的名字,这里当然就是你自己了。注意名字要用双引号(半角)括起来(下同)。CastSpellByName()函数在这里用于替代“/施放”命令,因为这个施放过程实际上是包含在一个宏语句里面的,而“施放”语句只能做为一个单独的宏语句出现。在括号内应该指定法术的完整名称,包括它的等级,并且同样应该用双引号(半角)括起来(下同)。UseContainerItem()也是一个很实用的函数,它的作用是使用指定背包中指定位置的物品。括号中用逗号隔开两个数字,第一个指定背包的序号,在游戏屏幕的右下角从右到左数,第一个背包编号为0,第二个编号为1,依此类推。第二个数字指定物品处在指定背包的哪个位置,打开一个背包从左到右、从上到下数依次是123……。

再来看看if结构是怎么写的。首先是if语句,接下来跟着一个括号,里面是判断条件语句,接下来跟着一个then。如果括号中的判断条件成立,那么执行then后面的句子;如果不成立,则跳到下面一个else或者end语句。else语句指定判断条件不成立的情况下该执行什么,在else后面还可以跟上if进行其它判断。一个if语句结束后应该跟上一个end语句来宣布它的结束。

由于这个宏中的一个LUA语句是多行的,所以最后必须跟上一个end来表示这个LUA语句的结束。

使用条件判断语句还能实现其它一些功能,例如根据友方的等级对它施放增益法术(高等级的增益法术对低级的目标无效)、根据友方生命值的多少来对它施放不同等级的治疗法术,以及根据敌人生命值的多少来确定使用哪个等级的法术攻击它,以最大限度的节约法力值等等。这些语句中可能使用到的一些函数我都在“基本功能的载体:常用函数”一节给出了简单的说明。

 

 

基本功能的载体:常用函数

这里列举了一些常用的函数,函数后面跟的括号里面如果有内容,这些内容被称为“参数”。

如果参数没有加上双引号,那么参数应该是数值。如果加上了双引号,参数应该是指定的名称,并且这些名称也应该加上一对半角双引号。

更完整的函数列表请参考“函数使用:接触LUA语言”一节中给出的地址。

 

 

·ActionButtonDown(id)ActionButtonUp(id):对快捷栏(左下角具有12个空位的工具栏)的操作。前一个表示在指定的快捷栏空位上按下鼠标键,后一个表示在指定的栏位上松开鼠标键。同时使用这两个函数可以实现使用快捷栏的法术、技能或者物品。括号中的id应该替换为快捷栏位的序号,从左到右依次是123……12

例如:/script ActionButtonDown(10);ActionButtonUp(10); 这个宏可以使用快捷栏第十格的法术、技能或者物品。

·BonusActionButtonDown(id)BonusActionButtonUp(id):对附加动作栏(对于猎人、术士是宠物技能栏,对于德鲁伊是形态切换栏,等等)的操作。类似上一条对快捷栏的操作。

·CURRENT_ACTIONBAR_PAGEChangeActionBarPage():前者用来指定当前快捷栏的页数,后者用于切换快捷栏的页。

例如,把快捷栏翻到第5页:/script CURRENT_ACTIONBAR_PAGE=5;ChangeActionBarPage();

·AssistByName("name")AssistUnit("unit"):均用于协助指定的对象进行攻击,效果等同于/Assist命令。把“name”、“unit”替换成需要协助的对象的名字。

·CastPetAction(index):施放宠物技能,把index替换为对应的宠物技能编号。

·PetAttack()PetAggressiveMode()PetDefensiveMode()PetWait()PetFollow():第一个命令宠物进攻目标;第二个让宠物进入攻击模式,第三个使宠物进入防御模式,第四个让你的宠物等待,最后一个让宠物跟随你。

·PetDismiss():解散你的宠物。

·CastSpellByName("name"):施放指定的法术。把“name”替换成法术的完整名称(包括等级)。

·TargetByName("name")TargetUnit("unit")TargetUnitsPet("unit"):前二者将目标转向指定的对象,后者将目标转向指定对象的宠物(如果有的话)。把“name”和“unit”替换成目标的名字。

·TargetLastEnemy()TargetNearestEnemy()TargetNearestFriend()TargetNearestPartyMember():依次是将目标转向最近攻击的敌人、离自己最近的敌人、离自己最近的友方目标和离自己最近的队友。

·ToggleBag(id):打开或者关闭指定的背包,id为背包的编号,从右到左依次是01234

·FollowUnit("unit"):跟随对象。把“unit”替换成目标的名字。

·UnitHealth("unit")UnitHealthMax("unit")UnitLevel("unit")UnitMana("unit") UnitManaMax("unit"):依次返回指定对象的生命值、生命上限、等级、Mana值、Mana上限。把“unit”替换成目标的名字。

 

 

无限种可能:深入探索研究

 

 

应用了LUA语言的WOW宏能够提供无限种可能的功能,以上所说到的只是皮毛而已。你能做的还包括使用循环语句遍历队友,给他们一个一个的加上增益法术;配合COSMOS插件的延迟功能实现自动从一个地点跑到另一个地点;以及编写宏自动整理背包、自动跟随队友挂级等等。虽然基本上不可能使用宏写出外挂来,但是编写巧妙的宏能提供的功能并不比外挂弱多少,而且请注意,这是暴雪和第九城市官方承认的方式,你在光明正大的享受宏给你带来的方便快捷和乐趣。这一切都在于你对WOW,对LUA语言,对WOW的函数接口的探索和研究。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值