最简单的就是定义一个焦点目标,然后把focus参数传到BeeGroupCountScript()第二个属性中做仇恨级别的判断,怎奈你这需求有点特殊。由于没有进阶函数,只好参考前辈的模板来实现。
正常的东西写腻歪了,就研究这些奇奇怪怪的东西.gif)
原理:获取战斗日志中全部怪物的GUID,找出血量最多的定义为boss,如果布甲OT了,就给OT的目标上保护之手。
[Lua] 纯文本查看 复制代码 --'初始化创建框体'
F = F or CreateFrame("Frame")
--'注册事件'
F:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
F:RegisterEvent("PLAYER_REGEN_ENABLED")
local lastUpdate = GetTime()
local targets = {}
local targetsTable = {}
local maxHealth = 0
local bossName = ""
F:SetScript("OnEvent", function(self, event, ...)
if event == "COMBAT_LOG_EVENT_UNFILTERED" then
local timestamp = ...
local currentTime = GetTime()
local playerGUID = UnitGUID("player")
local arg = {...}
local TargetGUID = arg[3]
local TargetName = arg[4]
local str=string.find(arg[3],"0x0")
if TargetGUID ~= playerGUID and TargetGUID ~= "0x0000000000000000" and not str then
if currentTime - lastUpdate >= 1 then
local totalTargets = table.getn(targets)
if totalTargets > 0 then
local arrhp={}
for k,v in pairs(targetsTable) do
BeeRun("/target " .. TargetName)
--'比较血量,选出最大血量为boss'
if(maxHealth<UnitHealth("target")) then
maxHealth = UnitHealth("target")
bossName = TargetName
end
end
lastUpdate = currentTime
wipe(targets)
end
end
if not tContains(targets, TargetGUID) then
tinsert(targets, TargetGUID)
tinsert(targetsTable,arg)
end
end
--print(bossName)
elseif event == "PLAYER_REGEN_ENABLED" then
--'清空目标表'
wipe(targets)
end
end)
--'团队框架'
grouptype=""
if GetNumRaidMembers()>0
then
grouptype="raid"
else
grouptype="party"
end
local m,u = BeeGroupCountScript('BeeRange(unit)<=40 and class=="牧师" or class=="术士" or class=="法师"','UnitName(BeeUnit(bossName).. "-target") == UnitName(unit)',grouptype)
if m>0 and BeeIsRun("保护之手",u) and BeeUnitBuffTime("保护之手",u)<1 then
BeeRun("保护之手",u)
end
|