Added healing done to Coach

This commit is contained in:
Tercio Jose
2021-02-10 13:45:15 -03:00
parent d0c44e6b43
commit ada1552c9c
5 changed files with 423 additions and 105 deletions
+216 -37
View File
@@ -424,8 +424,8 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
return
end
--add the spellId to the blacklist
f.db.aura_tracker.buff_banned [spellId] = true
--add the spellName to the blacklist
f.db.aura_tracker.buff_banned [spellId] = true
--refresh the buff blacklist frame
f.buff_ignored:DoRefresh()
@@ -436,7 +436,38 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
same_name_spells_add (spellId)
end
end, textEntryWidth, 20, "Add to Blacklist", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
end, textEntryWidth/2 -3, 20, "By Name", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
local add_blacklist_buff_button_id = self:CreateButton (background_add_blacklist, function()
local text = buff_name_blacklist_entry.text
buff_name_blacklist_entry:SetText ("")
buff_name_blacklist_entry:ClearFocus()
if (text ~= "") then
if (not tonumber(text)) then
DetailsFramework.Msg ({__name = "DetailsFramework"}, "Invalid Spell-ID.")
end
--get the spellId
local spellId = get_spellID_from_string (text)
if (not spellId) then
DetailsFramework.Msg ({__name = "DetailsFramework"}, "Spell not found!")
return
end
--add the spellId to the blacklist
f.db.aura_tracker.buff_banned [spellId] = false
--refresh the buff blacklist frame
f.buff_ignored:DoRefresh()
DF:QuickDispatch (change_callback)
--add to spells with the same name cache
same_name_spells_add (spellId)
end
end, textEntryWidth/2 -3, 20, "By ID", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
local add_blacklist_debuff_button = self:CreateButton (background_add_blacklist, function()
local text = debuff_name_blacklist_entry.text
@@ -451,7 +482,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
return
end
--add the spellId to the blacklist
--add the spellName to the blacklist
f.db.aura_tracker.debuff_banned [spellId] = true
--refresh the buff blacklist frame
@@ -462,7 +493,37 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
--add to spells with the same name cache
same_name_spells_add (spellId)
end
end, textEntryWidth, 20, "Add to Blacklist", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
end, textEntryWidth/2 -3, 20, "By Name", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
local add_blacklist_debuff_button_id = self:CreateButton (background_add_blacklist, function()
local text = debuff_name_blacklist_entry.text
debuff_name_blacklist_entry:SetText ("")
debuff_name_blacklist_entry:ClearFocus()
if (text ~= "") then
if (not tonumber(text)) then
DetailsFramework.Msg ({__name = "DetailsFramework"}, "Invalid Spell-ID.")
end
--get the spellId
local spellId = get_spellID_from_string (text)
if (not spellId) then
DetailsFramework.Msg ({__name = "DetailsFramework"}, "Spell not found!")
return
end
--add the spellId to the blacklist
f.db.aura_tracker.debuff_banned [spellId] = false
--refresh the buff blacklist frame
f.debuff_ignored:DoRefresh()
DF:QuickDispatch (change_callback)
--add to spells with the same name cache
same_name_spells_add (spellId)
end
end, textEntryWidth/2 -3, 20, "By ID", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
--track list
@@ -493,8 +554,8 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
DetailsFramework.Msg ({__name = "DetailsFramework"}, "Spell not found!")
return
end
--add the spellId to the blacklist
--add the spellName to the tracklist
f.db.aura_tracker.debuff_tracked [spellId] = true
--refresh the buff blacklist frame
@@ -505,7 +566,36 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
--add to spells with the same name cache
same_name_spells_add (spellId)
end
end, textEntryWidth, 20, "Add to Tracklist", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
end, textEntryWidth/2 -3, 20, "By Name", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
local add_tracklist_debuff_button_id = self:CreateButton (background_add_tracklist, function()
local text = debuff_name_tracklist_entry.text
debuff_name_tracklist_entry:SetText ("")
debuff_name_tracklist_entry:ClearFocus()
if (text ~= "") then
if (not tonumber(text)) then
DetailsFramework.Msg ({__name = "DetailsFramework"}, "Invalid Spell-ID.")
end
--get the spellId
local spellId = get_spellID_from_string (text)
if (not spellId) then
DetailsFramework.Msg ({__name = "DetailsFramework"}, "Spell not found!")
return
end
f.db.aura_tracker.debuff_tracked [spellId] = false
--refresh the buff blacklist frame
f.debuff_tracked:DoRefresh()
DF:QuickDispatch (change_callback)
--add to spells with the same name cache
same_name_spells_add (spellId)
end
end, textEntryWidth/2 -3, 20, "By ID", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
local add_tracklist_buff_button = self:CreateButton (background_add_tracklist, function()
local text = buff_name_tracklist_entry.text
@@ -520,8 +610,8 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
return
end
--add the spellId to the blacklist
f.db.aura_tracker.buff_tracked [spellId] = true
--add the spellName to the tracklist
f.db.aura_tracker.buff_tracked [spellId] = true
--refresh the buff tracklist frame
f.buff_tracked:DoRefresh()
@@ -533,7 +623,38 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
same_name_spells_add (spellId)
end
end, textEntryWidth, 20, "Add to Tracklist", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
end, textEntryWidth/2 -3, 20, "By Name", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
local add_tracklist_buff_button_id = self:CreateButton (background_add_tracklist, function()
local text = buff_name_tracklist_entry.text
buff_name_tracklist_entry:SetText ("")
buff_name_tracklist_entry:ClearFocus()
if (text ~= "") then
if (not tonumber(text)) then
DetailsFramework.Msg ({__name = "DetailsFramework"}, "Invalid Spell-ID.")
end
--get the spellId
local spellId = get_spellID_from_string (text)
if (not spellId) then
DetailsFramework.Msg ({__name = "DetailsFramework"}, "Spell not found!")
return
end
--add the spellId to the tracklist
f.db.aura_tracker.buff_tracked [spellId] = false
--refresh the buff tracklist frame
f.buff_tracked:DoRefresh()
--callback the addon
DF:QuickDispatch (change_callback)
--add to spells with the same name cache
same_name_spells_add (spellId)
end
end, textEntryWidth/2 -3, 20, "By ID", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
--anchors:
background_add_blacklist:SetPoint ("topleft", f_auto, "topleft", 0, y)
@@ -543,22 +664,26 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
debuff_name_blacklist_entry:SetPoint ("topleft", background_add_blacklist, "topleft", 5, -20)
debuff_blacklist_label:SetPoint ("bottomleft", debuff_name_blacklist_entry, "topleft", 0, 2)
add_blacklist_debuff_button:SetPoint ("topleft", debuff_name_blacklist_entry, "bottomleft", 0, -2)
add_blacklist_debuff_button_id:SetPoint ("left", add_blacklist_debuff_button, "right", 1, 0)
--buff blacklist
buff_blacklist_label:SetPoint ("topleft", add_blacklist_debuff_button.widget, "bottomleft", 0, -10)
buff_name_blacklist_entry:SetPoint ("topleft", buff_blacklist_label, "bottomleft", 0, -2)
add_blacklist_buff_button:SetPoint ("topleft", buff_name_blacklist_entry, "bottomleft", 0, -2)
add_blacklist_buff_button_id:SetPoint ("left", add_blacklist_buff_button, "right", 1, 0)
--debuff tracklist
debuff_name_tracklist_entry:SetPoint ("topleft", background_add_tracklist, "topleft", 5, -20)
debuff_tracklist_label:SetPoint ("bottomleft", debuff_name_tracklist_entry, "topleft", 0, 2)
add_tracklist_debuff_button:SetPoint ("topleft", debuff_name_tracklist_entry, "bottomleft", 0, -2)
add_tracklist_debuff_button_id:SetPoint ("left", add_tracklist_debuff_button, "right", 1, 0)
--buff tracklist
buff_tracklist_label:SetPoint ("topleft", add_tracklist_debuff_button.widget, "bottomleft", 0, -10)
buff_name_tracklist_entry:SetPoint ("topleft", buff_tracklist_label, "bottomleft", 0, -2)
add_tracklist_buff_button:SetPoint ("topleft", buff_name_tracklist_entry, "bottomleft", 0, -2)
add_tracklist_buff_button_id:SetPoint ("left", add_tracklist_buff_button, "right", 1, 0)
local ALL_BUFFS = {}
local ALL_DEBUFFS = {}
@@ -568,31 +693,46 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
local autoTrackList_LineOnEnter = function (self, capsule, value)
local flag = self.Flag
value = value or self.SpellID
local spellName = GetSpellInfo (value)
if (spellName) then
local spellsWithSameName = db.aura_cache_by_name [lower (spellName)]
if (not spellsWithSameName) then
same_name_spells_add (value)
spellsWithSameName = db.aura_cache_by_name [lower (spellName)]
end
if not flag then
GameCooltip2:Preset (2)
GameCooltip2:SetOwner (self, "left", "right", 2, 0)
GameCooltip2:SetOption ("TextSize", 10)
if (spellsWithSameName) then
GameCooltip2:Preset (2)
GameCooltip2:SetOwner (self, "left", "right", 2, 0)
GameCooltip2:SetOption ("TextSize", 10)
for i, spellID in ipairs (spellsWithSameName) do
local spellName, _, spellIcon = GetSpellInfo (spellID)
if (spellName) then
GameCooltip2:AddLine (spellName .. " (" .. spellID .. ")")
GameCooltip2:AddIcon (spellIcon, 1, 1, 14, 14, .1, .9, .1, .9)
end
local spellName, _, spellIcon = GetSpellInfo (value)
if (spellName) then
GameCooltip2:AddLine (spellName .. " (" .. value .. ")")
GameCooltip2:AddIcon (spellIcon, 1, 1, 14, 14, .1, .9, .1, .9)
end
GameCooltip2:Show()
else
local spellName = GetSpellInfo (value)
if (spellName) then
local spellsWithSameName = db.aura_cache_by_name [lower (spellName)]
if (not spellsWithSameName) then
same_name_spells_add (value)
spellsWithSameName = db.aura_cache_by_name [lower (spellName)]
end
GameCooltip2:Show()
if (spellsWithSameName) then
GameCooltip2:Preset (2)
GameCooltip2:SetOwner (self, "left", "right", 2, 0)
GameCooltip2:SetOption ("TextSize", 10)
for i, spellID in ipairs (spellsWithSameName) do
local spellName, _, spellIcon = GetSpellInfo (spellID)
if (spellName) then
GameCooltip2:AddLine (spellName .. " (" .. spellID .. ")")
GameCooltip2:AddIcon (spellIcon, 1, 1, 14, 14, .1, .9, .1, .9)
end
end
GameCooltip2:Show()
end
end
end
@@ -617,13 +757,19 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
local auraTable = data [index]
if (auraTable) then
local line = self:GetLine (i)
local spellID, spellName, spellIcon = unpack (auraTable)
local spellID, spellName, spellIcon, lowerSpellName, flag = unpack (auraTable)
line.SpellID = spellID
line.SpellName = spellName
line.SpellNameLower = lowerSpellName
line.SpellIcon = spellIcon
line.Flag = flag
line.name:SetText (spellName)
if flag then
line.name:SetText (spellName)
else
line.name:SetText (spellName .. " (" .. spellID .. ")")
end
line.icon:SetTexture (spellIcon)
line.icon:SetTexCoord (.1, .9, .1, .9)
end
@@ -647,6 +793,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
local onRemoveClick = function (self)
local spellID = self:GetParent().SpellID
db [spellID] = nil
db ["".. (spellID or "")] = nil -- cleanup...
parent [member]:DoRefresh()
end
@@ -691,11 +838,13 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
function scroll:DoRefresh()
local t = {}
for spellID, _ in pairs (scroll.OriginalData) do
local added = {}
for spellID, flag in pairs (scroll.OriginalData) do
local spellName, _, spellIcon = GetSpellInfo (spellID)
if (spellName) then
if (spellName and not added[tonumber(spellID) or 0]) then
local lowerSpellName = spellName:lower()
tinsert (t, {spellID, spellName, spellIcon, lowerSpellName})
tinsert (t, {spellID, spellName, spellIcon, lowerSpellName, flag})
added[tonumber(spellID) or 0] = true
end
end
@@ -756,7 +905,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
buff_tracked:DoRefresh()
debuff_tracked:DoRefresh()
buff_ignored:DoRefresh()
buff_ignored:DoRefresh()
debuff_ignored:DoRefresh()
end)
@@ -923,6 +1072,13 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
if (spellID) then
tinsert (f.db.aura_tracker.buff, spellID)
--[[
if not tonumber(spellName) then
tinsert (f.db.aura_tracker.buff, spellName)
else
tinsert (f.db.aura_tracker.buff, spellID)
end
]]--
else
print ("spellId not found for spell:", spellName)
end
@@ -936,6 +1092,13 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
end
tinsert (f.db.aura_tracker.buff, spellID)
--[[
if not tonumber(text) then
tinsert (f.db.aura_tracker.buff, text)
else
tinsert (f.db.aura_tracker.buff, spellID)
end
]]--
end
buffs_added:Refresh()
@@ -956,6 +1119,13 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
if (spellID) then
tinsert (f.db.aura_tracker.debuff, spellID)
--[[
if not tonumber(spellName) then
tinsert (f.db.aura_tracker.debuff, spellName)
else
tinsert (f.db.aura_tracker.debuff, spellID)
end
]]--
else
print ("spellId not found for spell:", spellName)
end
@@ -969,6 +1139,15 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
end
tinsert (f.db.aura_tracker.debuff, spellID)
--[[
if not tonumber(text) then
print(text)
tinsert (f.db.aura_tracker.debuff, text)
else
print(spellID)
tinsert (f.db.aura_tracker.debuff, spellID)
end
]]--
end
debuffs_added:Refresh()
+11 -1
View File
@@ -1,6 +1,6 @@
local dversion = 233
local dversion = 236
local major, minor = "DetailsFramework-1.0", dversion
local DF, oldminor = LibStub:NewLibrary (major, minor)
@@ -2409,6 +2409,16 @@ end
-----------------------------
function DF:OpenInterfaceProfile()
-- OptionsFrame1/2 should be registered if created with DF:CreateAddOn, so open to them directly
if self.OptionsFrame1 then
InterfaceOptionsFrame_OpenToCategory (self.OptionsFrame1)
if self.OptionsFrame2 then
InterfaceOptionsFrame_OpenToCategory (self.OptionsFrame2)
end
return
end
-- fallback (broken as of ElvUI Skins in version 12.18+... maybe fix/change will come)
InterfaceOptionsFrame_OpenToCategory (self.__name)
InterfaceOptionsFrame_OpenToCategory (self.__name)
for i = 1, 100 do
+21 -6
View File
@@ -9226,7 +9226,7 @@ function DF:CreateUnitFrame (parent, name, unitFrameSettingsOverride, healthBarS
--> overlay frame (widgets that need to stay above the unit frame)
local overlayFrame = CreateFrame ("frame", "$parentOverlayFrame", f, "BackdropTemplate")
borderFrame:SetFrameLevel (f:GetFrameLevel() + 6)
overlayFrame:SetFrameLevel (f:GetFrameLevel() + 6)
f.overlayFrame = overlayFrame
--> unit frame layers
@@ -10038,13 +10038,16 @@ DF.ListboxFunctions = {
for i = 1, totalLines do
local index = i + offset
local lineData = data[index] --what is shown in the textentries, array
if (lineData) then
local line = self:GetLine(i)
line.dataIndex = index
line.deleteButton:SetClickFunction(DF.ListboxFunctions.deleteEntry, data, index)
line.indexText:SetText(index)
local amountEntries = #lineData
for o = 1, amountEntries do
--data
local textEntry = line.widgets[o]
textEntry.dataTable = lineData
textEntry.dataTableIndex = o
@@ -10082,12 +10085,13 @@ DF.ListboxFunctions = {
local options = listBox.options
line:SetBackdrop(options.line_backdrop)
line:SetBackdropColor(unpack(options.line_backdrop_color))
line:SetBackdropBorderColor(unpack(options.line_backdrop_border_color))
DF:Mixin(line, DF.HeaderFunctions)
line.widgets = {}
for i = 1, (listBox.headerLength+1) do --+1 to add the delete button
for i = 1, (listBox.headerLength+2) do --+2 to add the delete button and index
local headerColumn = listBox.headerTable[i]
if (headerColumn.isDelete) then
@@ -10095,9 +10099,16 @@ DF.ListboxFunctions = {
line.deleteButton = deleteButton
line:AddFrameToHeaderAlignment(deleteButton)
elseif (headerColumn.isIndex) then
local indexText = DF:CreateLabel(line)
line.indexText = indexText
line:AddFrameToHeaderAlignment(indexText)
elseif (headerColumn.text) then
local template = DF.table.copy({}, DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE"))
template.backdropcolor = {0.1, 0.1, 0.1, .7}
template.backdropcolor = {.1, .1, .1, .7}
template.backdropbordercolor = {.2, .2, .2, .6}
local textEntry = DF:CreateTextEntry(line, function()end, headerColumn.width, self.lineHeight, nil, nil, nil, template)
textEntry:SetHook("OnEditFocusGained", function() textEntry:HighlightText(0) end)
textEntry:SetHook("OnEditFocusLost", function()
@@ -10122,6 +10133,7 @@ DF.ListboxFunctions = {
end
frameCanvas.data = newData
frameCanvas.scrollBox:SetData(newData)
frameCanvas.scrollBox:Refresh()
end,
}
@@ -10132,7 +10144,8 @@ local listbox_options = {
auto_width = true,
line_height = 16,
line_backdrop = {bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
line_backdrop_color = {.3, .3, .3, .8},
line_backdrop_color = {.1, .1, .1, .6},
line_backdrop_border_color = {0, 0, 0, .5},
}
--@parent: parent frame
@@ -10165,8 +10178,8 @@ function DF:CreateListBox(parent, name, data, options, headerTable, headerOption
--> header
--check for default values in the header
headerTable = headerTable or {
{text = "Spell Name", width = 70},
{text = "Spell Id", width = 70},
{text = "Spell Name", width = 70},
}
headerOptions = headerOptions or {
padding = 2,
@@ -10176,6 +10189,7 @@ function DF:CreateListBox(parent, name, data, options, headerTable, headerOption
frameCanvas.headerLength = #headerTable
--add the detele line column into the header frame
tinsert(headerTable, 1, {text = "#", width = 20, isIndex = true}) --isDelete signals the createScrollLine() to make the delete button for the line
tinsert(headerTable, {text = "Delete", width = 50, isDelete = true}) --isDelete signals the createScrollLine() to make the delete button for the line
local header = DF:CreateHeader(frameCanvas, headerTable, headerOptions)
@@ -10206,7 +10220,8 @@ function DF:CreateListBox(parent, name, data, options, headerTable, headerOption
--> scroll frame
local lineHeight = frameCanvas.options.line_height
local lineAmount = floor(height / lineHeight)
--calc the size of the space occupied by the add button, header etc
local lineAmount = floor((height - 60) / lineHeight)
-- -12 is padding: 5 on top, 7 bottom, 2 header scrollbar blank space | -24 to leave space to the add button
local scrollBox = DF:CreateScrollBox(frameCanvas, "$parentScrollbox", frameCanvas.scrollRefresh, data, width-4, height - header:GetHeight() - 12 - 24, lineAmount, lineHeight)
+66
View File
@@ -759,6 +759,7 @@ DF.CrowdControlSpells = {
[221562] = "DEATHKNIGHT", --Asphyxiate
[108194] = "DEATHKNIGHT", --Asphyxiate (talent)
[207167] = "DEATHKNIGHT", --Blinding Sleet
[334693] = "DEAHTKNIGHT", --Absolute Zero (legendary)
[339] = "DRUID", --Entangling Roots
[2637] = "DRUID", --Hibernate
@@ -807,6 +808,8 @@ DF.CrowdControlSpells = {
[200166] = "DEMONHUNTER", --Metamorphosis
[207685] = "DEMONHUNTER", --Sigil of Misery
[211881] = "DEMONHUNTER", -- Fel Eruption
[331866] = "COVENANT|VENTHYR", --Agent of Chaos (Nadia soulbind)
}
DF.SpecIds = {
@@ -859,6 +862,69 @@ DF.SpecIds = {
[270] = "MONK",
}
DF.ClassSpecIds = { --private
["DEMONHUNTER"] = {
[577] = true,
[581] = true,
},
["DEATHKNIGHT"] = {
[250] = true,
[251] = true,
[252] = true,
},
["WARRIOR"] = {
[71] = true,
[72] = true,
[73] = true,
},
["MAGE"] = {
[62] = true,
[63] = true,
[64] = true,
},
["ROGUE"] = {
[259] = true,
[260] = true,
[261] = true,
},
["DRUID"] = {
[102] = true,
[103] = true,
[104] = true,
[105] = true,
},
["HUNTER"] = {
[253] = true,
[254] = true,
[255] = true,
},
["SHAMAN"] = {
[262] = true,
[263] = true,
[264] = true,
},
["PRIEST"] = {
[256] = true,
[257] = true,
[258] = true,
},
["WARLOCK"] = {
[265] = true,
[266] = true,
[267] = true,
},
["PALADIN"] = {
[65] = true,
[66] = true,
[70] = true,
},
["MONK"] = {
[268] = true,
[269] = true,
[270] = true,
},
}
DF.CooldownToClass = {}
DF.CooldownsAttack = {}
+109 -61
View File
@@ -18,6 +18,7 @@ local IsInRaid = _G.IsInRaid
local GetNumGroupMembers = _G.GetNumGroupMembers
local GetRaidRosterInfo = _G.GetRaidRosterInfo
local unpack = _G.unpack
local IsInGroup = _G.IsInGroup
Details.packFunctions = {}
@@ -106,7 +107,7 @@ function Details.packFunctions.PackCombatData(combatObject, flags)
Details.packFunctions.PackDamage(combatObject)
end
if (bit.band(flags, 0x2) ~= 0 and false) then
if (bit.band(flags, 0x2) ~= 0) then
Details.packFunctions.PackHeal(combatObject)
end
@@ -134,7 +135,7 @@ function Details.packFunctions.PackCombatData(combatObject, flags)
end
--add the heal actors data
if (bit.band(flags, 0x2) ~= 0 and false) then
if (bit.band(flags, 0x2) ~= 0) then
exportedString = exportedString .. "!H" .. ","
for index, data in ipairs(actorHealInfo) do
exportedString = exportedString .. data .. ","
@@ -425,7 +426,7 @@ function Details.packFunctions.PackDamage(combatObject)
end
end
local playerIndex = UnitInRaid("player")
local playerIndex = _G.UnitInRaid("player")
if (not playerIndex) then --no player index
if (isDebugging) then
@@ -462,7 +463,7 @@ function Details.packFunctions.PackDamage(combatObject)
for i = 1, 20 do
local name, _, subgroup = GetRaidRosterInfo(i)
if (name) then --maybe the group has less than 20 players
name = Ambiguate(name, "none")
name = _G.Ambiguate(name, "none")
if (name and subgroup <= 4) then
tinsert(allPlayerNames, name)
end
@@ -588,8 +589,8 @@ function Details.packFunctions.UnPackDamage(currentCombat, combatData, tablePosi
--get or create the actor object
local actorObject = damageContainer:GetOrCreateActor(serialNumber, actorName, actorFlag, true)
--set the actor class, spec and group
--set the actor class, spec and group
actorObject.classe = class
actorObject.spec = spec
actorObject.grupo = isActorInGroup(class, actorFlag)
@@ -635,7 +636,6 @@ function Details.packFunctions.UnPackDamage(currentCombat, combatData, tablePosi
spellIndex = spellIndex + targetsSize + 4
end
--each iteration need to build a new target table
actorObject.targets = newTargetsTable
tablePosition = tablePosition + spellsSize --increase table position
end
@@ -676,19 +676,9 @@ function Details.packFunctions.PackHeal(combatObject)
end
end
local playerIndex
--check if this player has to send information about an enemy npc
if (IsInGroup()) then
for i = 1, GetNumGroupMembers() do
local name = GetRaidRosterInfo(i)
if (name == playerName) then
playerIndex = i
break
end
end
end
local playerIndex = UnitInRaid("player")
if (not playerIndex) then
if (not playerIndex) then --no player index
if (isDebugging) then
print("PackHeal(): return | no player index found.")
end
@@ -705,9 +695,10 @@ function Details.packFunctions.PackHeal(combatObject)
--check if is an enemy or neutral
if (actor:IsNeutralOrEnemy()) then
--get the spawnId
local spawnId = select(7, strsplit( "-", actor.serial))
local spawnId = select(7, strsplit("-", actor.serial))
if (spawnId) then
spawnId = tonumber(spawnId)
--convert hex to number
spawnId = tonumber(spawnId:sub(1, 10), 16)
if (spawnId) then
--first index is the actorObject, the second index is the spawnId to sort enemies
tinsert(allEnemies, {actor, spawnId})
@@ -715,12 +706,31 @@ function Details.packFunctions.PackHeal(combatObject)
end
end
end
--sort enemies by their spawnId
table.sort(allEnemies, Details.Sort2)
local allPlayerNames = {}
for i = 1, 20 do
local name, _, subgroup = GetRaidRosterInfo(i)
if (name) then --maybe the group has less than 20 players
name = Ambiguate(name, "none")
if (name and subgroup <= 4) then
tinsert(allPlayerNames, name)
end
end
end
table.sort(allPlayerNames, function(t1, t2) return t1 < t2 end)
local playerName = UnitName("player")
for i = 1, #allPlayerNames do
if (playerName == allPlayerNames[i]) then
playerIndex = i
break
end
end
--this is the enemy that this player has to send
local enemyObjectToSend = allEnemies[playerIndex]
local enemyObjectToSend = allEnemies[playerIndex] and allEnemies[playerIndex][1]
if (enemyObjectToSend) then
tinsert(actorsToPack, enemyObjectToSend)
end
@@ -735,8 +745,6 @@ function Details.packFunctions.PackHeal(combatObject)
end
end
local spellSize = 0
for i = 1, #actorsToPack do
--get the actor object
local actor = actorsToPack[i]
@@ -745,8 +753,8 @@ function Details.packFunctions.PackHeal(combatObject)
--where the information of this actor starts
local currentIndex = #actorHealInfo + 1
--[1] index where is stored the this actor general information
actorHealInfo[currentIndex] = indexToActorInfo --[1]
--[1] index where is stored the this actor info like name, class, spec, etc
actorHealInfo[currentIndex] = indexToActorInfo --[1]
--[2 - 6]
actorHealInfo [currentIndex + 1] = floor(actor.total) --[2]
@@ -770,28 +778,22 @@ function Details.packFunctions.PackHeal(combatObject)
actorHealInfo [#actorHealInfo + 1] = floor(spellId)
actorHealInfo [#actorHealInfo + 1] = floor(spellHealingDone)
actorHealInfo [#actorHealInfo + 1] = floor(spellHits)
totalSpellIndexes = totalSpellIndexes + 3
--build targets
local targetsSize = Details.packFunctions.CountTableEntriesValid(spellTargets) * 2
actorHealInfo [#actorHealInfo + 1] = targetsSize
totalSpellIndexes = totalSpellIndexes + 1
for actorName, damageDone in pairs(spellTargets) do
local actorInfoIndex = actorInformationIndexes[actorName]
if (actorInfoIndex) then
actorHealInfo [#actorHealInfo + 1] = actorInfoIndex
actorHealInfo [#actorHealInfo + 1] = floor(damageDone)
spellSize = spellSize + 2
end
for actorName, healingDone in pairs(spellTargets) do
actorHealInfo [#actorHealInfo + 1] = actorName
actorHealInfo [#actorHealInfo + 1] = floor(healingDone)
totalSpellIndexes = totalSpellIndexes + 2
end
--+3: spellId, damage, spellHits
--+1: the index that tell the size of targets
totalSpellIndexes = totalSpellIndexes + 3 + targetsSize + 1
spellSize = spellSize + 1 --debug
end
--amount of indexes spells are using
actorDamageInfo[reservedSpellSizeIndex] = totalSpellIndexes
actorHealInfo[reservedSpellSizeIndex] = totalSpellIndexes
end
if (isDebugging) then
@@ -811,8 +813,12 @@ function Details.packFunctions.UnPackHeal(currentCombat, combatData, tablePositi
--get the healing container
local healContainer = currentCombat[DETAILS_ATTRIBUTE_HEAL]
--loop from 1 to 199, the amount of actors store is unknown
--todo: it's only unpacking the first actor from the table, e.g. theres izimode and eye of corruption, after export it only shows the eye of corruption
--table position does not move forward
for i = 1, 199 do
--this is the same as damage, all comments for the code are there
--actor information index in the combatData table
--this index gives the position where the actor name, class, spec are stored
local actorReference = tonumber(combatData[tablePosition]) --[1]
local actorName, actorFlag, serialNumber, class, spec = Details.packFunctions.RetriveActorInformation(combatData, actorReference)
@@ -820,6 +826,7 @@ function Details.packFunctions.UnPackHeal(currentCombat, combatData, tablePositi
print("UnPackHeal(): Retrivied Data From " .. (actorReference or "nil") .. ":", actorName, actorFlag, serialNumber, class, spec)
end
--check if all healing actors has been processed
--if there's no actor name it means it reached the end
if (not actorName) then
if (isDebugging) then
@@ -828,43 +835,56 @@ function Details.packFunctions.UnPackHeal(currentCombat, combatData, tablePositi
break
end
--creata the actor object
--get or create the actor object
local actorObject = healContainer:GetOrCreateActor(serialNumber, actorName, actorFlag, true)
--set the actor class, spec and group
actorObject.classe = class
actorObject.spec = spec
actorObject.grupo = isActorInGroup(class, actorFlag)
actorObject.flag_original = actorFlag
--> copy the base healing
actorObject.total = tonumber(combatData[tablePosition+1]) --[2]
actorObject.totalabsorb = tonumber(combatData[tablePosition+2]) --[3]
actorObject.totalover = tonumber(combatData[tablePosition+3]) --[4]
actorObject.healing_taken = tonumber(combatData[tablePosition+4]) --[5]
actorObject.totalover_without_pet = tonumber(combatData[tablePosition+5]) --[6]
actorObject.totalover_without_pet = tonumber(combatData[tablePosition+5]) --[6]
tablePosition = tablePosition + 6
--> copy back the actor spells
--amount of indexes used to store spells for this actor
local spellsSize = tonumber(combatData [tablePosition]) --[7]
if (isDebugging) then
print("spell size unpack:", spellsSize)
end
tablePosition = tablePosition + 1
local newTargetsTable = {}
local spellIndex = tablePosition
while(spellIndex < tablePosition + spellsSize) do
local spellId = tonumber(combatData [spellIndex]) --[1]
local spellDamage = tonumber(combatData [spellIndex+1]) --[2]
local spellHealingDone = tonumber(combatData [spellIndex+1]) --[2]
local spellHits = tonumber(combatData [spellIndex+2]) --[3]
local targetsSize = combatData [spellIndex+3] --[4]
local targetsSize = tonumber(combatData[spellIndex+3]) --[4]
local targetTable = Details.packFunctions.UnpackTable(combatData, spellIndex+3, true)
local spellObject = actorObject.spells:GetOrCreateSpell(spellId, true) --this one need some translation
spellObject.total = spellDamage
spellObject.total = spellHealingDone
spellObject.counter = spellHits
spellObject.targets = targetTable
for targetName, amount in pairs (spellObject.targets) do
newTargetsTable[targetName] = (newTargetsTable[targetName] or 0) + amount
end
spellIndex = spellIndex + targetsSize + 4
end
actorObject.targets = newTargetsTable
tablePosition = tablePosition + spellsSize --increase table position
end
@@ -975,29 +995,57 @@ function Details.packFunctions.DeployPackedCombatData(packedCombatData)
currentCombat[DETAILS_ATTRIBUTE_HEAL]:Remap()
--refresh damage taken
local damageContainer = currentCombat[DETAILS_ATTRIBUTE_DAMAGE]
local allActors = damageContainer._ActorTable
do
local damageContainer = currentCombat[DETAILS_ATTRIBUTE_DAMAGE]
local allActors = damageContainer._ActorTable
for i = 1, #allActors do --reset damage taken table
local actor = allActors[i]
actor.damage_taken = 0
actor.damage_from = {}
end
for i = 1, #allActors do --reset damage taken table
local actor = allActors[i]
actor.damage_taken = 0
actor.damage_from = {}
end
for i = 1, #allActors do
local actor = allActors[i]
for targetName, amount in pairs (actor.targets) do
local actorIndex = damageContainer._NameIndexTable[targetName]
if (actorIndex) then
local targetActor = allActors[actorIndex]
if (targetActor) then
targetActor.damage_taken = targetActor.damage_taken + amount
targetActor.damage_from[actor.nome] = (targetActor.damage_from[actor.nome] or 0) + amount
for i = 1, #allActors do
local actor = allActors[i]
for targetName, amount in pairs (actor.targets) do
local actorIndex = damageContainer._NameIndexTable[targetName]
if (actorIndex) then
local targetActor = allActors[actorIndex]
if (targetActor) then
targetActor.damage_taken = targetActor.damage_taken + amount
targetActor.damage_from[actor.nome] = (targetActor.damage_from[actor.nome] or 0) + amount
end
end
end
end
end
--refresh healing taken
do
local healingContainer = currentCombat[DETAILS_ATTRIBUTE_HEAL]
local allActors = healingContainer._ActorTable
for i = 1, #allActors do --reset healing taken table
local actor = allActors[i]
actor.healing_taken = 0
actor.healing_from = {}
end
for i = 1, #allActors do
local actor = allActors[i]
for targetName, amount in pairs (actor.targets) do
local actorIndex = healingContainer._NameIndexTable[targetName]
if (actorIndex) then
local targetActor = allActors[actorIndex]
if (targetActor) then
targetActor.healing_taken = targetActor.healing_taken + amount
targetActor.healing_from[actor.nome] = (targetActor.healing_from[actor.nome] or 0) + amount
end
end
end
end
end
--refresh windows
currentCombat[DETAILS_ATTRIBUTE_DAMAGE].need_refresh = true
currentCombat[DETAILS_ATTRIBUTE_HEAL].need_refresh = true