魔兽盗贼专属:宏从零基础到精通的进阶之路

宏从入门到精通(盗贼专用)

我一直在看各种各样有关宏的教学内容,可是没有一篇是足够清晰、严谨的。在这些教学当中,对于函数的变量以及函数的作用都未加以说明,宏的语法同样也没有被提及。这样的情况对玩家自行改进宏而言是非常不利的。那些撰写宏教程的人也很令人费解,难道他们都不屑于对语法进行说明吗?又或者是直接从国外网站原封不动地复制过来的呢?嗯,对于大多数人来说,可能不管宏是怎么来的,只要复制下来能使用就万事大吉了……不过我个人很不喜欢这种不求甚解的态度。而且我所见到的大部分拿出来分享给他人使用的宏,按照计算机专业的标准去衡量的话,其代码往往存在冗余的情况。这就代表着效率会有所损失,也就意味着会有短暂的延迟,也许这短暂的瞬间就是生与死的分界线……这篇关于宏的经验文章是写给那些想要更多地了解宏知识的玩家的,如果是不想自己动手编写宏的玩家就不必继续往下看了。

一、宏的基本常识

宏其实是一个脚本,这个脚本会被发送到服务器端去执行。它是由一组命令序列组成的,这个序列的长度不会超过255个字符。在这个序列里的每一个命令,都是由一个“/”开始的。

《盗贼专属:宏从零基础到精通的进阶之路》

开头部分,像/say、/script之类的。在/script之后会跟着脚本特有的语句以及函数。在一个脚本当中,你能够罗列多个/script命令,而且也可以在一个/script命令里写入多个函数,这都是可行的。由于宏是按照顺序去执行所有的命令,所以没必要在宏的最后添加end标记,或者在命令之间加上分号(;)。实际上,end标记是属于if语句的一部分,只有在编写if语句的时候才会用到end这个关键字。命令与命令之间,使用换行或者分号(;)来隔开都是可以的,我更倾向于使用换行,哈哈,这样能够省去不必要的分号(;),代码看起来也更加清晰。下面是常用的if语句语法:/script

在脚本编写过程中,这些规则是非常重要的基础内容。它们能够帮助编写者更加高效、准确地构建脚本。比如说,理解宏的执行方式,就可以避免在不必要的地方添加多余的标记,从而减少错误的产生。对于命令之间的分隔方式,不同的人可以根据自己的习惯来选择,无论是换行还是分号(;),只要能保证脚本的正确运行就好。而对于if语句中end标记的使用,明确其使用场景,有助于准确地编写条件判断部分的代码。这一系列的规则,就像是构建脚本大厦的基石,只有基石稳固,才能构建出功能完善、逻辑严谨的脚本。

在WOW(《魔兽世界》)的宏命令编写中,有这样的语法形式:如果[条件表达式],那么就执行[命令序列],最后以“end”结束;或者写成/script如果[条件表达式],那么执行[命令序列1],否则就执行[命令序列2],同样以“end”结束。这里要注意的是,它的条件表达式不需要像在C、Java语言中那样在外面套括号,这么设计可能是为了减少字符数量,毕竟WOW宏是有长度限制的。

在条件表达式里,判断相等的时候使用“==”,表示否定的时候则使用“not”。如果要表示不等于,可以写成“not (A == B)”,暴雪没有提供像“!= ”这样常见的不等于符号,这一点有些奇怪。例如:当写“if sword”这种形式的时候……

如果“GetInventoryItemLink("player", 16)”成立的话……如果(“sword”不等于“GetInventoryItemLink("player", 16)”)(这里要说明一下,“sword”是一个全局变量,每个全局变量的生命周期是从在一次登录中声明变量开始,一直到退出魔兽游戏结束,通常在每次登录之后,会额外运行一个设定宏来设置我们所需的全局变量),那么……

注2:“GetInventoryItemLink()”是一个用于获取装备链接(link)的函数,“GetInventoryItemLink("player",……”

(number)是一个用于从人物身上获取装备的链接(link),这里的number表示人物装备画面中的不同槽位,按照头部、颈部这样的顺序依次递增,例如16代表主手武器,17代表副手武器。那么GetInventoryItemLink("player", 16)就表示主手武器的链接了。

关于盗贼专用宏的编制思路,实际上使用宏的目的就是为了切换武器,从而既能不放弃匕首的背刺和伏击技能,又能使用高攻击力的单手剑,这样就可以达到两全其美的效果。通常有两种风格的切换宏:第一种是主手装备剑、副手装备匕首,在使用背刺、伏击技能时将匕首切换到主手,而使用其他技能时则把剑切换到主手;第二种是主手和副手都装备剑,在背包里放置一把匕首,当使用背刺、伏击技能时,把背包里的匕首切换到主手,使用其他技能时再把剑换回来。前面那种方案中用于切换武器的宏如下:PickupInventoryItem(16)。

盗贼在战斗中,武器的选择和切换对于战斗的胜负有着重要的影响。不同的武器在不同的技能使用下有着不同的效果,比如匕首在背刺和伏击技能下能够发挥独特的优势,而单手剑在其他一些常规技能的使用中可能有着更高的攻击力输出。这就使得盗贼玩家需要精心编制宏来满足战斗中的各种需求,以便在战斗中能够迅速、灵活地切换武器,适应不同的战斗情况。而这些宏的编制,也体现了盗贼玩家对于游戏战斗机制的深入理解和巧妙运用。

PickupInventoryItem(17),大家应该还有印象吧,16是代表主手武器的,而17呢,则代表副手武器。PickupInventoryItem的作用啊,就类似于打开人物装备面板(Inventory,按下C键就能打开),去点击与数字相对应位置的操作。这个宏其实很容易理解,是点击主手武器,这个时候鼠标上就会出现主手武器了,接着再点击副手武器,这样一来,两把武器就会进行交换。要是瞬间执行这个操作的话,那当然就是瞬间交换武器啦。不过呢,这个宏存在比较明显的、能够被察觉到的延迟,这是因为PickupInventoryItem这个函数在执行的时候速度比较慢。所以呢,推荐大家使用下一个方案。接下来要说的后一种方案中,切换武器的宏是这样的:PickupContainerItem(0,

在游戏操作中,这些宏的运用对于玩家的游戏体验有着不小的影响。像这样涉及武器交换的操作,在战斗或者其他场景下,如果宏的执行速度不够快,很可能会让玩家错失良机。比如说在PVP(玩家对战玩家)的场景里,武器交换的时机可能就决定了一次攻击或者防御的成败。而这种能够被明显感知到的延迟,是玩家在追求流畅操作体验时不愿意看到的。所以,找到一个执行速度更快、效率更高的宏方案就显得尤为重要了。这也是为什么在存在明显延迟的情况下,会推荐下一个方案的原因所在。

1) Execute the PickupInventoryItem function with the parameter 16. Then, perform the PickupContainerItem function. For the PickupContainerItem function, it is used to pick up equipment from the backpack. The first parameter represents the backpack, and the second parameter represents the slot in the backpack. Here, the convention is that 0 stands for the main backpack. Then, from right to left, they are 1, 2, 3, 4 in sequence. The slots in the backpack are sorted from top to bottom and from left to right. Attention! It starts from 1, which is a bit different from the common habit of starting from 0. So, PickupContainerItem(0, 1) means to pick up the item in the first row and the first column from the left on my main backpack. Finally, we have the PickupInventoryItem(16) operation again.

将物品放置到主手的位置,接着把原本处于主手位置的物品通过PickupContainerItem(0, 1)这个操作放到背包之中。这样就完成了一次武器的交换。此次的切换动作相较于之前的那个要明显快很多。这种方式值得推荐使用。并且,副手可以一直保持使用高DPS(每秒伤害)的剑,这对提高攻击效率是很有帮助的。当然了,你想让副手保持使用任何武器都是可以的,哈哈。

如今,我们已经有了一个基础的切换宏。不过,每次使用技能的时候都要手动去切换,这实在是让人难以忍受。于是,我们就继续去尝试很多人都曾想到过的方法,即为特定的技能编写不同的宏,从而确保不同的技能能够使用合适的武器。其基本的思路是利用全局变量来记录主手所使用的剑,在使用不同技能的时候,判断主手位置的武器是否为剑,根据实际情况进行切换。用于设置全局变量的宏为:/script

,在实际的游戏操作场景中,武器的切换效率和武器与技能的适配性对于玩家的游戏体验有着至关重要的影响。就像在一些高难度的副本或者PVP(玩家对战玩家)竞技中,快速而精准的武器切换能够让玩家在战斗中抢占先机。而根据技能特性选择合适的武器,更能将技能的伤害输出最大化,提高玩家在战斗中的胜率。这也是我们不断探索武器切换宏编写的重要原因。

设置一个全局变量“sword”,其值为玩家背包第16格物品的链接,代码为“setglobal("sword", GetInventoryItemLink("player", 16))”。,使用脚本命令“/script SendChatMessage("主手剑"..sword, "say", this.language,"")”,这个命令的作用是把自己的主手武器说出来,如此一来自己就能看到主手武器是什么了。假如不巧主手武器是匕首(像上次掉线这种情况就可能会出现这种状况),那就切换一次武器,重新运行设置宏,以此确保“sword”这个变量对应的是自己的主手剑。

这里以邪恶攻击为例进行说明。我们得确保每次进行邪恶攻击的时候,使用的都是攻击力高的剑。所以,要先对主手武器进行判断,如果有必要进行切换,那就切换,之后再执行邪恶攻击。这一系列操作都离不开相应的脚本命令“/script”。

如果(sword == GetInventoryItemLink("player", 16))这个条件不成立的话,那么就执行PickupContainerItem(0, 1)、PickupInventoryItem(16)以及PickupContainerItem(0, 1)这几个操作。最后执行/script CastSpellByName("邪恶攻击(等级5)")。

不过,类似用于背刺的宏是存在问题的。背刺有效性的判断是在宏执行之前进行的,这就导致一些流传的背刺宏需要连续按两下才行。按第一下的时候仅仅能完成切换操作,只有按第二下的时候才能进行背刺,这是非常不方便的。

所以,我有这样一个思路,在使用凿击之后直接进行武器的切换。因为在游戏的操作逻辑里,凿击之后通常紧接着就要使用背刺了。按照这样的操作,背刺就能够直接被执行。并且,在背刺之后应该换回剑继续游戏操作。这是因为背刺需要消耗60点能量,这么高的能量开销使得在绝大多数的情况下它是不能连续进行的,不过,除了某些点了特殊主动天赋的盗贼角色之外……下面是凿击宏的内容:/script

执行名为“凿击(等级3)”的施法操作。使用脚本判断,如果(“剑”等同于获取玩家背包物品栏第16格的物品链接),那么执行拾取包裹第0格第1件物品,再拾取背包第16格物品,最后再拾取包裹第0格第1件物品的操作。

下面是背刺宏:

/script 执行名为“背刺(等级5)”的施法操作;

/script 拾取包裹第0格(此处未明确物品序号相关操作,可能需要补充完整逻辑或者按照特定游戏逻辑默认执行相关操作)。

1. 执行PickupInventoryItem(16),接着执行PickupContainerItem(0, 1)。当敌人处于晕眩状态,并且我位于他的背后时,就像偷袭之后的情况,这个宏连续按两次的话,同样能够达成第一次切换,第二次背刺的效果。一般来说,偷袭之后是持续使用邪恶攻击来积攒点数,还是直接进行背刺以造成伤害,这是需要根据实际情况来判断的。所以,在我编写的这个偷袭宏后面,并没有添加固定切换的代码。大致的情况就是如此了,希望以上关于这个宏的解释能够对各位玩盗贼职业的朋友有所帮助。至于其他各个技能的宏,如果大家觉得有必要的话,应该是可以自己编写出来的。哈哈,只要自己动手去编写一下,就能完全掌握其中的要点了。当然了,这可并不意味着就此达到精通的程度,题目有点夸大其词了,只是开个玩笑罢了,哈哈。

澄拾游戏 » 魔兽盗贼专属:宏从零基础到精通的进阶之路