Commit fd02c479 authored by momo's avatar momo Committed by Ivaria
Browse files

Fixed combat log event based health updates

parent 3dfe76cc
......@@ -333,6 +333,7 @@ function VUHDO_setHealth(aUnit, aMode)
tName, tRealm = UnitName(aUnit);
tInfo["healthmax"] = UnitHealthMax(aUnit);
tInfo["health"] = UnitHealth(aUnit);
tInfo["loghealth"] = UnitHealth(aUnit);
tInfo["name"] = tName;
tInfo["number"] = VUHDO_getUnitNo(aUnit);
tInfo["unit"] = aUnit;
......@@ -386,14 +387,30 @@ 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"] == GetTime() then
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
return;
else
tNewHealth = UnitHealth(aUnit);
end
end
if not tIsDead and tInfo["health"] > 0 then
tInfo["lifeLossPerc"] = tNewHealth / tInfo["health"];
end
tInfo["health"] = tNewHealth;
if tInfo["dead"] ~= tIsDead then
if not tIsDead then
tInfo["healthmax"] = UnitHealthMax(aUnit);
......@@ -407,6 +424,7 @@ function VUHDO_setHealth(aUnit, aMode)
tInfo["dead"] = tIsDead;
tInfo["healthmax"] = UnitHealthMax(aUnit);
tInfo["sortMaxHp"] = VUHDO_getUnitSortMaxHp(aUnit);
tInfo["loghealth"] = UnitHealth(aUnit);
elseif 6 == aMode then -- VUHDO_UPDATE_AFK
tInfo["afk"] = tIsAfk;
......@@ -438,7 +456,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 -- Enth\84lt nur Pets als eigene Balken, vehicles werden ?ber owner dargestellt s.unten
VUHDO_setHealth(aUnit, aMode);
VUHDO_updateHealthBarsFor(aUnit, aMode);
end
......@@ -453,7 +471,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
......
......@@ -690,7 +690,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];
......
......@@ -1472,28 +1472,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"] = {
......@@ -1631,7 +1631,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"] = {
......@@ -1676,7 +1676,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"] = {
......@@ -1938,7 +1938,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.)
},
};
......
......@@ -29,14 +29,19 @@ local function VUHDO_addUnitHealth(aUnit, aDelta)
tInfo = VUHDO_RAID[aUnit] or tDeadInfo;
if not tInfo["dead"] then
tNewHealth = tInfo["health"] + aDelta;
-- Avoid the calculation to be disturbed by the exception data
if 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
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
......
......@@ -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;
......
......@@ -421,6 +421,12 @@ function VUHDO_OnEvent(_, anEvent, anArg1, anArg2, anArg3, anArg4, anArg5, anArg
anArg12 = tSpellId;
end
end
-- Filter exception data from combat log in classic
-- sometimes combat log get 19000+ damage but it's not correct E.g Ragnaros's Melt Weapon
local type, _, _, _, _, npc_id, _ = strsplit("-",anArg4);
if(type == "Creature" and npc_id == "11502") then
return
end
-- SWING_DAMAGE - the amount of damage is the 12th arg
-- ENVIRONMENTAL_DAMAGE - the amount of damage is the 13th arg
......
......@@ -250,19 +250,19 @@ VUHDO_TEXT_PROVIDERS = {
["displayName"] = "Overheal: <#n>",
["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>",
["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: <#n>",
["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: <#n>",
......
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