You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
3.1 KiB

local VUHDO_RAID = { };
local VUHDO_RAID_GUIDS = { };
local VUHDO_INTERNAL_TOGGLES = { };
local strsplit = strsplit;
local pairs = pairs;
local VUHDO_updateHealth;
local sCurrentTarget = nil;
local sCurrentFocus = nil;
--
function VUHDO_combatLogInitLocalOverrides()
VUHDO_RAID = _G["VUHDO_RAID"];
VUHDO_RAID_GUIDS = _G["VUHDO_RAID_GUIDS"];
VUHDO_INTERNAL_TOGGLES = _G["VUHDO_INTERNAL_TOGGLES"];
VUHDO_updateHealth = _G["VUHDO_updateHealth"];
end
--
local tInfo;
local tNewHealth;
local tDeadInfo = { ["dead"] = true };
local function VUHDO_addUnitHealth(aUnit, aDelta)
tInfo = VUHDO_RAID[aUnit] or tDeadInfo;
if not tInfo["dead"] then
tNewHealth = tInfo["health"] + aDelta;
if tNewHealth < 0 then tNewHealth = 0;
elseif tNewHealth > tInfo["healthmax"] then tNewHealth = tInfo["healthmax"]; end
if tInfo["health"] ~= tNewHealth then
tInfo["health"] = tNewHealth;
VUHDO_updateHealth(aUnit, 2); -- VUHDO_UPDATE_HEALTH
end
end
end
--
local tPre, tSuf, tSpec;
local function VUHDO_getTargetHealthImpact(aMsg, aMsg1, aMsg2, aMsg4)
tPre, tSuf, tSpec = strsplit("_", aMsg);
if "SPELL" == tPre then
if ("HEAL" == tSuf or "HEAL" == tSpec) and "MISSED" ~= tSpec then
return aMsg4;
elseif "DAMAGE" == tSuf or "DAMAGE" == tSpec then
return -aMsg4;
end
elseif "DAMAGE" == tSuf then
if "SWING" == tPre then
return -aMsg1;
elseif "RANGE" == tPre then
return -aMsg4;
elseif "ENVIRONMENTAL" == tPre then
return -aMsg2;
end
elseif "DAMAGE" == tPre and "MISSED" ~= tSpec and "RESISTED" ~= tSpec then
return -aMsg4;
end
return 0;
end
--
function VUHDO_clParserSetCurrentTarget(aUnit)
sCurrentTarget = VUHDO_INTERNAL_TOGGLES[27] and aUnit or "*"; -- VUHDO_UPDATE_PLAYER_TARGET
end
--
function VUHDO_clParserSetCurrentFocus()
local tOldFocus = sCurrentFocus;
sCurrentFocus = nil;
for tUnit, tInfo in pairs(VUHDO_RAID) do
if UnitIsUnit("focus", tUnit) and tUnit ~= "focus" and tUnit ~= "target" then
if tInfo["isPet"] and (VUHDO_RAID[tInfo["ownerUnit"]] or {})["isVehicle"] then
sCurrentFocus = tInfo["ownerUnit"];
else
sCurrentFocus = tUnit;
end
break;
end
end
if tOldFocus then
VUHDO_updateBouquetsForEvent(tOldFocus, 23); -- VUHDO_UPDATE_PLAYER_FOCUS
end
if sCurrentFocus then
VUHDO_updateBouquetsForEvent(sCurrentFocus, 23); -- VUHDO_UPDATE_PLAYER_FOCUS
end
end
--
local tUnit;
local tImpact;
function VUHDO_parseCombatLogEvent(aMsg, aDstGUID, aMsg1, aMsg2, aMsg4)
tUnit = VUHDO_RAID_GUIDS[aDstGUID];
if not tUnit then return; end
-- as of patch 7.1 we are seeing empty values on health related events
tImpact = tonumber(VUHDO_getTargetHealthImpact(aMsg, aMsg1, aMsg2, aMsg4)) or 0;
if tImpact ~= 0 then
VUHDO_addUnitHealth(tUnit, tImpact);
if tUnit == sCurrentTarget then VUHDO_addUnitHealth("target", tImpact); end
if tUnit == sCurrentFocus then VUHDO_addUnitHealth("focus", tImpact); end
end
end
--
function VUHDO_getCurrentPlayerFocus()
return sCurrentFocus;
end