Commit 7035c685 authored by momo's avatar momo Committed by Ivaria
Browse files

add combat log parser patch again

parent fe85aa83
......@@ -342,6 +342,8 @@ function VUHDO_setHealth(aUnit, aMode)
tName, tRealm = UnitName(aUnit);
tInfo["healthmax"] = UnitHealthMax(aUnit);
tInfo["health"] = UnitHealth(aUnit);
tInfo["loghealth"] = UnitHealth(aUnit);
tInfo["updateTime"] = GetTime();
tInfo["name"] = tName;
tInfo["number"] = VUHDO_getUnitNo(aUnit);
tInfo["unit"] = aUnit;
......@@ -400,9 +402,27 @@ function VUHDO_setHealth(aUnit, aMode)
VUHDO_updateBouquetsForEvent(aUnit, 19); -- VUHDO_UPDATE_DC
end
if 2 == aMode then -- VUHDO_UPDATE_HEALTH
tNewHealth = UnitHealth(aUnit);
if 2 == aMode or 12 == aMode then -- VUHDO_UPDATE_HEALTH -- VUHDO_UPDATE_HEALTH_COMBAT_LOG
if 12 == aMode then -- VUHDO_UPDATE_HEALTH_COMBAT_LOG
tNewHealth = tInfo["loghealth"];
end
if 2 == aMode then
-- Filter exception UNIT_HEALTH_FREQUENT event in classic
-- Sometimes there is a UNIT_HEALTH_FREQUENT event in the interim period
if tInfo["updateTime"] and abs(tonumber(tInfo["updateTime"]) - tonumber(GetTime())) < 0.4 then
tInfo["healthmax"] = UnitHealthMax(aUnit);
return;
-- Filter exception health data from UnitHealth API
-- UnitHealth will return 0 if the hunter cast FeignDeath
-- Sometimes UnitIsDeadOrGhost return false and UnitHealth return 0 before UnitIsFeignDeath return true
elseif (UnitIsFeignDeath(aUnit) or not UnitIsDeadOrGhost(aUnit)) and UnitHealth(aUnit) == 0 then
tInfo["healthmax"] = UnitHealthMax(aUnit);
return;
else
tNewHealth = UnitHealth(aUnit);
end
end
if not tIsDead and tInfo["health"] > 0 then
tInfo["lifeLossPerc"] = tNewHealth / tInfo["health"];
end
......@@ -422,6 +442,11 @@ function VUHDO_setHealth(aUnit, aMode)
tInfo["dead"] = tIsDead;
tInfo["healthmax"] = UnitHealthMax(aUnit);
tInfo["sortMaxHp"] = VUHDO_getUnitSortMaxHp(aUnit);
tInfo["loghealth"] = UnitHealth(aUnit);
if UnitHealth(aUnit) ~= 0 then
tInfo["health"] = UnitHealth(aUnit);
end
tInfo["updateTime"] = GetTime();
elseif 6 == aMode then -- VUHDO_UPDATE_AFK
tInfo["afk"] = tIsAfk;
......@@ -453,7 +478,7 @@ function VUHDO_updateHealth(aUnit, aMode)
tIsPet = VUHDO_RAID[aUnit] and VUHDO_RAID[aUnit]["isPet"];
if not tIsPet or VUHDO_INTERNAL_TOGGLES[26] then -- VUHDO_UPDATE_PETS -- Enthlt nur Pets als eigene Balken, vehicles werden ?ber owner dargestellt s.unten
if not tIsPet or VUHDO_INTERNAL_TOGGLES[26] then -- VUHDO_UPDATE_PETS -- Enthlt nur Pets als eigene Balken, vehicles werden ?ber owner dargestellt s.unten
VUHDO_setHealth(aUnit, aMode);
VUHDO_updateHealthBarsFor(aUnit, aMode);
end
......@@ -468,7 +493,7 @@ function VUHDO_updateHealth(aUnit, aMode)
end
if 1 ~= sCurrentMode -- VUHDO_MODE_NEUTRAL
and (2 == aMode or 3 == aMode) then -- VUHDO_UPDATE_HEALTH -- VUHDO_UPDATE_HEALTH_MAX
and (2 == aMode or 3 == aMode or 12 == aMode) then -- VUHDO_UPDATE_HEALTH -- VUHDO_UPDATE_HEALTH_MAX -- VUHDO_UPDATE_HEALTH_COMBAT_LOG
-- Remove old emergencies
VUHDO_FORCE_RESET = true;
for tUnit, _ in pairs(VUHDO_EMERGENCIES) do
......
......@@ -793,7 +793,7 @@ function VUHDO_updateHealthBarsFor(aUnit, anUpdateMode)
tAllButtons = VUHDO_getUnitButtons(aUnit);
if not tAllButtons then return; end
if 2 == anUpdateMode then -- VUHDO_UPDATE_HEALTH
if 2 == anUpdateMode or 12 == anUpdateMode then -- VUHDO_UPDATE_HEALTH --VUHDO_UPDATE_HEALTH_COMBAT_LOG
VUHDO_determineIncHeal(aUnit);
tInfo = VUHDO_RAID[aUnit];
......
......@@ -1516,28 +1516,28 @@ VUHDO_BOUQUET_BUFFS_SPECIAL = {
["displayName"] = VUHDO_I18N_BOUQUET_HEALTH_BELOW,
["validator"] = VUHDO_healthBelowValidator,
["custom_type"] = VUHDO_BOUQUET_CUSTOM_TYPE_PERCENT,
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX },
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_HEALTH_COMBAT_LOG },
},
["HEALTH_ABOVE"] = {
["displayName"] = VUHDO_I18N_BOUQUET_HEALTH_ABOVE,
["validator"] = VUHDO_healthAboveValidator,
["custom_type"] = VUHDO_BOUQUET_CUSTOM_TYPE_PERCENT,
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX },
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_HEALTH_COMBAT_LOG },
},
["HEALTH_BELOW_ABS"] = {
["displayName"] = VUHDO_I18N_BOUQUET_HEALTH_BELOW_ABS,
["validator"] = VUHDO_healthBelowAbsValidator,
["custom_type"] = VUHDO_BOUQUET_CUSTOM_TYPE_HEALTH,
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX },
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_HEALTH_COMBAT_LOG },
},
["HEALTH_ABOVE_ABS"] = {
["displayName"] = VUHDO_I18N_BOUQUET_HEALTH_ABOVE_ABS,
["validator"] = VUHDO_healthAboveAbsValidator,
["custom_type"] = VUHDO_BOUQUET_CUSTOM_TYPE_HEALTH,
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX },
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_HEALTH_COMBAT_LOG },
},
["MANA_BELOW"] = {
......@@ -1675,7 +1675,7 @@ VUHDO_BOUQUET_BUFFS_SPECIAL = {
["displayName"] = VUHDO_I18N_BOUQUET_STATUS_HEALTH,
["validator"] = VUHDO_statusHealthValidator,
["custom_type"] = VUHDO_BOUQUET_CUSTOM_TYPE_STATUSBAR,
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_INC },
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_INC, VUHDO_UPDATE_HEALTH_COMBAT_LOG },
},
["STATUS_MANA"] = {
......@@ -1728,7 +1728,7 @@ VUHDO_BOUQUET_BUFFS_SPECIAL = {
["displayName"] = VUHDO_I18N_BOUQUET_STATUS_EXCESS_ABSORB,
["validator"] = VUHDO_statusExcessAbsorbValidator,
["custom_type"] = VUHDO_BOUQUET_CUSTOM_TYPE_STATUSBAR,
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_SHIELD },
["interests"] = { VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_SHIELD, VUHDO_UPDATE_HEALTH_COMBAT_LOG },
},
["STATUS_TOTAL_ABSORB"] = {
......@@ -2002,7 +2002,7 @@ VUHDO_BOUQUET_BUFFS_SPECIAL = {
["validator"] = VUHDO_customFlagValidator,
["custom_type"] = VUHDO_BOUQUET_CUSTOM_TYPE_CUSTOM_FLAG,
["updateCyclic"] = true,
["interests"] = { VUHDO_UPDATE_INC, VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_RANGE, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_ALIVE, VUHDO_UPDATE_NUM_CLUSTER }, --ignoring some for now (eg. VUHDO_UPDATE_MANA, VUHDO_UPDATE_DC, etc.)
["interests"] = { VUHDO_UPDATE_INC, VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_RANGE, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_ALIVE, VUHDO_UPDATE_NUM_CLUSTER ,VUHDO_UPDATE_HEALTH_COMBAT_LOG}, --ignoring some for now (eg. VUHDO_UPDATE_MANA, VUHDO_UPDATE_DC, etc.)
},
};
......
......@@ -4,6 +4,7 @@ local VUHDO_INTERNAL_TOGGLES = { };
local strsplit = strsplit;
local pairs = pairs;
local select = select;
local VUHDO_updateHealth;
local sCurrentTarget = nil;
......@@ -29,14 +30,25 @@ 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
-- avoid the calculation to be disturbed by the exception data
if UnitHealth(aUnit) ~= 0 or tInfo["health"] ~= 0 then
tNewHealth = tInfo["health"] + aDelta;
else
tNewHealth = tInfo["loghealth"] + aDelta;
end
if tNewHealth < 0 then
tNewHealth = 0;
elseif tNewHealth > tInfo["healthmax"] then
tNewHealth = tInfo["healthmax"];
end
tInfo["loghealth"] = tNewHealth;
tInfo["updateTime"] = GetTime();
if tInfo["health"] ~= tNewHealth then
tInfo["health"] = tNewHealth;
VUHDO_updateHealth(aUnit, 2); -- VUHDO_UPDATE_HEALTH
VUHDO_updateHealth(aUnit, 12); -- VUHDO_UPDATE_HEALTH_COMBAT_LOG
end
end
end
......@@ -112,6 +124,7 @@ function VUHDO_parseCombatLogEvent(aMsg, aDstGUID, aMsg1, aMsg2, aMsg4)
if tUnit == sCurrentTarget then VUHDO_addUnitHealth("target", tImpact); end
if tUnit == sCurrentFocus then VUHDO_addUnitHealth("focus", tImpact); end
end
return;
end
......
......@@ -252,6 +252,7 @@ VUHDO_UPDATE_TARGET = 8;
VUHDO_UPDATE_INC = 9;
VUHDO_UPDATE_ALIVE = 10;
VUHDO_UPDATE_EMERGENCY = 11;
VUHDO_UPDATE_HEALTH_COMBAT_LOG = 12;
-- nur fr bouquets
VUHDO_UPDATE_MANA = 13;
VUHDO_UPDATE_THREAT_PERC = 14;
......
......@@ -246,19 +246,19 @@ VUHDO_TEXT_PROVIDERS = {
["displayName"] = "Overheal: <#nk>",
["calculator"] = VUHDO_overhealCalculator,
["validator"] = VUHDO_kiloValidator,
["interests"] = { VUHDO_UPDATE_INC, VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_RANGE, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_ALIVE },
["interests"] = { VUHDO_UPDATE_INC, VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_RANGE, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_ALIVE, VUHDO_UPDATE_HEALTH_COMBAT_LOG },
},
["OVERHEAL_KILO_PLUS_N_K"] = {
["displayName"] = "Overheal: +<#n>k",
["calculator"] = VUHDO_overhealCalculator,
["validator"] = VUHDO_plusKiloValidator,
["interests"] = { VUHDO_UPDATE_INC, VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_RANGE, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_ALIVE },
["interests"] = { VUHDO_UPDATE_INC, VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_RANGE, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_ALIVE, VUHDO_UPDATE_HEALTH_COMBAT_LOG },
},
["INCOMING_HEAL_NK"] = {
["displayName"] = "Incoming Heal: <#nk>",
["calculator"] = VUHDO_incomingHealCalculator,
["validator"] = VUHDO_kiloValidator,
["interests"] = { VUHDO_UPDATE_INC, VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_RANGE, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_ALIVE },
["interests"] = { VUHDO_UPDATE_INC, VUHDO_UPDATE_HEALTH, VUHDO_UPDATE_RANGE, VUHDO_UPDATE_HEALTH_MAX, VUHDO_UPDATE_ALIVE, VUHDO_UPDATE_HEALTH_COMBAT_LOG },
},
["SHIELD_ABSORB_OVERALL_N_K"] = {
["displayName"] = "Shield absorb total: <#nk>",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment