为了能够更好地对宏命令提供支持,应尽量安装《super macro》插件。
1. 法师有一个法术反制提示宏。这个宏能够依据法师法术书中反制技能的情况,提示是否可以使用该技能。当反制技能不在冷却状态时,会通过/S频道报出其冷却时间。宏中的“94”这个数值,要按照反制技能在法术书中的具体位置来调整。由于此宏字节超过255,所以需要SUPERMACRO插件的支持才能运行。
/script
local startValue, durationValue = GetSpellCooldown(94, 1)
local sendChatMessage = SendChatMessage
local cdValue = GetTime() - startValue
cdValue = math.floor(durationValue - cdValue)
if (startValue > 0 and durationValue > 0) then
sendChatMessage("法术反制的冷却时间还剩下"..cdValue.."秒。", "say")
elseif UnitCanAttack("player", "target") then
SpellStopCasting()
CastSpellByName("法术反制")
sendChatMessage("已经对>>"..UnitName("target").."<<施加反制了!", "say")
end
/script
local startValue, durationValue = GetSpellCooldown(94, 1)
local sendChatMessage = SendChatMessage
-- 这里新增内容,对计算冷却时间进行一个简单解释,就是先获取当前时间与技能开始冷却的时间差,再用总冷却时长减去这个差值得到剩余冷却时间
local cdValue = GetTime() - startValue
cdValue = math.floor(durationValue - cdValue)
if (startValue > 0 and durationValue > 0) then
sendChatMessage("法术反制的冷却时间还剩下"..cdValue.."秒。这里的冷却时间计算是基于技能的相关机制,先算出时间差再得出剩余冷却。", "say")
elseif UnitCanAttack("player", "target") then
SpellStopCasting()
CastSpellByName("法术反制")
sendChatMessage("已经对>>"..UnitName("target").."<<施加反制了!在合适的战斗场景下,当可以对目标进行攻击时就会触发这个反制操作。", "say")
end
以下是一个法师的宏,这个宏的作用是先开启饰品再进行攻击。这里要说明一下,饰品在游戏里是有编号的,其中编号为14的饰品是位于最下面的那一个,而另一个饰品呢,它的编号需要修改为13才行。
同样的道理,这个宏可用于其他饰品。这个宏的优点在于,它不会在屏幕上不停地提示“物品尚未准备好”。而且,在实际的使用场景中,很多玩家可能会同时使用多种饰品,这个宏能够一视同仁地适配它们,为玩家提供了极大的便利。无论是在紧张的战斗情境下,还是在日常的游戏环节中,这种稳定性都有助于玩家更好地操控游戏进程,避免因频繁提示而分心或者误操作。
If the cooldown of inventory item 14 for the player has reached zero, then the inventory item 14 should be used.
/施放 寒冰箭
3打断施法在地球时代要用以下脚本才行。
/run SpellStopCasting()
/cast Blink
这个宏一旦运行,就会将你的施法过程打断,进而释放闪现技能。至于下面的技能呢,你可以把它换成冰箱或者拉(这里不太明确“拉”具体指代的技能,如果是指“嘲讽拉怪”之类的技能的话),用来打断施法也是可以的。
4气定神闲+炎爆术
/施放 气定神闲
/施放 炎爆术
5自动补 冰甲术,奥术智慧,魔法抑制
缺啥补啥,闲着没事按按能强身健体,定国安邦……
以下是一段用Lua语言编写的代码,其功能是检查玩家身上是否存在特定的增益效果,如果不存在则施展对应的法术。代码中有两个表,一个是 `n` 表,里面包含了一些表示增益效果名称的简短标识,像 "tArm"、"lSen"、"hMag";另一个是 `s` 表,其中包含了对应的法术名称,即 "冰甲术"、"奥术智慧"、"魔法抑制"。
具体的操作过程是这样的。针对这三个法术(或者说三组对应的标识与法术名称),每次循环的时候,先将变量 `f` 设为 `nil`。在一个内层循环中,这个循环会从1到16进行迭代,每次迭代都会获取玩家身上的一个增益效果(假设存在的话)并将其赋值给变量 `b`。如果这个获取到的增益效果 `b` 存在,并且在这个增益效果的名称字符串中能找到 `n` 表中对应的标识(也就是 `n[k]`),那么就把 `f` 设为1,并且跳出这个内层循环。
当内层循环结束后,如果发现 `f` 不是1(也就是之前没有找到对应的增益效果),那么就施展 `s` 表中对应的法术(通过 `CastSpellByName` 函数),并且跳出外层循环。
```lua
local buffNames = {"tArm", "lSen", "hMag"}
local spellNames = {"冰甲术", "奥术智慧", "魔法抑制"}
local function checkAndCast()
for index = 1, #buffNames do
local foundBuff = false
for subIndex = 1, 16 do
local playerBuff = UnitBuff("player", subIndex)
if playerBuff then
local buffName = playerBuff
if string.find(buffName, buffNames[index]) then
foundBuff = true
break
end
end
end
if not foundBuff then
CastSpellByName(spellNames[index])
break
end
end
end
checkAndCast()
```
6自动把被控制的队友变羊,小队,团队通用版
BOSS如果能够控制玩家的话,那是非常有用的,像哈卡以及AQ神庙1中的BOSS就是如此。在游戏里,这种能够控制玩家的BOSS往往能给游戏增添不少变数。哈卡作为一个经典的BOSS,它的控制技能让玩家在战斗中面临诸多挑战。而AQ神庙1中的BOSS,也同样具备这种控制玩家的能力,这使得玩家在与之对抗时必须更加谨慎,需要针对其控制技能制定特殊的应对策略才行。
```lua
-- 定义初始的数量为4,目标组名称为"party"
local number = 4
local partyName = "party"
-- 如果玩家在团队中,就将数量设为40,目标组名称设为"raid"
if UnitInRaid("player") then
number = 40
partyName = "raid"
end
-- 循环遍历目标组中的单位
for i = 1, number do
-- 构建目标单位的标识
local targetUnit = partyName.. i
-- 如果玩家能够攻击这个目标单位
if UnitCanAttack("player", targetUnit) then
-- 将这个目标设为当前目标
TargetUnit(targetUnit)
-- 释放名为“变形术”的法术
CastSpellByName("变形术")
-- 在目标组中发送聊天消息,告知目标被控制并变羊了
SendChatMessage(targetUnit.. " 被控制,我把他变羊了~", partyName)
-- 一旦成功就跳出循环
break
end
end
```
7随机变羊,猪,乌龟宏
/script
local strings = {"", ":龟", ":猪"}
local messages = {"%t变羊了", "%t是乌龟", "%t是猪"}
local random_number = random(3)
local spell_to_cast = "变形术".. strings[random_number]
CastSpellByName(spell_to_cast)
local message_to_send = messages[random_number]
SendChatMessage(message_to_send, "yell")
在这里我们可以详细解释一下这个脚本的作用。,定义了两个表,一个是strings表,里面存放了一些特定的字符串,这些字符串可能与某种游戏中的角色或者状态相关。另一个是messages表,这里面的消息内容也与游戏中的相关情况有关。,通过random函数随机生成一个0到2之间的数字(这里假设random函数的取值范围是0到2),这个数字用来确定从两个表中选取相应的元素。接着,将特定的字符串与“变形术”拼接起来,形成要释放的法术名称,使用CastSpellByName函数来释放这个法术。最后,选取对应的消息内容,通过SendChatMessage函数以“yell”(可能是一种聊天频道类型)的方式发送出去。这整个脚本的流程可能是用于在某个游戏场景中,随机地释放一种变形术并发送相应的消息。
可以根据变的种类喊话,想喊什么自己改
8火冲打图腾
/local t = {"根基", "战栗", "地缚", "灼热", "清毒"}
/local n
/local i
/for _, i in pairs(t) do
n = i.."图腾"
TargetByName(n, 1)
end
/CastSpellByName("火焰冲击(等级1)")
在这里,我们定义了几个局部变量t、n和i。t是一个包含了一些特定名称(如“根基”“战栗”等)的表。通过一个循环,对于表t中的每个元素i,我们将其与“图腾”组合成新的名称n,接着以这个新名称n为目标(通过TargetByName函数,目标值设为1)。最后,使用CastSpellByName函数来施展名为“火焰冲击(等级1)”的法术。这种处理方式在很多游戏编程或者脚本编写场景下,有助于实现特定的游戏操作逻辑,比如在游戏中按照一定顺序对特定的图腾目标进行火焰冲击法术的释放等。
如果角色“player”没有被施加“冰棺(Ice Block)”增益效果,那么就施展“冰棺”法术。
这个命令可以狂按来释放冰箱而不用担心取消冰箱。
这包括奥术能量。
有两种方式可以取消冰箱效果,一种是通过“/unbuff Ice Block”这个指令,另一种则是手动点击将其去掉。
在11号脚本里,如果“目标”能够对“玩家”进行攻击的话,那就施展名为“暴风雪”的法术;反之,则施展名为“暴风雪(等级1)”的法术。
如果有目标的话,顶级下雪(技能之类的吧,不太明确具体含义);要是没有目标,那就1级下雪,这个在PVP(玩家对战玩家)和PVE(玩家对战环境)中都能使用,还能节省魔法值(蓝量),并且可以用来抓贼……
在游戏中,我们常常需要执行一些特定的操作来应对各种情况。例如,当面临某些法术攻击时,我们可能要先停止正在释放的法术,这时候就可以使用“SpellStopCasting();”这个指令。而紧接着,为了进行防御或者反击,我们会施展一个名为“法术反制”的法术,对应的操作就是“CastSpellByName(‘法术反制’)”。
停止当前施法 反制
停止施法操作,这个操作可以用“SpellStopCasting();”来表示。,要施展名为“闪现术”的法术,对应的指令是“CastSpellByName("闪现术")”。这一系列操作在某些游戏场景或者特定的魔法模拟情境下是非常常见的。比如在一些大型多人在线角色扮演游戏(MMORPG)中,当玩家需要快速躲避敌人的攻击或者跨越一些地形障碍时,就会先停止当前正在施展的法术(如果有的话),迅速施展像“闪现术”这样的瞬间移动法术来改变自己的位置。这种操作流程是玩家在游戏中应对各种突发情况,提高自身生存能力或者实现战略转移的重要手段。
同上...
13法师冰箭宏
触发了节能自动释放奥弹
装备不好的法师可以考虑
/script
local i = 1
local m = 0
while (UnitBuff("player", i) ~= nil) do
local buff = UnitBuff("player", i)
if (string.find(buff, "Spell_Shadow_ManaBurn") ~= nil) then
m = 1
end
i = i + 1
end
local c = CastSpellByName
if (m == 1) then
c("Arcane Missiles")
else
c("Frostbolt")
end
14号的时候施放奥术强化。下面这个宏直接复制粘贴就可以用来短暂开启饰品栏下面那一格的操作:/script SpellStopCasting(); /script UseInventoryItem(13); /script UseInventoryItem(14);要是这都不会的话,那可真有点说不过去了。还有啊,AP(这里应该是某种技能或者效果之类的,根据上下文推测)一定要比ZG护符先启动才行。
15奥术强化+护符+炎爆术
护符放哪里无所谓,会自动开已经冷却的护符
/script
local castSpellByName = CastSpellByName
local getInventoryItemCooldown = GetInventoryItemCooldown
local useInventoryItem = UseInventoryItem
local spellStopCasting = SpellStopCasting
local player = "player"
castSpellByName("奥术强化")
spellStopCasting()
local _, duration, enabled = getInventoryItemCooldown(player, 13)
if duration < 2 and enabled then
useInventoryItem(13)
else
_, duration, enabled = getInventoryItemCooldown(player, 14)
if duration < 2 and enabled then
useInventoryItem(14)
end
end
spellStopCasting()
castSpellByName("炎爆术")
16气定神闲+炎爆术
/施放 气定神闲
“/script SpellStopCasting();”这一指令在脚本编写中具有特定的作用。它是一个脚本指令,主要功能是停止正在进行的施法动作。例如在一些游戏开发场景里,当角色处于施法状态,而由于某些特殊情况需要立即中断施法时,就会用到这样的指令。这个指令的存在有助于完善游戏中角色行为逻辑的控制,确保在各种复杂的游戏情境下,角色的动作能够按照预期进行调整。
/施放 炎爆术
17平时冰箭,出灵风8件效果就火球
以下是一段用Lua编写的脚本。在这个脚本里,定义了几个变量,像“c”、“i”、“b”和“f”,这里的“c”被设定为等同于“CastSpellByName”这个函数。接下来呢,有一个循环,这个循环是从1到16进行的。对于每一个循环中的数字“i”,会去检查玩家("player")身上的增益效果(UnitBuff),这里把这个增益效果存到变量“b”里。要是这个“b”存在,并且在这个“b”所代表的字符串里能找到“Telep”这个字符,那就把变量“f”设为1,就跳出这个循环了。如果经过前面的操作,“f”这个变量为真(也就是前面找到了包含“Telep”的增益效果),那就调用“CastSpellByName”这个函数来施展“火球术”;要是“f”为假,也就是没有找到那样的增益效果,那就调用这个函数来施展“寒冰箭”。
这类宏存在一个特性,那就是平常使用小技能,而在特定的增益状态(buff)出现之后就切换为大技能。例如,在此处冰箭就属于小技能,火球则为大技能。
宏是游戏中一种非常实用的工具,它能够让玩家根据不同的游戏场景快速地切换技能使用策略。在很多游戏里,技能有着不同的伤害输出或者效果作用,小技能往往在资源消耗或者冷却时间上有着一定的优势,适合在常规状态下频繁使用。而大技能呢,通常具有较高的伤害或者特殊的效果,但可能会受到更多的限制,像是较长的冷却时间或者高额的资源消耗。在这种宏的操作逻辑下,当特定的buff出现时,这个时候使用大技能就能够发挥出更强大的威力,实现玩家在游戏战斗中的效益最大化。就像在这个例子里,冰箭作为小技能,可能在日常战斗中可以持续输出,而火球作为大技能,在特定buff加持下使用,能打出高额伤害。
既然已经区分出了大小,那么就明白该如何进行修改了。火球术能够被改换成其他的“大型技能”,例如炎爆术。
冰箭这个技能是能够被其他“小技能”所替换的,像灼烧就可以。大家都是用的中国字,可别说自己不会啊。
18平时冰箭,出奥术专注效果就火球
以下是一段用Lua脚本语言编写的代码逻辑。其主要功能是这样的:
在这段脚本中,定义了几个变量,这里的“c”变量被设定为通过法术名称来释放法术的功能(等同于“CastSpellByName”这个操作),“i”是一个循环变量,用于计数,“b”用于存储玩家身上的增益效果(“UnitBuff”相关),“f”则是一个标志变量。
接下来有一个循环,这个循环从1到16进行计数。在每次循环中,都会检查玩家身上的第“i”个增益效果(通过“UnitBuff("player", i)”获取),并将其存储在“b”变量中。如果这个“b”存在,并且其中包含“ManaB”这个字符串(通过“strfind(b, "ManaB")”来检查),那么就将“f”设置为1,跳出这个循环。
在循环结束之后,会进行一个判断。如果“f”的值为1,那就意味着玩家身上存在特定的增益效果(包含“ManaB”的增益),此时就停止正在释放的法术(“SpellStopCasting()”),释放“火球术”(通过“c("火球术")”)。反之,如果“f”不为1,也就是玩家身上没有那个特定的增益效果,那就释放“寒冰箭”(“c("寒冰箭")”)。
和前面所说的一样,火球术这个技能是能够替换成其他技能的,例如炎爆术或者奥术飞弹之类的。还有,冰箭这个技能呢,是可以被改成灼烧技能的。
平时冰箭,出奥术专注 或 出灵风8件效果就火球
奥术专注这个技能的效果是下一个法术免费。所以呢,一旦这个特效触发了,就得立刻把正在释放的法术取消掉,换一个伤害更高或者效果更强的法术。要是不这么做的话,这个免费的特效就会被正在释放的法术给浪费掉了,那就太可惜了。因为这个特效的价值就在于能够让下一个法术免费释放,如果当前法术继续释放下去,就相当于浪费了一次免费释放更强大法术的机会。
灵风套装有8件,它的效果是下一个法术能够瞬发,不过正在引导的法术不会受到这个效果的影响。因此,不需要取消当前正在引导的法术。
因为存在256字节的限制,所以要是取消的话就得两个都取消,不然就都不取消。这就意味着必须全部取消,如此一来,灵风将会损失当前正在引导的法术。
要是有这样一种损失,其程度相当于半个冰箭或者半个灼烧,倘若大家觉得这种损失是能够被接受的,那么就使用这个合并版吧。
```lua
-- 定义一个函数用于释放法术,这里使用c来指代CastSpellByName函数
local c = CastSpellByName
-- 循环检查玩家身上的增益效果(buff)
for i = 1, 16 do
-- 获取玩家身上第i个增益效果并赋值给b
local b = UnitBuff("player", i)
-- 如果存在这个增益效果,并且其名称包含"ManaB"或者"Telep"
if b and (string.find(b, "ManaB") or string.find(b, "Telep")) then
-- 设置一个标志f为1,表示满足特定条件
local f = 1
-- 满足条件就跳出循环
break
end
end
-- 如果标志f为真,即满足之前的条件
if f then
-- 停止正在释放的法术
SpellStopCasting()
-- 释放“火球术”
c("火球术")
else
-- 否则释放“灼烧”
c("灼烧")
end
```
在这段代码逻辑中,我们主要是对玩家身上的增益效果进行检测。在游戏相关的编程场景下,这样的检测往往是为了根据玩家当前的状态(是否具有特定增益)来决定释放不同的法术。例如,当玩家身上有特定的增益效果(如名称包含"ManaB"或者"Telep"的增益)时,就停止正在释放的法术并改为释放“火球术”,如果没有这样的增益效果则释放“灼烧”法术。这种根据不同状态执行不同操作的逻辑在游戏技能管理中是很常见的。
1级奥暴骗节能,出节能就用顶级奥暴
以下是一段用Lua编写的代码脚本。这段脚本主要是用于处理游戏中的技能释放逻辑。
在这个脚本里,定义了几个变量,“c”、“i”、“b”和“f”,这里的“c”是通过“CastSpellByName”来定义的。呢,有一个循环,这个循环从1到16。在每次循环中,会获取玩家("player")身上的第“i”个增益效果(buff),并把这个效果赋值给“b”。
要是这个“b”存在,并且在这个“b”中能找到包含“ManaB”这个字符串的话,就把“f”的值设为1,直接跳出这个循环。
循环结束之后,就会进行一个判断。要是“f”的值为1的话,就停止当前正在释放的法术(SpellStopCasting),释放“魔暴术”这个技能;要是“f”的值不为1,那就释放“魔暴术(等级1)”这个技能。
19灼烧叠5层就火球,否则继续灼烧
以下是一段Lua脚本代码,它的功能是根据目标身上的减益效果(Debuff)来决定释放何种法术。
,定义了几个变量。这里使用“CastSpellByName”这个函数来给变量“c”赋值,这个函数可能是用于根据法术名称来施展法术的。,有一个循环,循环从1到16。在这个循环里面,获取目标(“target”)身上的第“i”个减益效果,将其名称赋值给“d”,持续时间赋值给“n”。如果这个减益效果存在(“d”不为空),并且在其名称中能找到“SoulB”这个字符串,那么就把变量“f”设置为1,并且跳出循环。
循环结束之后,会进行一个判断。如果“f”的值为1,并且减益效果的持续时间“n”等于5,那么就施展“火球术”(通过调用之前定义的“c”函数并传入“火球术”这个法术名称);否则的话,就施展“灼烧”这个法术。
```lua
local castSpellByName = CastSpellByName
local hasDebuff = false
local debuffDuration = 0
for index = 1, 16 do
local debuffName, duration = UnitDebuff("target", index)
if debuffName and string.find(debuffName, "SoulB") then
hasDebuff = true
debuffDuration = duration
break
end
end
if hasDebuff and debuffDuration == 5 then
castSpellByName("火球术")
else
castSpellByName("灼烧")
end
```
20打贼奥爆宏
有目标就放最高级奥暴,没有目标就放1级奥暴
If the "target" is able to attack the "player", then use the "魔暴术" spell. Otherwise, cast the "魔暴术(等级 1)" spell.
在这里,我们主要是改变了句子的表述结构,将原来代码形式的结构改为更自然的条件陈述结构,并且使用了“use”和“cast”这组同义词来替换原句中的“CastSpellByName”,以达到降低相似度同时保持原意的目的。
21自动补 冰甲术,奥术智慧,魔法抑制
缺啥补啥,闲着没事按按能强身健体,定国安邦……
以下是一段用Lua语言编写的脚本。定义了两个表,一个表`n`包含了三个字符串"tArm"、"lSen"、"hMag",另一个表`s`包含了三个对应的字符串"冰甲术"、"奥术智慧"、"魔法抑制"。
接下来有一个循环,循环变量`k`从1到3。在这个循环内部,先将变量`f`设为`nil`。有一个内层循环,循环变量`j`从1到16。这个内层循环的目的是检查玩家("player")身上的增益效果(`UnitBuff`)。对于每个增益效果`b`,如果这个`b`存在并且在其中能找到表`n`中索引为`k`的字符串(`strfind`函数用于查找字符串),那么就将`f`设为1并且跳出内层循环。
如果经过内层循环后`f`仍然不是1(也就是没有找到对应的增益效果),那么就通过`CastSpellByName`函数来释放表`s`中索引为`k`的法术,并且跳出外层循环。外层循环结束后整个脚本就执行完毕了。
```lua
local spellNames = {"tArm", "lSen", "hMag"}
local spellDisplayNames = {"冰甲术", "奥术智慧", "魔法抑制"}
local function checkAndCastSpell()
for index = 1, 3 do
local foundBuff = false
for buffIndex = 1, 16 do
local buff = UnitBuff("player", buffIndex)
if buff and string.find(buff, spellNames[index]) then
foundBuff = true
break
end
end
if not foundBuff then
CastSpellByName(spellDisplayNames[index])
break
end
end
end
checkAndCastSpell()
```
22自动把被控制的队友变羊,小队,团队通用版
BOSS如果能够控制玩家的话,就会非常有用,像哈卡、AQ神庙1号BOSS就是如此。这种BOSS具备控制玩家的能力,在战斗中会给玩家带来特殊的挑战和体验。哈卡作为一个典型的例子,它的某些技能或许可以对玩家进行控制,从而影响战斗的走向。而AQ神庙1号BOSS同理,其控制玩家的能力也是战斗中的一个重要因素,玩家需要针对这种情况制定特殊的战斗策略来应对。
以下是一段用Lua语言编写的脚本内容。在这段脚本里,我们先定义了两个变量,一个是数值型变量n,初始值设定为4,还有一个字符串型变量p,它被初始化为"party"。接下来呢,有一个判断语句,如果当前玩家处于团队副本(也就是UnitInRaid("player")这个条件为真的时候),那么就把n的值修改为40,同时把p的值改成"raid"。
之后呢,有一个循环结构,这个循环会根据n的值来决定循环的次数。在每次循环的时候,我们会创建一个新的字符串t,这个t是由p和i组合而成的。例如,如果p是"party",i是1,那么t就变成了"party1"。再进行一个判断,如果玩家能够攻击由t表示的这个目标(也就是UnitCanAttack("player",t)这个条件为真),那就把这个目标设置为当前的攻击目标(TargetUnit(t)),施展一个名为“变形术”的法术(CastSpellByName("变形术")),并且向特定的频道(这个频道是由p决定的,如果p是"party"那就是队伍频道,如果是"raid"就是团队频道)发送一条消息,消息内容是“某某目标被控制了,我把他变羊了~”,这里的某某目标就是通过%t来表示的,最后结束这个循环(break)。整个循环结束后,这段脚本的主要功能也就完成了。
23随机变羊,猪,乌龟宏
在脚本(script)里,我们先定义了一些数据。有这么几个数组,一个数组是s和m,s包含三个元素,分别为空字符串、“:龟”以及“:猪”;m也包含三个元素,分别是“%t变羊了”、“%t是乌龟”、“%t是猪”。有一个变量r,它的值是通过随机函数random(3)得到的一个介于0到2之间的随机数。接下来呢,就会根据这个随机数r去构建一个法术名称,这个法术名称是“变形术”加上s数组中索引为r的元素。最后,还会发送一个聊天消息,这个消息的内容是m数组中索引为r的元素,发送的频道是“yell”(大喊)。
可以根据变的种类喊话,想喊什么自己改
法师自动制造各种魔法宝石
SuperMacro版,宏写不下
左边窗口:
右边窗口:
Code (c):
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
The function named "ConjureManaStone" is what we are going to talk about here. This function, presumably, has the purpose of creating or conjuring a mana stone. A mana stone, in many fictional or game - related concepts, is an important item that is often associated with the storage or manipulation of magical energy, known as mana. So, this "ConjureManaStone" function might be a crucial part within a certain system, perhaps in a game development context where magic and related elements are involved. It could be used to provide a character with a source of mana, or it might be involved in some kind of magical crafting or ritual within the game's mechanics.
在本地(local)有一些定义,其中包括一个名为x的表,这个表包含了“红宝石”、“黄水晶”、“翡翠”、“玛瑙”这些元素,还有一个名为j的变量,它被初始化为1,还有变量b、s、l、f(虽然这里没有给出它们的初始值或者更多的定义信息)。
while j<5 do
f=nil;
for b=0,4 do
for s=1,18 do
设b和s为相关变量,通过GetContainerItemLink这个函数(此函数的作用可能是获取容器中的物品链接之类的操作),将结果赋值给l,即l等于GetContainerItemLink(b, s)。
If I exist and there is a "strfind" operation on me to find the string "法力" followed by x[j], then...
f=j;break;
end;
end;
if f then break;end;
end;
if f then j=j+1;
否则,通过名称施展法术“制造魔法”以及x[j];中断(操作)。
end;
end;
end;
24冰箱开关
冰箱宏
,我们要停止正在释放的法术。在脚本中,这可以通过“SpellStopCasting();”来实现。接下来,需要检查一个法术(这里假设其编号为159,目标为0)的冷却时间是否已经结束。如果该法术(编号159,目标0)的冷却时间,也就是通过“GetSpellCooldown(159,0)”获取到的值等于0的话,那么就执行释放这个法术(编号159,目标0)的操作,这一操作是通过“CastSpell(159,0);”来达成的。最后,以“end”来表示这一逻辑判断和操作的结束。
取消冰箱宏
If the time elapsed since the last cooldown of spell number 159 (in slot 0) is less than 10 seconds when measured by the GetTime function, then the CastSpell function should be invoked for spell 159 in slot 0.
效果说明:
冰箱有时候按一次没反应,不小心按了两次的话又会被取消操作,这一问题让很多师傅都很头疼。
不少冰箱存在这样一种状况,就是当我们去操作它的时候,按一次操作键,可能会出现没有任何作用的情况。而在这种时候,要是不小心又按了一次,也就是总共按了两次的话,之前的操作就被取消了。这对于许多维修冰箱或者经常使用冰箱的师傅们来说,是一个颇为棘手的问题,他们往往会因为这个问题而感到困扰,不知道如何才能更有效地避免这种情况的发生,或者找到一个妥善的解决办法。
这里将冰箱和取消冰箱做成两个宏。
当需要用到冰箱的时候,只要一个劲儿地按第一个宏就好了。,不用担心按多了会把冰箱功能给取消掉。
补充:
要注意这里的“159”(坐标为(159,0)中的159),每个人对应的这个数字是不一样的。在实际运用的时候,一定要把这个数字替换成自己的实际数字。这个数字其实是法术顺序号,具体怎么确定呢?就是打开技能书,从第一个法术开始,一页一页地往下数。假如数到第159个法术的时候发现是冰箱(这里的冰箱是一种技能的代称),那你就使用159这个数字;要是数到第100个法术是冰箱的话,那就使用100这个数字。
小技巧:
下面这个宏能够被用来输出第x个法术是什么,这有助于你进行检验。
在脚本中,执行这样一个操作:将特定的咒语名称(这里是通过函数GetSpellName,以X为参数,索引值为0获取到的咒语名称)添加到默认的聊天框架(DEFAULT_CHAT_FRAME)当中。具体的代码语句为“/script DEFAULT_CHAT_FRAME:AddMessage(GetSpellName(X,0))”。这一操作在相关的编程或者游戏脚本编写场景下可能有着特定的用途,比如在游戏中,可能是为了在聊天界面显示某个技能(咒语)的名称等。
25霜之新星
```
/script
local mana = UnitMana("player");
if (mana < 65) then
CastSpellByName("霜之新星(等级1)");
end
```
或者
```
/script
if (UnitMana("player") is less than 65) then
CastSpellByName("霜之新星(等级1)");
end
```
再或者
```
/script
var playerMana = UnitMana("player");
if (playerMana < 65) {
CastSpellByName("霜之新星(等级1)");
}
```
/script
If the mana of the "player" unit is greater than or equal to 65, then cast the spell named "霜之新星".
End.
效果说明:若要施放最高级别的(4级)霜之新星,然而蓝量不足时,则使用最节省蓝量的1级霜之新星。
这个宏的设置是这样的:当蓝量低于65的时候就会选择1级新星,不过呢,你也能够按照自己的需求对这个设置进行修改。
[color="Orange"]12:冰锥
/script
If the mana of the "player" unit is less than 50, then cast the spell named "冰锥术(等级1)".
End.
如果“玩家”单位的法力值低于50,那么就施展名为“冰锥术(等级1)”的法术。结束。
If the mana of the "player" unit is greater than or equal to 500, then cast the spell named "冰锥术" (Ice Lance).
在游戏编程等情境下,这种逻辑判断是很常见的。当涉及到角色(这里是名为“player”的单位)的资源管理时,魔法值(mana)的数量决定了能否施展特定技能。就像这里,只有当“player”的魔法值达到500或者更多的时候,才会触发释放名为“冰锥术”这个技能的操作。这有助于合理安排游戏中的角色能力和战斗节奏等相关的游戏机制。
效果说明:跟上一个宏类似,这个宏的作用是,在蓝量较少的时候自动施展最低级别(1级)的冰锥术。
有这么两个宏,在风筝AE精英怪的时候能发挥特别大的作用。它们可以用来节省魔法值,并且能够拖延时间以让魔法值回复。
26
以下是一段Lua脚本代码:
```lua
-- 遍历背包,这里的0,4,1表示从背包索引为0开始,到4结束(可能是不同类型的背包,步长为1)
for bag = 0, 4, 1 do
-- 针对每个背包,从第1个格子开始,到该背包的格子总数,步长为1进行遍历
for slot = 1, GetContainerNumSlots(bag), 1 do
-- 获取背包特定格子中的物品链接
local name = GetContainerItemLink(bag, slot)
-- 如果获取到了物品链接并且在这个链接中能找到特定的颜色代码"ff9d9d9d"(可能表示灰色品质物品)
if name and string.find(name, "ff9d9d9d") then
-- 在默认聊天框中发送要出售这个物品的消息
DEFAULT_CHAT_FRAME:AddMessage("Selling "..name)
-- 使用这个物品(可能在交易界面下就会触发出售操作)
UseContainerItem(bag, slot)
end
end
end
```
这个脚本的作用是:对背包里的所有格子进行搜索。当碰到商人并且打开交易界面的时候,如果在某个格子里发现物品的颜色代码显示其为灰色品质的物品,就会将其出售。这种脚本可以帮助玩家在游戏中清理那些不需要的灰色品质物品,避免背包空间被无用的物品占据,从而提高背包的有效利用率,让玩家能够更方便地管理自己的物品。
27做水
/stand
If the mana of the "player" unit is greater than 780, then cast the spell named "Create Water (Level 7)". Otherwise, use the item in the first slot of the container. End of the statement.
效果说明:如果有蓝量的话,就进行造水操作;要是蓝量不够了呢,就会自动停止造水转而喝水。这里有个前提条件,那就是要把水放在第一个包裹的第一个位置上。
[color="Orange"]4:吃喝
如果玩家的单位生命值与单位最大生命值的比值小于0.7,那么就使用容器物品(0,2)。这是通过这样的脚本逻辑来实现的:在脚本中设定一个判断条件,当“玩家的单位生命值/单位最大生命值”这个比例低于0.7的时候,就执行使用容器物品(0,2)这一操作。这有助于在游戏或者相关场景中,根据玩家的生命值状态来触发特定的物品使用功能,从而可能影响游戏进程或者玩家在该场景中的体验等。
If the ratio of the player's current mana to the maximum mana (UnitMana('player') / UnitManaMax('player')) is less than 0.7, then the action of using the item in the container at position 0, with an amount of 1 (UseContainerItem(0, 1)) should be carried out. And that's all for this operation.
效果阐释:此宏专为那些比较“懒”的法师而设。当法师的生命值或者法力值低于70%的时候,就会坐下来,并且自动判定是食用补充品还是饮用补充品。要知道,在游戏当中,法师常常需要及时补充生命或者法力,而这个宏就提供了一种便捷的方式。对于那些不想花费太多精力去手动操作补充生命或法力的法师来说,这个宏无疑是非常实用的。它可以根据自身的情况,自动做出选择,让法师能够更专注于战斗或者其他游戏任务,无需分心去考虑什么时候该吃、什么时候该喝的问题。
前提是把水放在第一个包的第一个位置,而面包则要放在第二个位置。
28最完美的冰箱宏:
,我们需要停止正在释放的法术,这就用到了“SpellStopCasting”这个操作,所以执行“SpellStopCasting();”。接着,要取消“冰棺(Ice Block)”这个增益效果,也就是“CancelBuff("Ice Block");”。呢,我们得查看一下编号为179的法术(这里假设这个法术与后面的操作有特定关联)在0号单位(这里的0号单位可能是针对特定的游戏对象或者角色等)上的冷却时间。如果这个冷却时间大于等于2秒的话,就释放编号为147的法术,也就是执行“CastSpell(147,0);”。要是冷却时间不满足这个条件,也就是小于2秒的话,那就通过法术名称来释放“冰棺(Ice Block)”这个法术,即执行“CastSpellByName("Ice Block");”,整个操作到这里就结束了。
功能:正在释放法术的时候将其中断,使用冰箱。要是处于冰箱之中,就解除冰箱状态。如果冰箱的冷却时间多于2秒,那就使用急冷技能。传统的冰箱宏虽然能够处理在冷却期间使用急冷的情况,可是却无法像从技能书里拖出冰箱技能那样实现一键开启、一键解除的操作,而这个宏把这两者的功能整合到了一起,这需要supermacro的cancelbuff语句提供支持。
注:在这里,179是我现在所使用冰箱的编号,而147则是急冷(功能或者区域之类,具体视实际情况而定)的编号,以下内容中相同情况均按此表示。
29一键4种魔法石按顺序吃:
/use Mana Ruby
/use Mana Citrine
/use Mana Jade
/use Mana Agate
从大到小顺序,不用再为他们准备不同的格子了
30/stand
/script
If the mana of the "player" unit is greater than the mana cost of your "Create Water" spell, then cast the "Create Water (Level X)" spell by name. Otherwise, use the item in the first slot (0) of the container as the first item (1).
水放在包的0。1位置
自动饮食:
---
在脚本(script)中,如果玩家(player)的当前生命值(UnitHealth)与最大生命值(UnitHealthMax)的比值小于0.8的话,那就使用容器中的物品(UseContainerItem),这里的物品由特定的参数X1和X2来确定。
If the ratio of the player's current mana to the maximum mana is less than 0.8, then use the item in the container at the specified positions (X1, X2). In a game scenario, mana is a crucial resource for the player. It often determines the actions that can be taken. When the current mana is significantly lower compared to the maximum amount, it might be necessary to utilize certain items from the container to replenish or manage the mana situation. Here, the condition of the mana ratio being less than 0.8 serves as a trigger for using the item in the container at the given positions.
冰环寒流
---
/cast Frost Nova(Rank 4)
/cast Frost Nova(Rank 1)
在脚本(script)中,我们通过“GetSpellCooldown(21, SpellBookFrame.bookType)”这个函数来获取法术编号为21的冷却时间(cooldown),这里的冷却时间与法术书框架(SpellBookFrame)中的书籍类型(bookType)相关。将获取到的冷却时间赋值给“last_cast”和“cooldown”这两个变量。如果这个冷却时间等于0的话,那就使用“CastSpellByName("Cold Snap")”这个指令来施展名为“Cold Snap”(急速冷却)的法术。
协助宏
---
/script ClearTarget();
/assist Character
---
自动释放免费奥术飞弹
---
/script
local query;
local texture;
for i = 0, 15, 1 do
texture = GetPlayerBuffTexture(i);
if (texture and string.find(texture, "ManaBurn")) then
query = 1;
break;
end
end
if (query ~= nil) then
CastSpellByName("Arcane Missiles(Rank X)");
else
CastSpellByName("[Spell you use often](Rank X)");
end
/script
// 定义两个局部变量,一个用于查询的标识(这里重新命名为checkValue),一个用于获取玩家的增益效果纹理(改名为buffTexture)
local checkValue;
local buffTexture;
// 我们要在从0到15(步长为1)的范围内进行循环操作
for aNumber = 0, 15, 1 do
// 获取玩家在当前循环次数对应的增益效果纹理
buffTexture = GetPlayerBuffTexture(aNumber);
// 如果这个纹理存在并且在这个纹理的描述中能找到"ManaBurn"这个字符串
if (buffTexture and string.find(buffTexture, "ManaBurn")) then
// 就将查询标识设为1,表示找到了符合条件的情况
checkValue = 1;
// 一旦找到就跳出循环,不需要再继续查找了
break;
end
end
// 如果查询标识不是空值(意味着之前找到了符合条件的情况)
if (checkValue ~= nil) then
// 就释放名为"Arcane Missiles(Rank X)"的法术
CastSpellByName("Arcane Missiles(Rank X)");
// 如果查询标识为空值(也就是没找到符合条件的情况)
else
// 就释放一个经常使用的法术(这里假设为[Spell you use often](Rank X))
CastSpellByName("[Spell you use often](Rank X)");
end
---
Arcane Missiles (Rank 7)对应的是奥术飞弹(等级7),其他的情况与之类似。
ManaBurn属于节能的BUFF,这一点无需更改中文内容,不过其他的技能名称则需要进行变更。
88灵风宏这个东西呢,在中文客户端里,如果把火球和冰箭的名称改成中文的话,大概就能够使用了。
/script
local i = 1
local m = 0
while (UnitBuff("player", i)!= nil) do
local buff = UnitBuff("player", i)
if (string.find(buff, "Spell_Shadow_Teleport")!= nil) then
m = 1
end
i = i + 1
end
local castSpell = CastSpellByName
if (m == 1) then
castSpell("Fireball")
else
castSpell("Frostbolt")
end
在这段代码中,初始化了两个变量,一个是i被初始化为1,另一个是m被初始化为0。进入一个循环,只要玩家("player")身上的第i个增益效果(UnitBuff)不为空,就会进行后续操作。在循环内部,先获取这个增益效果的具体信息赋给变量buff,接着检查这个增益效果中是否包含名为"Spell_Shadow_Teleport"的字符串,如果包含,就将m的值设为1。每次循环后i的值会增加1。之后定义了一个名为castSpell的变量来表示施法函数(CastSpellByName)。最后根据m的值,如果m等于1就释放"Fireball"法术,否则就释放"Frostbolt"法术。
灰色物品自动售出 不知道是否好用……
当你买卖东西的时候自动售出所有灰色物品
Q u o t e:
Here is a script. Let's set the variable "bag" to 0, 4, and 1 respectively. Then, for the variable "slot", we will set it to start from 1, go up to the number of slots in the container (which is obtained by the function GetContainerNumSlots(bag)), and increment by 1 each time. For each iteration, we will get the link of the item in the container at the current "bag" and "slot" position and store it in the local variable "name". If this "name" exists and the string "ff9d9d9d" can be found within it, then we will send a message to the default chat frame saying "Selling " followed by the name of the item. And then we will use the item in the container at the current "bag" and "slot" position.
31法师解诅咒
/施放 解除次级诅咒
If the spell is targeting something, then target the spell on the player.
当你将目标指向敌人,或者没有目标的时候,这个宏就会对自身释放解除次级诅咒的法术,而且指向的目标不会发生改变。在应对术士,或者身中其他诅咒的情况时,这个宏是非常实用的。只要按下这个宏,就能把诅咒驱散掉,与此同时,所指向的目标依旧为敌人。此外,在一些特定的战斗场景中,比如与擅长诅咒技能的术士进行对战,或者是在副本中不小心被其他带有诅咒效果的技能击中时,这个宏就像是一个便捷的应急工具。它能够迅速生效,让玩家无需复杂的操作就可以在解除诅咒的同时,继续保持对敌人的攻击态势,不至于因为被诅咒而打乱战斗节奏。
当目前的目标为一个能够被施加魔法抑制的对象时,就会朝着这个目标施加(魔法抑制),而非针对自身。在很多魔法相关的情境或者规则体系之下,这种目标指向性是非常明确的。比如说在一些魔法战斗场景里,魔法的释放需要遵循特定的原则,像这样针对可被魔法抑制的目标进行操作,就是为了确保魔法的有效性和准确性,同时避免对自身造成不必要的影响。
要是将第一行替换成“/施放 魔法抑制(等级 x)”的话,就会转变为魔法抑制宏了哦。这里的x呢,要改成你目前所学会的魔法抑制的最高等级。
澄拾游戏