1.12宏命令基础教学(更新V1.02)

一些相关攻略都可以发到这里
版面规则
本版只能发攻略相关的帖子,无关帖子一律删除
回复
头像
facqou
帖子: 236
注册时间: 2017年11月 27日, 10:19

1.12宏命令基础教学(更新V1.02)

帖子 facqou » 2017年12月 20日, 10:42

前言
因被老G的公益行为所感动,并致12年前的青春,在官服决定开放怀旧服之际,决定写下本《宏基础教学》来支持公益与情怀。同时感谢所有在本文档编著中帮助过的作者的朋友以及所有参考文档的作者们!
“枪是无罪的,有罪的是扣动扳机的人”。写此教程目的是60年代繁琐的技能列表,为了完善游戏体验,帮助PvE玩家解放双手降低错误而写。我不期望我的宏被用在大号虐杀小号、群号围殴单号上。当然宏并不是万能的,码农们都知道代码不可能没有bug。我们要做的是尽可能在完善的条件下达到最顺畅的技能输出。一般情况下,宏将3个以内的技能捆绑一起并通过相应的判断条件有限释放。会有人可否一键全技能,答案虽然是肯定的,但需要臃肿的代码量来支持,复杂的条件判断及循环增加了巨大的开发和维护成本,不一定能带来流畅的体验。所以请根据实际情况在最性价比的情况下编写实用的宏命令。
因本教学手册编写仓促,还有很多的API函数未列式解释。其余相关扩展待日后更新,如有需要还请自行验证。同时希望大家对不足之处提出宝贵建议指正,也可将未解释部分提供解析内容,非常感谢!


目录
一、支持插件
二、Lua语句
2.1 Lua简介
2.2 语法测试环境配置
2.2.1 编译软件部署
2.2.2 Lua编译器与编译软件关联
2.3 Lua基础语法
2.3.1 数据类型
2.3.2 变量
2.3.3 循环
2.3.4 流控制
2.3.5 运算符
2.3.6 函数
2.3.6.1 动作条定义
2.3.6.2 姿态定义
2.3.6.3 动作条
2.3.6.4 增益Buff/减益Debuff
2.3.6.5 宠物
2.3.6.6 法术技能
2.3.6.7 单位
2.3.6.8 针对目标
三、实例分析
战士
圣骑
猎人
萨满
盗贼
小德
术士
法师
牧师
其他
四、备注与附件


变更记录
版本号 更新日期 描述
1.0 20171220 初稿定稿。确定手册基础架构与内容。
1.02 20180112 新增“人物装备定义”索引,装备、背包部分函数。


一、 支持插件
“工欲善其事,必先利其器”。众所周知,早起的wow版本中blz开放了大量的API,为玩家带来了各种便利。但又因为某些原因这些api并不能非常好的应用到一起。所以推荐几款非常不错的宏插件,它们可以让这些API结合的无比强大。
未避免涉及文档著作权等问题,这里只简略表述其功能,并附上附件。详情请自行搜索。
1)supermacro 超级宏——支持2000字节的宏语句。官方开放的宏长度只有250字节,足足翻了8倍。下图显示7000字节,LZ没验证。
附件:因附件数量限制,放于最后。
2)Buff&Debuff函数——将原有的buff/debuff判断语句精简到只需要一个函数上。大大节省宏长度
附件:因附件数量限制,放于最后。
3)CleverMacro——支持WOW2.0的api使用在1.12版本上。2.0开放的API请自行搜索。
附件:因附件数量限制,放于最后。
图样,红框表示“Buff&Debuff函数”应用
9.jpg
9.jpg (90.38 KiB) 查看 5415 次
二、 Lua语句
2.1 Lua简介

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
顺带提下《魔兽世界编程宝典--World of Warcraft Addons完全参考手册》,这本书详细编写了WOW中所包含的宏命令编写及插件制作,有兴趣的同学可以自行学习。附件中提供译本下载。因附件数量限制,放于最后。
本教程针对初学者,综合上述内容并精简。提供基础Lua语法及技能类API知识。进阶学习者可参照附件文档或自行搜索深入内容。

2.2 语法测试环境配置
2.2.1 编译软件部署

感谢”BL-ZS-怪兽”同学提供建议使用Sublime_Text3来编译Lua语法验证语句是否存在错误。
下载地址:因附件数量限制,放于最后。
解压即可,双击打开
1.jpg
1.jpg (3.21 KiB) 查看 5534 次
,弹出界面如下(作者已经安装相关插件,原始是英文界面。以下操作均以中文称呼,请自行翻译):
2.jpg
2.jpg (52.1 KiB) 查看 5534 次
点击工具栏“工具”,选择“命令面板”,选择上图红框,在新窗口中输入“localization”,会弹出中文插件,选择安装即可(作者已安装故不再显示)。安装完毕后自动更新至中文界面。
3.jpg
3.jpg (32.7 KiB) 查看 5534 次
重复“install package”操作,输入LuaFormat,并自行安装。安装完毕后可以再“工具”-“编译系统”中查看是否有Lua编译确认安装成功。
4.jpg
4.jpg (47.67 KiB) 查看 5534 次
2.2.2 Lua编译器与编译软件关联
Lua编译器,类似Java的JDK,用以系统识别其语言。这类往上有很多教材,不作累述。
附件提供下载:
需配置环境变量。如下图在Path变量下增加编译器路径,确认退出即可。
5.jpg
5.jpg (47.06 KiB) 查看 5534 次
通过cmd命令提示符窗口,验证Lua编译器部署成功。
6.jpg
6.jpg (25.11 KiB) 查看 5534 次
打开sublime_text3编译工具,菜单中的“工具->编译系统->新编译系统”来新建一个编译系统配置文件,在配置文件中使用下面的配置代码覆盖:
{
"cmd": ["$lua编译器路径/$lua文件名.exe", "$file"],
"file_regex": "^(?:lua:)?[\t ](...*?):([0-9]*):?([0-9]*)",
"selector": "source.lua"
}
注意红色部分需要根据实际环境修改调整(即环境变量配置路径,并增加编译器文件名),斜杠符号为“/”,非window默认斜杠。保存退出。
新建文件,输入Lua语句,保存时注意以“.lua”后缀名结尾,如下图。
7.jpg
7.jpg (98.12 KiB) 查看 5534 次
保存后,界面中按“F7”运行,下框正常打印,表示关联部署正常。
8.jpg
8.jpg (44.74 KiB) 查看 5534 次
上次由 facqou 在 2018年1月 12日, 14:38,总共编辑 25 次。
YOU ARE NOT PERPARE!
伦鲁迪洛尔,上古守护者的长弓(1/1)
断牙(1/1)

头像
facqou
帖子: 236
注册时间: 2017年11月 27日, 10:19

1.12宏命令基础教学

帖子 facqou » 2017年12月 20日, 10:42

2.3 Lua基础语法
切入正题,本节开始正式讨论Lua语法。以宏常用的数据类型、变量、循环、流控制运算符几个点分别讲解。

2.3.1 数据类型
常见宏命令中的数据类型:
数据类型 描述
nil 仅此一值,表示无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true,非正即负。
number 表示双精度类型的实浮点数,简单理解数字。如:1、2、3、4等。
string 字符串,有双引号或单引号表示。如:“魔兽世界”,’魔兽争霸’。
function 函数,这里即WOW-API。如:IsUsableAction()。
还有一种数据类型,即:数组,是值相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组。如:{“魔兽世界”,“魔兽争霸”},表示2个字符串类型的数组。
另关于字符串的详细定义使用及转义字符,请自行搜索学习。

2.3.2 变量
变量在使用前,必须在代码中进行声明,即创建该变量。编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。
Lua 变量有三种类型:全局变量、局部变量、表中的域。Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束。变量的默认值均为 nil。
而在宏命令中,最常见是局部变量,开头以local定义,后面一串即为所声明的变量与其赋值。
上面代码中,分别定义5个局部变量。其中a,b分别为2个数组,a表示数字类型的数组;b表示字符串类型数组。C表示字符串。i和j则为赋值,即默认值nil。

2.3.3 循环
一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。
循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。

常见循环类型
循环类型 描述
while 在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true
for 重复执行指定语句,重复次数可在 for 语句中控制。

循环控制
循环控制语句用于控制程序的流程, 以实现程序的各种结构方式。
控制语句 描述
break 退出当前循环或语句,并开始脚本执行紧接着的语句。

语法实例:
for i=$初始次数,$循环次数,$增长次数 do
<执行题>
end


2.3.4 流控制
流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。

常见流程控制语句
语句 表述
if if 语句 由一个布尔表达式作为条件判断,其后紧跟其他语句组成。
if……else if 语句 可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码

语法实例,结合循环控制语句与运算符:
9.jpg
9.jpg (52 KiB) 查看 5473 次
2.3.5 运算符
运算符,大家并不陌生。不同语言之间大同小异。主要分4类:算术运算符、关系运算符、逻辑运算符、其他运算符。
操作运算符:
运算符 描述 实例
+ 加
- 减、负号
* 乘
/ 除
% 取余 11%10=1
^ 乘幂 10^2=100

关系运算符:
运算符 描述 实例
== 等于,检测两个值是否相等,相等返回 true,否则返回 false 10==20为false
~= 不等于,检测两个值是否相等,相等返回 false,否则返回 true 10~=20为true
> 大于,如果左边的值大于右边的值,返回 true,否则返回 false 10>20为false
< 小于,如果左边的值大于右边的值,返回 false,否则返回 true 10<20为true
>= 大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false 10>=20为false
<= 小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false 10<=20为true

逻辑运算符:
运算符 描述 实例
and 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。 True and false 为false
or 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。 True or false 为true
not 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。 Not(True and false) 为false

其他运算符
运算符 描述 实例
.. 连接两个字符串 a..b ,其中 a 为 "Hello " , b 为 "World", 输出结果为 "Hello World"。
# 一元运算符,返回字符串长度 #"Hello" 返回 5

运算符优先级
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
从高到低顺序。
上次由 facqou 在 2017年12月 25日, 15:25,总共编辑 4 次。
YOU ARE NOT PERPARE!
伦鲁迪洛尔,上古守护者的长弓(1/1)
断牙(1/1)

头像
facqou
帖子: 236
注册时间: 2017年11月 27日, 10:19

1.12宏命令基础教学

帖子 facqou » 2017年12月 20日, 10:42

2.3.6 函数
函数,绝大多数指的是玻璃渣给wow提供的API接口。因能力有限,本教程仅提供下面几种API常用接口,并简单描述其所需传参及返回值:动作条(Action)、Buff/Debuff、宠物技能(Pet)、法术(Spell)、单位(Unit)、目标(Targeting)清单,更详细的 API函数请通过:http://wowwiki.wikia.com/index.php/Worl ... ft_API访问查询
另外有些函数前有“Protected”标识,其标识受保护,主要定义为API或插件函数不可调用。
先将一些传参定义解释下,便于更好的理解相关的API含义。
动作条
slots即动作条id。[/b]从1.11开始,魔兽世界允许120个动作条ID,编号从1-120。 ID 1-72用于六个默认栏(见下面的按钮范围)。某些特殊姿态使用ID 73-120。
默认动作条id:
主动作条 1:1 - 12
主动作条 2:13 - 24
右动作条 1:25 - 36
右动作条 2:37 - 48
右下动作条:49 - 60
左下动作条:61 - 72

战士姿态动作条
战斗姿态动作条:73 - 84
防御姿态动作条:85 - 96
狂暴姿态动作条:97 - 108

德鲁伊姿态动作条
猫形态:73 - 84
潜行形态:85 - 96
熊形态:97 - 108
咕咕卖萌:109 - 120

盗贼姿态动作条
潜行形态:73 - 84

牧师姿态动作条
暗影形态:73 - 84

目标拥有的动作条
ActionBar page 1 Possess: slots 121-132

姿态索引
在CastShapeshiftForm函数中使用,定义不同职业的姿态或光环。
战士:1战斗姿态、2防御姿态、3狂暴姿态。
德鲁伊:1熊形态、2海狗形态、3猫形态、4旅行形态、5咕咕形态、6树形态。
盗贼:1潜行状态。
神圣牧师:
圣骑士:1牺牲光环、2惩戒光环、3虔诚光环、4暗影抗光环、5冰抗光环、6火抗光环、7十字军光环。


人物装备界面定义
人物界面解释 索引名称(中文参数暂无) 索引编号
弹药栏 AmmoSlot(大灾变移除) 0
头部 HeadSlot 1
项链 NeckSlot 2
肩膀 ShoulderSlot 3
衬衫 ShirtSlot 4
胸甲 ChestSlot 5
腰带 WaistSlot 6
腿部 LegsSlot 7
脚 FeetSlot 8
护腕 WristSlot 9
手套 HandsSlot 10
戒指0(不知道为什么从0开始) Finger0Slot 11
戒指1 Finger1Slot 12
饰品0(不知道为什么从0开始) Trinket0Slot 13
饰品1(不知道为什么从0开始) Trinket1Slot 14
背部 BackSlot 15
主手武器 MainHandSlot 16
副手武器 SecondaryHandSlot 17
远程武器(投掷武器)/魔杖 RangedSlot(大灾变移除) 18
战袍 TabardSlot 19
第一个背包(背包栏最右位,通常为初始背包) Bag0Slot 20
第二个背包 Bag1Slot 21
第三个背包 Bag2Slot 22
第四个背包(背包栏最左位) Bag3Slot 23
注:背包栏编号和后续背包编号易混淆,后续再背包的函数定义中详细解释。


动作条
ActionHasRange(slot)
传参:动作条id,单数字或数字数组。
返回:布尔类型“是“或”否”
作用:确定指定的操作是否是范围限制。
备注:

GetActionCooldown(slot)
传参:动作条id,单数字或数字数组。
返回:返回指定动作栏冷却时间。
作用:判断动作条中技能是否已冷却(等于0)。
备注:

IsActionInRange(slot,[unit])
传参:第一位参数为动作条id,单数字或数字数组;第二位参数为单位。
返回:1 =是,0 =否,nil =不适用。
作用:判断动作条技能是否在使用范围内。
备注:

IsAttackAction(slot)
传参:动作条id,单数字或数字数组。
返回:是返回1,否返回0,nil为不适用。
作用:判断动作条技能是不是攻击技能。
备注:

IsUsableAction(slot)
传参:动作条id,单数字或数字数组。
返回:1或0。1表示可用,0表示不可用或没有足够蓝。
作用:判断动作条中技能是否可用。
备注:

PetHasActionBar()
传参:
返回:
作用:确定玩家是否拥有带有动作栏的宠物。
备注:

StopAttack()
传参:
返回:
作用:如果当前处于攻击状态,则关闭自动攻击。
备注:

IsCurrentAction(actionSlot)
传参:动作条id
返回:1标志正在释放,否则nil。
作用:确认某个动作条正在运行。
备注:


增益Buff/减益Debuff
UnitAura("unit", index or "buffName" [,filter]) - Returns information about a buff/debuff of a certain unit. 返回关于某个单位的buff / debuff的信息。
传参:第一位参数为目标(字符串类型),如“player”或“target” ;第二位参数代表需要游历的数(数字类型),最大40;第三位为过滤条件,这个可以是“HELPFUL”,“HARMFUL”,“PLAYER”,“RAID”,“CANCELABLE”,“NOT_CANCELABLE”中的任何一个。也可以指定由|分隔的多个过滤器或空格字符链接多个过滤器(例如“有益的RAID”或“有益的RAID”==有用的增益,你可以在你的RAID上施放)。默认情况下UnitAura具有“HELPFUL”作为一个隐式过滤器你不能同时返回有用和有害的。对于UnitBuff / UnitDebuff,“HELPFUL”或“HARMFUL”都没有意义,将被忽略。
返回:返回的类型很多,如“技能名”、“法术效果等级”、“建议效果次数”、“持续时间”、“debuff”类型等
作用:查询单位增益和减益情况。

UnitBuff("unit", index or "buffName" [,castable])
传参:同上。
返回:同上。
作用:同上。
备注:

UnitDebuff("unit", index or "buffName" [,removable])
传参:同上。多一个若玩家可移除debuff返回1。
返回:同上。
作用:同上。
备注:


宠物
PROTECTED CastPetAction(index,[unitid])
传参:宠物技能id索引值,unitid表示可选的宠物id
返回:
作用:施放相应的宠物技能。
备注:《U r not perpare》版本可用。

GetPetActionCooldown(index)
传参:与玩家冷却函数一致。
返回:与玩家冷却函数一致。
作用:在指定的宠物动作条插槽中返回宠物动作的冷却时间信息。
备注:《U r not perpare》版本可用。

PROTECTED PetAggressiveMode()
传参:
返回:
作用:设置你的宠物为“进攻”模式。
备注:《U r not perpare》版本可用。

PROTECTED PetAttack()
传参:
返回:
作用: 使你的宝宝攻击目标。
备注:

IsPetAttackActive() - Returns true if the pet is currently attacking. 如果宠物目前正在攻击,则返回true。
传参:
返回:攻击状态true,否则false
作用:判断宠物当前是否正在攻击。
备注:

PetStopAttack() - Stop the attack of the pet. 停止宠物的攻击。
传参:
返回:
作用: 使你的宝宝停止攻击。
备注:

PROTECTED PetDefensiveMode()
传参:
返回:
作用:设置你的宠物为“防御”模式。
备注:《U r not perpare》版本可用。

PROTECTED PetPassiveMode()
传参:
返回:
作用:设置你的宠物为“被动”模式。
备注:《U r not perpare》版本可用。


法术技能
“spellID”是技能书中的一个索引id。从上到下依次递增,然后从左到右,然后是类别之间。 当玩家学习新的“技能”和“专业”时,法术ID将会改变。

GetShapeshiftFormInfo(index)
传参:姿态值,参见姿态定义。
返回:根据参数按顺序返回:
icon(图标位置和名称)——用于该按钮的图标的位置和名称
name(名称)——返回“姿态或光环”的名称(可选)
active(激活状态)——如果此“姿态或光环”当前处于活动状态,则返回1,否则返回0(可选)。
castable(可释放)——确定如果可释放。
spellId(法术ID)——法术/光环的id。
上面5个返回不同的结果,具体依据其表述作用。
作用:检索当前职业姿态或光环信息。
备注:见下图例子
11.jpg
11.jpg (22.42 KiB) 查看 5119 次
PROTECTED CastShapeshiftForm(index)
传参:姿态参数。
返回:
作用:切换职业姿态。
备注:《U r not perpare》版本可用。

PROTECTED CastSpell(spellID, "bookType")
传参:spellID即法术ID。bookType技能书类型。
返回:
作用:制定某一类型技能数下的某一法术释放。
备注:《U r not perpare》版本可用。

PROTECTED CastSpellByName("name"[, onSelf])
传参:法术名称,不加等级默认最高等级;第2位定义目标,自己、友方、敌方;
返回:
作用:对定义目标释放制定法术。
备注:文档标注TBC可用,但实测1.12兼容。

GetSpellBookItemInfo(spellID, "bookType")
传参:可以单传参法术名(字符串类型),也可以是双传参:技能书索引号,目标;
返回:法术类型(字符串类型,已知值:“SPELL”,“PETACTION”,“FUTURESPELL”,“FLYOUT”);或者法术id。无效则为nil。
作用:返回玩家法术书中法术类型和法术ID。
备注:

GetSpellBookItemName(spellID, "bookType")
传参:可以单传参法术id(与上一条区别,数字类型),也可以是双传参:技能书索引号,目标;
返回:法术类型(字符串类型,已知值:“SPELL”,“PETACTION”,“FUTURESPELL”,“FLYOUT”);或者法术id。无效则为nil。
作用:返回玩家法术书中的法术名称和法术等级。
备注:

GetSpellCooldown(spellName | spellID, "bookType")
传参:可以是字符串类型的“法术名”;可以是数字类型的“法术id”或“技能栏编号”;也可以是法术类型,支持数组传参。
返回:数字类型“开始时间(以秒为单位)”或“持续时间”; 0则表示法术可用;
作用:判断法术是否可用。
备注:

GetTotemInfo(slot)
传参:数字类型的图腾编号:火=1、土=2、水=3、气=4。
返回:是否包中有图腾试剂;当前激活的图腾名称;图腾开始时间;图腾持续时间;
作用:判断关于图腾的信息。
备注:

IsAttackSpell(spell)
传参:法术名称
返回:1为攻击法术
作用:判断是否是攻击法术
备注:

IsPassiveSpell(spellID, "bookType")
传参:法术书索引号,从1开始递增;法术书类型。
返回:1位被动,否则为0
作用:判断法术书中的技能是否是被动技能。
备注:

IsSpellInRange("spellName", [unit])
传参:法术id;法术类型;法术名;目标;
返回:0不再射程内;1射程内;nil为无效目标;
作用:判断目标是否有效,且是否在射程内。
备注:

IsUsableSpell(spell)
传参:法术id;法术类型;法术名;目标;
返回:1为可用;否则为0,法术未学、无法力、未达到条件等均为0;布尔值,法力值过低无法释放为1,否则为0.
作用:法术是否可用。
备注:

UI QueryCastSequence("sequence")
传参:字符串类型,法术、物品的id或索引号。如:reset=1 技能1,技能2,技能3;
返回:
作用:按限定时间,并顺序释放制定法术。等同于CastSequence。
备注:

SpellHasRange()
传参:法术id,法术名。
返回:
作用:判断目标是否在法术范围内。
备注:未验证。

SpellIsTargeting()
传参:
返回:布尔值,如果法术已对指定目标使用,为true,否则为false。
作用:判断技能是否已对制定目标使用。
备注:TBC2.0.1以后不可用。

PROTECTED SpellStopCasting()
传参:
返回:nil未不操作;1表示停止施法。
作用:停止当前施法。
备注:不适用有施法时间技能。
上次由 facqou 在 2018年1月 12日, 14:36,总共编辑 16 次。
YOU ARE NOT PERPARE!
伦鲁迪洛尔,上古守护者的长弓(1/1)
断牙(1/1)

头像
facqou
帖子: 236
注册时间: 2017年11月 27日, 10:19

1.12宏命令基础教学

帖子 facqou » 2017年12月 20日, 10:43

Unit单位
这些是对一个或多个目标单位起作用的功能。 单位由UnitIds标识。

PROTECTED AssistUnit("unit")
传参:目标,即:“player”或“target”。可以使用任何定义的UnitId值。也可以使用AssistUnit(pet)来协助宠物。
返回:nil
作用:指示你的角色帮助指定的单位。
备注:

PROTECTED FocusUnit("unit")
传参:
返回:
作用:设置目标为焦点。
备注:已关闭,但可/RunMacroText("/focus")仍可使用。

PROTECTED ClearFocus()消除您可能设置的任何焦点。
传参:
返回:
作用:消除您可能设置的任何焦点。
备注:已关闭,但/ clearfocus仍然有效。

SpellCanTargetUnit("unit")
传参:目标,即:“player”或“target”。
返回:布尔值
作用:判断法术是否可以对目标释放。可以返回true,否则为否。
备注:同时监控距离,超出则无效。

PROTECTED SpellTargetUnit("unit") - Casts the spell awaiting target selection on the specified unit. 在指定单位施放等待目标选择的法术。
传参:目标,即:“player”或“target”。
返回:
作用:
备注:

PROTECTED TargetUnit("unit")
传参:目标,即:“player”或“target”。
返回:nil
作用:选择指定的单位作为当前目标。
备注:

UnitCanAttack("unit", "otherUnit")
传参:第一个单位unit为发起攻击方,第二个单位otherUnit为被攻击方。
返回:布尔值true为可攻击,否则为false。
作用:判断2单位之间能否攻击。
备注:

UnitCanCooperate("unit", "otherUnit")
传参:第一个单位unit为发起攻击方,第二个单位otherUnit为被攻击方。
返回:布尔值true为可合作,否则为false。
作用:判断2单位是否可合作。
备注:

UnitClass("unit")
传参:目标,即:“player”或“target”。
返回:根据客户端语言返回职业名称。或者发挥职业索引值(数字与含义):0空、1战士、2圣骑、3猎人、4盗贼、5牧师、6死骑、7萨满、8法师、9术士、10武僧、11德鲁伊、12恶魔猎手。
作用:判断指定目标职业。
备注:请根据版本判断。

UnitClassification("unit")
传参:目标,即:“player”或“target”。
返回:字符串,世界boss、稀有精英、精英、稀有、普通等
作用:判断指定目标性质。
备注:

UnitCreatureFamily("unit")
传参:目标,即:“player”或“target”。
返回:字符串,如熊、狼、蜘蛛等。
作用:判断目标类型。
备注:

UnitCreatureType("unit")
传参:目标,即:“player”或“target”。
返回:字符串,如人形、龙、野兽等。
作用:判断目标属性。
备注:

UnitExists("unit")
传参:目标,即:“player”或“target”。
返回:布尔类型,返回1则存在;否则为nil
作用:判断目标是否存在。
备注:

UnitHealth("unit")
传参:目标,即:“player”或“target”。
返回:数字类型,制定目标当前生命值;若为0则表示不存在。
作用:返回指定单位的当前生命值(以分为单位)。
备注:

UnitHealthMax("unit")
传参:目标,即:“player”或“target”。
返回:数字类型,制定目标最大生命值;若为0则表示不存在。
作用:返回指定单位的最大生命值(以分为单位)。
备注:

UnitIsDead("unit")
传参:目标,即:“player”或“target”。
返回:布尔值,单位死亡返回1;否则为0
作用:判断目标是否死亡。
备注:与UnitIsDeadOrGhost("unit")类似。

UnitIsEnemy("unit", "otherUnit")
传参:第一位制定目标,第二位进行比较单位,如(player,target)比较玩家与目标是否敌对。
返回:布尔值。
作用:判断指定的单位是否是敌人,是返回true;否返回false。
备注:

UnitMana("unit")
传参:目标,即:“player”或“target”。
返回:当前目标当前法力/能量/愤怒值。
作用:判断目标当前法力/能量/愤怒值。
备注:3.0.2版本后弃用,由UnitPower取代

UnitManaMax("unit")
传参:目标,即:“player”或“target”。
返回:当前目标最大法力/能量/愤怒值。
作用:判断目标最大法力/能量/愤怒值。
备注:3.0.2版本后弃用,由UnitPowerMax取代

UnitSex("unit") - Returns a code indicating the gender of the specified unit, if known. (1=unknown, 2=male, 3=female) (updated 1.11) 如果已知,则返回指示指定单位的性别的代码。 (1 =未知,2 =男,3 =女)(更新1.11)
传参:目标,即:“player”或“target”。
返回:
作用:
备注:


Targeting 针对目标
PROTECTED AssistUnit("unit")
传参:目标。
返回:nil
作用:协助制定单位或目标。
备注:

PROTECTED AttackTarget()
传参:
返回:
作用:不在近战攻击状态则自动攻击;否则停止攻击。
备注:猎人自动远程攻击使用“/startattack”。

PROTECTED ClearTarget()
传参:
返回:
作用:取消当前选定的目标。
备注:

PROTECTED TargetLastEnemy()
传参:
返回:
作用:选择最后一个目标敌人作为当前目标。
备注:

PROTECTED TargetLastTarget()
传参:
返回:
作用:选择最后一个目标作为当前目标。
备注:

PROTECTED TargetNearestEnemy([reverseFlag])
传参:
返回:
作用:选择最近的敌人作为当前目标。
备注:可理解为“tab”键。

PROTECTED TargetNearestEnemyPlayer([reverseFlag])
传参:
返回:
作用:选择最近的敌方玩家作为当前目标。
备注:

PROTECTED TargetNearestFriend([reverseFlag])
传参:
返回:
作用:选择最近的友军单位作为当前目标。
备注:

PROTECTED TargetNearestFriendPlayer([reverseFlag])
传参:
返回:
作用:选择最近的友方玩家作为当前目标。
备注:

PROTECTED TargetNearestPartyMember()
传参:
返回:
作用:选择最近的公会员作为当前目标。
备注:

PROTECTED TargetNearestRaidMember()
传参:
返回:
作用:选择最近的Raid成员作为当前目标。
备注:


装备
GetInventorySlotInfo(invSlotName)
传参:装备栏索引名称,详见“人物装备界面定义”。
返回:装备栏索引号,纹理名称。
作用:获得指定装备栏信息。
备注:slotId, textureName = GetInventorySlotInfo("slotName")

PickupInventoryItem(invSlot)
传参:装备栏编号,详见“人物装备界面定义”。
返回:
作用:将物品放于人物装备x位置中。
备注:以下实例展示主副手武器互换。
/ script PickupInventoryItem(GetInventorySlotInfo(“MainHandSlot”))
/ script PickupInventoryItem(GetInventorySlotInfo(“SecondaryHandSlot”))

UseInventoryItem(invSlot)
传参:装备栏编号,详见“人物装备界面定义”。
返回:
作用:使用装备栏中指定装备
备注:以下实例展示主使用饰品1号(待确认1.6版本后,无法再没有按键图标情况下激活?)。
/script UseInventoryItem( GetInventorySlotInfo("Trinket0Slot") );

GetInventoryItemLink("unit", slotId)
传参:第一个为目标,如“player”;第二个为装备栏编号。
返回:装备栏物品链接,无装备则返回空。
作用:获得指定装备物品链接。
备注:即按住Shift键并单击“物品”时的itemLink,用以判断装备物品名称、类型、图标、等级等。可以通过GetItemInfo打印。

AutoEquipCursorItem()
传参:
返回:
作用:自动使用光标指定物品。
备注:以下实例展示,使用背包中第一件物品。背包中解释PickupContainerItem。
PickupContainerItem(0,1);
AutoEquipCursorItem();


背包
GetContainerItemLink(bagID, slot)
传参:第一为背包编号,第二为背包格编号。
返回:背包中物品链接
作用:获得背包x中x格物品链接。
备注:类似GetInventoryItemLink

PickupContainerItem(bagID,slot)
传参:第一为背包编号,第二为背包格编号。
返回:
作用:
备注:该函数的行为具体取决于当前在光标上的内容,并有所不同
1)如果当前光标没有任何东西,从背包中拾取一个物品来调用。
2)如果当前光标包含一个物品(使用CursorHasItem()进行检查),则将把当前光标处的物品放入指定的背包槽中。如果背包槽中已经有物品,则交换两个物品。(战士、盗贼自动更换武器)
3)如果光标设置为某种法术或技能(通常是附魔或毒药,请使用SpellIsTargeting()进行检查),则对该背包槽中的物品释放指定的法术或技能。(盗贼自动上毒、猎人自动喂宝宝等)

UseContainerItem(bagId,slot [,onSelf])
传参:第一参数背包id,第二参数背包编号,第三参数布尔值,1表示对自身使用,默认false。
返回:
作用:使用背包中的物品,当购物npc对话框打开时则出售物品(包括银行、邮箱、拍卖行)。书本或任务则打开,容器则打开,装备栏装备,
备注:背包格编号从起始为1,从左至右,从上到下。
上次由 facqou 在 2018年1月 12日, 14:34,总共编辑 8 次。
YOU ARE NOT PERPARE!
伦鲁迪洛尔,上古守护者的长弓(1/1)
断牙(1/1)

头像
facqou
帖子: 236
注册时间: 2017年11月 27日, 10:19

1.12宏命令基础教学

帖子 facqou » 2017年12月 20日, 10:43

4、实例分析
本节整理汇总网上的一些宏加以注释,并根据9种职业分别列式其叫有针对性的宏,来提供大家一些思路和见解从而更深入的了解宏命令的运作和编写。
需要指出,所有宏为了代码工整及注释(重复注释不过多标识)调整了格式,游戏内请删掉回车符及注释。同时部分宏没有验证,还请同学们指出错误,便于修改。

宏做了word文本框,但论坛不会传,后面随附件一同上传吧。

战士
在当前姿态中判断 “狂暴之怒”是否可用,如果可用则切换姿态并释放;否则则防御姿态,多用于MT在boss释放恐惧时开技能。
zs01.jpg
zs01.jpg (15.87 KiB) 查看 4928 次
打断宏,在狂暴姿态就“拳击”,战斗或者防御姿态就装备盾牌然后“盾击”。注意此处使用了UseAction来关联其他动作。
zs02.jpg
zs02.jpg (21.44 KiB) 查看 4928 次
群拉宏,判断当前姿态是不是战斗,是释放“雷霆”;否则“旋风斩”。
zs03.jpg
zs03.jpg (8.05 KiB) 查看 4928 次
圣骑
当目标生命值小于25%,释放圣疗并团队喊话,否则使用圣光术;
qs04.jpg
qs04.jpg (8.21 KiB) 查看 4928 次
惩戒骑若点出命令圣印后的技能循环:十字军圣印、审判、命令圣印,同时并循环,可以做成一键宏重复按1个键。


猎人
近战一键宏,以“摔绊”>“猫鼬撕咬”>“猛禽一击”的优先顺序释放。当然如果点出“反击”,则调整a、b、j三个变量的申明,动作条增加反击按钮即可,正题语句框架不变。(需要Buff\Debuff判断函数)
lr05.jpg
lr05.jpg (21.38 KiB) 查看 4928 次
姿态切换,以“灵猴”切换“雄鹰”为例,反复按即来回切换。
lr06.jpg
lr06.jpg (12.13 KiB) 查看 4928 次
若使用“Buff\Debuff判断函数”,则代码如下,可以看出代码量骤减。
/script
local c=CastSpellByName;
if IsBuffActive(“灵猴守护”,"player") then c("雄鹰守护");--如果f=1,则切换为雄鹰。
else c("灵猴守护");--否则灵猴。
end;


起手攻击宏
lr08.jpg
lr08.jpg (9.41 KiB) 查看 4928 次
抓贼宏,判断目标存不存在,有则猎人印记,否则照明弹。可以与起手攻击宏绑定一键。
lr09.jpg
lr09.jpg (7.26 KiB) 查看 4928 次
智能钉刺,判断玩家或npc,针对玩家属性释放钉刺。
lr10.jpg
lr10.jpg (20.01 KiB) 查看 4928 次
收宝宝,假死,冰冻陷阱,一键宏。
lr11.jpg
lr11.jpg (10.98 KiB) 查看 4926 次
宁神射击,并喊话。
/script
local c,b,a=CastSpellByName,IsBuffActive,GetActionCooldown;
if(a(26)==0) then c("宁神射击"); --“宁神射击”放在动作栏26格
else if b("狂暴XX","target") then SendChatMessage("宁神射击被抵抗,下一个补上"); --“狂暴xx”根据实际情况填写目标buff
else SendChatMessage("成功消除BOSS狂暴,下一个准备");
end;
end;
上次由 facqou 在 2018年1月 10日, 21:33,总共编辑 10 次。
YOU ARE NOT PERPARE!
伦鲁迪洛尔,上古守护者的长弓(1/1)
断牙(1/1)

头像
facqou
帖子: 236
注册时间: 2017年11月 27日, 10:19

1.12宏命令基础教学

帖子 facqou » 2017年12月 20日, 10:44

萨满
不才,无可推荐。

盗贼
战斗天赋一键宏,5星输出技能可根据实际调整。
01dz.jpg
01dz.jpg (22.26 KiB) 查看 4740 次
小德
一键变熊后冲锋
02xd.jpg
02xd.jpg (9.02 KiB) 查看 4740 次


术士
一键3DOT宏,需要注意当前版本无法判断目标身上的duff是队友还是自身释放,若目标已有dot则无法释放对应dot
03ss01.jpg
03ss01.jpg (17.18 KiB) 查看 4740 次
燃烧军团最强连招
04ss02.jpg
04ss02.jpg (10.07 KiB) 查看 4740 次
搭配判断目标生物类型宏,再特定时候更有效率。
05ss03.jpg
05ss03.jpg (10.84 KiB) 查看 4740 次
恶魔支配可用情况下的恶魔术快速召唤蓝胖子。
06ss04.jpg
06ss04.jpg (10.86 KiB) 查看 4740 次
恶魔猎犬智能吞噬魔法。优先自身debuff,再目标buff。
07ss05.jpg
07ss05.jpg (10.61 KiB) 查看 4740 次

法师
冰箱宏。冰箱可用则用,不能则急速冷却在冰箱。
08fs01.jpg
08fs01.jpg (17.29 KiB) 查看 4740 次
一键自动buff
09fs02.jpg
09fs02.jpg (18.03 KiB) 查看 4740 次
队友敌对后变羊喊话
10fs03.jpg
10fs03.jpg (17.32 KiB) 查看 4739 次
指向变羊
上次由 facqou 在 2018年1月 08日, 14:01,总共编辑 4 次。
YOU ARE NOT PERPARE!
伦鲁迪洛尔,上古守护者的长弓(1/1)
断牙(1/1)

头像
facqou
帖子: 236
注册时间: 2017年11月 27日, 10:19

1.12宏命令基础教学

帖子 facqou » 2017年12月 20日, 10:44

指向变羊
11fs04.jpg
11fs04.jpg (11.5 KiB) 查看 4736 次
牧师
驱散自身debuff,否则对目标驱散。
MS01.jpg
MS01.jpg (9.3 KiB) 查看 4737 次
一键buff
MS02.jpg
MS02.jpg (20.53 KiB) 查看 4737 次
非暗影形态使用治疗魔法动作条;暗影形态使用攻击魔法动作条。
MS03.jpg
MS03.jpg (19.61 KiB) 查看 4737 次

其他
重置副本
/run ResetInstances()

视角控制
/console CameradistanceMaxFactor 50; --50表示距离

铁皮手雷
tp.jpg
tp.jpg (27.77 KiB) 查看 4729 次

文档原稿(update20180108)
112marco(update20180108).rar
(1.19 MiB) 下载 56 次
上次由 facqou 在 2018年1月 08日, 14:20,总共编辑 7 次。
YOU ARE NOT PERPARE!
伦鲁迪洛尔,上古守护者的长弓(1/1)
断牙(1/1)

头像
facqou
帖子: 236
注册时间: 2017年11月 27日, 10:19

1.12宏命令基础教学

帖子 facqou » 2017年12月 20日, 10:49

5、附件与备注
5.1编译工具
Lua-wow编译器:
lua-wow-1.12.zip
(287.83 KiB) 下载 35 次
Sublime编译工具:
Sublime Text Build 3143 x64.zip
(10.46 MiB) 下载 23 次
5.2插件附件
插件请自行搜索更新版本。
SuperMacro超级宏插件:
SuperMacro.rar
(39.67 KiB) 下载 43 次
IsBuffActive函数宏:
IsBuffActive BUFF&Debuff判断函数.zip
(1.68 KiB) 下载 41 次
CleverMacro扩展宏:
CleverMacro扩展宏插件.rar
(7.66 KiB) 下载 36 次
目前会导致综合聊天框刷屏

5.3扩展阅读
魔兽世界编程宝典(因上传原因分压为4卷):
上次由 facqou 在 2018年1月 08日, 14:00,总共编辑 3 次。
YOU ARE NOT PERPARE!
伦鲁迪洛尔,上古守护者的长弓(1/1)
断牙(1/1)

暗影土豆
帖子: 19
注册时间: 2017年12月 12日, 08:07

Re: 1.12宏命令基础教学(施工ing)

帖子 暗影土豆 » 2017年12月 21日, 22:40

楼主程序猿吧。。

头像
facqou
帖子: 236
注册时间: 2017年11月 27日, 10:19

Re: 1.12宏命令基础教学(施工ing)

帖子 facqou » 2017年12月 22日, 14:33

暗影土豆 写了:
2017年12月 21日, 22:40
楼主程序猿吧。。
只是个it :D
YOU ARE NOT PERPARE!
伦鲁迪洛尔,上古守护者的长弓(1/1)
断牙(1/1)

回复