先来说一下突破16位buff上限识别的原理,因为客户端原因玩家宏只能识别16个BUFF,但是通过buffalo插件可以显示32个buff,既然能显示,那我们就可以通过插件来读取这些buff。 /script XBuffalo={};local buffs={"复仇","智慧圣印","正义圣印","圣印"};for i=0,31 do btn=getglobal('BuffaloButton'..i);if btn:IsVisible() then GameTooltip:SetOwner(btn,"ANCHOR_BOTTOMLEFT"); GameTooltip:SetPlayerBuff(i);for _,b in ipairs(buffs) do if string.find(GameTooltipTextLeft1:GetText() or "",b) then XBuffalo[b]=true;end end end end 把需要读取的buff全添加进去,通过插件就可以识别
/script XBuffalo={};local buffs={"复仇","智慧圣印","正义圣印","圣印"};for i=0,31 do btn=getglobal('BuffaloButton'..i);if btn:IsVisible() then GameTooltip:SetOwner(btn,"ANCHOR_BOTTOMLEFT"); GameTooltip:SetPlayerBuff(i);for _,b in ipairs(buffs) do if string.find(GameTooltipTextLeft1:GetText() or "",b) then XBuffalo[b]=true;end end end end (删 插件buff提取宏 删) /script if XBuffalo["复仇"] then CastSpellByName("神圣打击") end (删 复仇状态满级神打,因为XBuffalo在这里属于table所以用中括号请大家注意 删) /script if XBuffalo["圣印"] and SpellReady("审判") then CastSpellByName("审判") end (删 有圣印就审判 删) /script if not buffed("智慧审判",t) and not XBuffalo["智慧圣印"] then CastSpellByName("智慧圣印") end /script if not XBuffalo["圣印"] then CastSpellByName("正义圣印")end (删 这两行就不说了注意中括号 删) /script CastSpellByName(UnitMana("player") > 1500 and "奉献" or "奉献(等级 1)") (删 蓝量1500 释放满级一级奉献 删) /script local t,c,k,cc,cs="target",CastSp删我ellByName,0;if UnitA删我ffectingCombat("player") and Ab删我ar_Mhr.et-GetTime() > 0.3 then for i=1,32 do cs,cc=UnitD删我ebuff(t,i);if strfind(cs or "","Holy_CrusaderStrike") then c(cc < 5 and "十字军打击" or "十字军打击(等级 1)");k=1;break;end;end;if k==0 then c("十字军打击") end;end (删 这个无视武器攻速,避免在普攻结束前0.3S内打十字军卡风怒 记得把删我删掉 删)
/script local t,b,c,r,k,fbb,btn,cs,cc="target",IsBuffActive,CastSpellByName,SpellReady,0;fbb=function(n) if b(n) then return true end;for i=0,31 do btn=getglobal('BuffaloButton'..i);if btn:IsVisible() then GameTooltip:SetOwner(btn,"ANCHOR_BOTTOMLEFT"); GameTooltip:SetPlayerBuff(i); if string.find(GameTooltipTextLeft1:GetText() or "",n) then return true end end end return false end;if not PlayerFrame.inCombat and UnitExists(t) then c("攻击") end;if fbb("圣印") and r("审判") then c("审判") end;if fbb("复仇") and r("神圣打击") then c("神圣打击") elseif not b("智慧审判",t) and not fbb("智慧圣印") then c("智慧圣印") elseif not fbb("圣印") then c("正义圣印") elseif r("奉献") then c(UnitMana("player") > 1500 and "奉献" or "奉献(等级 1)") elseif UnitAffectingCombat("player") and Abar_Mhr.et-GetTime() > 0.3 then for i=1,32 do cs,cc=UnitDebuff(t,i);if strfind(cs or "","Holy_CrusaderStrike") then c(cc < 5 and "十字军打击" or "十字军打击(等级 1)");k=1;break end;end;if k==0 then c("十字军打击") end;end 这是大佬写的一条龙宏 加快了响应时间 非大佬不可为也 不建议大家过多更改
感谢,另外我试着改动了下,把正义替换成了命令,然后若身上没有神圣力量,则放十字军圣印,结果总是一直卡在施放智慧圣印那里,老哥能看下为什么吗。 我在第一段监测buff里添加了 神圣力量 。 然后在智慧审判那行下面加了 /script if not XBuffalo["神圣力量"] then CastSpellByName("十字军圣印")end 结果变成了无限放智慧审判。。
/script local t,c,k,i,ct,s,cc,cs,cd1,cd2="target",CastSpellByName,0,0,GetTime();if UnitAffectingCombat("player") and Abar_Mhr and Abar_Mhr.st and Abar_Mhr.et-ct >= 1.3 and ct-Abar_Mhr.st > 0.2 then while s~="神圣打击" do i=i+1;s=GetSpellName(i,"spell") end;if not s then return end;cd1,cd2=GetSpellCooldown(i,"spell");if cd1==0 or (cd1+cd2) <= Abar_Mhr.et+0.1 then return end;for i=1,32 do cs,cc=UnitDebuff(t,i);if strfind(cs or "","Holy_CrusaderStrike") then c(cc < 5 and "十字军打击" or "十字军打击(等级 1)");k=1;break;end;end;if k==0 then c("十字军打击") end;end
/script local t,c,k,i,ct,s,cc,cs,cd1,cd2="target",CastSpellByName,0,0,GetTime();if UnitAffectingCombat("player") and Abar_Mhr and Abar_Mhr.st and ct-Abar_Mhr.st > 0.2 and Abar_Mhr.et-ct >= 0.3 and SpellReady("十字军打击") then if XBuffalo["复仇"] and SpellReady("神圣打击") then SpellStopCasting() end;for i=1,32 do cs,cc=UnitDebuff(t,i);if strfind(cs or "","Holy_CrusaderStrike") then c(cc < 5 and "十字军打击" or "十字军打击(等级 1)");k=1;break;end;end;if k==0 then c("十字军打击") end;end