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.

656 lines
25 KiB

local MDT = MDT
local L = MDT.L
local AceGUI = LibStub("AceGUI-3.0")
local db
3 years ago
local tconcat, tinsert = table.concat, table.insert
4 years ago
--test
local function CreateDispatcher(argCount)
3 years ago
local code = [[
local xpcall, eh = ...
local method, ARGS
local function call() return method(ARGS) end
local function dispatch(func, ...)
method = func
if not method then return end
ARGS = ...
return xpcall(call, eh)
end
return dispatch
]]
3 years ago
local ARGS = {}
for i = 1, argCount do ARGS[i] = "arg" .. i end
code = code:gsub("ARGS", tconcat(ARGS, ", "))
return assert(loadstring(code, "safecall Dispatcher[" .. argCount .. "]"))(xpcall, errorhandler)
end
3 years ago
local Dispatchers = setmetatable({}, { __index = function(self, argCount)
local dispatcher = CreateDispatcher(argCount)
rawset(self, argCount, dispatcher)
return dispatcher
end })
Dispatchers[0] = function(func)
3 years ago
return xpcall(func, errorhandler)
end
local function safecall(func, ...)
3 years ago
return Dispatchers[select("#", ...)](func, ...)
end
AceGUI:RegisterLayout("ThreeColums", function(content, children)
3 years ago
if children[1] then
children[1]:SetWidth(content:GetWidth() / 3 - 10)
children[1].frame:ClearAllPoints()
children[1].frame:SetPoint("TOPLEFT", content, "TOPLEFT", 0, 0)
children[1].frame:SetPoint("BOTTOMLEFT", content, "BOTTOMLEFT", 0, 0)
children[1].frame:Show()
end
if children[2] then
children[2]:SetWidth(content:GetWidth() / 3 - 10)
children[2].frame:ClearAllPoints()
children[2].frame:SetPoint("TOPLEFT", children[1].frame, "TOPRIGHT", 0, 0)
children[2].frame:SetPoint("BOTTOMLEFT", children[1].frame, "BOTTOMRIGHT", 0, 0)
children[2].frame:Show()
end
if children[3] then
children[3]:SetWidth(content:GetWidth() / 3 - 10)
children[3].frame:ClearAllPoints()
children[3].frame:SetPoint("TOPLEFT", children[2].frame, "TOPRIGHT", 0, 0)
children[3].frame:SetPoint("BOTTOMLEFT", children[2].frame, "BOTTOMRIGHT", 0, 0)
children[3].frame:Show()
end
safecall(content.obj.LayoutFinished, content.obj, nil, nil)
end)
-- Very simple Layout, Children are stacked on top of each other down the left side
AceGUI:RegisterLayout("ListWithHidden", function(content, children)
3 years ago
local filteredChildren = {}
for i = 1, #children do
local child = children[i]
if not child.hidden then
tinsert(filteredChildren, child)
else
local frame = child.frame
frame:ClearAllPoints()
frame:Hide()
end
3 years ago
end
AceGUI:GetLayout("List")(content, filteredChildren)
end)
local currentTab = "tab1"
local function MakeEnemeyInfoFrame()
3 years ago
--frame
local f = AceGUI:Create("Frame")
f:SetTitle(L["Enemy Info"])
f:EnableResize(false)
f.frame:SetMovable(false)
function f.frame:StartMoving() end
f:SetLayout("Fill")
f:SetCallback("OnClose", function(widget)
end)
f.frame:ClearAllPoints()
f.frame:SetAllPoints(MDTScrollFrame)
local originalHide = MDT.main_frame.Hide
function MDT.main_frame:Hide(...)
f.frame:Hide()
return originalHide(self, ...);
end
--tabGroup
f.tabGroup = AceGUI:Create("TabGroup")
local tabGroup = f.tabGroup
tabGroup:SetTabs(
{
{ text = L["Enemy Info"], value = "tab1" },
--{text="Damage Calc", value="tab2"},
}
)
tabGroup:SetLayout("ThreeColums")
f:AddChild(tabGroup)
--EnemyInfo
local function DrawGroup1(container)
3 years ago
---LEFT
local leftContainer = AceGUI:Create("SimpleGroup")
f.leftContainer = leftContainer
if not leftContainer.frame.SetBackdrop then
Mixin(leftContainer.frame, BackdropTemplateMixin)
end
--Temporary Fix: backdrop frame level is set to 10000 normally
--leftContainer.frame:GetBackdrop():SetFrameLevel(1)
leftContainer.frame:SetBackdropColor(1, 1, 1, 0)
leftContainer:SetLayout("List")
leftContainer:SetWidth(container.frame:GetWidth() / 3)
leftContainer:SetHeight(container.frame:GetHeight())
--enemyDropDown
f.enemyDropDown = AceGUI:Create("Dropdown")
local enemyDropDown = f.enemyDropDown
enemyDropDown:SetCallback("OnValueChanged", function(widget, callbackName, key)
MDT:UpdateEnemyInfoFrame(key)
end)
3 years ago
--model
f.model = f.model or CreateFrame("PlayerModel", nil, f.frame, "ModelWithControlsTemplate")
local model = f.model
model:SetFrameLevel(1)
model:SetSize(leftContainer.frame:GetWidth() - 30, 269)
model:SetScript("OnEnter", nil)
model:SetFrameLevel(150)
model:Show()
f.modelContainer = f.modelContainer or AceGUI:Create("InlineGroup")
local modelContainer = f.modelContainer
if not modelContainer.frame.SetBackdrop then
Mixin(modelContainer.frame, BackdropTemplateMixin)
end
3 years ago
modelContainer.frame:SetBackdropColor(1, 1, 1, 0)
modelContainer:SetWidth(leftContainer.frame:GetWidth() - 20)
modelContainer:SetHeight(249)
modelContainer:SetLayout("Flow")
f.modelDummyIcon = f.modelDummyIcon or AceGUI:Create("Icon")
local modelDummyIcon = f.modelDummyIcon
modelDummyIcon:SetImageSize(leftContainer.frame:GetWidth() - 20, 249)
modelDummyIcon:SetDisabled(true)
modelContainer:AddChild(modelDummyIcon)
model:ClearAllPoints()
model:SetPoint("BOTTOM", modelContainer.frame, "BOTTOM", 0, 10)
MDT:FixAceGUIShowHide(model, modelContainer.frame, true)
f.characteristicsContainer = AceGUI:Create("InlineGroup")
if not f.characteristicsContainer.frame.SetBackdrop then
Mixin(f.characteristicsContainer.frame, BackdropTemplateMixin)
end
f.characteristicsContainer.frame:SetBackdropColor(1, 1, 1, 0)
f.characteristicsContainer:SetWidth(leftContainer.frame:GetWidth() - 20)
f.characteristicsContainer:SetHeight(80)
f.characteristicsContainer:SetLayout("Flow")
3 years ago
leftContainer:AddChild(enemyDropDown)
leftContainer:AddChild(modelContainer)
leftContainer:AddChild(f.characteristicsContainer)
3 years ago
---MIDDLE
f.midContainer = f.midContainer or AceGUI:Create("SimpleGroup")
local midContainer = f.midContainer
if not midContainer.frame.SetBackdrop then
Mixin(midContainer.frame, BackdropTemplateMixin)
end
3 years ago
--Temporary Fix: backdrop frame level is set to 10000 normally
--midContainer.frame.backdrop:SetFrameLevel(1)
midContainer.frame:SetBackdropColor(1, 1, 1, 0)
midContainer:SetLayout("List")
midContainer:SetWidth(container.frame:GetWidth() / 3)
midContainer:SetHeight(container.frame:GetHeight())
--spacing
local midDummyIcon = AceGUI:Create("Icon")
midDummyIcon:SetImageSize(20, 20)
midDummyIcon:SetHeight(enemyDropDown.frame:GetHeight())
midDummyIcon:SetDisabled(true)
midContainer:AddChild(midDummyIcon)
f.enemyDataContainer = AceGUI:Create("InlineGroup")
if not f.enemyDataContainer.frame.SetBackdrop then
Mixin(f.enemyDataContainer.frame, BackdropTemplateMixin)
end
f.enemyDataContainer.frame:SetBackdropColor(1, 1, 1, 0)
f.enemyDataContainer:SetWidth(leftContainer.frame:GetWidth() - 20)
f.enemyDataContainer:SetHeight(235)
f.enemyDataContainer:SetLayout("Flow")
f.enemyDataContainer.nameEditBox = AceGUI:Create("EditBox")
f.enemyDataContainer.nameEditBox:SetLabel(L["Enemy Info NPC Name"])
f.enemyDataContainer.nameEditBox:DisableButton(true)
f.enemyDataContainer.nameEditBox:SetCallback("OnTextChanged", function(self)
self:SetText(self.defaultText)
end)
f.enemyDataContainer:AddChild(f.enemyDataContainer.nameEditBox)
f.enemyDataContainer.idEditBox = AceGUI:Create("EditBox")
f.enemyDataContainer.idEditBox:SetLabel(L["Enemy Info NPC Id"])
f.enemyDataContainer.idEditBox:DisableButton(true)
f.enemyDataContainer.idEditBox:SetCallback("OnTextChanged", function(self)
self:SetText(self.defaultText)
end)
f.enemyDataContainer:AddChild(f.enemyDataContainer.idEditBox)
f.enemyDataContainer.healthEditBox = AceGUI:Create("EditBox")
f.enemyDataContainer.healthEditBox:SetLabel(" ") --has to be non empty for proper spacing, we set this later
f.enemyDataContainer.healthEditBox:DisableButton(true)
f.enemyDataContainer.healthEditBox:SetCallback("OnTextChanged", function(self)
self:SetText(self.defaultText)
end)
f.enemyDataContainer:AddChild(f.enemyDataContainer.healthEditBox)
f.enemyDataContainer.creatureTypeEditBox = AceGUI:Create("EditBox")
f.enemyDataContainer.creatureTypeEditBox:SetLabel(L["Enemy Info NPC Creature Type"])
f.enemyDataContainer.creatureTypeEditBox:DisableButton(true)
f.enemyDataContainer.creatureTypeEditBox:SetCallback("OnTextChanged", function(self)
self:SetText(self.defaultText)
end)
f.enemyDataContainer:AddChild(f.enemyDataContainer.creatureTypeEditBox)
f.enemyDataContainer.levelEditBox = AceGUI:Create("EditBox")
f.enemyDataContainer.levelEditBox:SetLabel(L["Enemy Info NPC Level"])
f.enemyDataContainer.levelEditBox:DisableButton(true)
f.enemyDataContainer.levelEditBox:SetCallback("OnTextChanged", function(self)
self:SetText(self.defaultText)
end)
f.enemyDataContainer:AddChild(f.enemyDataContainer.levelEditBox)
f.enemyDataContainer.countEditBox = AceGUI:Create("EditBox")
f.enemyDataContainer.countEditBox:SetLabel(L["Enemy Info NPC Enemy Forces"])
f.enemyDataContainer.countEditBox:DisableButton(true)
f.enemyDataContainer.countEditBox:SetCallback("OnTextChanged", function(self)
self:SetText(self.defaultText)
end)
f.enemyDataContainer:AddChild(f.enemyDataContainer.countEditBox)
f.enemyDataContainer.teemingCountEditBox = AceGUI:Create("EditBox")
f.enemyDataContainer.teemingCountEditBox:SetLabel(L["Enemy Info NPC Enemy Forces (Teeming)"])
f.enemyDataContainer.teemingCountEditBox:DisableButton(true)
f.enemyDataContainer.teemingCountEditBox:SetCallback("OnTextChanged", function(self)
self:SetText(self.defaultText)
end)
f.enemyDataContainer:AddChild(f.enemyDataContainer.teemingCountEditBox)
f.enemyDataContainer.stealthCheckBox = AceGUI:Create("CheckBox")
f.enemyDataContainer.stealthCheckBox:SetLabel(L["Enemy Info NPC Stealth"])
f.enemyDataContainer.stealthCheckBox:SetWidth((f.enemyDataContainer.frame:GetWidth() / 2) - 40)
f.enemyDataContainer.stealthCheckBox:SetCallback("OnValueChanged", function(self)
self:SetValue(self.defaultValue)
end)
f.enemyDataContainer:AddChild(f.enemyDataContainer.stealthCheckBox)
f.enemyDataContainer.stealthDetectCheckBox = AceGUI:Create("CheckBox")
f.enemyDataContainer.stealthDetectCheckBox:SetLabel(L["Enemy Info NPC Stealth Detect"])
f.enemyDataContainer.stealthDetectCheckBox:SetWidth((f.enemyDataContainer.frame:GetWidth() / 2))
f.enemyDataContainer.stealthDetectCheckBox:SetCallback("OnValueChanged", function(self)
self:SetValue(self.defaultValue)
end)
f.enemyDataContainer:AddChild(f.enemyDataContainer.stealthDetectCheckBox)
3 years ago
midContainer:AddChild(f.enemyDataContainer)
3 years ago
---RIGHT
f.rightContainer = f.rightContainer or AceGUI:Create("SimpleGroup")
local rightContainer = f.rightContainer
if not rightContainer.frame.SetBackdrop then
Mixin(rightContainer.frame, BackdropTemplateMixin)
end
--Temporary Fix: backdrop frame level is set to 10000 normally
--rightContainer.frame.backdrop:SetFrameLevel(1)
rightContainer.frame:SetBackdropColor(1, 1, 1, 0)
rightContainer:SetLayout("ListWithHidden")
rightContainer:SetWidth(container.frame:GetWidth() / 3)
rightContainer:SetHeight(container.frame:GetHeight())
if db.devMode then
local devModeLabel = AceGUI:Create("Label")
devModeLabel:SetText("R: Delete\nI: Toggle Interruptible\nS: Print SpellId")
rightContainer:AddChild(devModeLabel)
end
3 years ago
--spacing
local rightDummyIcon = AceGUI:Create("Icon")
rightDummyIcon:SetImageSize(20, 20)
rightDummyIcon:SetHeight(enemyDropDown.frame:GetHeight())
rightDummyIcon:SetDisabled(true)
3 years ago
--spells
f.spellScrollContainer = f.spellScrollContainer or AceGUI:Create("InlineGroup")
local spellScrollContainer = f.spellScrollContainer
if not spellScrollContainer.frame.SetBackdrop then
Mixin(spellScrollContainer.frame, BackdropTemplateMixin)
end
spellScrollContainer.frame:SetBackdropColor(1, 1, 1, 0)
spellScrollContainer:SetWidth(leftContainer.frame:GetWidth() - 20)
spellScrollContainer:SetHeight(282)
spellScrollContainer:SetLayout("Fill")
f.spellScroll = AceGUI:Create("ScrollFrame")
f.spellScroll:SetLayout("List")
spellScrollContainer:AddChild(f.spellScroll)
--powers
f.powerScrollContainer = f.powerScrollContainer or AceGUI:Create("InlineGroup")
local powerScrollContainer = f.powerScrollContainer
if not powerScrollContainer.frame.SetBackdrop then
Mixin(powerScrollContainer.frame, BackdropTemplateMixin)
end
3 years ago
powerScrollContainer.frame:SetBackdropColor(1, 1, 1, 0)
powerScrollContainer:SetWidth(leftContainer.frame:GetWidth() - 20)
powerScrollContainer:SetHeight(141)
powerScrollContainer:SetLayout("Fill")
f.powerScroll = AceGUI:Create("ScrollFrame")
f.powerScroll:SetLayout("List")
powerScrollContainer:AddChild(f.powerScroll)
powerScrollContainer.hidden = true
--spellButtons
f.spellButtonsContainer = f.spellButtonsContainer or AceGUI:Create("InlineGroup")
local spellButtonsContainer = f.spellButtonsContainer
if not spellButtonsContainer.frame.SetBackdrop then
Mixin(spellButtonsContainer.frame, BackdropTemplateMixin)
end
spellButtonsContainer.frame:SetBackdropColor(1, 1, 1, 0)
spellButtonsContainer:SetWidth(leftContainer.frame:GetWidth() - 20)
spellScrollContainer:SetLayout("Flow")
local buttonWidth = 110
f.sendSpellsButton = f.sendSpellsButton or AceGUI:Create("Button")
local sendSpellsButton = f.sendSpellsButton
sendSpellsButton:SetText(L["Link Spells"])
sendSpellsButton:SetWidth(buttonWidth)
sendSpellsButton:SetCallback("OnClick", function()
if #f.spellScroll.children < 1 then return end
local distribution = (UnitInRaid("player") and "RAID") or (IsInGroup() and "PARTY")
if not distribution then return end
local enemyName = f.enemyDropDown.text:GetText()
SendChatMessage(string.format(L["MDT: Spells for %s:"], enemyName), distribution)
for i, child in pairs(f.spellScroll.children) do
local link = GetSpellLink(child.spellId)
SendChatMessage(i .. ". " .. link, distribution)
end
end)
spellButtonsContainer:AddChild(sendSpellsButton)
3 years ago
rightContainer:AddChild(rightDummyIcon)
rightContainer:AddChild(spellScrollContainer)
rightContainer:AddChild(powerScrollContainer)
rightContainer:AddChild(spellButtonsContainer)
container:AddChild(leftContainer)
container:AddChild(midContainer)
container:AddChild(rightContainer)
end
--Damage Calc
local function DrawGroup2(container)
end
-- Callback function for OnGroupSelected
local function SelectGroup(container, event, group)
container:ReleaseChildren()
if group == "tab1" then
DrawGroup1(container)
elseif group == "tab2" then
DrawGroup2(container)
end
currentTab = group
end
tabGroup:SetCallback("OnGroupSelected", SelectGroup)
tabGroup:SelectTab(currentTab)
return f
end
local characteristics = {
3 years ago
["Stun"] = "Interface\\ICONS\\spell_frost_stun",
["Sap"] = "Interface\\ICONS\\ability_sap",
["Incapacitate"] = "Interface\\ICONS\\ability_monk_paralysis",
["Repentance"] = "Interface\\ICONS\\spell_holy_prayerofhealing",
["Disorient"] = "Interface\\ICONS\\spell_shadow_mindsteal",
["Banish"] = "Interface\\ICONS\\spell_shadow_cripple",
["Fear"] = "Interface\\ICONS\\spell_shadow_possession",
["Root"] = "Interface\\ICONS\\spell_frost_frostnova",
["Polymorph"] = "Interface\\ICONS\\spell_nature_polymorph",
["Shackle Undead"] = "Interface\\ICONS\\spell_nature_slow",
["Mind Control"] = "Interface\\ICONS\\spell_shadow_shadowworddominate",
["Grip"] = "Interface\\ICONS\\spell_deathknight_strangulate",
["Knock"] = "Interface\\ICONS\\ability_druid_typhoon",
["Silence"] = "Interface\\ICONS\\ability_priest_silence",
["Taunt"] = "Interface\\ICONS\\spell_nature_reincarnation",
["Control Undead"] = "Interface\\ICONS\\inv_misc_bone_skull_01",
["Enslave Demon"] = "Interface\\ICONS\\spell_shadow_enslavedemon",
["Slow"] = "Interface\\ICONS\\ability_rogue_trip",
["Imprison"] = "Interface\\ICONS\\ability_demonhunter_imprison",
}
local spellBlacklist = {
3 years ago
[277564] = true, --Regenerative Blood
[277247] = true, --Regenerative Blood
[277242] = true, --Infested
[209859] = true, --Bolster
[233490] = true, --UA
[91021] = true, --Find Weakness
[2094] = true, --Blind
[273836] = true, --Filthy Transfusion
[205708] = true, --Chilled
[212792] = true, --Cone of Cold
[48181] = true, --Haunt
[191380] = true, --Mark of the Distant Army
[236299] = true, --Chrono Shift
[1490] = true, --Chaos Brand
[205276] = true, --Phantom Singularity
[132951] = true, --Flare
[255228] = true, --Polymorphed
[122] = true, --Frost Nova
[12654] = true, --Ignite
[2818] = true, --Deadly Poison
[55095] = true, --Frost Fever
[408] = true, --Kidney Shot
[34914] = true, --Vampiric Touch
[205369] = true, --Mind Bomb
[154953] = true, --Internal Bleeding
[51490] = true, --Thunderstorm
[3409] = true, --Crippling Poison
[272970] = true, --Packed Ice
[262115] = true, --Deep Wounds
[226943] = true, --Mind Bomb
[198813] = true, --Vengeful Retreat
[121308] = true, --Disguise
[224729] = true, --Bursting Shot
[186439] = true, --Shadow Mend
[113746] = true, --Mystic Touch
[280404] = true, --Tidal Surge
[589] = true, --Shadow Word: Pain
[5116] = true, --Concussive Shot
[288865] = true, --Meerahs Jukebox
[317898] = true, --Blinding Sleet
[334882] = true, --
[201657] = true, --
[320297] = true, --
[325748] = true, --
[326868] = true, --
[132466] = true, --
[344991] = true, --
[320785] = true, --
[335072] = true, --
[1604] = true, --
[35079] = true, --
[50707] = true, --
[240443] = true, --
[328506] = true, --
[343502] = true, -- inspiring presence
[344663] = true, -- shattered psyche
[176039] = true, -- flametongue
[176033] = true, -- flametongue
[176031] = true, -- flametongue
--[X] = true,
}
local lastEnemyIdx
function MDT:GetEnemyInfoEnemyIdx()
3 years ago
return lastEnemyIdx
end
3 years ago
function MDT:GetEnemyInfoSpellBlacklist()
3 years ago
return spellBlacklist
end
function MDT:UpdateEnemyInfoFrame(enemyIdx)
3 years ago
if not enemyIdx then enemyIdx = lastEnemyIdx end
lastEnemyIdx = enemyIdx
if not enemyIdx then return end
local data = MDT.dungeonEnemies[db.currentDungeonIdx][enemyIdx]
local f = MDT.EnemyInfoFrame
f:SetTitle(L[data.name])
f.model:SetDisplayInfo(data.displayId or 39490)
f.model:ResetModel()
if data.modelPosition then
f.model:SetPosition(unpack(data.modelPosition))
else
f.model:SetPosition(0, 0, 0)
end
local container = f.tabGroup
---rescaling
---LEFT
f.leftContainer:SetWidth(container.frame:GetWidth() / 3)
f.leftContainer:SetHeight(container.frame:GetHeight())
f.model:SetSize(f.leftContainer.frame:GetWidth() - 30, 1.127 * (f.leftContainer.frame:GetWidth() - 30))
f.modelContainer:SetWidth(f.leftContainer.frame:GetWidth() - 20)
f.modelDummyIcon:SetImageSize(f.leftContainer.frame:GetWidth() - 20, f.leftContainer.frame:GetWidth() - 20)
f.characteristicsContainer:SetWidth(f.leftContainer.frame:GetWidth() - 20)
---MIDDLE
f.midContainer:SetWidth(container.frame:GetWidth() / 3)
f.midContainer:SetHeight(container.frame:GetHeight())
f.enemyDataContainer:SetWidth(math.min(f.leftContainer.frame:GetWidth() - 20, 248))
---RIGHT
f.rightContainer:SetWidth(container.frame:GetWidth() / 3)
f.rightContainer:SetHeight(container.frame:GetHeight())
f.spellScrollContainer:SetWidth(math.min(f.leftContainer.frame:GetWidth() - 20, 248))
f.spellButtonsContainer:SetWidth(math.min(f.leftContainer.frame:GetWidth() - 20, 248))
f.powerScrollContainer:SetWidth(math.min(f.leftContainer.frame:GetWidth() - 20, 248))
local enemies = {}
for mobIdx, edata in ipairs(MDT.dungeonEnemies[db.currentDungeonIdx]) do
tinsert(enemies, mobIdx, L[edata.name])
end
f.enemyDropDown:SetList(enemies)
f.enemyDropDown:SetValue(enemyIdx)
--characteristics
f.characteristicsContainer:ReleaseChildren()
local characteristicsText = AceGUI:Create("Label")
characteristicsText:SetWidth(f.characteristicsContainer.frame:GetWidth())
characteristicsText:SetText(L["Affected by:"])
f.characteristicsContainer:AddChild(characteristicsText)
for text, iconPath in pairs(characteristics) do
if data.characteristics and data.characteristics[text] then
local icon = AceGUI:Create("Icon")
icon:SetImage(iconPath)
icon:SetImageSize(25, 25)
icon:SetWidth(25)
icon:SetHeight(27)
icon:SetCallback("OnEnter", function()
GameTooltip:SetOwner(icon.frame, "ANCHOR_BOTTOM", 0, -5)
GameTooltip:SetText(L[text], 1, 1, 1, 1)
GameTooltip:Show()
end)
icon:SetCallback("OnLeave", function()
GameTooltip:Hide()
end)
f.characteristicsContainer:AddChild(icon)
if IsAddOnLoaded("AddOnSkins") then
if AddOnSkins then
local AS = unpack(AddOnSkins)
AS:SkinTexture(icon.image)
end
3 years ago
end
end
3 years ago
end
MDT:UpdateEnemyInfoData(enemyIdx)
--ace is finicky
f.rightContainer:PauseLayout()
if data.powers then
f.spellScrollContainer:SetHeight(181)
f.powerScrollContainer.hidden = false
else
f.spellScrollContainer:SetHeight(322)
f.powerScrollContainer.hidden = true
end
f.spellScrollContainer:SetLayout("Fill")
--spells
f.spellScroll:ReleaseChildren()
if data.spells then
for spellId, spellData in pairs(data.spells) do
if MDT:GetDB().devMode or not spellBlacklist[spellId] then
local spellButton = AceGUI:Create("MDTSpellButton")
spellButton:SetSpell(spellId, spellData)
spellButton:Initialize()
spellButton:Enable()
f.spellScroll:AddChild(spellButton)
end
end
3 years ago
end
--powers
f.powerScroll:ReleaseChildren()
if data.powers then
for powerSpellId, powerData in pairs(data.powers) do
local powerButton = AceGUI:Create("MDTPowerButton")
powerButton:SetSpell(powerSpellId, powerData)
powerButton:Initialize()
powerButton:Enable()
f.powerScroll:AddChild(powerButton)
end
3 years ago
end
3 years ago
f.rightContainer:SetHeight(container.frame:GetHeight())
f.rightContainer:ResumeLayout()
f.rightContainer:DoLayout()
end
function MDT:UpdateEnemyInfoData(enemyIdx)
3 years ago
local f = MDT.EnemyInfoFrame
if not enemyIdx then enemyIdx = lastEnemyIdx end
if not enemyIdx then return end
local data = MDT.dungeonEnemies[db.currentDungeonIdx][enemyIdx]
--data
f.enemyDataContainer.nameEditBox:SetText(L[data.name])
f.enemyDataContainer.nameEditBox.defaultText = data.name
f.enemyDataContainer.idEditBox:SetText(data.id)
f.enemyDataContainer.idEditBox.defaultText = data.id
local boss = data.isBoss or false
local health = MDT:CalculateEnemyHealth(boss, data.health, db.currentDifficulty, data.ignoreFortified)
local healthText = MDT:FormatEnemyHealth(health)
f.enemyDataContainer.healthEditBox:SetText(healthText)
f.enemyDataContainer.healthEditBox.defaultText = healthText
f.enemyDataContainer.creatureTypeEditBox:SetText(L[data.creatureType])
f.enemyDataContainer.creatureTypeEditBox.defaultText = data.creatureType
f.enemyDataContainer.levelEditBox:SetText(data.level)
f.enemyDataContainer.levelEditBox.defaultText = data.level
f.enemyDataContainer.countEditBox:SetText(data.count)
f.enemyDataContainer.countEditBox.defaultText = data.count
if not data.teemingCount then
f.enemyDataContainer.teemingCountEditBox.frame:Hide()
else
f.enemyDataContainer.teemingCountEditBox.frame:Show()
f.enemyDataContainer.teemingCountEditBox:SetText(data.teemingCount)
f.enemyDataContainer.teemingCountEditBox.defaultText = data.teemingCount
end
f.enemyDataContainer.stealthCheckBox:SetValue(data.stealth)
f.enemyDataContainer.stealthCheckBox.defaultValue = data.stealth
f.enemyDataContainer.stealthDetectCheckBox:SetValue(data.stealthDetect)
f.enemyDataContainer.stealthDetectCheckBox.defaultValue = data.stealthDetect
local level = db.currentDifficulty
local fortifiedTyrannical = MDT:IsCurrentPresetFortified() and L["Fortified"] or L["Tyrannical"]
f.enemyDataContainer.healthEditBox:SetLabel(string.format(L["Enemy Info NPC Health"], level, fortifiedTyrannical))
end
function MDT:ShowEnemyInfoFrame(blip)
3 years ago
db = MDT:GetDB()
MDT.EnemyInfoFrame = MDT.EnemyInfoFrame or MakeEnemeyInfoFrame()
MDT:UpdateEnemyInfoFrame(blip.enemyIdx)
MDT.EnemyInfoFrame:Show()
end