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

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

如果你玩过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秒)。

WOW的LUA接口中并没有与延时有关的函数,如果要在宏中实现延时,我们要用到一个叫做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,依此类推。第二个数字指定物品处在指定背包的哪个位置,打开一个背包从左到右、从上到下数依次是1、2、3……。

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

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

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

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

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

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

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

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

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

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

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

例如,把快捷栏翻到第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为背包的编号,从右到左依次是0、1、2、3、4。

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

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

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

 

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

[原]魔兽世界宏命令上手指南相关推荐

  1. 魔兽世界宏命令完全指南

    一.基本宏命令 1.什么是宏 ? 宏是由一组宏命令语句 组成的 集合 .以下是一些普通宏命令的示例 :/say (/s, /说) /whisper (/w, /talk, /t, /告诉) /repl ...

  2. 60级高阶督军套装属性_魔兽世界怀旧服指南:60年代法师套装的选择解析

    原标题:魔兽世界怀旧服指南:60年代法师套装的选择解析 魔兽世界的法师一直是游戏里的热门职业,潇洒的动作,神秘的能力,强大的伤害,无愧暴雪亲儿子的称号. 与称号相匹配的,自然是设计师们为法师提供的各种 ...

  3. 魔兽初级上手指南快捷键

    魔兽初级上手指南-快捷键 游戏一拿到手,第一步要做的事就是寻找热键,经历众多网络游戏熏陶之后,键盘和鼠标结合才是高级万家最终的追求.在此我将新手上路需要了解的快捷键作一个统计介绍. 一进入游戏界面,你 ...

  4. 【转帖】超详细的 Vagrant 上手指南

    本文转自https://zhuanlan.zhihu.com/p/259833884 超详细的 Vagrant 上手指南 DavyCloud 努力把事讲清楚 91 人赞同了该文章 搭建 Linux 虚 ...

  5. React + MobX - 完全上手指南

    React + MobX - 完全上手指南 前言 正文 MobX 準備工作 MobX 基本使用 Store + Action 組件中 MobX 生效 MobX Decorators MobX Deco ...

  6. Go Pro 半小时上手指南

    Jack刚买了台Go Pro 6,商品包装内没有说明书,希望尽快拍那种慢动作或者酷炫的照片,去网上看了些贴都是注重结果,很少讲具体设置或技巧,光靠自己研究什么时候才能入门?<Go Pro 半小时 ...

  7. android组件浮动在activity上_Jetpack Hilt 依赖注入框架上手指南

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 作者:LvKang-insist 链接:https://juejin.im/post/5efdff9d6fb9a07e ...

  8. 英雄探长的机器人怎么拼_LOL路人局都畏惧的辅助英雄,新版机器人布里兹上手指南...

    最近国服版本更新到9.9对这个所谓的机器人做了不小的改动,算是一波不错的加强,在此推出一篇上手指南,希望能帮助大家上分. 版本更新如下: 解析:坦度下滑,伤害提升,大招被动机制不在干扰我方ADC补刀, ...

  9. 「最简单」的 Core Data 上手指南

    本文讲的是「最简单」的 Core Data 上手指南, 原文地址:The Easiest Core Data 原文作者:Alberto De Bortoli 译文出自:掘金翻译计划 译者:Zheaol ...

最新文章

  1. C# Winform应用程序占用内存较大解决方法整理(转)
  2. java libpcap,Linux下编译安装libpcap
  3. Zabbix监控agent
  4. iOS:多线程技术GCD的使用
  5. html访问虚拟目录路径,IIS7.5虚拟目录物理路径指向共享文件夹详解
  6. spring与junit整合测试
  7. 数据结构与算法的联系
  8. SpringBoot 计划任务
  9. js关于字面量与构造函数创建对象的几点理解
  10. GO语言练习:网络编程 ICMP 示例
  11. java ing印版_Java TCP实现高仿版QQ聊天(二)
  12. Ubuntu下安装Hadoop
  13. linux shell 学习时遇到的一些问题([: 11: y: unexpected operator)
  14. vs2019 + vcpkg安装OpenSSL
  15. 东鹏饮料,有点“上头”
  16. 什么是主数据?有什么作用?
  17. 英语专业转行计算机可以吗,英语专业转行学IT,从“小白”到月薪10k+,她做到了!...
  18. 水仙花数有哪些?要100到1000之间所有的水仙花数
  19. python display 报错_Python中的函数(三)
  20. 一位年薪 180 万的蚂蚁金服大佬扔给我的笔记,建议看完

热门文章

  1. 同济大学软件学院万院长谈择业 [zt]
  2. 使用AT command 在ios平台显示耳机电量
  3. java 正则对象_网络编程Java 使用正则表达式对象实现正则的获取功能
  4. python灰产_Python学习一周有感
  5. PR2019 (四)还好
  6. HTML轴线怎么设置,cad怎么设置轴线
  7. knn算法python代码iris_KNN算法原理及代码实现
  8. 各种手机处理器排行榜_求手机处理器排行表,有哪些比较推荐?
  9. 好舒服的成都的夏日夜晚
  10. 华为手机的分类有何区别_华为手机的各个系列有什么不同?