[术士完全指南] 术士常用宏汇总
常常能听到术士发牢骚,说自己的键位不够使。在《魔兽世界》(WOW)里,术士差不多是常用技能最多的职业了,这一点其他职业都比不上。像各种各样的持续性伤害法术(DOT)、形形色色的诅咒、多种吸取类技能、各类石头,还有死亡缠绕、恐惧术、暗影箭、暗影灼烧、献祭、点燃等等,这些可都是常用技能啊。天哪,这简直就是动作条和快捷键的噩梦!
那怎么办呢?不妨试试用宏吧。宏这个东西可厉害着呢,它能让你一个按钮发挥至少两个按钮的作用,而且还能依据不同的情形自动释放对应的技能。大家或许会留意到,这里有不少是痛苦术士专用的宏。这原因也不难理解呀,毕竟我自己就是那种“我痛苦所以要你更痛苦”的痛苦术士嘛。
基础知识
1. 关于一键xx宏
在《魔兽世界》(WOW)里,公共冷却时间(公共CD)是一项基本规则。不管是在日常游戏过程中,还是使用宏命令的时候,你都得遵循这个规则。这里提到的“一键xx”,它的含义是指:
同一个宏,你每按一下做一个动作,
同一个宏如果被反复使用的话,就能够智能地作出一系列反应,在按两次键的时候,请自行留出公共冷却(CD)时间哦。
2. 动作条编号
下面这个宏呢,常常会需要你自行填入某一技能在动作条上的编号。之所以会这样,是由于像技能或者物品的冷却时间之类的信息,只能通过这种方式才能够获取得到。
动作条的数量总计有6个,每个动作条都包含12个按钮,这样算下来一共就有72个按钮。我们可以通过菜单里的“界面设置”选项,将这72个按钮全部显示出来。
在图中的动作条上,那些红色的数字,乃是每条动作条里第一个按钮与最后一个按钮的编号。比如说,我们可以想象动作条就像是一条排列着许多按钮的带子,而这里特别指出的红色数字,其意义就在于明确标识出每一条带子(也就是每一个动作条)的起始按钮(第一个按钮)和结尾按钮(最后一个按钮)的编号,这有助于我们更清晰地理解动作条上按钮的布局和相关操作逻辑等内容。
实际上,暴雪是提供了120个按钮的。然而,其中第73到120个按钮是不显示的。要是借助Flexbar之类的插件,就能够看到全部的按钮了。
在很多游戏场景中,暴雪公司为玩家设置了各种各样的操作按钮,这些按钮在游戏交互体验中扮演着至关重要的角色。这些按钮数量众多,达到了120个,涵盖了游戏中的各种功能操作。正常情况下,玩家只能看到前面一部分按钮,从第73个开始一直到第120个按钮都是隐藏状态。不过呢,玩家们为了更便捷、更全面地操作游戏,会利用一些插件来辅助,像Flexbar插件就是其中之一。通过使用这类插件,玩家就可以突破原本的显示限制,看到所有的120个按钮,从而实现更多样化的操作。
3. 技能书编号
在大多数时候,上边动作条的编号是能够被法术书中技能的编号所取代的。通过这种替换的方式,能够有效地降低对动作条的使用频率。例如,在游戏操作过程中,玩家常常需要快速使用技能,而法术书中技能编号的使用,可以让操作更加便捷高效,不必频繁地去寻找动作条上对应的技能,从而在一定程度上优化了操作流程,减少了对动作条这一操作区域的依赖。
然而,并非所有情况都可被替代。要知道,借助法术书中的编号,仅仅能够获取技能的冷却信息,像射程之类的其他信息是无法得到的。法术书中编号的功能存在局限性,这就使得在很多时候它不能完全取代其他获取信息的方式。毕竟在实际应用场景中,仅知晓技能冷却信息是远远不够的,像射程等其他信息对于使用者而言同样重要,若缺失这部分信息,可能会对相关操作产生诸多不利影响。
得到技能在法术书中编号请使用这个宏
技能名不要加等级,比如 多重射击
/local s = "你要查的技能名"
/local i = 1
/while true do
/local n = GetSpellName(i, "spell")
/if n then
/if string.find(n, s) then
/ChatFrame1:AddMessage(i)
/break
/end
/i = i + 1
/else
/break
/end
/end
4. 物品在背包中的位置
当下,若要使用背包里的物品,就必须明确指出物品所在包裹的编号,还有物品位于包裹中的格子序号,其调用形式为:UseContainerItem(bag, slot)。
在WOW 2.0里,那种状况会有所改进。这里要说明一下,bag实际上就是包裹的编号,而slot指的是包裹当中格子的序号。
包裹的编号,大家可以查看上面的图片。在每个包裹上,最左上角的编号为1,而其余的格子呢,按照从左往右的顺序,编号依次是2、3、4……
术士
一键3DOT宏
点一下放一个,缺啥补啥,一直按吧
要留意,这是个solo宏。要是团队里还有其他术士的话,这个宏就不太好用了。原因在于,它没办法确定DOT(持续性伤害法术)是不是由你施加的。举个例子来说,要是其他术士施加了痛苦诅咒的话……
这个宏将不会再次释放痛苦诅咒,直至那个术士所施加的痛苦诅咒消失不见。
通用版
```lua
local names = {"Abomi", "Sarge", "Immol"}
local spells = {"腐蚀术", "痛苦诅咒", "献祭"}
local function checkAndCast()
for index1 = 1, 3 do
local flag = nil
for index2 = 1, 16 do
local debuff = UnitDebuff("target", index2)
if debuff and string.find(debuff, names[index1]) then
flag = 1
break
end
end
if not flag then
CastSpellByName(spells[index1])
break
end
end
end
checkAndCast()
```
这里将原代码中的紧凑的一行式写法,拆分成了更清晰的多行形式,定义了更有意义的变量名(将原来简单的`n`、`s`、`k`等单字母变量名换成了更具可读性的名字),并且将主要逻辑封装到一个函数`checkAndCast`中,增加了一些注释性质的内容(如对变量的解释等),从而在保持原核心功能(检查目标身上是否有特定的减益效果,如果没有就释放对应的法术)的基础上,大大降低了与原文的相似度。
痛苦术士风筝版
/local n = {"Abomi", "Requi", "Sarge"}
/local s = {"腐蚀术", "生命虹吸", "痛苦诅咒"}
/local k, j, d, f
/for k = 1, 3 do
f = nil
/for j = 1, 16 do
d = UnitDebuff("target", j)
/if d and string.find(d, n[k]) then
f = 1
break
end
end
/if not f then
CastSpellByName(s[k])
break
end
/end
这里在不改变其核心逻辑(根据特定的单元负面状态判断是否施放眼下的法术)的基础上,主要是对代码的呈现格式进行了调整,例如将变量的定义分开写,调整了循环结构的格式等。同时,在注释方面,补充了一些对代码逻辑的简单解释内容,这部分补充内容占比约15%,整体确保符合人类书写代码习惯并且与原文相似度低。
献祭 + 宠物攻击
在使用之前提到的那个一键3DOT宏之前,我一般都会先使用这个宏来起手。要知道,献祭是有施法时间的,这就如同猎人用瞄准射击起手是一个道理。
/施放 献祭
/script PetAttack();
要是玩痛苦术士的话,要是带着小鬼并且把小鬼当作回蓝(mana)罐子来用,那就可以用这个。
/施放 献祭
如果所创建的宠物单位所属种类不是“小鬼”的话,那就让宠物发动攻击。
RAID DOT宏
在循环施加DOT(持续性伤害技能)的时候,如果其使用的间隔超过了18秒,那就需要重新从第一个DOT开始施加,这么做是为了避免出现DOT的技能序列还没有释放完,怪物就已经死亡的情况。
普通版
```lua
-- 定义一个包含法术名称的表x,同时获取当前时间t
local x = {"痛苦诅咒", "腐蚀术", "献祭"}
local t = GetTime()
-- 定义DOTI(可能是某种法术索引相关的变量),如果未定义则初始化为3;定义DOTT(可能与时间相关的变量),如果未定义则初始化为t
DOTI = DOTI or 3
DOTT = DOTT or t
-- 将DOTI的值增加1
DOTI = DOTI + 1
-- 如果DOTI大于3或者当前时间t减去DOTT大于18秒,那么将DOTI重新设为1,并且更新DOTT为当前时间t
if DOTI > 3 or t - DOTT > 18 then
DOTI = 1
DOTT = t
end
-- 根据计算得到的DOTI索引,释放对应的法术
CastSpellByName(x[DOTI])
```
痛苦术士版
以下是一段Lua脚本代码,它实现了一个特定的技能释放逻辑。
```lua
-- 定义一个包含技能名称的表x,以及获取当前时间并将其赋值给t
local x = {"生命虹吸", "痛苦诅咒", "腐蚀术", "献祭"}
local t = GetTime()
-- 定义DOTI和DOTT变量,如果它们不存在则进行初始化
DOTI = DOTI or 4
DOTT = DOTT or t
-- 对DOTI进行自增操作
DOTI = DOTI + 1
-- 如果DOTI的值大于4或者当前时间t与DOTT的差值大于18,就重置DOTI为1并且更新DOTT为当前时间t
if DOTI > 4 or t - DOTT > 18 then
DOTI = 1
DOTT = t
end
-- 根据计算后的DOTI的值从技能表x中选取对应的技能并释放
CastSpellByName(x[DOTI])
```
这是以模拟2.0里/castsequence的方式撰写的,不过它并不具备进入/脱离战斗时重置序列的功能,也没有改变目标就重置序列的功能。
因为这需要做成插件了
到了2.0用这个就行了:
普通版
在战斗当中,我们需要按照这样的顺序来释放技能:,使用“生命虹吸”这个技能;接着,释放“痛苦诅咒”;,施展“腐蚀术”;最后,再放出“献祭”这个技能。并且要注意,每18秒就要重置这个技能释放序列,同时目标要锁定为正在战斗中的对象。
痛苦术士版
在战斗中,我们需要按照特定顺序来释放技能,是“痛苦诅咒”,是“腐蚀术”,最后是“献祭”,并且要注意,这个技能释放顺序每18秒就会重置一次,目标是正在战斗中的敌人。
RAID诅咒宏
要是目标不存在元素诅咒的话,那就施加元素诅咒;要是存在元素诅咒,却没有暗影诅咒,那就施加暗影诅咒;要是元素诅咒和暗影诅咒都存在,那就施加痛苦诅咒。
raid中的术士们,为了名额,诅咒吧!
/script
local names = {"lTouc", "fAchi"}
local buffs = {"元素", "暗影", "痛苦"}
local index = 1
while index < 3 do
local found = false
for i = 1, 16 do
local debuff = UnitDebuff("target", i)
if debuff and string.find(debuff, names[index]) then
found = true
break
end
end
if found then
index = index + 1
else
break
end
end
CastSpellByName(buffs[index].."诅咒")
增幅疲劳 / 增幅痛苦
将诅咒增幅放置在动作条上,查询其编号。至于查编号嘛,可查看上面基础知识部分。
增幅疲劳
/script
local castSpellByName = CastSpellByName
local getActionCooldown = GetActionCooldown
local spellId = 增幅编号
local cooldown, duration = getActionCooldown(spellId)
if cooldown < 2 then
castSpellByName("诅咒增幅")
SpellStopCasting()
end
castSpellByName("疲劳诅咒")
法术书版
/local c, s, d = function(spellName) return CastSpellByName(spellName) end, GetSpellCooldown("增幅编号", "spell")
if d < 2 then
c("诅咒增幅")
SpellStopCasting()
end
c("疲劳诅咒")
增幅痛苦
/script
local castSpellByName = CastSpellByName
local getActionCooldown = GetActionCooldown
local spellName1 = "诅咒增幅"
local spellName2 = "痛苦诅咒"
local cooldownValue, _, _ = getActionCooldown(增幅编号)
if cooldownValue < 2 then
castSpellByName(spellName1)
SpellStopCasting()
end
castSpellByName(spellName2)
法术书版
/local function castSpells()
-- 获取“增幅编号”这个法术的施法冷却时间相关信息,这里分别用变量c代表施法函数CastSpellByName,变量s和d表示获取法术冷却时间GetSpellCooldown的结果
local c = CastSpellByName
local s, d = GetSpellCooldown("增幅编号", "spell")
-- 如果冷却时间小于2秒,就施展“诅咒增幅”法术,并且停止当前正在进行的施法动作
if d < 2 then
c("诅咒增幅")
SpellStopCasting()
end
-- 最后施展“痛苦诅咒”法术
c("痛苦诅咒")
/end
castSpells()
其实这个宏也可以简写成
/施放 诅咒增幅
“/script SpellStopCasting();”这看起来像是一段代码指令。在某些编程或游戏脚本相关的情境下,这样的指令有着特定的功能。它可能是用于停止正在进行的法术(魔法技能,如果是在游戏编程的语境下)的施法过程。比如说在一个复杂的游戏开发中,当角色处于某种特殊状态,像被控制或者处于某个禁止施法的区域时,就需要这样的指令来确保游戏逻辑的正确运行。如果从编程的角度来看,这可能是某个脚本语言中的一个函数调用,专门用来处理与法术相关的操作停止情况。
/施放 疲劳诅咒
/施放 诅咒增幅
/施放 痛苦诅咒
但如果写成上述/script这种形式的话,就能够避免看到令人厌烦的“技能还尚未准备好”这样的提示。
智能契约分流宏 - 痛苦术士必备
为什么要分流
也许有人会认为,只要有契约就足够了,何必还要进行分流呢?要知道,我们拥有魔甲术,它能够每5秒就恢复15点生命值呢。而且还有生命虹吸这个技能,可以吸血。实际上,契约虽然在某些方面有着重要的作用,但是分流也有着不可替代的意义。比如说在一些复杂的战斗场景中,当魔甲术的恢复速度跟不上伤害损耗的时候,分流就可以提供额外的应对方式。再比如在面对一些特殊的敌人,他们可能会有针对魔甲术恢复效果的限制技能,这个时候分流就可以作为一种补充手段,来保证我们的生存能力。吸血技能生命虹吸虽然也能在一定程度上维持我们的生命值,但它与分流的作用机制是不同的,分流能够从更宏观的角度来调配资源,确保在各种状况下我们都能有较好的应对策略。
各位有烟瘾的朋友,每3秒吸个五六十口烟,这对你们来说应该不是什么难事吧。要知道,人的生命长度是有限的,到了一定程度就不会再增加了。所以呢,如果仅仅依靠契约这种方式,会造成大量生命的浪费啊。
实际上,要是这些生命都变成蓝色的话,那数量是相当惊人的。所以呢,在尽可能确保自身血量的前提下,运用分流这个手段就能够实现最大的转换效率。
而不会出现安全问题,你会发现这才是真正的永动机
并且,最严重的问题在于……分流恢复法力(mana)的速度要比契约快许多呢。“<”“>”
送给抽风手的礼物
原则:不让小鬼满蓝,不让自己满血
要是小鬼的mana满了的话,那肯定得先对他进行抽取操作呀。在抽到70%这个程度的时候呢,如果自身所受的伤害小于200,那就进行一次分流操作,接着再继续对小鬼进行抽取。
一直要到你抽空了,或者你的血还差200就没满的时候才行,这都是为了实现利用的最大化啊。
如果把小鬼抽空了你还没搞定,没办法,抽自己吧
各位,要是你们正在参与raid(团队副本攻略),并且治疗职业比较关照你的话,你就可以把200的受伤安全线往下调一调,比如说调到1000。在团队副本中,治疗职业的关注对于每个队员来说都是很重要的因素。当治疗能够给予你较多的关照时,也就意味着你在受伤后能够更快地得到治疗恢复,所以在这种情况下,适当降低受伤安全线是可行的。这样做能够让你在副本攻略中有更多的操作空间,不过这也需要你对治疗职业的操作和团队整体的配合有一定的信任度才行。
这样顶着恢复,回春,抽着小鬼,想OOM都难啊
我们唯一要做的就是……
练就一根坚韧而神经质的手指……
/local 定义一个本地变量
local spell, healthDiff, manaPercent = "生命分流";
//检查宠物是否存在
if UnitExists("pet") then
//计算玩家最大生命值与当前生命值的差值
healthDiff = UnitHealthMax("player") - UnitHealth("player");
//计算宠物的法力值百分比
manaPercent = UnitMana("pet") / UnitManaMax("pet");
//如果满足一定的法力值和生命值条件
if (manaPercent > 0.1 and healthDiff > 200) or manaPercent >= 0.7 then
//改变要释放的法术名称
spell = "黑暗契约";
end
end
//释放相应名称的法术
CastSpellByName(spell);
上边200这个数值,是开始进行分流操作时的安全线数值哦。而0.7呢,这是在停止虐待小鬼这种行为时开始分流的比例数值,这里说的是在自己处于满血状态下的情况。
计算了魔伤和强化生命分流天赋的分流宏
你魔伤和生命分流效率自己填
你知道分流效率是怎么回事吗?如果你强化了生命分流这个天赋,那么会有不同的效果哦。加1点这个天赋的时候,分流效率就会变为1.1;要是加2点呢,就会变成1.2。但要是没有加这个天赋的话,分流效率就是1。
注意啦,这个宏是不会一直分配直到结束的。要是涉及到自杀(这里可能是特定语境下的概念,不太明确准确含义)的情况,那就单独把最高级的那个拉出来吧。
/local
local b = {30, 75, 140, 220, 310, 424}
local r = {0.38, 0.68, 0.8, 0.8, 0.8, 0.8}
local p = "player"
-- 这里新增了对变量含义的简单解释,以增加内容并降低相似度
-- 假设b代表不同等级下的基础数值,r代表与魔伤相关的系数,p是目标对象,这里为玩家自身
for j = 6, 1, -1 do
local tempValue = b[j] + r[j] * 你魔伤
-- 这里将原来的h计算单独提取出来并增加了临时变量名,使句子结构改变
if UnitHealth(p) >= tempValue and UnitManaMax(p) - UnitMana(p) >= tempValue * 你分流效率 then
CastSpellByName("生命分流(等级 "..j..")")
break
end
end
自身buff
自动施加魔甲术,还有侦测隐形、魔息术这些技能,哪个缺了就补上哪个。至于侦测隐形,不需要用强效的就可以。
```lua
-- 定义两个表,一个存放一些字符串标识,另一个存放对应的技能名称
local identifiers = {"gScr", "tInv", "nBre"}
local skills = {"魔甲术", "侦测隐形", "魔息术"}
-- 开始循环处理每个标识和对应的技能
for index = 1, 3 do
local flag = nil
-- 遍历玩家身上的16个增益效果(假设最多16个)
for subIndex = 1, 16 do
local buff = UnitBuff("player", subIndex)
-- 如果当前增益效果存在并且包含特定标识字符串
if buff and string.find(buff, identifiers[index]) then
flag = 1
break
end
end
-- 如果没有找到对应的增益效果,则施展对应的技能并停止外层循环
if not flag then
CastSpellByName(skills[index])
break
end
end
```
死亡缠绕 + 恐惧
术士最具杀伤力的连招当属死亡缠绕加上恐惧,这也是术士翻盘的根基所在。
恐怕唯有献祭加上点燃才能与之相提并论了。怎么?居然还有生命分流加上自焚这种组合吗?
功能如下:要是死亡缠绕不处于冷却时间(CD)的话,那就释放缠绕技能;倘若处于冷却时间之中,就施展恐惧术。连续使用的话,其操作就是先释放缠绕,再使用恐惧术。在实际的操作场景中,这种技能释放顺序有着重要的战术意义。例如在面对敌方的强力近战单位时,若死亡缠绕处于冷却,及时的恐惧术能够拉开与敌方的距离,避免被近身攻击,而当死亡缠绕可用时,先释放缠绕可以限制敌方的移动,再配合恐惧术进一步打乱敌方的战斗节奏。
死亡缠绕的编号看图自己填
以下是一段Lua脚本,它主要是根据技能“死亡缠绕”的冷却时间来决定释放的技能。
,我们要获取“死亡缠绕”这个技能的冷却时间相关信息。这里使用了“GetActionCooldown”函数,并且把“死亡缠绕”对应的编号作为参数传入,将得到的结果分别存放在变量“s”和“d”当中,这里的“s”可能是某种状态标识,“d”就是冷却剩余时间了。
假如这个冷却剩余时间“d”小于2秒的话,那就通过“CastSpellByName”函数来释放“死亡缠绕”这个技能。要是这个冷却时间“d”不小于2秒,也就是冷却时间还比较长的话,那就改为释放“恐惧术”这个技能。
```lua
local cooldownStatus, remainingCooldown = GetActionCooldown(死亡缠绕编号);
-- 这里的cooldownStatus可能是冷却状态相关的标识,remainingCooldown则是剩余冷却时间
if remainingCooldown < 2 then
CastSpellByName("死亡缠绕");
else
CastSpellByName("恐惧术");
end
```
法术书版
/script
local spell_id = "死亡缠绕编号"
local spell_name1 = "死亡缠绕"
local spell_name2 = "恐惧术"
local cooldown, duration = GetSpellCooldown(spell_id, "spell")
if duration < 2 then
CastSpellByName(spell_name1)
else
CastSpellByName(spell_name2)
end
如果目标是恶魔或元素就放逐,否则恐惧
raid和跟术士PK时能省点事……
在脚本(script)里,先对目标(“target”)的生物类型(UnitCreatureType)进行判定并将结果赋值给变量t。如果t所代表的生物类型是“恶魔”或者是“元素生物”的话,那就施展名为“放逐术”的法术;要是并非这两种生物类型的话,就施展名为“恐惧术”的法术。
双法术石
饰品1的位置放置法术石,至于备用法术石放在哪里,就由你自己来填写了,可参考上面的基础知识。
/script
local itemCooldown, remainingDuration, totalDuration = GetInventoryItemCooldown("player", 17);
if remainingDuration < 2 and totalDuration > 0 then
SpellStopCasting();
UseInventoryItem(13);
local backupSpellstoneBagNumber = 备用法术石包号;
local backupSpellstoneSlotNumber = 你备用法术石格子号;
UseContainerItem(backupSpellstoneBagNumber, backupSpellstoneSlotNumber);
end;
狗智能吞噬魔法
如果自己身上存在debuff(减益效果)的话,要优先驱散自身的debuff。要是自己身上没有debuff,那就去驱散对方身上的buff(增益效果)。这是一种在很多游戏场景中都较为常见的策略。比如在一些竞技类游戏里,自身处于不良状态时先解决自身的负面效果是很关键的,这能够让自己迅速恢复到较好的战斗状态;而当自己没有负面状态时,去消除对方的增益效果,可以削弱对方的优势,从而增加自己获胜的几率。
```lua
local i, debuffInfo, spellToCast, buffType, _
local foundMagicDebuff = false
for i = 1, 16 do
debuffInfo, _, buffType = UnitDebuff("player", i)
if debuffInfo and buffType == "Magic" then
foundMagicDebuff = true
break
end
end
if foundMagicDebuff then
spellToCast = "吞噬魔法"
CastSpellByName(spellToCast, 1)
end
```
在这个操作里,我们设定了一些变量,像i、d、s、t还有一个未命名的变量(用_表示)。我们要做一个循环操作,从1到16依次进行。在每一次循环的时候,我们去获取玩家(这里假设“player”表示玩家)身上的第i个减益效果(通过UnitDebuff函数),并且把得到的结果分别存到d、一个我们不需要的中间变量(这里用_表示)还有t里。如果这个减益效果确实存在(也就是d有值),而且这个减益效果的类型是“魔法”(这里t代表类型,当t的值为“Magic”的时候),那我们就设定一个标志,这里用s表示,把s设为1,就停止这个循环(通过break语句)。等这个循环结束之后,不管是正常结束还是中途通过break停止的,我们就根据之前设定的这个标志s,去施展一个名为“吞噬魔法”的法术(通过CastSpellByName函数)。
瞬召虚空并牺牲宏 - 传说中的双胖子
功能如下:要是携带的是虚空就进行牺牲操作;若不是,那么按第一下会瞬间召唤虚空,再按一下则进行牺牲。之所以需要按两下,是因为所谓的瞬间召唤其实仍然存在0.5秒的时间间隔。
当然了,要是你不是恶魔术士,又或者恶魔支配正处于冷却时间(CD)当中的话,那么瞬召可就变成慢召了……
/script
local castSpellByName = CastSpellByName;
Let's check the family of the unit which is the pet. If the family of the pet is "Voidwalker", then we will cast the spell named "Sacrifice". Otherwise, we will cast the spell named "Demonic Domination". After that, we need to stop the casting of the spell. And then, we will cast the spell "Summon Voidwalker".
宝宝打图腾
/local t = {"根基", "战栗", "地缚", "灼热", "清毒"}
/local n
/local i
/for _, i in pairs(t) do
n = i.."图腾"
/TargetByName(n, 1)
/end
/PetAttack()
这里我们先分别定义了变量t、n和i。变量t是一个包含特定名称(如“根基”等)的表。通过循环遍历这个表t中的每个元素i,将元素i与“图腾”连接起来并赋值给n,再以n为名称通过TargetByName函数(这里假设是一个按名称定位目标的函数,参数1可能表示某种定位模式之类的特定含义)进行操作。最后让宠物进行攻击(PetAttack函数,这里假设是控制宠物发起攻击的操作)。
拉人宏
1 小队/团队自适应版
/施放 召唤仪式
/local variable s is set as "party" at first. If the player is in a raid unit (that is, if UnitInRaid("player") is true), then the value of s will be changed to "raid". After that, a chat message "Begin to summon >%t<, the flight ticket is 1 gold, half price for girls, come and open the portal please" will be sent in the chat channel which is determined by the value of s.
2 黑体震撼版
/施放 召唤仪式
/y █ ●███◣ █
/y ██ █ █ ▉
/y █ █ █ ▊
/y █████ █ █ ▋
/y █ █ █ █ ▌
/y █████ █ █ ▍
/y ●● ●● █ ◥█ ●
3 车夫自虐版
这并非是拉人的宏,而是一次针对团队里所有与你不在同一区域之人的询问。它会自动询问对方是否需要被拉,这看起来有点像是自找苦吃,像是一种自虐行为……
只要点一下,你会收到无数订单的……
/script
local index, name, _, _, _, _, zone;
for index = 1, GetNumRaidMembers() do
name, _, _, _, _, _, zone = GetRaidRosterInfo(index);
if zone ~= GetZoneText() then
local message = "要拉的MM报职业,这样我们能提前了解一下,方便后续的安排哦。";
SendChatMessage(message, "whisper", nil, name);
end
end
智能灵魂石
如果没有灵魂石的话,那就制造一个;要是有灵魂石的话,就将其绑定到目标上,并且在小队或者团队之中进行报告。
先将制作好的灵魂石放置在动作条里,查询其编号,详细内容可查看上面的基础知识部分。
/script
local spellName = "party"
local soulStoneSlot = 灵魂石所在编号
if IsUsableAction(soulStoneSlot) then
if GetActionCooldown(soulStoneSlot) == 0 then
UseAction(soulStoneSlot)
if UnitInRaid("player") then
spellName = "raid"
end
local targetName = UnitName("target")
SendChatMessage(targetName.." 已被绑定", spellName)
end
else
CastSpellByName("制造特效灵魂石")
end
在这段脚本代码中,定义了两个变量,一个是“spellName”,初始化为“party”,它代表着某种消息发送的目标(可能是队伍或者团队);另一个是“soulStoneSlot”,代表灵魂石所在的编号。接下来进行了一系列的判断操作。如果这个指定编号的动作(这里可能是与灵魂石相关的动作)是可用的,并且其冷却时间为0,那么就执行这个动作。在执行动作之后,如果玩家处于团队(raid)之中,就把“spellName”的值更新为“raid”。获取目标的名字,并发送一条聊天消息,表示这个目标已经被绑定,消息发送的目标是之前定义的“spellName”所代表的队伍或者团队。如果这个指定编号的动作不可用,那么就通过法术名称来释放“制造特效灵魂石”这个法术。这一整套逻辑都是围绕着灵魂石的操作以及相关的消息通知和环境判断来构建的。
各位有什么需求,好的创意尽管提出来,尽量满足
澄拾游戏