例子:双持狂暴战-单体输出
2026年6月15日大约 6 分钟
双持狂暴战单体输出宏
以60级双持狂暴战为例。核心机制是
英勇打击的智能排队与取消,通过监视主副手平砍计时器,在主手先于副手时挂上英勇打击,副手先于主手且怒气不足时取消英勇打击,确保当怒气少的时候,英勇打击只在主手释放英勇时打出去。
智能使用技能,通过CD和攻强来智能判断使用什么技能
原理:
血性狂暴/战斗怒吼(维持) → 斩杀(优先) → 嗜血 → 旋风斩 → 骗乱舞 → 英勇打击(事件回调)注意
需要黑兔版本 >= 1.11.17,如果正式版低于这个版本,请在黑兔设置里面开启测试版推送
技能优先级:
- 斩杀 — 目标血量低于20%时优先使用(攻强<2000 或 嗜血CD中)
- 嗜血 — 冷却好、怒气≥30 时释放
- 旋风斩 — 冷却好、怒气≥25 时释放
- 骗乱舞 — 没有乱舞光环且怒气≥70 时用断筋触发乱舞
- 英勇打击 — 通过事件回调自动管理,主手快于副手时排队,副手快且怒气<50 时取消
核心技巧:英勇打击不占GCD,通过精确控制它的开关时机,让英勇跟在主手平砍一起打出去,最大化怒气利用率。
使用方法
- 打开黑兔软件 → 超级宏
- 在编辑区填入以下完整代码
- 点击界面右上角的【保存并且同步到游戏】按钮
- 游戏内制作宏:
/s S Fury_DualWield(),设置快捷键一直按
提示
英勇打击的排队和取消由 RegisterOnceEvent 自动管理。每次执行 Fury_DualWield() 会重新注册事件回调,在下一次平砍结束时触发,触发一次后自动删除。
完整代码
-- ============ 双持狂暴战输出一键宏 ============
function Fury_DualWield()
local DEBUG = false -- 调试开关:true=输出调试信息,false=静默
local DEBUG_SWING = true -- 英勇打击回调调试开关
-- 技能/光环ID常量
local SPELL_BLOODRAGE = 2687 -- 血性狂暴
local SPELL_BATTLE_SHOUT = 11551 -- 战斗怒吼(如果学习了TAQ战吼,换成 25289)
local SPELL_BLOODTHIRST = 23894 -- 嗜血
local SPELL_WHIRLWIND = 1680 -- 旋风斩
local SPELL_EXECUTE = 20662 -- 斩杀
local SPELL_FLURRY_PROC = 7373 -- 断筋
local AURA_FLURRY = 12970 -- 乱舞光环
if DEBUG or DEBUG_SWING then print("====================================") end
M('/startattack')
M("/cancelaura 嗜血")
local rage = Power(1) -- 当前怒气值
if DEBUG then print("[怒气] 初始=" .. rage) end
-- 如果怒气不够使用一个嗜血了,就使用血性狂暴
if rage < 30 and SCT(SPELL_BLOODRAGE) == 0 then
if DEBUG then print("[技能] 血性狂暴 (怒气=" .. rage .. ")") end
Spell(SPELL_BLOODRAGE)
rage = Power(1)
if DEBUG then print("[怒气] 刷新=" .. rage) end
end
-- 如果没有战斗怒吼了,补一个
if rage > 10 and AuraRemainingTime(SPELL_BATTLE_SHOUT) == 0 then
if DEBUG then print("[技能] 战斗怒吼 (怒气=" .. rage .. ")") end
Spell(SPELL_BATTLE_SHOUT)
return
end
-- 常规阶段
local bloodthirstCD = SpellCooldownTime(SPELL_BLOODTHIRST) or 0
local whirlwindCD = SpellCooldownTime(SPELL_WHIRLWIND) or 0
local flurryActive = AuraRemainingTime(AURA_FLURRY) > 0
if DEBUG then
print("[状态] 嗜血CD=" ..
bloodthirstCD .. " 旋风斩CD=" .. whirlwindCD .. " 乱舞=" .. tostring(flurryActive) .. " 怒气=" .. rage)
end
-- 攻强小于2000或者嗜血CD的情况下,优先斩杀
if CanWarriorExecute() and (AP() < 2000 or bloodthirstCD > 0) then
if DEBUG then print("[判断] 可斩杀 (攻强=" .. AP() .. " 嗜血CD=" .. bloodthirstCD .. ")") end
if rage >= 15 then
if DEBUG then print("[技能] 斩杀 (怒气=" .. rage .. ")") end
Spell(SPELL_EXECUTE)
rage = Power(1)
if DEBUG then print("[怒气] 刷新=" .. rage) end
elseif DEBUG then
print("[跳过] 斩杀-怒气不足 (怒气=" .. rage .. " < 15)")
end
else
-- 然后是嗜血
if rage >= 30 and bloodthirstCD == 0 then
if DEBUG then print("[技能] 嗜血 (怒气=" .. rage .. ")") end
Spell(SPELL_BLOODTHIRST)
rage = Power(1)
if DEBUG then print("[怒气] 刷新=" .. rage) end
-- 然后旋风斩
elseif whirlwindCD == 0 and rage >= 25 then
if DEBUG then print("[技能] 旋风斩 (怒气=" .. rage .. ")") end
Spell(SPELL_WHIRLWIND)
rage = Power(1)
if DEBUG then print("[怒气] 刷新=" .. rage) end
-- 没有乱舞的时候,如果怒气大于70,就骗乱舞
elseif not flurryActive and rage >= 70 then
if DEBUG then print("[技能] 断筋-骗乱舞 (怒气=" .. rage .. ")") end
Spell(SPELL_FLURRY_PROC)
rage = Power(1)
if DEBUG then print("[怒气] 刷新=" .. rage) end
elseif DEBUG then
print("[跳过] 无可用技能 (怒气=" ..
rage .. " 嗜血CD=" .. bloodthirstCD .. " 旋风斩CD=" .. whirlwindCD .. " 乱舞=" .. tostring(flurryActive) .. ")")
end
end
-- 注册主手结束回调函数
RegisterOnceEvent("SWING_RESULT_HAND1", function()
local mainHandTime = AttackTime1()
local offHandTime = AttackTime2()
if mainHandTime > offHandTime then
if DEBUG_SWING then print("[英勇] 主手快于副手 (主手=" .. mainHandTime .. " 副手=" .. offHandTime .. ") → 释放英勇") end
M('/cast 英勇打击')
elseif DEBUG_SWING then
print("[英勇] 跳过 (主手=" .. mainHandTime .. " <= 副手=" .. offHandTime .. ")")
end
end)
-- 注册副手结束回调函数
RegisterOnceEvent("SWING_RESULT_HAND2", function()
local mainHandTime = AttackTime1()
local offHandTime = AttackTime2()
if mainHandTime < offHandTime then
-- 如果当前怒气小于50,马上取消英勇,就不打出去
if rage < 50 then
if DEBUG_SWING then print("[英勇] 取消 (怒气=" .. rage .. " < 50)") end
SC()
elseif DEBUG_SWING then
print("[英勇] 保留 (怒气=" .. rage .. " >= 50)")
end
elseif DEBUG_SWING then
print("[英勇] 跳过检测 (主手=" .. mainHandTime .. " >= 副手=" .. offHandTime .. ")")
end
end)
end自定义修改
调怒气门槛
if rage < 45 then -- 降到45更激进,提到60更保守50 怒气是取消英勇的安全线。如果装备好、怒气充裕,可以降到 45;如果经常缺怒,提到 60。
关闭英勇打击
如果你不想用英勇打击(如怒气紧张时),注释掉或清空两个 RegisterOnceEvent 块即可。或者直接改调用:
-- 不注册任何英勇打击回调
-- RegisterOnceEvent(...)换版本:修改技能ID
技能ID集中在文件头部,只改那几个常量即可:
开启调试日志
local DEBUG = true -- 查看主体逻辑的输出
local DEBUG_SWING = false -- 英勇打击回调刷屏快,单独关闭两个开关独立控制:DEBUG 管技能释放和状态变化,DEBUG_SWING 只管辖英勇打击的回调触发情况。
注意事项
- 这个宏需要一直按,建议绑定鼠标滚轮或高频按键,或者使用黑兔软件的按键精灵
- 英勇打击由事件自动管理,按宏的频率决定事件注册频率
RegisterOnceEvent触发一次即自动删除,每次执行宏会重新注册- 需要先在黑兔中开启改模型功能,超级宏会自动生效
M('/cancelaura 嗜血')用于取消嗜血光环,防止仇恨过高- 技能ID对应 60 版本,如果你用其他版本请调整头部的技能ID常量
- 必须双持单手武器(主手+副手),双手武器请用双手猛击战
常见问题
英勇打击打不出去
检查三个点:
DEBUG_SWING改为true,看聊天框输出- 怒气是否 ≥50(低于50会被副手取消)
- 主手计时器是否确实快于副手