2.0 宏的基础知识
2.0.0 宏是什么?
简而言之,宏(marco)就是一个使用blizzard预先设置好的一系列命令或函数来实现一个有限的功能。
最强大的莫过于可以实现条件判断。
******** ********** ************** *************
2.0.1 宏是否合法?用宏会被封号么?
请注意2.0.0回答里面红色的部分,既然使用blizzard预先设置好的一系列命令或函数,哪还会不合法么?
******** ********** ************** *************
2.0.2 宏的运行机制是怎样的
事实上,宏里面的所有语句都是在同一时间被当成是一个整体同时运行的,而不是一行接着一行像我们想象的那样运行
其实世界上没有一台电脑可以把所有代码当作一个整体来执行即使看上去是那样的,电脑都是按顺序执行的。
上面的意思就是说宏不会在等第一行执行完以后再去执行第二行,第二行和第三行之间也是一样。中间是不停顿的,所以看上去就像被当作一个整体去执行。
******** ********** ************** *************
2.0.3 如何使得我的宏施展出来的时候可以自动说对象的名字?
%t这个变量可以使得你的宏说出你所选择的对象的名字,比如
/说 你好啊,%t
当你选择 梦幻飞天无敌小猪 这个玩家的时候,使用这个宏,结果就是
你说: 你好啊, 梦幻飞天无敌小猪
******** ********** ************** *************
2.0.4 宏的数量有限制么?
每个角色只能建立18个marco。而且就我所知不可以超过18。
******** ********** ************** *************
2.0.5 宏里面如何选定队友,自己或者敌人?
宏里面每个角色都是有代号的,现列举如下:
"player" 玩家自己
"pet" 玩家的宠物
"party1" 1号队友
"party2" 2号队友
......
"partypetN" 第N个队友的宠物 (N 可以是 1,2,3, or 4) (1.5.0新加,国服暂时没有)
"raidN" 第N个团队伙伴 (N 可以是 1,2,3,...,40)
"raidpetN" 第N个团队伙伴的宠物 (N 可以是 1,2,3,...,40) (1.5.0新加,国服暂时没有)
"target" 被选中的目标
"mouseover" 鼠标正在划过或刚刚划过的目标
下面的值只能用于一些特殊场合:
"npc" or "NPC" 玩家正在与之交互的NPC
比如说需要引用2号队友的生命值,就用 UnitHealth("party2") 就可以了
******** ********** ************** *************
2.0.6 宏的写作有什么格式?
你可以使用给定的命令去完成一个宏,比如/说,/施放
这些都是有英文的,比如上面两个,你可以写成/say,/cast
有的可以简写成 /say 写成 /s
当你要用到函数的时候(一般后面会有一个括号,比如UnitMana()),需要用 /script 开头。
比如释放一个技能,你可以写成 /cast 真言术:盾(等级1) ; 也可以写成 /script CastSpellByName("真言术:盾(等级1)")
******** ********** ************** *************
2.1~2.2 实际使用方面的疑难
2.1.0 我如何在一个宏里释放法术?
使用 /施放 这个命令。 例如 /施放 恢复(等级1)
最简单的在你的宏里面写入正确技能的方法是,当你编辑一个宏的时候打开你的 技能窗口,然后shift+左键点击相应技能。这样就会自动在宏编辑窗口里面添加 /施放 你选择的技能
******** ********** ************** *************
2.1.1 我能否在一个宏里面使用很多技能?比如说(牧师为例)一个 MB,一个Pain,再来一个MF
不可以!原因是宏是不可以延迟的!但是你施放一个法术以后再施放一个法术,你必须等待其间的公共冷却时间(1.2秒~1.5秒)结束以后,才可以施展第二个法术。
不过你仍然可以做一些不需要等待的事情。比如,施放一个法术然后进行攻击。或者使用物品(只要他们有独立的冷却时间)
不过你仍然不可以做两个之间需要等待的动作!
当然你会说,如果我要使用的第一个技能是瞬法法术,没有公共冷却时间呢?
告诉你,结果是,仍然不可以!哈哈
附录:
再扩展一点点
(1)会触发公共冷却时间的技能:
释放一个法术或者技能
(2)不会触发公共冷却时间的技能:
在聊天窗口里面说话
进入攻击模式
命令你的宠物攻击
使用一个物品
宏只可以做第一个列表里面的一件事,但是却可以做很多第二个列表里面的事情
2.2.4里面有关于这个问题更详细的解释
******** ********** ************** *************
2.1.2 我如何设定一个宏或者一段脚本使得当我遇到什么情况的时候自动施展技能?
你不可以!现在的wow里没有办法自动施展法术或技能。你只能在触发一个硬件事件(hardware event)的时候才可以施展一个技能,(比如说,鼠标键被按下或者键盘上某个按键被按下)。此外,这个hardware event必须触发一个法术或者技能,否则也无法释放。
你可以尝试使用在一段时间以后使用CastSpellByName()去释放法术,但是这个法术不会被释放。
******** ********** ************** *************
2.1.3 我可以在一个宏里等待一小段时间然后再施展宏的剩余部分么?(以及对/in的解释)
不可以,完全不可能。看看2.1.1的解释。
附录:
不过当你安装cosmos(一个著名的国外UI)的时候,你倒是可以的,比如
/in 5
/说 你好,
/说 小猪!
在5秒之后你将会说“你好”。不过你会立刻说“小猪”。
/in 不是一个宏延迟指令,它只是简单的让你在一段时间之后再去施展一个技能。
不过很遗憾的是,你不可以用 /in 去释放一个法术,施展一个技能,或者运行一个宏,这都归咎于2.1.2里面所说的hardware event限定。所以,/in的功能是很有限的,你只能用它去说话,或者使用物品,仅此而已。
我不一开始就说这个命令的原因是因为99%的时候人们都想在宏里来个暂停,以使得它们可以在同一个宏里再释放一个法术,或者换装备然后再使用一个技能。即使用了cosmos的 /in 这些仍然是不可行的!
******** ********** ************** *************
2.1.4 我如何在宏里面使用一个急救绷带?
你如果想给自己使用绷带的话,不用编写宏,直接使用它或者拖进你的动作条里面。
如果你想再做其他一些事情,以下是你所需要的代码
/target 你的名字
/script UseContainerItem(Bag#, Item#);
/script TargetLastEnemy();
bag# (0-4):
是背包(Bag)的编号
背包栏从右到左依次是 4,3,2,1,0
Item# (1-16)
格子编号取决于你的包的大小,一般都是从左往右,从上往下(一行接一行) 比如
6格包
____1 2
3 4 5 6
16格包
1 2 3 4
5 6 7 8
9 ......
******** ********** ************** *************
2.1.5 我可以对我的队友施展一个增益法术而且不失去我当前的目标么?
可以,,,,
只需要简单得这样做:
/施放 真言术:盾(等级 1)
/target 队友的名字
当你在没有选定一个友方目标的时候就施展增益法术的时候,这个技能将会进入 选择模式(注意光标的变化)
下一个选定的命令(/target)(不管是写代码或者按键)告诉这个技能施展在谁的身上。
但是不会改变你的目标!
用另外一种方法来实现:
/target 队友的名字
/施放 真言术:盾(等级 1)
/script LastTarget()
会改变你的目标,进入自动攻击模式而且会使得盗贼失去他们的技能点
******** ********** ************** *************
2.1.6 盗贼如何切换双手武器,比如说从 匕首/匕首 切换到 剑/锤 ?
这里是我的宏(把手上的匕首/匕首 切换到 背包里面的 剑/锤 )
当然,只要是单手武器都可以切换,仅仅是一个位置问题,我们所做的只是从一个地方拿起一个东西和另外一个未知的东西互换位置,而不管它的类型。
这里要用到两个命令:
1. PickupInventoryItem(xx) [从主手武器位置祸福手武器位置一个武器]
2. PickupContainerItem(x, y) [和上面不同之处在于是从背包里面拿]
参数的解释:
1. PickupInventoryItem(xx)
[x填写16代表主手武器位置, 17代表副手武器位置]
2. PickupContainerItem(x, y)
[x 是背包编号。 y代表格子编号。通过写入不同的x,y值,你可以表示不同的物品。]
具体位置和数字的关系请参见2.1.4的解释
宏:
/script PickupInventoryItem(16);
/script PickupContainerItem(0, 1);
/script PickupInventoryItem(17);
/script PickupContainerItem(0, 2);
Enjoy!(2.2.5有这个两个函数使用的另外的一个例子)
******** ********** ************** *************
2.1.7 在一个宏里面如何使我的宠物攻击选定的目标
请使用如下代码:
/script PetAttack();
******** ********** ************** *************
2.1.8 我可以建立一个宏以使用副手武器么?
可以!
/script UseInventoryItem(GetInventorySlotInfo("SecondaryHandSlot"));
这段代码将会激活你所装备的副手武器
******** ********** ************** *************
2.1.9 如何在一个宏里选定队友1或者队友5
/target party1 将会选定1号队友 party2将会选定2号队友,一直到5
party1 就是队友1个代号,可以用在其他任何你想要选中1号队友的指令里面
******** ********** ************** *************
2.2.1 如何在一个宏里面引用目标的各项属性,比如说生命值,法力,性别,等级等等,,,
UnitHealth("unit") 目标生命值(HP)
UnitHealthMax("unit") 目标生命最大值
UnitMana("unit") 目标法力值(mana)
UnitSex("unit") 显示目标的性别(Sex)
UnitLevel("unit") 显示目标的等级(LV)
unit的值请参照2.0.4
其他更多的函数请参考http://www.wowwiki.com/World_of_Warcraft_API
******** ********** ************** *************
2.2.2 我如何协助我的宠物进行攻击?
你可以写一个这样的宏去协助你的宠物
/script AssistUnit("pet");
这个将会锁定你的宠物正在锁定的目标。如果你的宠物没有锁定任何目标,这个宏就会什么也不做。
如果你的宠物死了,你将会受到这个信息“我需要一个目标”
我不喜欢听电脑对我唠叨这句话,所以一个稍微简洁一点的宏是......
/script if UnitExists("pet") then AssistUnit("pet"); end
修正了上面那个缺点,当你使用宏的时候你的宠物已经死了,你也不会收到那条信息。
******** ********** ************** *************
2.2.3 如何协助我的队友进行攻击或者选中我自己?
/script AssistUnit("party2");
这将会协助队伍里的2号队友进行攻击。如果你不在队伍里面你将会受到一条消息“我需要一个目标”
/script AssistUnit("小猪");
这个marco将会协助一个叫做小猪的人进行攻击,如果没有 小猪 这个人,,,,,,
/script TargetUnit("player");
这个宏会选择你自己。当你想对自己施放某个法术的时候就会很有用。
******** ********** ************** *************
2.2.4 我可以用marco从A姿态切换到B姿态,使用B姿态的技能然后再返回A姿态么?
绝对不可以!
已经说了很多次了,我再说一次!
“按一个键,使用一个技能” 这是一个雷打不动的规矩!
违反这个规矩就是外挂功能!
如果你被抓到违反规定,你就会被BAN ACC(封帐号)。
你的宏不工作是因为他根本不应该这样做!
客户端可以很好地制止一部分违反规定的行为。
cosmos提供的 /in 并没有违反规定,因为它不能用于延时去释放一个技能。
以战士的3种姿态来说,姿态切换都是瞬发的,但是都有一个1秒的公共冷却时间。
你不可以用1个键去触发两个技能。
2.1.1里面有关于这个问题更多的解释
******** ********** ************** *************
2.2.5 如何切换身上的装备?
我写了一个marco使得我可以切换我的鞋子。
我有两双鞋子,一双可以加快我的行走速度,一双则用于战斗。
代码是这样的:
/script PickupInventoryItem(8);
/script PickupContainerItem(4,7);
/script UseContainerItem(4,13);
第一个命令,PickupInventoryItem(N),将会定位到你角色装备栏里某个需要切换装备的地方(根据N的取值不同来实现指定不同的位置).而例子里面所使用的8将会告诉电脑我要切换的是脚部的装备.
第二行用到了PickupContainerItem()。这个激活了背包里面所要切换的东西 (我的例子里就是4,13这个地方的装备) 这个例子里面将会和宏里面第一行PickupInevtoryItem(8) 所指定的装备进行切换。
(背包的编号请参见2.1.4)
最后1句话使用了我背包里(4,13)这个位置的一样东西。(Camus注:这个人说是上马)
一个宏就可以实现换鞋子然后上马,不骑马的时候使用一次,就会把鞋子切换回来。
一些注意事项:
(1)你必须把所要切换的东西很精确的放在背包的某个位置,而且不可以却移动它,不然这个宏就不会执行。
(2)当你和一个卖东西的NPC说话的时候,你将会自动下马,你将会穿着你的加速靴下马。换句话说,当你再一次使用这个宏的时候,你将会穿着你的战斗用鞋上马,不过并不像听上去那么糟,你可以再你上马的时候再次使用这个宏,就切换回来了(因为你在上马的时候不会上马)或者你也可以在跑的时候使用一次这个宏,因为跑动的时候也不会上马,你就又会回到一开头的状态了。
2.1.6有这两个函数使用的一个例子。
逸心青 你不懂就不要来乱tie!只会copy别人的答案,根本讲不到重点。
宏里面像你说的那个功能好像是实现不了的,这不是编程,只是实现一些动作和功能的优化和集合,用自己魔法值的改变来判定也不行,五秒规则,五秒之后魔法自己涨,用目标的形态变化来判定,好像没这个函数把。。。也许要装其它的函数库。。。。
我以前也试过类似的宏...
不成功~```
要不就弹错误报告
要不就以说话的方式说出整个宏.......
开始以为是行的问题
最后发现不太好弄的样子
直接放弃了...