📄 damagemeters_report.lua
字号:
---------------
-- CONSTANTS --
---------------
-- NOTE: "DMI"s are the legacy name for quantities that DM tracks.
-- However, the term "quantity" refers to a quantity that is displayed.
-- There are more Quantities than there are DMIs.
-- Better names for these two things would be "Real" vs. "Virtual" or "Display" quantities.
DMI_DAMAGE = 1;
DMI_HEALING = 2;
DMI_DAMAGED = 3;
DMI_HEALED = 4;
DMI_REPORT_MAX = 4;
DMI_CURING = 5;
DMI_OVERHEAL = 6;
DMI_ABSHEAL = 7;
DMI_BUILTIN_MAX = 7;
DMI_MAX = 7;
-- Just legacy crap.
DMI_1 = DMI_DAMAGE;
DMI_2 = DMI_HEALING;
DMI_3 = DMI_DAMAGED;
DMI_4 = DMI_HEALED;
-- Defined Quantities.
-- These numbers index into the DM_QUANTDEFS table.
DamageMeters_Quantity_DAMAGE = 1;
DamageMeters_Quantity_HEALING = 2;
DamageMeters_Quantity_DAMAGED = 3;
DamageMeters_Quantity_HEALINGRECEIVED = 4;
DamageMeters_Quantity_CURING = 5;
DamageMeters_Quantity_OVERHEAL = 6;
DamageMeters_Quantity_ABSHEAL = 7;
DamageMeters_Quantity_DPS = 8;
DamageMeters_Quantity_HPS = 9;
DamageMeters_Quantity_DTPS = 10;
DamageMeters_Quantity_HTPS = 11;
DamageMeters_Quantity_CURINGFIGHT = 12;
DamageMeters_Quantity_OVERHEALFIGHT = 13;
DamageMeters_Quantity_ABSHEALFIGHT = 14;
DamageMeters_Quantity_TIME = 15;
DamageMeters_Quantity_NETDAMAGE = 16;
DamageMeters_Quantity_NETHEALING = 17;
DamageMeters_Quantity_DAMAGEPLUSHEALING = 18;
DamageMeters_Quantity_HEALTH = 19;
DamageMeters_Quantity_OVERHEALPERCENTAGE = 20;
-- While this is assigned here, this number is actually CALCULATED when
-- DamageMeters is loaded. (It is set to the length of DM_QUANTDEFS). This was intended to
-- allow other mods to add quantities, but who knows if its really possible.
DamageMeters_Quantity_MAX = 18;
-- These aren't actualy quantities, but rather just flags to DoReport.
DamageMeters_ReportQuantity_Total = -1;
DamageMeters_ReportQuantity_Leaders = -2;
DamageMeters_ReportQuantity_Events = -3;
-------------------------------------------------------------------------------
-- Virtual Quantity Definitions --
--[[
name - The localized string name of this quantity.
psName - [Optional] The string name of the quantity when it is per-second.
defaultColor - The default color of the frame when the quantity is visible.
dmi - [Optional] The DMI that this quantity is based on.
bUsesFightTable - True if this quantity uses the Fight table instead of the Active one.
toggleQuant - The quantity to switch to when we are toggled. (Note that toggling really means between fight/regular).
filterDefault - Default quantity filter setting.
pfnGetValue - function(playerStruct). A quantityDef can specify a function that the system is to call
to get a given player's value for this quantity.
titanAbbrev - A short string (ideally a few characters) to be shown in the titan panel for this quantity.
]]--
DM_QUANTDEFS = {};
DM_QUANTDEFS[DamageMeters_Quantity_DAMAGE] = {
name = DM_QUANTSTRING_DAMAGEDONE,
psName = nil,
defaultColor = {1.0, 0.0, 0.0, 0.8},
dmi = DMI_DAMAGE,
bUsesFightTable = false,
toggleQuant = DamageMeters_Quantity_DPS,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_DAMAGEDONE;
};
DM_QUANTDEFS[DamageMeters_Quantity_HEALING] = {
name = DM_QUANTSTRING_HEALINGDONE,
psName = nil,
defaultColor = {0.0, 1.0, 0.0, 0.8},
dmi = DMI_HEALING,
bUsesFightTable = false,
toggleQuant = DamageMeters_Quantity_HPS,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_HEALINGDONE;
};
DM_QUANTDEFS[DamageMeters_Quantity_DAMAGED] = {
name = DM_QUANTSTRING_DAMAGETAKEN,
psName = nil,
defaultColor = {1.0, 0.5, 0.0, 0.8},
dmi = DMI_DAMAGED,
bUsesFightTable = false,
toggleQuant = DamageMeters_Quantity_DTPS,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_DAMAGETAKEN;
};
DM_QUANTDEFS[DamageMeters_Quantity_HEALINGRECEIVED] = {
name = DM_QUANTSTRING_HEALINGTAKEN,
psName = nil,
defaultColor = {0.0, 0.0, 1.0, 0.8},
dmi = DMI_HEALED,
bUsesFightTable = false,
toggleQuant = DamageMeters_Quantity_HTPS,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_HEALINGTAKEN;
};
DM_QUANTDEFS[DamageMeters_Quantity_CURING] = {
name = DM_QUANTSTRING_CURING,
psName = nil,
defaultColor = {0.6, 0.7, 0.8, 0.8},
dmi = DMI_CURING,
bUsesFightTable = false,
toggleQuant = DamageMeters_Quantity_CURINGFIGHT,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_CURING;
};
DM_QUANTDEFS[DamageMeters_Quantity_OVERHEAL] = {
name = DM_QUANTSTRING_OVERHEAL,
psName = nil,
defaultColor = {1.0, 1.0, 0.0, 0.8},
dmi = DMI_OVERHEAL,
bUsesFightTable = false,
filterDefault = true,
toggleQuant = DamageMeters_Quantity_OVERHEALFIGHT,
titanAbbrev = DM_QUANTABBREV_OVERHEAL;
};
DM_QUANTDEFS[DamageMeters_Quantity_ABSHEAL] = {
name = DM_QUANTSTRING_ABSHEAL,
psName = nil,
defaultColor = {1.0, 0.0, 1.0, 0.8},
dmi = DMI_ABSHEAL,
bUsesFightTable = false,
filterDefault = false,
toggleQuant = DamageMeters_Quantity_ABSHEALFIGHT,
titanAbbrev = DM_QUANTABBREV_ABSHEAL;
};
DM_QUANTDEFS[DamageMeters_Quantity_DPS] = {
name = DM_QUANTSTRING_DAMAGEDONE_FIGHT,
psName = DM_QUANTSTRING_DAMAGEDONE_PS,
defaultColor = {0.8, 0.0, 0.0, 0.8},
dmi = DMI_DAMAGE,
bUsesFightTable = true,
toggleQuant = DamageMeters_Quantity_DAMAGE,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_DAMAGEDONE_PS;
};
DM_QUANTDEFS[DamageMeters_Quantity_HPS] = {
name = DM_QUANTSTRING_HEALINGDONE_FIGHT,
psName = DM_QUANTSTRING_HEALINGDONE_PS,
defaultColor = {0.0, 0.8, 0.0, 0.8},
dmi = DMI_HEALING,
bUsesFightTable = true,
toggleQuant = DamageMeters_Quantity_HEALING,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_HEALINGDONE_PS;
};
DM_QUANTDEFS[DamageMeters_Quantity_DTPS] = {
name = DM_QUANTSTRING_DAMAGETAKEN_FIGHT,
psName = DM_QUANTSTRING_DAMAGETAKEN_PS,
defaultColor = {1.0, 0.7, 0.2, 0.8},
dmi = DMI_DAMAGED,
bUsesFightTable = true,
toggleQuant = DamageMeters_Quantity_DAMAGED,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_DAMAGETAKEN_PS,
};
DM_QUANTDEFS[DamageMeters_Quantity_HTPS] = {
name = DM_QUANTSTRING_HEALINGTAKEN_FIGHT,
psName = DM_QUANTSTRING_HEALINGTAKEN_PS,
defaultColor = {0.0, 0.0, 0.8, 0.8},
dmi = DMI_HEALED,
bUsesFightTable = true,
toggleQuant = DamageMeters_Quantity_HEALINGRECEIVED,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_HEALINGTAKEN_PS,
};
DM_QUANTDEFS[DamageMeters_Quantity_CURINGFIGHT] = {
name = DM_QUANTSTRING_CURING_FIGHT,
psName = DM_QUANTSTRING_CURING_PS,
defaultColor = {0.4, 0.5, 0.6, 0.8},
dmi = DMI_CURING,
bUsesFightTable = true,
toggleQuant = DamageMeters_Quantity_CURING,
filterDefault = true,
titanAbbrev = DM_QUANTABBREV_CURING_PS,
};
DM_QUANTDEFS[DamageMeters_Quantity_OVERHEALFIGHT] = {
name = DM_QUANTSTRING_OVERHEAL_FIGHT,
psName = DM_QUANTSTRING_OVERHEAL_PS,
defaultColor = {0.4, 0.4, 0.0, 0.8},
dmi = DMI_OVERHEAL,
bUsesFightTable = true,
filterDefault = true,
toggleQuant = DamageMeters_Quantity_OVERHEALPERCENTAGE,
titanAbbrev = DM_QUANTABBREV_OVERHEAL_PS,
};
DM_QUANTDEFS[DamageMeters_Quantity_ABSHEALFIGHT] = {
name = DM_QUANTSTRING_ABSHEAL_FIGHT,
psName = DM_QUANTSTRING_ABSHEAL_PS,
defaultColor = {0.8, 0.0, 0.8, 0.8},
dmi = DMI_ABSHEAL,
bUsesFightTable = true,
filterDefault = false,
toggleQuant = DamageMeters_Quantity_ABSHEAL,
titanAbbrev = DM_QUANTABBREV_ABSHEAL_PS,
};
DM_QUANTDEFS[DamageMeters_Quantity_TIME] = {
name = DM_QUANTSTRING_IDLETIME,
psName = nil,
defaultColor = {0.0, 0.4, 1.0, 0.8},
dmi = nil,
bUsesFightTable = false,
filterDefault = true,
pfnGetValue = function(playerStruct) return GetTime() - playerStruct.lastTime; end,
formatString = "%.1f",
titanAbbrev = DM_QUANTABBREV_IDLETIME;
};
DM_QUANTDEFS[DamageMeters_Quantity_NETDAMAGE] = {
name = DM_QUANTSTRING_NETDAMAGE,
psName = nil,
defaultColor = {0.5, 0.0, 0.0, 0.8},
dmi = nil,
bUsesFightTable = false,
filterDefault = false,
pfnGetValue = function(playerStruct) return playerStruct.dmiData[DMI_DAMAGE].q - playerStruct.dmiData[DMI_DAMAGED].q; end,
titanAbbrev = DM_QUANTABBREV_NETDAMAGE;
};
DM_QUANTDEFS[DamageMeters_Quantity_NETHEALING] = {
name = DM_QUANTSTRING_NETHEALING,
psName = nil,
defaultColor = {0.0, 0.5, 0.0, 0.8},
dmi = nil,
bUsesFightTable = false,
filterDefault = false,
pfnGetValue = function(playerStruct) return playerStruct.dmiData[DMI_HEALING].q - playerStruct.dmiData[DMI_HEALED].q; end,
titanAbbrev = DM_QUANTABBREV_NETHEALING;
};
DM_QUANTDEFS[DamageMeters_Quantity_DAMAGEPLUSHEALING] = {
name = DM_QUANTSTRING_DAMAGEPLUSHEALING,
psName = nil,
defaultColor = {0.5, 0.5, 0.5, 0.8},
dmi = nil,
bUsesFightTable = false,
filterDefault = false,
pfnGetValue = function(playerStruct) return playerStruct.dmiData[DMI_DAMAGE].q + playerStruct.dmiData[DMI_HEALING].q; end,
titanAbbrev = DM_QUANTABBREV_DAMAGEPLUSHEALING;
};
DM_QUANTDEFS[DamageMeters_Quantity_HEALTH] = {
name = DM_QUANTSTRING_HEALTH;
psName = nil,
defaultColor = {0.5, 0.3, 0.7, 0.8},
dmi = nil,
bUsesFightTable = false,
filterDefault = false,
pfnGetValue = function(playerStruct) return playerStruct.health; end;
titanAbbrev = DM_QUANTABBREV_HEALTH;
};
DM_QUANTDEFS[DamageMeters_Quantity_OVERHEALPERCENTAGE] = {
name = DM_QUANTSTRING_OVERHEAL_PERCENTAGE,
psName = nil,
defaultColor = {0.5, 0.5, 0.7, 0.8},
dmi = nil,
bUsesFightTable = false,
filterDefault = false,
pfnGetValue = function(playerStruct) return floor(100 * DM_GetFraction(playerStruct.dmiData[DMI_OVERHEAL].q, playerStruct.dmiData[DMI_HEALING].q + playerStruct.dmiData[DMI_OVERHEAL].q)); end,
toggleQuant = DamageMeters_Quantity_OVERHEAL,
titanAbbrev = DM_QUANTABBREV_OVERHEAL_PERCENTAGE;
};
--[[
DM_QUANTDEFS[DamageMeters_Quantity_DANDERATING] = {
name = DM_QUANTSTRING_DANDERATING,
psName = nil,
defaultColor = {1.0, 0.6, 0.6, 0.8},
dmi = nil,
bUsesFightTable = false,
filterDefault = false,
pfnGetValue =
function(playerStruct)
local dmgIndex = ( DamageMeters_totalsTable[DMT_ACTIVE] ~= nil and
DamageMeters_totalsTable[DMT_ACTIVE][DMI_DAMAGE] ~= nil and
DamageMeters_totalsTable[DMT_ACTIVE][DMI_DAMAGE] > 0)
and
floor(playerStruct.dmiData[DMI_DAMAGE].q * 500.0 / DamageMeters_totalsTable[DMT_ACTIVE][DMI_DAMAGE])
or
0;
local healIndex = ( DamageMeters_totalsTable[DMT_ACTIVE] ~= nil and
DamageMeters_totalsTable[DMT_ACTIVE][DMI_HEALING] ~= nil and
DamageMeters_totalsTable[DMT_ACTIVE][DMI_HEALING] > 0)
and
floor(playerStruct.dmiData[DMI_HEALING].q * 500.0 / DamageMeters_totalsTable[DMT_ACTIVE][DMI_HEALING])
or
0;
return dmgIndex + healIndex;
end,
};
]]--
-------------
-- GLOBALS --
-------------
DamageMeters_rankTables = {};
DamageMeters_rankTables[DM_TABLE_A] = {};
DamageMeters_rankTables[DM_TABLE_B] = {};
DamageMeters_rankTables[DMT_FIGHT] = {};
DamageMeters_totalsTable = {};
DamageMeters_totalsTable[DM_TABLE_A] = {};
DamageMeters_totalsTable[DM_TABLE_B] = {};
DamageMeters_totalsTable[DMT_FIGHT] = {};
-------------------------------------------------
-- FUNCTIONS --
-------------------------------------------------
function DamageMeters_IsQuantityFight(quantity)
if (DM_QUANTDEFS[quantity]) then
return DM_QUANTDEFS[quantity].bUsesFightTable;
end
-- DMReporter can call this with plug-in quantities. In those cases the quantdefs aren't filled in.
-- This could be a problem if a plugin uses a quantity that isn't just a simple DMI.
return false;
end
function DamageMeters_IsQuantityPS(quantity, forcePSFlag)
return (DamageMeters_flags[DMFLAG_showFightAsPS] or forcePSFlag) and (DM_QUANTDEFS[quantity].bUsesFightTable);
end
function DamageMeters_GetQuantityDMI(quantity)
if (nil == quantity) then
DMPrintD("DamageMeters_GetQuantityDMI: quantity = nil");
end
return DM_QUANTDEFS[quantity].dmi;
end
-- This function is about as fast as I know how to make it. It doesn't protect
-- against invalid inputs at all.
function DamageMeters_GetQuantityValue(quantity, tableIndex, playerIndex)
local playerStruct = DamageMeters_tables[tableIndex][playerIndex];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -