例子:简单的自动驱散
2026年9月2日大约 6 分钟
自动驱散
利用黑兔超级宏,可以自动扫描团队成员的光环列表,检测有害 debuff 并智能选择对应的驱散技能进行驱散。无需手动检查每个人,按一下即可完成驱散。
有简单的策略,会优先驱散1队和本队
需要你手动改很多东西,设置本职业的驱散法术和要驱散的技能ID。
可以配合一键加血使用,在一键加血宏上面使用这个宏就行。
有能力的,可以根据例子,开发一件驱散的超级宏插件赚赞助时长
注意
注意:这只是一个最简单的例子,需要你手动填入需要驱散的debuff以及你自己的驱散技能ID。
适用场景
- 副本中快速驱散队友的中毒/诅咒/魔法效果
- PVP 中紧急驱散队友的 debuff
- 批量清理团队成员的有害光环
使用方法
- 打开黑兔软件 → 超级宏
- 在编辑区填入【完整代码】函数代码
- 游戏内使用以下命令:
/s S AutoDispel()做成宏设置快捷键,按一下即可自动驱散。
完整代码
在黑兔软件 超级宏 编辑器中输入:
-- ============================================================
-- 自动驱散:一个函数搞定一切
-- 优先级:本小队 > 1队 > 其他
-- 用法:/s S AutoDispel()
-- ============================================================
function AutoDispel()
-- ============================================================
-- 配 置 区(按需修改)
-- ============================================================
-- 是否输出驱散调试信息(true=打印,false=静默)
local DEBUG = false
-- 最大施法距离(码)
local MAX_DIST = 40
-- ============================================================
-- 驱散法术配置表
-- 每个条目代表一个驱散法术(如驱毒术、解除诅咒等)
-- 目前只有德鲁伊的两个,其他职业的请根据需要添加。 最后别忘了把德鲁伊的注释掉
-- spellId: 玩家施放的驱散法术 ID
-- name: 法术名称(仅用于调试输出)
-- debuffs: 该法术可以驱散的 debuff 列表
-- auraId: 需要被驱散的光环法术 ID
-- name: debuff 名称(仅用于调试输出)
--
-- 使用前请根据自己的服务端版本填入正确的法术 ID!
-- 法术ID可通过数据库网站查询:https://db.heitu.org/80/
-- ============================================================
local DISPEL_SPELLS = {
{
-- 解除诅咒(德鲁伊)
spellId = 2782,
name = "解除诅咒",
debuffs = {
{ auraId = 5137, name = "火焰的召唤" },
{ auraId = 12741, name = "虚弱诅咒" },
-- 在这里添加更多需要解除诅咒的 debuff ...
},
},
{
-- 消毒术(德鲁伊)
spellId = 8946,
name = "消毒术",
debuffs = {
{ auraId = 7992, name = "减速毒药" },
-- 在这里添加更多需要驱散中毒的 debuff ...
},
},
}
-- ============================================================
-- 核心逻辑开始
-- ============================================================
-- 对单个目标尝试驱散,返回 true 表示已施法
local function tryDispel(guid, logPrefix)
local info = GetUnitInfo(guid)
if not info or info.health <= 0 then return false end
if Distance(guid) > MAX_DIST then return false end
if not info.auras then return false end
for _, dispelSpell in ipairs(DISPEL_SPELLS) do
for _, debuff in ipairs(dispelSpell.debuffs) do
for _, aura in ipairs(info.auras) do
if aura.spellId == debuff.auraId then
if DEBUG then
print(logPrefix .. ": " .. info.name .. " 中了[" .. debuff.name .. "] → 使用[" .. dispelSpell.name .. "]")
end
Spell(dispelSpell.spellId, guid)
return true
end
end
end
end
return false
end
local me = GetMeInfo()
local members = TeamMembers()
-- 不在团队,检查自己
if not members or #members == 0 then
if me and me.guid then
if DEBUG then print("自动驱散:不在团队中,仅检查自己") end
tryDispel(me.guid, "驱散自己")
end
return
end
-- 按优先级分组:本小队 / 1队 / 其他
local myParty, group1, others = {}, {}, {}
for _, m in ipairs(members) do
local guid = type(m) == "table" and m.guid or m
local info = GetUnitInfo(guid)
if info then
-- partyIndex <= 5 = 本小队,group == 1 = 1队
-- 如果你服务端的返回字段不同,请根据实际字段调整
if info.partyIndex and info.partyIndex <= 5 then
myParty[#myParty + 1] = guid
elseif info.group and info.group == 1 then
group1[#group1 + 1] = guid
else
others[#others + 1] = guid
end
end
end
-- 按优先级扫描:本小队 → 1队 → 其他
local scanOrder = {
{ list = myParty, label = "本小队驱散" },
{ list = group1, label = "1队驱散" },
{ list = others, label = "驱散" },
}
for _, section in ipairs(scanOrder) do
for _, guid in ipairs(section.list) do
if tryDispel(guid, section.label) then
return -- 本次按键只驱散一个,连续按键可清理更多
end
end
end
if DEBUG then print("无需驱散") end
end并且点击界面右上角的【保存并且同步到游戏】按钮
工作原理
- 所有配置(距离、调试开关、驱散法术表)都写在
AutoDispel()函数内部,一个函数搞定 - 内部定义了
tryDispel()局部函数处理单目标驱散判断 - 按下宏时,获取
TeamMembers()成员列表 - 按优先级分组:本小队 > 1队 > 其他
- 依次扫描每个分组的成员
- 通过
GetUnitInfo(guid).auras获取目标光环列表 - 逐个对比配置表
DISPEL_SPELLS中的 debuff 列表 - 发现匹配的 debuff 立即施放对应驱散法术并返回
- 每次按键只驱散一个 debuff(GCD 限制),连续按键可快速清理多人
配置说明
DISPEL_SPELLS 字段说明
每个驱散法术条目包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
spellId | number | 玩家施放的驱散法术 ID(如驱毒术、解除诅咒) |
name | string | 法术名称(仅用于调试输出) |
debuffs | table | 该法术可以驱散的 debuff 列表 |
debuffs 中每个条目:
| 字段 | 类型 | 说明 |
|---|---|---|
auraId | number | 需要被驱散的光环法术 ID |
name | string | debuff 名称(仅用于调试输出) |
如何添加新的驱散组
在 DISPEL_SPELLS 表中添加新条目即可。例如添加牧师的驱散魔法:
{
-- 驱散魔法(牧师/法师/德鲁伊)
spellId = 999999,
name = "驱散魔法",
debuffs = {
{ auraId = 999999, name = "诅咒" },
{ auraId = 999999, name = "妖术" },
-- ...更多需要魔法驱散的 debuff
},
},常见问题
问题1:按了没反应
- 确认黑兔版本 >= 1.11.15
- 检查函数内
DISPEL_SPELLS中的spellId是否正确(玩家施放的驱散法术 ID) - 检查
debuffs中的auraId是否正确(目标身上的 debuff 光环 ID) - 确认目标在施法距离内(默认 40 码)
问题2:怎么查看目标身上的光环法术 ID
可以使用以下 Lua 脚本遍历输出目标的所有光环:
local info = GetUnitInfo("target")
if info and info.auras then
for _, aura in ipairs(info.auras) do
print("光环ID: " .. aura.spellId .. " 剩余: " .. aura.endTime .. " 层数: " .. aura.applications)
end
end问题3:驱散法术 ID 怎么查
驱散法术 ID 是玩家释放的技能 ID,不是 debuff 的 ID。例如德鲁伊的驱毒术、解除诅咒等。可以通过数据库网站(如 db.heitu.org)查询对应版本的法术 ID。
问题4:可以同时驱散多个 debuff 吗
由于 GCD(公共冷却)限制,每次按键只能驱散一个 debuff。如果目标身上有多个 debuff,需要连续按键多次。脚本会按配置表中的顺序逐个匹配并驱散。
问题5:如何只驱散某一种类型
如果只想驱散中毒,可以在函数内的 DISPEL_SPELLS 中只保留驱毒术的条目,把其他条目删除或注释掉即可。