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.

1938 lines
62 KiB

local _detalhes = _G._detalhes
local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" )
local _
local CreateFrame = CreateFrame
local pairs = pairs
local UIParent = UIParent
local UnitGUID = UnitGUID
local tonumber= tonumber
local LoggingCombat = LoggingCombat
SLASH_DETAILS1, SLASH_DETAILS2, SLASH_DETAILS3 = "/details", "/dt", "/de"
function SlashCmdList.DETAILS (msg, editbox)
local command, rest = msg:match("^(%S*)%s*(.-)$")
command = string.lower (command)
if (command == Loc ["STRING_SLASH_WIPE"] or command == "wipe") then
elseif (command == "api") then
_detalhes.OpenAPI()
elseif (command == Loc ["STRING_SLASH_NEW"] or command == "new") then
_detalhes:CriarInstancia (nil, true)
elseif (command == Loc ["STRING_SLASH_HISTORY"] or command == "history" or command == "score" or command == "rank" or command == "ranking" or command == "statistics" or command == "stats") then
_detalhes:OpenRaidHistoryWindow()
elseif (command == Loc ["STRING_SLASH_TOGGLE"] or command == "toggle") then
local instance = rest:match ("^(%S*)%s*(.-)$")
instance = tonumber (instance)
if (instance) then
_detalhes:ToggleWindow (instance)
else
_detalhes:ToggleWindows()
end
elseif (command == Loc ["STRING_SLASH_HIDE"] or command == Loc ["STRING_SLASH_HIDE_ALIAS1"] or command == "hide") then
local instance = rest:match ("^(%S*)%s*(.-)$")
instance = tonumber (instance)
if (instance) then
local this_instance = _detalhes:GetInstance (instance)
if (not this_instance) then
return _detalhes:Msg (Loc ["STRING_WINDOW_NOTFOUND"])
end
if (this_instance:IsEnabled() and this_instance.baseframe) then
this_instance:ShutDown()
end
else
_detalhes:ShutDownAllInstances()
end
elseif (command == "softhide") then
for instanceID, instance in _detalhes:ListInstances() do
if (instance:IsEnabled()) then
if (instance.hide_in_combat_type > 1) then
instance:SetWindowAlphaForCombat (true)
end
end
end
elseif (command == "softshow") then
for instanceID, instance in _detalhes:ListInstances() do
if (instance:IsEnabled()) then
if (instance.hide_in_combat_type > 1) then
instance:SetWindowAlphaForCombat (false)
end
end
end
elseif (command == "softtoggle") then
for instanceID, instance in _detalhes:ListInstances() do
if (instance:IsEnabled()) then
if (instance.hide_in_combat_type > 1) then
if (instance.baseframe:GetAlpha() > 0.1) then
--show
instance:SetWindowAlphaForCombat (true)
else
--hide
instance:SetWindowAlphaForCombat (false)
end
end
end
end
elseif (command == Loc ["STRING_SLASH_SHOW"] or command == Loc ["STRING_SLASH_SHOW_ALIAS1"] or command == "show") then
_detalhes.LastShowCommand = GetTime()
local instance = rest:match ("^(%S*)%s*(.-)$")
instance = tonumber (instance)
if (instance) then
local this_instance = _detalhes:GetInstance (instance)
if (not this_instance) then
return _detalhes:Msg (Loc ["STRING_WINDOW_NOTFOUND"])
end
if (not this_instance:IsEnabled() and this_instance.baseframe) then
this_instance:EnableInstance()
end
else
_detalhes:ReabrirTodasInstancias()
end
elseif (command == Loc ["STRING_SLASH_WIPECONFIG"] or command == "reinstall") then
_detalhes:WipeConfig()
elseif (command == Loc ["STRING_SLASH_RESET"] or command == Loc ["STRING_SLASH_RESET_ALIAS1"] or command == "reset") then
_detalhes.tabela_historico:resetar()
elseif (command == Loc ["STRING_SLASH_DISABLE"] or command == "disable") then
_detalhes:CaptureSet (false, "damage", true)
_detalhes:CaptureSet (false, "heal", true)
_detalhes:CaptureSet (false, "energy", true)
_detalhes:CaptureSet (false, "miscdata", true)
_detalhes:CaptureSet (false, "aura", true)
_detalhes:CaptureSet (false, "spellcast", true)
print (Loc ["STRING_DETAILS1"] .. Loc ["STRING_SLASH_CAPTUREOFF"])
elseif (command == Loc ["STRING_SLASH_ENABLE"] or command == "enable") then
_detalhes:CaptureSet (true, "damage", true)
_detalhes:CaptureSet (true, "heal", true)
_detalhes:CaptureSet (true, "energy", true)
_detalhes:CaptureSet (true, "miscdata", true)
_detalhes:CaptureSet (true, "aura", true)
_detalhes:CaptureSet (true, "spellcast", true)
print (Loc ["STRING_DETAILS1"] .. Loc ["STRING_SLASH_CAPTUREON"])
elseif (command == Loc ["STRING_SLASH_OPTIONS"] or command == "options" or command == "config") then
if (rest and tonumber (rest)) then
local instanceN = tonumber (rest)
if (instanceN > 0 and instanceN <= #_detalhes.tabela_instancias) then
local instance = _detalhes:GetInstance (instanceN)
_detalhes:OpenOptionsWindow (instance)
end
else
local lower_instance = _detalhes:GetLowerInstanceNumber()
if (not lower_instance) then
local instance = _detalhes:GetInstance (1)
_detalhes.CriarInstancia (_, _, 1)
_detalhes:OpenOptionsWindow (instance)
else
_detalhes:OpenOptionsWindow (_detalhes:GetInstance (lower_instance))
end
end
elseif (command == Loc ["STRING_SLASH_WORLDBOSS"] or command == "worldboss") then
local questIds = {{"Tarlna the Ageless", 81535}, {"Drov the Ruiner ", 87437}, {"Rukhmar", 87493}}
for _, _table in pairs (questIds) do
print (format ("%s: \124cff%s\124r", _table [1], IsQuestFlaggedCompleted (_table [2]) and "ff0000"..Loc ["STRING_KILLED"] or "00ff00"..Loc ["STRING_ALIVE"]))
end
elseif (command == Loc ["STRING_SLASH_CHANGES"] or command == Loc ["STRING_SLASH_CHANGES_ALIAS1"] or command == Loc ["STRING_SLASH_CHANGES_ALIAS2"] or command == "news" or command == "updates") then
_detalhes:OpenNewsWindow()
elseif (command == "discord") then
_detalhes:CopyPaste ("https://discord.gg/AGSzAZX")
elseif (command == "debugwindow") then
local window1 = Details:GetWindow(1)
if (window1) then
local state = {
ParentName = window1.baseframe:GetParent():GetName(),
Alpha = window1.baseframe:GetAlpha(),
IsShown = window1.baseframe:IsShown(),
IsOpen = window1:IsEnabled() and true or false,
NumPoints = window1.baseframe:GetNumPoints(),
}
for i = 1, window1.baseframe:GetNumPoints() do
state ["Point" .. i] = {window1.baseframe:GetPoint (i)}
end
local parent = window1.baseframe:GetParent()
state ["ParentInfo"] = {
Alpha = parent:GetAlpha(),
IsShown = parent:IsShown(),
NumPoints = parent:GetNumPoints(),
}
Details:Dump (state)
else
Details:Msg ("Window 1 not found.")
end
elseif (command == "bosstimers" or command == "bosstimer" or command == "timer" or command == "timers") then
Details.OpenForge()
DetailsForgePanel.SelectModule (_, _, 4)
elseif (command == "spells") then
Details.OpenForge()
DetailsForgePanel.SelectModule (_, _, 1)
elseif (msg == "WA" or msg == "wa" or msg == "Wa" or msg == "wA") then
_G.DetailsPluginContainerWindow.OpenPlugin(_G.DetailsAuraPanel)
_G.DetailsAuraPanel.RefreshWindow()
elseif (command == "feedback") then
_detalhes.OpenFeedbackWindow()
elseif (command == "profile") then
if (rest and rest ~= "") then
local profile = _detalhes:GetProfile (rest)
if (not profile) then
return _detalhes:Msg ("Profile Not Found.")
end
if (not _detalhes:ApplyProfile (rest)) then
return
end
_detalhes:Msg (Loc ["STRING_OPTIONS_PROFILE_LOADED"], rest)
if (_G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown()) then
_G.DetailsOptionsWindow:Hide()
GameCooltip:Close()
end
else
_detalhes:Msg ("/details profile <profile name>")
end
-------- debug ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
elseif (msg == "exitlog") then
local exitlog = _detalhes_global.exit_log
local exiterrors = _detalhes_global.exit_errors
print ("EXIT LOG:")
for index, text in ipairs (exitlog) do
print (text)
end
print ("ERRORS:")
if (exiterrors) then
for index, text in ipairs (exiterrors) do
print (text)
end
else
print ("|cFF00FF00No error occured!|r")
end
elseif (msg == "tr") then
local f = CreateFrame ("frame", nil, UIParent)
f:SetSize (300, 300)
f:SetPoint ("center")
-- /run TTT:SetTexture ("Interface\\1024.tga")
local texture = f:CreateTexture ("TTT", "background")
texture:SetAllPoints()
texture:SetTexture ("Interface\\1023.tga")
local A = DetailsFramework:CreateAnimationHub (texture)
local b = DetailsFramework:CreateAnimation (A, "ROTATION", 1, 40, 360)
b:SetTarget (texture)
A:Play()
C_Timer.NewTicker (1, function()
texture:SetTexCoord (math.random(), math.random(), math.random(), math.random(), math.random(), math.random(), math.random(), math.random())
end)
elseif (msg == "realmsync") then
_detalhes.realm_sync = not _detalhes.realm_sync
_detalhes:Msg ("Realm Sync: ", _detalhes.realm_sync and "Enabled" or "Disabled")
if (not _detalhes.realm_sync) then
LeaveChannelByName ("Details")
else
_detalhes:CheckChatOnLeaveGroup()
end
elseif (msg == "load") then
print (DetailsDataStorage)
local loaded, reason = LoadAddOn ("Details_DataStorage")
print (loaded, reason, DetailsDataStorage)
elseif (msg == "owner2") then
local tip = CreateFrame('GameTooltip', 'GuardianOwnerTooltip', nil, 'GameTooltipTemplate')
function GetGuardianOwner(guid)
tip:SetOwner(WorldFrame, 'ANCHOR_NONE')
tip:SetHyperlink('unit:' .. guid or '')
local text = GuardianOwnerTooltipTextLeft2
--return strmatch(text and text:GetText() or '', "^([^%s']+)'")
return text:GetText()
end
print (GetGuardianOwner(UnitGUID ("target")))
elseif (msg == "chat") then
elseif (msg == "chaticon") then
_detalhes:Msg ("|TInterface\\AddOns\\Details\\images\\icones_barra:" .. 14 .. ":" .. 14 .. ":0:0:256:32:0:32:0:32|tteste")
elseif (msg == "align") then
local c = RightChatPanel
local w,h = c:GetSize()
print (w,h)
local instance1 = _detalhes.tabela_instancias [1]
local instance2 = _detalhes.tabela_instancias [2]
instance1.baseframe:ClearAllPoints()
instance2.baseframe:ClearAllPoints()
instance1.baseframe:SetSize (w/2 - 4, h-20-21-8)
instance2.baseframe:SetSize (w/2 - 4, h-20-21-8)
instance1.baseframe:SetPoint ("bottomleft", RightChatDataPanel, "topleft", 1, 1)
instance2.baseframe:SetPoint ("bottomright", RightChatToggleButton, "topright", -1, 1)
elseif (msg == "addcombat") then
local combat = _detalhes.combate:NovaTabela (true, _detalhes.tabela_overall, 1)
local self = combat[1]:PegarCombatente (UnitGUID ("player"), UnitName ("player"), 1297, true)
self.total = 100000
self.total_without_pet = 100000
if (not _detalhes.um___) then
_detalhes.um___ = 0
_detalhes.next_um = 3
end
local cima = true
_detalhes.um___ = _detalhes.um___ + 1
if (_detalhes.um___ == _detalhes.next_um) then
_detalhes.next_um = _detalhes.next_um + 3
cima = false
end
if (cima) then
local frostbolt = self.spells:PegaHabilidade (116, true, "SPELL_DAMAGE")
local frostfirebolt = self.spells:PegaHabilidade (44614, true, "SPELL_DAMAGE")
local icelance = self.spells:PegaHabilidade (30455, true, "SPELL_DAMAGE")
self.spells._ActorTable [116].total = 50000
self.spells._ActorTable [44614].total = 25000
self.spells._ActorTable [30455].total = 25000
else
local frostbolt = self.spells:PegaHabilidade (84721, true, "SPELL_DAMAGE")
local frostfirebolt = self.spells:PegaHabilidade (113092, true, "SPELL_DAMAGE")
local icelance = self.spells:PegaHabilidade (122, true, "SPELL_DAMAGE")
self.spells._ActorTable [84721].total = 50000
self.spells._ActorTable [113092].total = 25000
self.spells._ActorTable [122].total = 25000
end
combat.start_time = GetTime()-30
combat.end_time = GetTime()
combat.totals_grupo [1] = 100000
combat.totals [1] = 100000
--combat.instance_type = "raid"
--combat.is_trash = true
_detalhes.tabela_vigente = combat
_detalhes.tabela_historico:adicionar (combat)
_detalhes:InstanciaCallFunction (Details.FadeHandler.Fader, "in", nil, "barras")
_detalhes:InstanciaCallFunction (_detalhes.AtualizaSegmentos) -- atualiza o instancia.showing para as novas tabelas criadas
_detalhes:InstanciaCallFunction (_detalhes.AtualizaSoloMode_AfertReset) -- verifica se precisa zerar as tabela da janela solo mode
_detalhes:InstanciaCallFunction (_detalhes.ResetaGump) --_detalhes:ResetaGump ("de todas as instancias")
_detalhes:RefreshMainWindow (-1, true) --atualiza todas as instancias
elseif (msg == "pets") then
local f = _detalhes:CreateListPanel()
local i = 1
for k, v in pairs (_detalhes.tabela_pets.pets) do
if (v[6] == "Guardian of Ancient Kings") then
_detalhes.ListPanel:add ( k.. ": " .. v[1] .. " | " .. v[2] .. " | " .. v[3] .. " | " .. v[6], i)
i = i + 1
end
end
f:Show()
elseif (msg == "savepets") then
_detalhes.tabela_vigente.saved_pets = {}
for k, v in pairs (_detalhes.tabela_pets.pets) do
_detalhes.tabela_vigente.saved_pets [k] = {v[1], v[2], v[3]}
end
_detalhes:Msg ("pet table has been saved on current combat.")
elseif (msg == "move") then
print ("moving...")
local instance = _detalhes.tabela_instancias [1]
instance.baseframe:ClearAllPoints()
--instance.baseframe:SetPoint ("CENTER", UIParent, "CENTER", 300, 100)
instance.baseframe:SetPoint ("left", DetailsWelcomeWindow, "right", 10, 0)
elseif (msg == "model") then
local frame = CreateFrame ("PlayerModel");
frame:SetPoint("center",UIParent,"center");
frame:SetHeight(600);
frame:SetWidth(300);
frame:SetDisplayInfo (49585);
elseif (msg == "ej2") then
--[[ get the EJ_ raid id
local wantRaids = true -- set false to get 5-man list
for i=1,1000 do
instanceID,name,description,bgImage,buttonImage,loreImage, dungeonAreaMapID, link = DetailsFramework.EncounterJournal.EJ_GetInstanceByIndex(i,wantRaids)
if not instanceID then break end
DEFAULT_CHAT_FRAME:AddMessage( instanceID.." "..name ,1,0.7,0.5)
end
--]]
local iid=362
for i=1, 100 do
local name, description, encounterID, rootSectionID, link = DetailsFramework.EncounterJournal.EJ_GetEncounterInfoByIndex (i, iid)
if not encounterID then break end
local msg = encounterID .. " , " .. name .. ", ".. rootSectionID.. ", "..link
DEFAULT_CHAT_FRAME:AddMessage(msg, 1,0.7,0.5)
end
elseif (msg == "time") then
print ("GetTime()", GetTime())
print ("time()", time())
elseif (msg == "copy") then
_G.DetailsCopy:Show()
_G.DetailsCopy.MyObject.text:HighlightText()
_G.DetailsCopy.MyObject.text:SetFocus()
elseif (msg == "garbage") then
local a = {}
for i = 1, 10000 do
a [i] = {math.random (50000)}
end
table.wipe (a)
elseif (msg == "unitname") then
local nome, realm = UnitName ("target")
if (realm) then
nome = nome.."-"..realm
end
print (nome, realm)
elseif (msg == "raid") then
local player, realm = "Ditador", "Azralon"
local actorName
if (realm ~= GetRealmName()) then
actorName = player.."-"..realm
else
actorName = player
end
print (actorName)
local guid = _detalhes:FindGUIDFromName ("Ditador")
print (guid)
for i = 1, GetNumGroupMembers()-1, 1 do
local name, realm = UnitName ("party"..i)
print (name, " -- ", realm)
end
elseif (msg == "cacheparser") then
_detalhes:PrintParserCacheIndexes()
elseif (msg == "parsercache") then
_detalhes:PrintParserCacheIndexes()
elseif (msg == "captures") then
for k, v in pairs (_detalhes.capture_real) do
print ("real -",k,":",v)
end
for k, v in pairs (_detalhes.capture_current) do
print ("current -",k,":",v)
end
elseif (msg == "slider") then
local f = CreateFrame ("frame", "TESTEDESCROLL", UIParent)
f:SetPoint ("center", UIParent, "center", 200, -2)
f:SetWidth (300)
f:SetHeight (150)
f:SetBackdrop ({bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}})
f:SetBackdropColor (0, 0, 0, 1)
f:EnableMouseWheel (true)
local rows = {}
for i = 1, 7 do
local row = CreateFrame ("frame", nil, UIParent)
row:SetPoint ("topleft", f, "topleft", 10, -(i-1)*21)
row:SetWidth (200)
row:SetHeight (20)
row:SetBackdrop ({bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}})
local t = row:CreateFontString (nil, "overlay", "GameFontHighlightSmall")
t:SetPoint ("left", row, "left")
row.text = t
rows [#rows+1] = row
end
local data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
elseif (msg == "bcollor") then
--local instancia = _detalhes.tabela_instancias [1]
_detalhes.ResetButton.Middle:SetVertexColor (1, 1, 0, 1)
--print (_detalhes.ResetButton:GetHighlightTexture())
local t = _detalhes.ResetButton:GetHighlightTexture()
t:SetVertexColor (0, 1, 0, 1)
--print (t:GetObjectType())
--_detalhes.ResetButton:SetHighlightTexture (t)
_detalhes.ResetButton:SetNormalTexture (t)
print ("backdrop", _detalhes.ResetButton:GetBackdrop())
_detalhes.ResetButton:SetBackdropColor (0, 0, 1, 1)
--Details.VarDump (_detalhes.ResetButton)
elseif (command == "mini") then
local instance = _detalhes.tabela_instancias [1]
--Details.VarDump ()
--print (instance, instance.StatusBar.options, instance.StatusBar.left)
print (instance.StatusBar.options [instance.StatusBar.left.mainPlugin.real_name].textSize)
print (instance.StatusBar.left.options.textSize)
elseif (command == "owner") then
local petname = rest:match ("^(%S*)%s*(.-)$")
local petGUID = UnitGUID ("target")
if (not _G.DetailsScanTooltip) then
local scanTool = CreateFrame ("GameTooltip", "DetailsScanTooltip", nil, "GameTooltipTemplate")
scanTool:SetOwner (WorldFrame, "ANCHOR_NONE")
end
function getPetOwner (petName)
local scanTool = _G.DetailsScanTooltip
local scanText = _G ["DetailsScanTooltipTextLeft2"] -- This is the line with <[Player]'s Pet>
scanTool:ClearLines()
print (petName)
scanTool:SetUnit (petName)
local ownerText = scanText:GetText()
if (not ownerText) then
return nil
end
local owner, _ = string.split ("'", ownerText)
return owner -- This is the pet's owner
end
--print (getPetOwner (petname))
print (getPetOwner (petGUID))
elseif (command == "buffsof") then
local playername, segment = rest:match("^(%S*)%s*(.-)$")
segment = tonumber (segment or 0)
print ("dumping buffs of ", playername, segment)
local c = _detalhes:GetCombat ("current")
if (c) then
local playerActor
if (segment and segment ~= 0) then
local c = _detalhes:GetCombat (segment)
playerActor = c (4, playername)
print ("using segment", segment, c, "player actor:", playerActor)
else
playerActor = c (4, playername)
end
print ("actor table: ", playerActor)
if (not playerActor) then
print ("actor table not found")
return
end
if (playerActor and playerActor.buff_uptime_spells and playerActor.buff_uptime_spells._ActorTable) then
for spellid, spellTable in pairs (playerActor.buff_uptime_spells._ActorTable) do
local spellname = GetSpellInfo (spellid)
if (spellname) then
print (spellid, spellname, spellTable.uptime)
end
end
end
end
elseif (msg == "teste") then
local a, b = _detalhes:GetEncounterEnd (1098, 3)
print (a, unpack (b))
elseif (msg == "yesno") then
--_detalhes:Show()
elseif (msg == "imageedit") then
local callback = function (width, height, overlayColor, alpha, texCoords)
print (width, height, alpha)
print ("overlay: ", unpack (overlayColor))
print ("crop: ", unpack (texCoords))
end
_detalhes.gump:ImageEditor (callback, "Interface\\TALENTFRAME\\bg-paladin-holy", nil, {1, 1, 1, 1}) -- {0.25, 0.25, 0.25, 0.25}
elseif (msg == "chat") then
local name, fontSize, r, g, b, a, shown, locked = FCF_GetChatWindowInfo (1);
print (name,"|",fontSize,"|", r,"|", g,"|", b,"|", a,"|", shown,"|", locked)
--local fontFile, unused, fontFlags = self:GetFont();
--self:SetFont(fontFile, fontSize, fontFlags);
elseif (msg == "error") then
a = nil + 1
--> debug
elseif (command == "resetcapture") then
_detalhes.capture_real = {
["damage"] = true,
["heal"] = true,
["energy"] = true,
["miscdata"] = true,
["aura"] = true,
}
_detalhes.capture_current = _detalhes.capture_real
_detalhes:CaptureRefresh()
print (Loc ["STRING_DETAILS1"] .. "capture has been reseted.")
--> debug
elseif (command == "barra") then
local whichRowLine = rest and tonumber (rest) or 1
local instancia = _detalhes.tabela_instancias [1]
local barra = instancia.barras [whichRowLine]
for i = 1, barra:GetNumPoints() do
local point, relativeTo, relativePoint, xOfs, yOfs = barra:GetPoint (i)
print (point, relativeTo, relativePoint, xOfs, yOfs)
end
elseif (msg == "opened") then
print ("Instances opened: " .. _detalhes.opened_windows)
--> debug, get a guid of something
elseif (command == "backdrop") then --> localize-me
local f = MacroFrameTextBackground
local backdrop = MacroFrameTextBackground:GetBackdrop()
Details.VarDump (backdrop)
Details.VarDump (backdrop.insets)
print ("bgcolor:",f:GetBackdropColor())
print ("bordercolor",f:GetBackdropBorderColor())
elseif (command == "myguid") then --> localize-me
local g = UnitGUID ("player")
print (type (g))
print (g)
print (string.len (g))
local serial = g:sub (12, 18)
serial = tonumber ("0x"..serial)
print (serial)
--tonumber((UnitGUID("target")):sub(-12, -9), 16))
elseif (command == "npcid") then
if (UnitExists("target")) then
local serial = UnitGUID("target")
if (serial) then
local npcId = _G.DetailsFramework:GetNpcIdFromGuid(serial)
if (npcId) then
if (not Details.id_frame) then
local backdrop = {
bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
edgeFile = "Interface\\ChatFrame\\ChatFrameBackground",
tile = true, edgeSize = 1, tileSize = 5,
}
Details.id_frame = CreateFrame ("Frame", "DetailsID", UIParent, "BackdropTemplate")
Details.id_frame:SetHeight(14)
Details.id_frame:SetWidth(120)
Details.id_frame:SetPoint ("center", UIParent, "center")
Details.id_frame:SetBackdrop(backdrop)
tinsert(UISpecialFrames, "DetailsID")
Details.id_frame.texto = CreateFrame ("editbox", nil, Details.id_frame, "BackdropTemplate")
Details.id_frame.texto:SetPoint ("topleft", Details.id_frame, "topleft")
Details.id_frame.texto:SetAutoFocus(false)
Details.id_frame.texto:SetFontObject (GameFontHighlightSmall)
Details.id_frame.texto:SetHeight(14)
Details.id_frame.texto:SetWidth(120)
Details.id_frame.texto:SetJustifyH("CENTER")
Details.id_frame.texto:EnableMouse(true)
Details.id_frame.texto:SetBackdropColor(0, 0, 0, 0.5)
Details.id_frame.texto:SetBackdropBorderColor(0.3, 0.3, 0.30, 0.80)
Details.id_frame.texto:SetText ("")
Details.id_frame.texto.perdeu_foco = nil
Details.id_frame.texto:SetScript ("OnEnterPressed", function ()
Details.id_frame.texto:ClearFocus()
Details.id_frame:Hide()
end)
Details.id_frame.texto:SetScript ("OnEscapePressed", function()
Details.id_frame.texto:ClearFocus()
Details.id_frame:Hide()
end)
end
C_Timer.After(0.1, function()
Details.id_frame:Show()
Details.id_frame.texto:SetFocus()
Details.id_frame.texto:SetText ("" .. npcId)
Details.id_frame.texto:HighlightText()
end)
end
end
end
elseif (command == "guid") then
local pass_guid = rest:match("^(%S*)%s*(.-)$")
if (not _detalhes.id_frame) then
local backdrop = {
bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
edgeFile = "Interface\\ChatFrame\\ChatFrameBackground",
tile = true, edgeSize = 1, tileSize = 5,
}
_detalhes.id_frame = CreateFrame ("Frame", "DetailsID", UIParent)
_detalhes.id_frame:SetHeight(14)
_detalhes.id_frame:SetWidth(120)
_detalhes.id_frame:SetPoint ("center", UIParent, "center")
_detalhes.id_frame:SetBackdrop(backdrop)
tinsert (UISpecialFrames, "DetailsID")
_detalhes.id_frame.texto = CreateFrame ("editbox", nil, _detalhes.id_frame)
_detalhes.id_frame.texto:SetPoint ("topleft", _detalhes.id_frame, "topleft")
_detalhes.id_frame.texto:SetAutoFocus(false)
_detalhes.id_frame.texto:SetFontObject (GameFontHighlightSmall)
_detalhes.id_frame.texto:SetHeight(14)
_detalhes.id_frame.texto:SetWidth(120)
_detalhes.id_frame.texto:SetJustifyH("CENTER")
_detalhes.id_frame.texto:EnableMouse(true)
_detalhes.id_frame.texto:SetBackdrop(ManualBackdrop)
_detalhes.id_frame.texto:SetBackdropColor(0, 0, 0, 0.5)
_detalhes.id_frame.texto:SetBackdropBorderColor(0.3, 0.3, 0.30, 0.80)
_detalhes.id_frame.texto:SetText ("") --localize-me
_detalhes.id_frame.texto.perdeu_foco = nil
_detalhes.id_frame.texto:SetScript ("OnEnterPressed", function ()
_detalhes.id_frame.texto:ClearFocus()
_detalhes.id_frame:Hide()
end)
_detalhes.id_frame.texto:SetScript ("OnEscapePressed", function()
_detalhes.id_frame.texto:ClearFocus()
_detalhes.id_frame:Hide()
end)
end
_detalhes.id_frame:Show()
_detalhes.id_frame.texto:SetFocus()
if (pass_guid == "-") then
local guid = UnitGUID ("target")
if (guid) then
local g = _detalhes:GetNpcIdFromGuid (guid)
_detalhes.id_frame.texto:SetText ("" .. g)
_detalhes.id_frame.texto:HighlightText()
end
else
print (pass_guid.. " -> " .. tonumber (pass_guid:sub(6, 10), 16))
_detalhes.id_frame.texto:SetText (""..tonumber (pass_guid:sub(6, 10), 16))
_detalhes.id_frame.texto:HighlightText()
end
--> debug
elseif (msg == "auras") then
if (IsInRaid()) then
for raidIndex = 1, GetNumGroupMembers() do
for buffIndex = 1, 41 do
local name, _, _, _, _, _, _, unitCaster, _, _, spellid = UnitAura ("raid"..raidIndex, buffIndex, nil, "HELPFUL")
print (name, unitCaster, "==", "raid"..raidIndex)
if (name and unitCaster == "raid"..raidIndex) then
local playerName, realmName = UnitName ("raid"..raidIndex)
if (realmName and realmName ~= "") then
playerName = playerName .. "-" .. realmName
end
_detalhes.parser:add_buff_uptime (nil, GetTime(), UnitGUID ("raid"..raidIndex), playerName, 0x00000417, UnitGUID ("raid"..raidIndex), playerName, 0x00000417, spellid, name, in_or_out)
else
--break
end
end
end
end
elseif (command == "profile") then
local profile = rest:match("^(%S*)%s*(.-)$")
print ("Force apply profile: ", profile)
_detalhes:ApplyProfile (profile, false)
elseif (msg == "users" or msg == "version" or msg == "versioncheck") then
Details.SendHighFive()
print (Loc ["STRING_DETAILS1"] .. "highfive sent, HI!")
C_Timer.After (0.3, function()
Details.RefreshUserList()
end)
C_Timer.After (0.6, function()
Details.RefreshUserList (true)
end)
C_Timer.After (0.9, function()
Details.RefreshUserList (true)
end)
C_Timer.After (1.3, function()
Details.RefreshUserList (true)
end)
C_Timer.After (1.6, function()
Details.RefreshUserList (true)
end)
C_Timer.After (3, function()
Details.RefreshUserList (true)
end)
C_Timer.After (4, function()
Details.RefreshUserList (true)
end)
C_Timer.After (5, function()
Details.RefreshUserList (true)
end)
C_Timer.After (8, function()
Details.RefreshUserList (true)
end)
elseif (command == "names") then
local t, filter = rest:match("^(%S*)%s*(.-)$")
t = tonumber (t)
if (not t) then
return print ("not T found.")
end
local f = _detalhes.ListPanel
if (not f) then
f = _detalhes:CreateListPanel()
end
local container = _detalhes.tabela_vigente [t]._NameIndexTable
local i = 0
for name, _ in pairs (container) do
i = i + 1
f:add (name, i)
end
print (i, "names found.")
f:Show()
elseif (command == "actors") then
local t, filter = rest:match("^(%S*)%s*(.-)$")
t = tonumber (t)
if (not t) then
return print ("not T found.")
end
local f = _detalhes.ListPanel
if (not f) then
f = _detalhes:CreateListPanel()
end
local container = _detalhes.tabela_vigente [t]._ActorTable
print (#container, "actors found.")
for index, actor in ipairs (container) do
f:add (actor.nome, index, filter)
end
f:Show()
--> debug
elseif (msg == "save") then
print ("running... this is a debug command, details wont work until next /reload.")
_detalhes:PrepareTablesForSave()
elseif (msg == "buffs") then
for i = 1, 40 do
local name, texture, count, debuffType, duration, expirationTime, caster, canStealOrPurge, nameplateShowPersonal, spellid = UnitBuff ("player", i)
if (not name) then
return
end
print (spellid, name)
end
elseif (msg == "id") then
local one, two = rest:match("^(%S*)%s*(.-)$")
if (one ~= "") then
print("NPC ID:", one:sub(-12, -9), 16)
print("NPC ID:", tonumber((one):sub(-12, -9), 16))
else
print("NPC ID:", tonumber((UnitGUID("target")):sub(-12, -9), 16) )
end
--> debug
elseif (command == "debug") then
if (_detalhes.debug) then
_detalhes.debug = false
print (Loc ["STRING_DETAILS1"] .. "diagnostic mode has been turned off.")
return
else
_detalhes.debug = true
print (Loc ["STRING_DETAILS1"] .. "diagnostic mode has been turned on.")
if (rest and rest ~= "") then
if (rest == "-clear") then
_detalhes_global.debug_chr_log = ""
print (Loc ["STRING_DETAILS1"] .. "log for characters has been wiped.")
return
end
_detalhes.debug_chr = rest
_detalhes_global.debug_chr_log = _detalhes_global.debug_chr_log or ""
print (Loc ["STRING_DETAILS1"] .. "diagnostic for character " .. rest .. " turned on.")
return
end
end
--> debug combat log
elseif (msg == "combatlog") then
if (_detalhes.isLoggingCombat) then
LoggingCombat (false)
print ("Wow combatlog record turned OFF.")
_detalhes.isLoggingCombat = nil
else
LoggingCombat (true)
print ("Wow combatlog record turned ON.")
_detalhes.isLoggingCombat = true
end
elseif (msg == "gs") then
_detalhes:teste_grayscale()
elseif (msg == "bwload") then
if not BigWigs then LoadAddOn("BigWigs_Core") end
BigWigs:Enable()
LoadAddOn ("BigWigs_Highmaul")
local mod = BigWigs:GetBossModule("Imperator Mar'gok")
mod:Enable()
elseif (msg == "bwsend") then
local mod = BigWigs:GetBossModule("Imperator Mar'gok")
mod:Message("stages", "Neutral", "Long", "Phase 2", false)
elseif (msg == "bwregister") then
local addon = {}
BigWigs.RegisterMessage(addon, "BigWigs_Message")
function addon:BigWigs_Message(event, module, key, text)
if module.journalId == 1197 and text:match("^Phase %d$") then -- 1197 = Margok
print ("Phase Changed!", event, module, key, text)
end
end
elseif (msg == "pos") then
local x, y = GetPlayerMapPosition ("player")
if (not DetailsPosBox) then
_detalhes.gump:CreateTextEntry (UIParent, function()end, 200, 20, nil, "DetailsPosBox")
DetailsPosBox:SetPoint ("center", UIParent, "center")
end
local one, two = rest:match("^(%S*)%s*(.-)$")
if (one == "2") then
DetailsPosBox.MyObject.text = "{x2 = " .. x .. ", y2 = " .. y .. "}"
else
DetailsPosBox.MyObject.text = "{x1 = " .. x .. ", y1 = " .. y .. "}"
end
DetailsPosBox.MyObject:SetFocus()
DetailsPosBox.MyObject:HighlightText()
elseif (msg == "outline") then
local instancia = _detalhes.tabela_instancias [1]
for _, barra in ipairs (instancia.barras) do
local _, _, flags = barra.lineText1:GetFont()
print ("outline:",flags)
end
elseif (msg == "sell") then
--sell gray
local c, i, n, v = 0
for b = 0, 4 do
for s = 1, GetContainerNumSlots(b) do
i = {GetContainerItemInfo (b, s)}
n = i[7]
if n and string.find(n,"9d9d9d") then
v = {GetItemInfo(n)}
q = i[2]
c = c+v[11]*q
UseContainerItem (b, s)
print (n, q)
end
end
end
print(GetCoinText(c))
--sell green equip
local c, i, n, v = 0
for b = 0, 4 do
for s = 1, GetContainerNumSlots(b) do
local texture, itemCount, locked, quality, readable, lootable, itemLink = GetContainerItemInfo (b, s)
if (quality == 2) then --a green item
local itemName, itemLink, itemRarity, itemLevel, _, itemType, itemSubType = GetItemInfo (itemLink)
if (itemType == "Armor" or itemType == "Weapon") then --a weapon or armor
if (itemLevel < 460) then
print ("Selling", itemName, itemType)
UseContainerItem (b, s)
end
end
end
end
end
elseif (msg == "forge") then
_detalhes:OpenForge()
elseif (msg == "parser") then
_detalhes:OnParserEvent (
"COMBAT_LOG_EVENT_UNFILTERED", --evento =
1548754114, --time =
"SPELL_DAMAGE", --token =
nil, --hidding =
"0000000000000000", --who_serial =
nil, --who_name =
0x514, --who_flags =
0x0, --who_flags2 =
"Player-3676-06F3C3FA", --alvo_serial =
"Icybluefur-Area52", --alvo_name =
0x514, --alvo_flags =
0x0, --alvo_flags2 =
157247, --spellid =
"Reverberations", --spellname =
0x1, --spelltype =
4846, --amount =
-1, --overkill =
1 --school =
)
elseif (msg == "ejloot") then
DetailsFramework.EncounterJournal.EJ_SelectInstance (669) -- hellfire citadel
DetailsFramework.EncounterJournal.EJ_SetDifficulty (16)
local r = {}
local total = 0
for i = 1, 100 do
local name, description, encounterID, rootSectionID, link = DetailsFramework.EncounterJournal.EJ_GetEncounterInfoByIndex (i, 669)
if (name) then
DetailsFramework.EncounterJournal.EJ_SelectEncounter (encounterID)
print (name, encounterID, DetailsFramework.EncounterJournal.EJ_GetNumLoot())
for o = 1, DetailsFramework.EncounterJournal.EJ_GetNumLoot() do
local name, icon, slot, armorType, itemID, link, encounterID = DetailsFramework.EncounterJournal.EJ_GetLootInfoByIndex (o)
r[slot] = r[slot] or {}
tinsert (r[slot], {itemID, encounterID})
total = total + 1
end
end
end
print ("total loot", total)
_detalhes_global.ALOOT = r
elseif (msg == "ilvl" or msg == "itemlevel" or msg == "ilevel") then
local item_amount = 16
local item_level = 0
local failed = 0
local unitid = "player"
local two_hand = {
["INVTYPE_2HWEAPON"] = true,
["INVTYPE_RANGED"] = true,
["INVTYPE_RANGEDRIGHT"] = true,
}
local ItemUpgradeInfo = LibStub ("LibItemUpgradeInfo-1.0")
_detalhes:Msg ("======== Item Level Debug ========")
for equip_id = 1, 17 do
if (equip_id ~= 4) then --shirt slot
local item = GetInventoryItemLink (unitid, equip_id)
if (item) then
local _, _, itemRarity, iLevel, _, _, _, _, equipSlot = GetItemInfo (item)
if (iLevel) then
if (ItemUpgradeInfo) then
local ilvl = ItemUpgradeInfo:GetUpgradedItemLevel (item)
item_level = item_level + (ilvl or iLevel)
print (ilvl, item)
else
item_level = item_level + iLevel
print (iLevel, item)
end
--> 16 = main hand 17 = off hand
--> if using a two-hand, ignore the off hand slot
if (equip_id == 16 and two_hand [equipSlot]) then
item_amount = 15
break
end
end
else
failed = failed + 1
if (failed > 2) then
break
end
end
end
end
local average = item_level / item_amount
_detalhes:Msg ("gear score: " .. item_level, "| item amount:", item_amount, "| ilvl:", average)
_detalhes.ilevel:CalcItemLevel ("player", UnitGUID("player"), true)
elseif (msg == "score") then
_detalhes:OpenRaidHistoryWindow ("Hellfire Citadel", 1800, 15, "DAMAGER", "Rock Lobster", 2, "Keyspell")
elseif (msg == "bar") then
local bar = _G.DetailsTestBar
if (not bar) then
bar = Details.gump:CreateBar (UIParent, nil, 600, 200, 100, nil, "DetailsTestBar")
_G.DetailsTestBar = bar
bar:SetPoint ("center", 0, 0)
bar.RightTextIsTimer = true
bar.BarIsInverse = true
end
bar.color = "HUNTER"
local start = GetTime()-45
local fim = GetTime()+5
bar:SetTimer (start, fim)
--C_Timer.After (5, function() bar:CancelTimerBar() end)
elseif (msg == "q") then
local myframe = TestFrame
if (not myframe) then
myframe = TestFrame or CreateFrame ("frame", "TestFrame", UIParent)
myframe:SetPoint ("center", UIParent, "center")
myframe:SetSize (300, 300)
myframe.texture = myframe:CreateTexture (nil, "overlay")
myframe.texture:SetAllPoints()
myframe.texture:SetTexture ([[Interface\AddOns\WorldQuestTracker\media\icon_flag_common]])
else
if (myframe.texture:IsShown()) then
myframe.texture:Hide()
else
print (myframe.texture:GetTexture())
myframe.texture:Show()
print (myframe.texture:GetTexture())
end
end
if (true) then
return
end
local y = -50
local allspecs = {}
for a, b in pairs (_detalhes.class_specs_coords) do
tinsert (allspecs, a)
end
for i = 1, 10 do
local a = CreateFrame ("statusbar", nil, UIParent)
a:SetPoint ("topleft", UIParent, "topleft", i*32, y)
a:SetSize (32, 32)
a:SetMinMaxValues (0, 1)
local texture = a:CreateTexture (nil, "overlay")
texture:SetSize (32, 32)
texture:SetPoint ("topleft")
if (i%10 == 0) then
y = y - 32
end
-- /run for o=1,10 do local f=CreateFrame("frame");f:SetPoint("center");f:SetSize(300,300); local t=f:CreateTexture(nil,"overlay");t:SetAllPoints();f:SetScript("OnUpdate",function() t:SetTexture("Interface\\1024")end);end;
-- https://www.dropbox.com/s/ulyeqa2z0ummlu7/1024.tga?dl=0
local time = 0
a:SetScript ("OnUpdate", function (self, deltaTime)
time = time + deltaTime
--texture:SetSize (math.random (50, 300), math.random (50, 300))
--local spec = allspecs [math.random (#allspecs)]
texture:SetTexture ([[Interface\AddOns\Details\images\options_window]])
--texture:SetTexture ([[Interface\Store\Store-Splash]])
--texture:SetTexture ([[Interface\AddOns\Details\images\options_window]])
--texture:SetTexture ([[Interface\CHARACTERFRAME\Button_BloodPresence_DeathKnight]])
--texture:SetTexCoord (unpack (_detalhes.class_specs_coords [spec]))
--a:SetAlpha (abs (math.sin (time)))
--a:SetValue (abs (math.sin (time)))
end)
end
elseif (msg == "alert") then
--local instancia = _detalhes.tabela_instancias [1]
local f = function (a, b, c, d, e, f, g) print (a, b, c, d, e, f, g) end
--instancia:InstanceAlert (Loc ["STRING_PLEASE_WAIT"], {[[Interface\COMMON\StreamCircle]], 22, 22, true}, 5, {f, 1, 2, 3, 4, 5})
local lower_instance = _detalhes:GetLowerInstanceNumber()
if (lower_instance) then
local instance = _detalhes:GetInstance (lower_instance)
if (instance) then
local func = {_detalhes.OpenRaidHistoryWindow, _detalhes, "Hellfire Citadel", 1800, 15, "DAMAGER", "Rock Lobster", 2, "Keyspell"}
instance:InstanceAlert ("Boss Defeated, Open History! ", {[[Interface\AddOns\Details\images\icons]], 16, 16, false, 434/512, 466/512, 243/512, 273/512}, 40, func, true)
end
end
elseif (msg == "teste1") then -- /de teste1
_detalhes:OpenRaidHistoryWindow (1530, 1886, 15, "damage", "Rock Lobster", 2, "Keyspell") --, _role, _guild, _player_base, _player_name)
elseif (msg == "qq") then
local my_role = "DAMAGER"
local raid_name = "Tomb of Sargeras"
local guildName = "Rock Lobster"
local func = {_detalhes.OpenRaidHistoryWindow, _detalhes, raid_name, 2050, 15, my_role, guildName} --, 2, UnitName ("player")
--local icon = {[[Interface\AddOns\Details\images\icons]], 16, 16, false, 434/512, 466/512, 243/512, 273/512}
local icon = {[[Interface\PvPRankBadges\PvPRank08]], 16, 16, false, 0, 1, 0, 1}
local lower_instance = _detalhes:GetLowerInstanceNumber()
local instance = _detalhes:GetInstance (lower_instance)
instance:InstanceAlert ("Boss Defeated! Show Ranking", icon, 10, func, true)
elseif (msg == "scroll" or msg == "scrolldamage" or msg == "scrolling") then
Details:ScrollDamage()
elseif (msg == "me" or msg == "ME" or msg == "Me" or msg == "mE") then
local UnitGroupRolesAssigned = DetailsFramework.UnitGroupRolesAssigned
local role = UnitGroupRolesAssigned("player")
if (role == "HEALER") then
Details:OpenPlayerDetails(2)
else
Details:OpenPlayerDetails(1)
end
elseif (msg == "spec") then
local spec = DetailsFramework.GetSpecialization()
if (spec) then
local specID = DetailsFramework.GetSpecializationInfo (spec)
if (specID and specID ~= 0) then
print ("Current SpecID: ", specID)
end
end
elseif (msg == "senditemlevel") then
_detalhes:SendCharacterData()
print ("Item level dispatched.")
elseif (msg == "talents") then
local talents = {}
for i = 1, 7 do
for o = 1, 3 do
local talentID, name, texture, selected, available = GetTalentInfo (i, o, 1)
if (selected) then
tinsert (talents, talentID)
break
end
end
end
print ("talentID", "name", "texture", "selected", "available", "spellID", "unknown", "row", "column", "unknown", "unknown")
for i = 1, #talents do
print (GetTalentInfoByID (talents [i]))
end
elseif (msg == "merge") then
--> at this point, details! should not be in combat
if (_detalhes.in_combat) then
_detalhes:Msg ("already in combat, closing current segment.")
_detalhes:SairDoCombate()
end
--> create a new combat to be the overall for the mythic run
_detalhes:EntrarEmCombate()
--> get the current combat just created and the table with all past segments
local newCombat = _detalhes:GetCurrentCombat()
local segmentHistory = _detalhes:GetCombatSegments()
local totalTime = 0
local startDate, endDate = "", ""
local lastSegment
local segmentsAdded = 0
--> add all boss segments from this run to this new segment
for i = 1, 25 do
local pastCombat = segmentHistory [i]
if (pastCombat and pastCombat ~= newCombat) then
newCombat = newCombat + pastCombat
totalTime = totalTime + pastCombat:GetCombatTime()
if (i == 1) then
local _, endedDate = pastCombat:GetDate()
endDate = endedDate
end
lastSegment = pastCombat
segmentsAdded = segmentsAdded + 1
end
end
if (lastSegment) then
startDate = lastSegment:GetDate()
end
newCombat.is_trash = false
_detalhes:Msg ("done merging, segments: " .. segmentsAdded .. ", total time: " .. DetailsFramework:IntegerToTimer (totalTime))
--[[ --mythic+ debug
--> tag the segment as mythic overall segment
newCombat.is_mythic_dungeon = {
MapID = _detalhes.MythicPlus.Dungeon,
StartedAt = _detalhes.MythicPlus.StartedAt, --the start of the run
EndedAt = _detalhes.MythicPlus.EndedAt, --the end of the run
SegmentID = "overall", --segment number within the dungeon
--EncounterID = encounterID,
--EncounterName = encounterName,
RunID = _detalhes.MythicPlus.RunID,
OverallSegment = true,
}
--]]
--> set some data
newCombat:SetStartTime (GetTime() - totalTime)
newCombat:SetEndTime (GetTime())
newCombat.data_inicio = startDate
newCombat.data_fim = endDate
--> immediatly finishes the segment just started
_detalhes:SairDoCombate()
--> cleanup the past segments table
for i = 25, 1, -1 do
local pastCombat = segmentHistory [i]
if (pastCombat and pastCombat ~= newCombat) then
wipe (pastCombat)
segmentHistory [i] = nil
end
end
--> clear memory
collectgarbage()
_detalhes:InstanciaCallFunction (Details.FadeHandler.Fader, "in", nil, "barras")
_detalhes:InstanciaCallFunction (_detalhes.AtualizaSegmentos)
_detalhes:InstanciaCallFunction (_detalhes.AtualizaSoloMode_AfertReset)
_detalhes:InstanciaCallFunction (_detalhes.ResetaGump)
_detalhes:RefreshMainWindow (-1, true)
elseif (msg == "ej") then
local result = {}
local spellIDs = {}
--uldir
DetailsFramework.EncounterJournal.EJ_SelectInstance (1031)
-- pega o root section id do boss
local name, description, encounterID, rootSectionID, link = DetailsFramework.EncounterJournal.EJ_GetEncounterInfo (2168) --taloc (primeiro boss de Uldir)
--overview
local sectionInfo = C_EncounterJournal.GetSectionInfo (rootSectionID)
local nextID = {sectionInfo.siblingSectionID}
while (nextID [1]) do
--> get the deepest section in the hierarchy
local ID = tremove (nextID)
local sectionInfo = C_EncounterJournal.GetSectionInfo (ID)
if (sectionInfo) then
tinsert (result, sectionInfo)
if (sectionInfo.spellID and type (sectionInfo.spellID) == "number" and sectionInfo.spellID ~= 0) then
tinsert (spellIDs, sectionInfo.spellID)
end
local nextChild, nextSibling = sectionInfo.firstChildSectionID, sectionInfo.siblingSectionID
if (nextSibling) then
tinsert (nextID, nextSibling)
end
if (nextChild) then
tinsert (nextID, nextChild)
end
else
break
end
end
Details:DumpTable (result)
elseif (msg == "saveskin") then
local skin = Details.skins["Minimalistic"].instance_cprops
local instance1 = Details:GetInstance(1)
if (instance1) then
local exportedValues = {}
for key, _ in pairs (skin) do
local value = instance1[key]
if (value) then
exportedValues[key] = value
end
end
Details:Dump(exportedValues)
end
elseif (msg == "coach") then
--if (not UnitIsGroupLeader("player")) then
-- Details:Msg("you aren't the raid leader.")
-- return
--end
if (not Details.coach.enabled) then
Details.Coach.WelcomePanel()
else
Details:Msg("coach disabled.")
Details.Coach.Disable()
end
elseif (msg == "9") then
print ("skin:", Details.skin)
print ("current profile:", _detalhes:GetCurrentProfileName())
print ("always use profile:", _detalhes.always_use_profile)
print ("profile name:", _detalhes.always_use_profile_name)
print ("version:", _detalhes.build_counter >= _detalhes.alpha_build_counter and _detalhes.build_counter or _detalhes.alpha_build_counter)
elseif (msg == "record") then
_detalhes.ScheduleLoadStorage()
_detalhes.TellDamageRecord = C_Timer.NewTimer (0.6, _detalhes.PrintEncounterRecord)
_detalhes.TellDamageRecord.Boss = 2032
_detalhes.TellDamageRecord.Diff = 16
elseif (msg == "recordtest") then
local f = DetailsRecordFrameAnimation
if (not f) then
f = CreateFrame ("frame", "DetailsRecordFrameAnimation", UIParent)
--estrela no inicio dando um giro
--Interface\Cooldown\star4
--efeito de batida?
--Interface\Artifacts\ArtifactAnim2
local animationHub = DetailsFramework:CreateAnimationHub (f, function() f:Show() end)
DetailsFramework:CreateAnimation (animationHub, "Scale", 1, .10, .9, .9, 1.1, 1.1)
DetailsFramework:CreateAnimation (animationHub, "Scale", 2, .10, 1.2, 1.2, 1, 1)
end
--BFA BETA
--elseif (msg == "update") then
-- _detalhes:CopyPaste ([[https://www.wowinterface.com/downloads/info23056-DetailsDamageMeter8.07.3.5.html]])
elseif (msg == "ec") then
if (rest and tonumber(rest)) then
local combatToErase = tonumber(rest)
tremove(_detalhes.tabela_historico.tabelas, combatToErase)
Details:Msg("combat erased.")
end
return
elseif (msg == "share") then
local f = {}
local elapsed = GetTime()
local ignoredKeys = {
minha_barra = true,
__index = true,
shadow = true,
links = true,
__call = true,
_combat_table = true,
previous_combat = true,
owner = true,
}
local keys = {}
--> copy from table2 to table1 overwriting values
function f.copy (t1, t2)
if (t1.Timer) then
t1, t2 = t1.t1, t1.t2
end
for key, value in pairs (t2) do
if (not ignoredKeys [key] and type (value) ~= "function") then
if (key == "targets") then
t1 [key] = {}
elseif (type (value) == "table") then
t1 [key] = t1 [key] or {}
--print (key, value)
--local d = C_Timer.NewTimer (1, f.copy)
--d.t1 = t1 [key]
--d.t2 = t2 [key]
--d.Timer = true
keys [key] = true
f.copy (t1 [key], t2 [key])
else
t1 [key] = value
end
end
end
return t1
end
--local copySegment = f.copy ({}, _detalhes.tabela_vigente)
local copySegment = f.copy ({}, _detalhes.tabela_historico.tabelas [2])
--the segment received is raw and does not have metatables, need to refresh them
local zipData = Details:CompressData (copySegment, "print")
--print (zipData)
--Details:Dump (keys)
Details:Dump ({zipData})
else
--if (_detalhes.opened_windows < 1) then
-- _detalhes:CriarInstancia()
--end
if (command) then
--> check if the line passed is a parameters in the default profile
if (_detalhes.default_profile [command]) then
if (rest and (rest ~= "" and rest ~= " ")) then
local whichType = type (_detalhes.default_profile [command])
--> attempt to cast the passed value to the same value as the type in the profile
if (whichType == "number") then
rest = tonumber (rest)
if (rest) then
_detalhes [command] = rest
print (Loc ["STRING_DETAILS1"] .. "config '" .. command .. "' set to " .. rest)
else
print (Loc ["STRING_DETAILS1"] .. "config '" .. command .. "' expects a number")
end
elseif (whichType == "string") then
rest = tostring (rest)
if (rest) then
_detalhes [command] = rest
print (Loc ["STRING_DETAILS1"] .. "config '" .. command .. "' set to " .. rest)
else
print (Loc ["STRING_DETAILS1"] .. "config '" .. command .. "' expects a string")
end
elseif (whichType == "boolean") then
if (rest == "true") then
_detalhes [command] = true
print (Loc ["STRING_DETAILS1"] .. "config '" .. command .. "' set to true")
elseif (rest == "false") then
_detalhes [command] = false
print (Loc ["STRING_DETAILS1"] .. "config '" .. command .. "' set to false")
else
print (Loc ["STRING_DETAILS1"] .. "config '" .. command .. "' expects true or false")
end
end
else
local value = _detalhes [command]
if (type (value) == "boolean") then
value = value and "true" or "false"
end
print (Loc ["STRING_DETAILS1"] .. "config '" .. command .. "' current value is: " .. value)
end
return
end
end
print("|", msg)
print (" ")
--local v = _detalhes.game_version .. "." .. (_detalhes.build_counter >= _detalhes.alpha_build_counter and _detalhes.build_counter or _detalhes.alpha_build_counter)
--print (Loc ["STRING_DETAILS1"] .. "" .. v .. " [|cFFFFFF00CORE: " .. _detalhes.realversion .. "|r] " .. Loc ["STRING_COMMAND_LIST"] .. ":")
--print ("|cffffaeae/details|r |cffffff33" .. Loc ["STRING_SLASH_NEW"] .. "|r: " .. Loc ["STRING_SLASH_NEW_DESC"])
print ("|cffffaeae/details|r |cffffff33" .. Loc ["STRING_SLASH_SHOW"] .. " " .. Loc ["STRING_SLASH_HIDE"] .. " " .. Loc ["STRING_SLASH_TOGGLE"] .. "|r|cfffcffb0 <" .. Loc ["STRING_WINDOW_NUMBER"] .. ">|r: " .. Loc ["STRING_SLASH_SHOWHIDETOGGLE_DESC"])
--print ("|cffffaeae/details|r |cffffff33" .. Loc ["STRING_SLASH_ENABLE"] .. " " .. Loc ["STRING_SLASH_DISABLE"] .. "|r: " .. Loc ["STRING_SLASH_CAPTURE_DESC"])
print ("|cffffaeae/details|r |cffffff33" .. Loc ["STRING_SLASH_RESET"] .. "|r: " .. Loc ["STRING_SLASH_RESET_DESC"])
print ("|cffffaeae/details|r |cffffff33" .. Loc ["STRING_SLASH_OPTIONS"] .. "|r|cfffcffb0 <" .. Loc ["STRING_WINDOW_NUMBER"] .. ">|r: " .. Loc ["STRING_SLASH_OPTIONS_DESC"])
print ("|cffffaeae/details|r |cffffff33" .. "API" .. "|r: " .. Loc ["STRING_SLASH_API_DESC"])
--print ("|cffffaeae/details|r |cffffff33" .. Loc ["STRING_SLASH_CHANGES"] .. "|r: " .. Loc ["STRING_SLASH_CHANGES_DESC"])
--print ("|cffffaeae/details|r |cffffff33" .. Loc ["STRING_SLASH_WIPECONFIG"] .. "|r: " .. Loc ["STRING_SLASH_WIPECONFIG_DESC"])
print ("|cffffaeae/details|r |cffffff33" .. "me" .. "|r: open the player breakdown for you.") --localize-me
print ("|cffffaeae/details|r |cffffff33" .. "spells" .. "|r: list of spells already saw.") --localize-me
--print ("|cffffaeae/details " .. Loc ["STRING_SLASH_WORLDBOSS"] .. "|r: " .. Loc ["STRING_SLASH_WORLDBOSS_DESC"])
print (" ")
if (DetailsFramework.IsTBCWow()) then
--the burning crusade classic
local v = _detalhes.game_version .. "." .. (_detalhes.bcc_counter)
print (Loc ["STRING_DETAILS1"] .. "|cFFFFFF00DETAILS! VERSION|r: |cFFFFAA00BCC" .. _detalhes.bcc_counter)
print (Loc ["STRING_DETAILS1"] .. "|cFFFFFF00GAME VERSION|r: |cFFFFAA00" .. _detalhes.game_version)
else
--retail
local v = _detalhes.game_version .. "." .. (_detalhes.build_counter >= _detalhes.alpha_build_counter and _detalhes.build_counter or _detalhes.alpha_build_counter)
print (Loc ["STRING_DETAILS1"] .. "|cFFFFFF00DETAILS! VERSION|r: |cFFFFAA00R" .. (_detalhes.build_counter >= _detalhes.alpha_build_counter and _detalhes.build_counter or _detalhes.alpha_build_counter))
print (Loc ["STRING_DETAILS1"] .. "|cFFFFFF00GAME VERSION|r: |cFFFFAA00" .. _detalhes.game_version)
end
end
end
function Details.RefreshUserList (ignoreIfHidden)
if (ignoreIfHidden and DetailsUserPanel and not DetailsUserPanel:IsShown()) then
return
end
local newList = DetailsFramework.table.copy ({}, _detalhes.users or {})
table.sort (newList, function(t1, t2)
return t1[3] > t2[3]
end)
--search for people that didn't answered
if (IsInRaid()) then
for i = 1, GetNumGroupMembers() do
local playerName = UnitName ("raid" .. i)
local foundPlayer
for o = 1, #newList do
if (newList[o][1]:find (playerName)) then
foundPlayer = true
break
end
end
if (not foundPlayer) then
tinsert (newList, {playerName, "--", "--"})
end
end
end
Details:UpdateUserPanel (newList)
end
function Details:UpdateUserPanel (usersTable)
if (not Details.UserPanel) then
DetailsUserPanel = DetailsFramework:CreateSimplePanel (UIParent)
DetailsUserPanel:SetSize (707, 505)
DetailsUserPanel:SetTitle ("Details! Version Check")
DetailsUserPanel.Data = {}
DetailsUserPanel:ClearAllPoints()
DetailsUserPanel:SetPoint ("left", UIParent, "left", 10, 0)
DetailsUserPanel:Hide()
Details.UserPanel = DetailsUserPanel
local scroll_width = 675
local scroll_height = 450
local scroll_lines = 21
local scroll_line_height = 20
local backdrop_color = {.2, .2, .2, 0.2}
local backdrop_color_on_enter = {.8, .8, .8, 0.4}
local backdrop_color_is_critical = {.4, .4, .2, 0.2}
local backdrop_color_is_critical_on_enter = {1, 1, .8, 0.4}
local y = -15
local headerY = y - 15
local scrollY = headerY - 20
--header
local headerTable = {
{text = "User Name", width = 200},
{text = "Realm", width = 200},
{text = "Version", width = 200},
}
local headerOptions = {
padding = 2,
}
DetailsUserPanel.Header = DetailsFramework:CreateHeader (DetailsUserPanel, headerTable, headerOptions)
DetailsUserPanel.Header:SetPoint ("topleft", DetailsUserPanel, "topleft", 5, headerY)
local scroll_refresh = function (self, data, offset, total_lines)
for i = 1, total_lines do
local index = i + offset
local userTable = data [index]
if (userTable) then
local line = self:GetLine (i)
local userName, userRealm, userVersion = unpack (userTable)
line.UserNameText.text = userName
line.RealmText.text = userRealm
line.VersionText.text = userVersion
end
end
end
local lineOnEnter = function (self)
if (self.IsCritical) then
self:SetBackdropColor (unpack (backdrop_color_is_critical_on_enter))
else
self:SetBackdropColor (unpack (backdrop_color_on_enter))
end
end
local lineOnLeave = function (self)
if (self.IsCritical) then
self:SetBackdropColor (unpack (backdrop_color_is_critical))
else
self:SetBackdropColor (unpack (backdrop_color))
end
GameTooltip:Hide()
end
local scroll_createline = function (self, index)
local line = CreateFrame ("button", "$parentLine" .. index, self, "BackdropTemplate")
line:SetPoint ("topleft", self, "topleft", 3, -((index-1)*(scroll_line_height+1)) - 1)
line:SetSize (scroll_width - 2, scroll_line_height)
line:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
line:SetBackdropColor (unpack (backdrop_color))
DetailsFramework:Mixin (line, DetailsFramework.HeaderFunctions)
line:SetScript ("OnEnter", lineOnEnter)
line:SetScript ("OnLeave", lineOnLeave)
--username
local userNameText = DetailsFramework:CreateLabel (line)
--realm
local realmText = DetailsFramework:CreateLabel (line)
--version
local versionText = DetailsFramework:CreateLabel (line)
line:AddFrameToHeaderAlignment (userNameText)
line:AddFrameToHeaderAlignment (realmText)
line:AddFrameToHeaderAlignment (versionText)
line:AlignWithHeader (DetailsUserPanel.Header, "left")
line.UserNameText = userNameText
line.RealmText = realmText
line.VersionText = versionText
return line
end
local usersScroll = DetailsFramework:CreateScrollBox (DetailsUserPanel, "$parentUsersScroll", scroll_refresh, DetailsUserPanel.Data, scroll_width, scroll_height, scroll_lines, scroll_line_height)
DetailsFramework:ReskinSlider (usersScroll)
usersScroll:SetPoint ("topleft", DetailsUserPanel, "topleft", 5, scrollY)
Details.UserPanel.ScrollBox = usersScroll
--create lines
for i = 1, scroll_lines do
usersScroll:CreateLine (scroll_createline)
end
DetailsUserPanel:SetScript ("OnShow", function()
end)
DetailsUserPanel:SetScript ("OnHide", function()
end)
end
Details.UserPanel.ScrollBox:SetData (usersTable)
Details.UserPanel.ScrollBox:Refresh()
DetailsUserPanel:Show()
end
function _detalhes:CreateListPanel()
_detalhes.ListPanel = _detalhes.gump:NewPanel (UIParent, nil, "DetailsActorsFrame", nil, 300, 600)
_detalhes.ListPanel:SetPoint ("center", UIParent, "center", 300, 0)
_detalhes.ListPanel.barras = {}
tinsert (UISpecialFrames, "DetailsActorsFrame")
_detalhes.ListPanel.close_with_right = true
local container_barras_window = CreateFrame ("ScrollFrame", "Details_ActorsBarrasScroll", _detalhes.ListPanel.widget)
local container_barras = CreateFrame ("Frame", "Details_ActorsBarras", container_barras_window)
_detalhes.ListPanel.container = container_barras
_detalhes.ListPanel.width = 500
_detalhes.ListPanel.locked = false
container_barras_window:SetBackdrop({
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-gold-Border", tile = true, tileSize = 16, edgeSize = 5,
insets = {left = 1, right = 1, top = 0, bottom = 1},})
container_barras_window:SetBackdropBorderColor (0, 0, 0, 0)
container_barras:SetBackdrop({
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16,
insets = {left = 1, right = 1, top = 0, bottom = 1},})
container_barras:SetBackdropColor (0, 0, 0, 0)
container_barras:SetAllPoints (container_barras_window)
container_barras:SetWidth (500)
container_barras:SetHeight (150)
container_barras:EnableMouse (true)
container_barras:SetResizable (false)
container_barras:SetMovable (true)
container_barras_window:SetWidth (460)
container_barras_window:SetHeight (550)
container_barras_window:SetScrollChild (container_barras)
container_barras_window:SetPoint ("TOPLEFT", _detalhes.ListPanel.widget, "TOPLEFT", 21, -10)
_detalhes.gump:NewScrollBar (container_barras_window, container_barras, -10, -17)
container_barras_window.slider:Altura (560)
container_barras_window.slider:cimaPoint (0, 1)
container_barras_window.slider:baixoPoint (0, -3)
container_barras_window.slider:SetFrameLevel (10)
container_barras_window.ultimo = 0
container_barras_window.gump = container_barras
function _detalhes.ListPanel:add (text, index, filter)
local row = _detalhes.ListPanel.barras [index]
if (not row) then
row = {text = _detalhes.ListPanel.container:CreateFontString (nil, "overlay", "GameFontNormal")}
_detalhes.ListPanel.barras [index] = row
row.text:SetPoint ("topleft", _detalhes.ListPanel.container, "topleft", 0, -index * 15)
end
if (filter and text:find (filter)) then
row.text:SetTextColor (1, 1, 0)
else
row.text:SetTextColor (1, 1, 1)
end
row.text:SetText (text)
end
return _detalhes.ListPanel
end