- Added Siege of Orgrimmar Raid Encounter.
- Updated NickTag to the latest version. - Added a welcome window on first run. - Added a new attribute: frags, which will show adds killed. - Added boss end which will end a combat when some requisites are done. - Fixed a issue when ending a combat did not close heal actor timer. - Fixed a green texture shown when an actor don't have a avatar. - Fixed a issue on reverse report were dead shown nothing. - Fixed bug were a instance segment didn't change while in combat. - Fixed problem when removing a combat table did not reduce absorbs amount. - Pet equilization at the end of a encountr has been disabled. - Equilization at the end of a encounter has been improved. - New API: _detalhes:GetEncounterEnd (mapid, bossindex) get table with boss end.
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
move-folders:
|
||||
Details/plugins/Details_DmgRank: Details_DmgRank
|
||||
Details/plugins/Details_EncounterDetails: Details_EncounterDetails
|
||||
Details/plugins/Details_ErrorReport: Details_ErrorReport
|
||||
Details/plugins/Details_EncounterDetails: Details_EncounterDetails
|
||||
Details/plugins/Details_RaidInfo-ThroneOfThunder: Details_RaidInfo-ThroneOfThunder
|
||||
Details/plugins/Details_RaidInfo-SiegeOfOrgrimmar: Details_RaidInfo-SiegeOfOrgrimmar
|
||||
Details/plugins/Details_SaveData: Details_SaveData
|
||||
Details/plugins/Details_SpellDetails: Details_SpellDetails
|
||||
Details/plugins/Details_TimeAttack: Details_TimeAttack
|
||||
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details
|
||||
## Notes: Computes detailed infos about combats.
|
||||
## SavedVariables: _detalhes_global
|
||||
@@ -54,6 +54,7 @@ gumps\janela_info.lua
|
||||
gumps\janela_report.lua
|
||||
gumps\janela_principal.lua
|
||||
gumps\janela_custom.lua
|
||||
gumps\janela_welcome.lua
|
||||
gumps\fw_mods.lua
|
||||
gumps\switch.lua
|
||||
gumps\toolbar_button.xml
|
||||
|
||||
@@ -4,12 +4,21 @@
|
||||
-- NickTag:SetNickname (name) -> set the player nick name, after set nicktag will broadcast the nick over addon guild channel.
|
||||
--
|
||||
|
||||
local major, minor = "NickTag-1.0", 2
|
||||
local major, minor = "NickTag-1.0", 3
|
||||
local NickTag, oldminor = LibStub:NewLibrary (major, minor)
|
||||
|
||||
if (not NickTag) then
|
||||
return
|
||||
end
|
||||
|
||||
--> fix for old nicktag version
|
||||
if (_G.NickTag) then
|
||||
if (_G.NickTag.OnEvent) then
|
||||
_G.NickTag:UnregisterComm ("NickTag")
|
||||
_G.NickTag.OnEvent = nil
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> constants
|
||||
@@ -32,6 +41,13 @@ end
|
||||
_G.NickTag = NickTag --> nicktag object over global container
|
||||
|
||||
local pool = {default = true} --> pointer to the cache pool and the default pool if no cache
|
||||
local queue_request = {}
|
||||
local queue_send = {}
|
||||
local last_queue = 0
|
||||
local is_updating = false
|
||||
NickTag.debug = false
|
||||
|
||||
local GetGuildRosterInfo = GetGuildRosterInfo
|
||||
|
||||
LibStub:GetLibrary ("AceComm-3.0"):Embed (NickTag)
|
||||
LibStub:GetLibrary ("AceSerializer-3.0"):Embed (NickTag)
|
||||
@@ -58,6 +74,10 @@ end
|
||||
return target
|
||||
end
|
||||
|
||||
function NickTag:Msg (text)
|
||||
print ("|cFFFFFF00NickTag:|r",text)
|
||||
end
|
||||
|
||||
local enUS = LibStub("AceLocale-3.0"):NewLocale ("NickTag-1.0", "enUS", true)
|
||||
if (enUS) then
|
||||
enUS ["STRING_ERROR_1"] = "Your nickname is too long, max of 12 characters is allowed."
|
||||
@@ -204,9 +224,17 @@ end
|
||||
--> 0x2: received a revision version from a guy which logon in the game
|
||||
elseif (_type == CONST_COMM_LOGONREVISION) then
|
||||
|
||||
if (UnitName ("player") == name) then
|
||||
return
|
||||
end
|
||||
|
||||
local receivedRevision = arg3
|
||||
local storedPersona = NickTag:GetNicknameTable (serial)
|
||||
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("LOGONREVISION from: " .. name .. " rev: " .. receivedRevision)
|
||||
end
|
||||
|
||||
if (type (version) ~= "number" or version ~= minor) then
|
||||
return
|
||||
end
|
||||
@@ -216,7 +244,17 @@ end
|
||||
if (realm ~= GetRealmName()) then
|
||||
name = name .. "-" .. realm
|
||||
end
|
||||
NickTag:ScheduleTimer ("RequestPersona", math.random (1, 20), name)
|
||||
|
||||
--> put in queue our request for receive a updated persona
|
||||
NickTag:ScheduleTimer ("QueueRequest", math.random (10, 60), name)
|
||||
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("LOGONREVISION from: " .. name .. " |cFFFF0000is out of date|r, queueing a request persona.")
|
||||
end
|
||||
else
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("LOGONREVISION from: " .. name .. " |cFF00FF00is up to date.")
|
||||
end
|
||||
end
|
||||
|
||||
--> 0x3: someone requested my persona, so i need to send to him
|
||||
@@ -230,15 +268,149 @@ end
|
||||
if (realm ~= GetRealmName()) then
|
||||
name = name .. "-" .. realm
|
||||
end
|
||||
NickTag:SendPersona (name)
|
||||
|
||||
--> queue to send our persona for requested person
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("REQUESTPERSONA from: " .. name .. ", the request has been placed in queue.")
|
||||
end
|
||||
|
||||
NickTag:QueueSend (name)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
NickTag:RegisterComm ("NickTag", "OnReceiveComm")
|
||||
|
||||
function NickTag:UpdateRoster()
|
||||
--> do not update roster if is in combat
|
||||
if (not UnitAffectingCombat ("player")) then
|
||||
GuildRoster()
|
||||
end
|
||||
end
|
||||
|
||||
function NickTag:IsOnline (name)
|
||||
|
||||
local isShownOffline = GetGuildRosterShowOffline()
|
||||
if (isShownOffline) then
|
||||
SetGuildRosterShowOffline (false)
|
||||
end
|
||||
|
||||
local _, numOnlineMembers = GetNumGuildMembers()
|
||||
for i = 1, numOnlineMembers do
|
||||
local player_name = GetGuildRosterInfo (i)
|
||||
if (player_name == name) then
|
||||
if (isShownOffline) then
|
||||
SetGuildRosterShowOffline (true)
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
if (isShownOffline) then
|
||||
SetGuildRosterShowOffline (true)
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local event_frame = CreateFrame ("frame", nil, UIParent)
|
||||
event_frame:Hide()
|
||||
event_frame:SetScript ("OnEvent", function (_, _, local_update)
|
||||
if (not local_update) then
|
||||
|
||||
--> roster was been updated
|
||||
if (last_queue < time()) then
|
||||
last_queue = time()+11
|
||||
else
|
||||
return
|
||||
end
|
||||
|
||||
--> do not share if we are in combat
|
||||
if (UnitAffectingCombat ("player")) then
|
||||
return
|
||||
end
|
||||
|
||||
--> start with send requested personas
|
||||
if (#queue_send > 0) then
|
||||
|
||||
local name = queue_send [1]
|
||||
table.remove (queue_send, 1)
|
||||
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("QUEUE -> ready to send persona to " .. name)
|
||||
end
|
||||
|
||||
--> check if the player is online
|
||||
if (NickTag:IsOnline (name)) then
|
||||
NickTag:SendPersona (name)
|
||||
end
|
||||
|
||||
if (#queue_send == 0 and #queue_request == 0) then
|
||||
NickTag:StopRosterUpdates()
|
||||
end
|
||||
|
||||
elseif (#queue_request > 0) then
|
||||
|
||||
local name = queue_request [1]
|
||||
table.remove (queue_request, 1)
|
||||
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("QUEUE -> ready to request the persona of " .. name)
|
||||
end
|
||||
|
||||
--> check if the player is online
|
||||
if (NickTag:IsOnline (name)) then
|
||||
NickTag:RequestPersona (name)
|
||||
end
|
||||
|
||||
if (#queue_request == 0 and #queue_request == 0) then
|
||||
NickTag:StopRosterUpdates()
|
||||
end
|
||||
|
||||
else
|
||||
NickTag:StopRosterUpdates()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function NickTag:StopRosterUpdates()
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("ROSTER -> updates has been stopped")
|
||||
end
|
||||
if (NickTag.UpdateRosterTimer) then
|
||||
NickTag:CancelTimer (NickTag.UpdateRosterTimer)
|
||||
end
|
||||
NickTag.UpdateRosterTimer = nil
|
||||
event_frame:UnregisterEvent ("GUILD_ROSTER_UPDATE")
|
||||
is_updating = false
|
||||
end
|
||||
|
||||
function NickTag:StartRosterUpdates()
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("ROSTER -> updates has been actived")
|
||||
end
|
||||
event_frame:RegisterEvent ("GUILD_ROSTER_UPDATE")
|
||||
if (not NickTag.UpdateRosterTimer) then
|
||||
NickTag.UpdateRosterTimer = NickTag:ScheduleRepeatingTimer ("UpdateRoster", 12)
|
||||
end
|
||||
is_updating = true
|
||||
end
|
||||
|
||||
--> we queue data for roster update and also check for combat
|
||||
function NickTag:QueueRequest (name)
|
||||
table.insert (queue_request, name)
|
||||
if (not is_updating) then
|
||||
NickTag:StartRosterUpdates()
|
||||
end
|
||||
end
|
||||
function NickTag:QueueSend (name)
|
||||
table.insert (queue_send, name)
|
||||
if (not is_updating) then
|
||||
NickTag:StartRosterUpdates()
|
||||
end
|
||||
end
|
||||
|
||||
--> after logon, we send our revision, who needs update my persona will send 0x3 (request persona) to me and i send back 0x1 (send persona)
|
||||
function NickTag:SendRevision()
|
||||
|
||||
local battlegroup_serial = NickTag:GetSerial()
|
||||
if (not battlegroup_serial) then
|
||||
return
|
||||
@@ -246,17 +418,28 @@ end
|
||||
|
||||
local myPersona = NickTag:GetNicknameTable (battlegroup_serial)
|
||||
if (myPersona) then
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("SendRevision() -> SENT")
|
||||
end
|
||||
NickTag:SendCommMessage ("NickTag", NickTag:Serialize (CONST_COMM_LOGONREVISION, battlegroup_serial, myPersona [CONST_INDEX_REVISION], UnitName ("player"), GetRealmName(), minor), "GUILD")
|
||||
end
|
||||
end
|
||||
|
||||
--> i received 0x2 and his persona is out of date here, so i need to send 0x3 to him and him will send 0x1.
|
||||
function NickTag:RequestPersona (target)
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("RequestPersona() -> requesting of " .. target)
|
||||
end
|
||||
NickTag:SendCommMessage ("NickTag", NickTag:Serialize (CONST_COMM_REQUESTPERSONA, 0, 0, UnitName ("player"), GetRealmName(), minor), "WHISPER", target)
|
||||
end
|
||||
|
||||
--> this broadcast my persona to entire guild when i update my persona or send my persona to someone who doesn't have it or need to update.
|
||||
function NickTag:SendPersona (target)
|
||||
if (target) then
|
||||
if (NickTag.debug) then
|
||||
NickTag:Msg ("SendPersona() -> sent to " .. target)
|
||||
end
|
||||
end
|
||||
local battlegroup_serial = NickTag:GetSerial()
|
||||
if (not battlegroup_serial) then
|
||||
return
|
||||
|
||||
@@ -6,20 +6,11 @@
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> global name declaration
|
||||
|
||||
--> fix for old nicktag version
|
||||
if (_G.NickTag) then
|
||||
if (_G.NickTag.OnEvent) then
|
||||
_G.NickTag:UnregisterComm ("NickTag")
|
||||
end
|
||||
end
|
||||
|
||||
_detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0")
|
||||
_detalhes.userversion = "v1.3.1"
|
||||
_detalhes.version = "Alpha 005"
|
||||
_detalhes.realversion = 5
|
||||
_detalhes.userversion = "v1.4.0"
|
||||
_detalhes.version = "Alpha 006"
|
||||
_detalhes.realversion = 6
|
||||
|
||||
--_detalhes:NickTagSetCache (_detalhes.NickTagCache)
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> initialization stuff
|
||||
|
||||
|
||||
+31
-14
@@ -79,13 +79,13 @@ function combate:NovaTabela (iniciada, _tabela_overall, combatId, ...)
|
||||
--> start/end time (duration)
|
||||
esta_tabela.data_fim = 0
|
||||
esta_tabela.data_inicio = 0
|
||||
--esta_tabela.last_event = 0
|
||||
|
||||
--> record last event before dead
|
||||
esta_tabela.last_events_tables = {}
|
||||
|
||||
--> record damage data
|
||||
--esta_tabela.DpsGraphic = {max = 0}
|
||||
--> frags
|
||||
esta_tabela.frags = {}
|
||||
esta_tabela.frags_need_refresh = false
|
||||
|
||||
--> time data container
|
||||
esta_tabela.TimeData = _detalhes.timeContainer:CreateTimeTable()
|
||||
@@ -168,18 +168,29 @@ end
|
||||
|
||||
function combate:TravarTempos()
|
||||
--é necessário travar o tempo em todos os atributos do combate.
|
||||
for index, container in _ipairs (self) do -- aqui ele lista os tipos de atributo listado na lista acima
|
||||
if (index < 3) then --> 3 é e_energy, não possui tempo // 4 é misc tbm não possui tempo
|
||||
for _, jogador in _ipairs (container._ActorTable) do
|
||||
if (jogador:Iniciar()) then -- retorna se ele esta com o dps ativo
|
||||
jogador:TerminarTempo()
|
||||
jogador:Iniciar (false) --trava o dps do jogador
|
||||
--jogador.last_events_table = _detalhes:CreateActorLastEventTable()
|
||||
end
|
||||
|
||||
if (self [1]) then
|
||||
for _, jogador in _ipairs (self [1]._ActorTable) do --> damage
|
||||
if (jogador:Iniciar()) then -- retorna se ele esta com o dps ativo
|
||||
jogador:TerminarTempo()
|
||||
jogador:Iniciar (false) --trava o dps do jogador
|
||||
--jogador.last_events_table = _detalhes:CreateActorLastEventTable()
|
||||
end
|
||||
else
|
||||
break
|
||||
end
|
||||
else
|
||||
--print ("combat [1] doesn't exist.")
|
||||
end
|
||||
if (self [2]) then
|
||||
for _, jogador in _ipairs (self [2]._ActorTable) do --> healing
|
||||
if (jogador:Iniciar()) then -- retorna se ele esta com o dps ativo
|
||||
jogador:TerminarTempo()
|
||||
jogador:Iniciar (false) --trava o dps do jogador
|
||||
--print ("travando o tempo de",jogador.nome, jogador.end_time)
|
||||
--jogador.last_events_table = _detalhes:CreateActorLastEventTable()
|
||||
end
|
||||
end
|
||||
else
|
||||
--print ("combat [2] doesn't exist.")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -458,7 +469,6 @@ combate.__sub = function (overall, combate)
|
||||
overall.totals[4].dead = overall.totals[4].dead - combate.totals[4].dead
|
||||
overall.totals[4].cooldowns_defensive = overall.totals[4].cooldowns_defensive - combate.totals[4].cooldowns_defensive
|
||||
|
||||
|
||||
overall.totals_grupo[1] = overall.totals_grupo[1] - combate.totals_grupo[1]
|
||||
overall.totals_grupo[2] = overall.totals_grupo[2] - combate.totals_grupo[2]
|
||||
|
||||
@@ -474,6 +484,13 @@ combate.__sub = function (overall, combate)
|
||||
overall.totals_grupo[4].dead = overall.totals_grupo[4].dead - combate.totals_grupo[4].dead
|
||||
overall.totals_grupo[4].cooldowns_defensive = overall.totals_grupo[4].cooldowns_defensive - combate.totals_grupo[4].cooldowns_defensive
|
||||
|
||||
for fragName, fragAmount in pairs (combate.frags) do
|
||||
if (fragAmount and overall.frags [fragName]) then --> not sure why
|
||||
overall.frags [fragName] = overall.frags [fragName] - fragAmount
|
||||
end
|
||||
end
|
||||
overall.frags_need_refresh = true
|
||||
|
||||
return overall
|
||||
end
|
||||
|
||||
|
||||
+277
-64
@@ -7,6 +7,7 @@ local _table_sort = table.sort
|
||||
local _table_insert = table.insert
|
||||
local _table_size = table.getn
|
||||
local _setmetatable = setmetatable
|
||||
local _getmetatable = getmetatable
|
||||
local _ipairs = ipairs
|
||||
local _pairs = pairs
|
||||
local _rawget= rawget
|
||||
@@ -165,6 +166,150 @@ end
|
||||
return false
|
||||
end
|
||||
|
||||
function _detalhes:ToolTipFrags (instancia, frag, esta_barra)
|
||||
|
||||
--vardump (frag)
|
||||
|
||||
local name = frag [1]
|
||||
local GameCooltip = GameCooltip
|
||||
|
||||
GameCooltip:Reset()
|
||||
GameCooltip:SetType ("tooltip")
|
||||
GameCooltip:SetOwner (esta_barra)
|
||||
GameCooltip:SetOption ("LeftBorderSize", -5)
|
||||
GameCooltip:SetOption ("RightBorderSize", 5)
|
||||
GameCooltip:SetOption ("StatusBarTexture", [[Interface\WorldStateFrame\WORLDSTATEFINALSCORE-HIGHLIGHT]])
|
||||
|
||||
--> mantendo a função o mais low level possível
|
||||
local damage_container = instancia.showing [1]
|
||||
|
||||
local frag_actor = damage_container._ActorTable [damage_container._NameIndexTable [ name ]]
|
||||
|
||||
if (frag_actor) then
|
||||
|
||||
local damage_taken_table = {}
|
||||
|
||||
local took_damage_from = frag_actor.damage_from
|
||||
local total_damage_taken = frag_actor.damage_taken
|
||||
|
||||
for aggressor, _ in _pairs (took_damage_from) do
|
||||
|
||||
local damager_actor = damage_container._ActorTable[damage_container._NameIndexTable [ aggressor ]]
|
||||
|
||||
if (damager_actor) then --> checagem por causa do total e do garbage collector que não limpa os names que deram dano
|
||||
|
||||
local targets = damager_actor.targets
|
||||
|
||||
local specific_target = targets._ActorTable [targets._NameIndexTable [ name ]] --> é ele mesmo
|
||||
if (specific_target) then
|
||||
damage_taken_table [#damage_taken_table+1] = {aggressor, specific_target.total, damager_actor.classe}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (#damage_taken_table > 0) then
|
||||
|
||||
_table_sort (damage_taken_table, _detalhes.Sort2)
|
||||
|
||||
GameCooltip:AddLine (Loc ["STRING_FROM"], nil, nil, headerColor, nil, 12)
|
||||
GameCooltip:AddIcon ([[Interface\Addons\Details\images\icons]], 1, 1, 14, 14, 0.126953125, 0.1796875, 0, 0.0546875)
|
||||
GameCooltip:AddStatusBar (100, 1, r, g, b, barAlha)
|
||||
|
||||
for i = 1, math.min (6, #damage_taken_table) do
|
||||
|
||||
local t = damage_taken_table [i]
|
||||
|
||||
GameCooltip:AddLine (t [1], _detalhes:comma_value (t [2]))
|
||||
local classe = t [3]
|
||||
if (not classe) then
|
||||
classe = "UNKNOW"
|
||||
end
|
||||
if (classe == "UNKNOW") then
|
||||
GameCooltip:AddIcon ("Interface\\LFGFRAME\\LFGROLE_BW", nil, nil, 14, 14, .25, .5, 0, 1)
|
||||
else
|
||||
GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small", nil, nil, 14, 14, _unpack (_detalhes.class_coords [classe]))
|
||||
end
|
||||
GameCooltip:AddStatusBar (100, 1, .1, .1, .1, .3)
|
||||
end
|
||||
|
||||
GameCooltip:AddLine (Loc ["STRING_REPORT_LEFTCLICK"], nil, 1, "white")
|
||||
GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, 16, 0.015625, 0.13671875, 0.4375, 0.59765625)
|
||||
GameCooltip:ShowCooltip()
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local function RefreshBarraFrags (tabela, barra, instancia)
|
||||
atributo_damage:AtualizarFrags (tabela, tabela.minha_barra, barra.colocacao, instancia)
|
||||
end
|
||||
|
||||
function atributo_damage:ReportSingleFragsLine (frag, instancia)
|
||||
local barra = instancia.barras [frag.minha_barra]
|
||||
|
||||
local reportar = {"Details! " .. Loc ["STRING_ATTRIBUTE_DAMAGE_TAKEN"].. ": " .. frag [1]} --> localize-me
|
||||
for i = 1, GameCooltip:GetNumLines() do
|
||||
local texto_left, texto_right = GameCooltip:GetText (i)
|
||||
if (texto_left and texto_right) then
|
||||
texto_left = texto_left:gsub (("|T(.*)|t "), "")
|
||||
reportar [#reportar+1] = ""..texto_left.." "..texto_right..""
|
||||
end
|
||||
end
|
||||
|
||||
return _detalhes:Reportar (reportar, {_no_current = true, _no_inverse = true, _custom = true})
|
||||
end
|
||||
|
||||
function atributo_damage:AtualizarFrags (tabela, qual_barra, colocacao, instancia)
|
||||
|
||||
tabela ["frags"] = true --> marca que esta tabela é uma tabela de frags, usado no controla na hora de montar o tooltip
|
||||
local esta_barra = instancia.barras [qual_barra] --> pega a referência da barra na janela
|
||||
|
||||
if (not esta_barra) then
|
||||
print ("DEBUG: problema com <instancia.esta_barra> "..qual_barra.." "..lugar)
|
||||
return
|
||||
end
|
||||
|
||||
local tabela_anterior = esta_barra.minha_tabela
|
||||
|
||||
esta_barra.minha_tabela = tabela
|
||||
|
||||
tabela.nome = tabela [1] --> evita dar erro ao redimencionar a janela
|
||||
tabela.minha_barra = qual_barra
|
||||
esta_barra.colocacao = colocacao
|
||||
|
||||
if (not _getmetatable (tabela)) then
|
||||
_setmetatable (tabela, {__call = RefreshBarraFrags})
|
||||
tabela._custom = true
|
||||
end
|
||||
|
||||
esta_barra.texto_esquerdo:SetText (colocacao .. ". " .. tabela [1])
|
||||
esta_barra.texto_direita:SetText (tabela [2])
|
||||
|
||||
if (colocacao == 1) then
|
||||
esta_barra.statusbar:SetValue (100)
|
||||
else
|
||||
esta_barra.statusbar:SetValue (tabela [2] / instancia.top * 100)
|
||||
end
|
||||
|
||||
if (esta_barra.hidden or esta_barra.fading_in or esta_barra.faded) then
|
||||
gump:Fade (esta_barra, "out")
|
||||
end
|
||||
|
||||
--> ele nao come o texto quando a instância esta muito pequena
|
||||
|
||||
esta_barra.textura:SetVertexColor (1, 1, 1)
|
||||
esta_barra.icone_classe:SetTexture ("Interface\\LFGFRAME\\LFGROLE_BW")
|
||||
esta_barra.icone_classe:SetTexCoord (.25, .5, 0, 1)
|
||||
esta_barra.icone_classe:SetVertexColor (1, 1, 1)
|
||||
|
||||
if (esta_barra.mouse_over and not instancia.baseframe.isMoving) then --> precisa atualizar o tooltip
|
||||
--gump:UpdateTooltip (qual_barra, esta_barra, instancia)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local ntable = {}
|
||||
function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, exportar)
|
||||
|
||||
local showing = tabela_do_combate [class_type] --> o que esta sendo mostrado -> [1] - dano [2] - cura --> pega o container com ._NameIndexTable ._ActorTable
|
||||
@@ -199,6 +344,8 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex
|
||||
keyName = "damage_taken"
|
||||
elseif (sub_atributo == 4) then --> FRIENDLY FIRE
|
||||
keyName = "friendlyfire_total"
|
||||
elseif (sub_atributo == 5) then --> FRAGS
|
||||
keyName = "frags"
|
||||
end
|
||||
else
|
||||
keyName = exportar.key
|
||||
@@ -216,88 +363,154 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex
|
||||
keyName = "damage_taken"
|
||||
elseif (sub_atributo == 4) then --> FRIENDLY FIRE
|
||||
keyName = "friendlyfire_total"
|
||||
elseif (sub_atributo == 5) then --> FRAGS
|
||||
keyName = "frags"
|
||||
end
|
||||
end
|
||||
|
||||
if (instancia.atributo == 5) then --> custom
|
||||
--> faz o sort da categoria e retorna o amount corrigido
|
||||
amount = _detalhes:ContainerSort (conteudo, amount, keyName)
|
||||
|
||||
--> grava o total
|
||||
instancia.top = conteudo[1][keyName]
|
||||
|
||||
elseif (modo == modo_ALL) then --> mostrando ALL
|
||||
if (keyName == "frags") then
|
||||
|
||||
--> faz o sort da categoria e retorna o amount corrigido
|
||||
amount = _detalhes:ContainerSort (conteudo, amount, keyName)
|
||||
local frags = instancia.showing.frags
|
||||
local index = 0
|
||||
|
||||
--> pega o total ja aplicado na tabela do combate
|
||||
total = tabela_do_combate.totals [class_type]
|
||||
for fragName, fragAmount in _pairs (frags) do
|
||||
|
||||
--> grava o total
|
||||
instancia.top = conteudo[1][keyName]
|
||||
|
||||
elseif (modo == modo_GROUP) then --> mostrando GROUP
|
||||
|
||||
--> organiza as tabelas
|
||||
index = index + 1
|
||||
|
||||
if (_detalhes.in_combat) then
|
||||
using_cache = true
|
||||
end
|
||||
|
||||
if (using_cache) then
|
||||
conteudo = _detalhes.cache_damage_group
|
||||
|
||||
_table_sort (conteudo, _detalhes.SortKeySimple)
|
||||
|
||||
if (conteudo[1][keyName] < 1) then
|
||||
amount = 0
|
||||
if (ntable [index]) then
|
||||
ntable [index] [1] = fragName
|
||||
ntable [index] [2] = fragAmount
|
||||
else
|
||||
instancia.top = conteudo[1][keyName]
|
||||
amount = #conteudo
|
||||
ntable [index] = {fragName, fragAmount}
|
||||
end
|
||||
|
||||
for i = 1, amount do
|
||||
total = total + conteudo[i][keyName]
|
||||
end
|
||||
else
|
||||
_table_sort (conteudo, _detalhes.SortKeyGroup)
|
||||
|
||||
end
|
||||
--
|
||||
|
||||
--[[
|
||||
_table_sort (conteudo, function (a, b)
|
||||
if (a.grupo and b.grupo) then
|
||||
return a[keyName] > b[keyName]
|
||||
elseif (a.grupo and not b.grupo) then
|
||||
return true
|
||||
elseif (not a.grupo and b.grupo) then
|
||||
return false
|
||||
local tsize = #ntable
|
||||
if (index < tsize) then
|
||||
for i = index+1, tsize do
|
||||
ntable [i][2] = 0
|
||||
end
|
||||
end
|
||||
|
||||
if (tsize > 0) then
|
||||
--_table_sort (ntable, function (t1, t2)
|
||||
-- return (t1 [2] > t2 [2])
|
||||
--end)
|
||||
_table_sort (ntable, _detalhes.Sort2)
|
||||
instancia.top = ntable [1][2]
|
||||
end
|
||||
|
||||
total = index
|
||||
|
||||
if (exportar) then
|
||||
local export = {}
|
||||
for i = 1, index do
|
||||
export [i] = {ntable[i][1], ntable[i][2]}
|
||||
end
|
||||
return export
|
||||
end
|
||||
|
||||
if (total < 1) then
|
||||
instancia:EsconderScrollBar()
|
||||
return _detalhes:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh
|
||||
end
|
||||
|
||||
--estra mostrando ALL então posso seguir o padrão correto? primeiro, atualiza a scroll bar...
|
||||
instancia:AtualizarScrollBar (total)
|
||||
|
||||
--depois faz a atualização normal dele através dos iterators
|
||||
local qual_barra = 1
|
||||
local barras_container = instancia.barras
|
||||
|
||||
for i = instancia.barraS[1], instancia.barraS[2], 1 do --> vai atualizar só o range que esta sendo mostrado
|
||||
atributo_damage:AtualizarFrags (ntable[i], qual_barra, i, instancia)
|
||||
qual_barra = qual_barra+1
|
||||
end
|
||||
|
||||
return _detalhes:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh
|
||||
else
|
||||
|
||||
if (instancia.atributo == 5) then --> custom
|
||||
--> faz o sort da categoria e retorna o amount corrigido
|
||||
amount = _detalhes:ContainerSort (conteudo, amount, keyName)
|
||||
|
||||
--> grava o total
|
||||
instancia.top = conteudo[1][keyName]
|
||||
|
||||
elseif (modo == modo_ALL) then --> mostrando ALL
|
||||
|
||||
--> faz o sort da categoria e retorna o amount corrigido
|
||||
amount = _detalhes:ContainerSort (conteudo, amount, keyName)
|
||||
|
||||
--> pega o total ja aplicado na tabela do combate
|
||||
total = tabela_do_combate.totals [class_type]
|
||||
|
||||
--> grava o total
|
||||
instancia.top = conteudo[1][keyName]
|
||||
|
||||
elseif (modo == modo_GROUP) then --> mostrando GROUP
|
||||
|
||||
--> organiza as tabelas
|
||||
|
||||
if (_detalhes.in_combat) then
|
||||
using_cache = true
|
||||
end
|
||||
|
||||
if (using_cache and instancia.segmento == 0) then
|
||||
conteudo = _detalhes.cache_damage_group
|
||||
|
||||
_table_sort (conteudo, _detalhes.SortKeySimple)
|
||||
|
||||
if (conteudo[1][keyName] < 1) then
|
||||
amount = 0
|
||||
else
|
||||
return a[keyName] > b[keyName]
|
||||
instancia.top = conteudo[1][keyName]
|
||||
amount = #conteudo
|
||||
end
|
||||
end)
|
||||
--]]
|
||||
|
||||
if (not using_cache) then
|
||||
for index, player in _ipairs (conteudo) do
|
||||
if (_bit_band (player.flag, DFLAG_player_group) >= 0x101) then --> é um player e esta em grupo
|
||||
if (player[keyName] < 1) then --> dano menor que 1, interromper o loop
|
||||
amount = index - 1
|
||||
break
|
||||
elseif (index == 1) then --> esse IF aqui, precisa mesmo ser aqui? não daria pra pega-lo com uma chave [1] nad grupo == true?
|
||||
instancia.top = conteudo[1][keyName]
|
||||
|
||||
for i = 1, amount do
|
||||
total = total + conteudo[i][keyName]
|
||||
end
|
||||
else
|
||||
_table_sort (conteudo, _detalhes.SortKeyGroup)
|
||||
end
|
||||
--
|
||||
|
||||
--[[
|
||||
_table_sort (conteudo, function (a, b)
|
||||
if (a.grupo and b.grupo) then
|
||||
return a[keyName] > b[keyName]
|
||||
elseif (a.grupo and not b.grupo) then
|
||||
return true
|
||||
elseif (not a.grupo and b.grupo) then
|
||||
return false
|
||||
else
|
||||
return a[keyName] > b[keyName]
|
||||
end
|
||||
end)
|
||||
--]]
|
||||
|
||||
if (not using_cache) then
|
||||
for index, player in _ipairs (conteudo) do
|
||||
if (_bit_band (player.flag, DFLAG_player_group) >= 0x101) then --> é um player e esta em grupo
|
||||
if (player[keyName] < 1) then --> dano menor que 1, interromper o loop
|
||||
amount = index - 1
|
||||
break
|
||||
elseif (index == 1) then --> esse IF aqui, precisa mesmo ser aqui? não daria pra pega-lo com uma chave [1] nad grupo == true?
|
||||
instancia.top = conteudo[1][keyName]
|
||||
end
|
||||
|
||||
total = total + player[keyName]
|
||||
else
|
||||
amount = index-1
|
||||
break
|
||||
end
|
||||
|
||||
total = total + player[keyName]
|
||||
else
|
||||
amount = index-1
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--> refaz o mapa do container
|
||||
if (not using_cache) then
|
||||
showing:remapear()
|
||||
|
||||
@@ -209,7 +209,7 @@ function atributo_heal:RefreshWindow (instancia, tabela_do_combate, forcar, expo
|
||||
using_cache = true
|
||||
end
|
||||
|
||||
if (using_cache) then
|
||||
if (using_cache and instancia.segmento == 0) then
|
||||
conteudo = _detalhes.cache_healing_group
|
||||
|
||||
_detalhes:ContainerSort (conteudo, nil, keyName)
|
||||
@@ -1395,6 +1395,7 @@ atributo_heal.__add = function (shadow, tabela2)
|
||||
end
|
||||
|
||||
shadow.totalover = shadow.totalover + tabela2.totalover
|
||||
shadow.totalabsorb = shadow.totalabsorb + tabela2.totalabsorb
|
||||
shadow.heal_enemy_amt = shadow.heal_enemy_amt + tabela2.heal_enemy_amt
|
||||
|
||||
shadow.total_without_pet = shadow.total_without_pet + tabela2.total_without_pet
|
||||
@@ -1455,6 +1456,7 @@ end
|
||||
atributo_heal.__sub = function (tabela1, tabela2)
|
||||
tabela1.total = tabela1.total - tabela2.total
|
||||
tabela1.totalover = tabela1.totalover - tabela2.totalover
|
||||
tabela1.totalabsorb = tabela1.totalabsorb - tabela2.totalabsorb
|
||||
tabela1.heal_enemy_amt = tabela1.heal_enemy_amt - tabela2.heal_enemy_amt
|
||||
|
||||
tabela1.total_without_pet = tabela1.total_without_pet - tabela2.total_without_pet
|
||||
|
||||
@@ -136,6 +136,7 @@ end
|
||||
|
||||
habilidade_cura.__sub = function (tabela1, tabela2)
|
||||
tabela1.total = tabela1.total - tabela2.total
|
||||
tabela1.totalabsorb = tabela1.totalabsorb - tabela2.totalabsorb
|
||||
tabela1.counter = tabela1.counter - tabela2.counter
|
||||
|
||||
tabela1.n_min = tabela1.n_min - tabela2.n_min
|
||||
|
||||
@@ -1555,7 +1555,18 @@ function _detalhes:monta_relatorio (este_relatorio, custom)
|
||||
local container = self.showing [atributo]._ActorTable
|
||||
|
||||
if (atributo == 1) then --> damage
|
||||
total, keyName, first = _detalhes.atributo_damage:RefreshWindow (self, self.showing, true, true)
|
||||
if (self.sub_atributo == 5) then --> frags
|
||||
local frags = self.showing.frags
|
||||
local reportarFrags = {}
|
||||
for name, amount in pairs (frags) do
|
||||
--> string para imprimir direto sem calculos
|
||||
reportarFrags [#reportarFrags+1] = {frag = tostring (amount), nome = name}
|
||||
end
|
||||
container = reportarFrags
|
||||
keyName = "frag"
|
||||
else
|
||||
total, keyName, first = _detalhes.atributo_damage:RefreshWindow (self, self.showing, true, true)
|
||||
end
|
||||
elseif (atributo == 2) then --> heal
|
||||
total, keyName, first = _detalhes.atributo_heal:RefreshWindow (self, self.showing, true, true)
|
||||
elseif (atributo == 3) then --> energy
|
||||
@@ -1618,32 +1629,61 @@ function _detalhes:monta_relatorio (este_relatorio, custom)
|
||||
local total, keyName, first
|
||||
local atributo = self.atributo
|
||||
|
||||
local container = self.showing [atributo]._ActorTable
|
||||
local quantidade = 0
|
||||
|
||||
if (atributo == 1) then --> damage
|
||||
total, keyName, first = _detalhes.atributo_damage:RefreshWindow (self, self.showing, true, true)
|
||||
if (self.sub_atributo == 5) then --> frags
|
||||
local frags = self.showing.frags
|
||||
local reportarFrags = {}
|
||||
for name, amount in pairs (frags) do
|
||||
--> string para imprimir direto sem calculos
|
||||
reportarFrags [#reportarFrags+1] = {frag = tostring (amount), nome = name}
|
||||
end
|
||||
container = reportarFrags
|
||||
keyName = "frag"
|
||||
else
|
||||
total, keyName, first = _detalhes.atributo_damage:RefreshWindow (self, self.showing, true, true)
|
||||
end
|
||||
elseif (atributo == 2) then --> heal
|
||||
total, keyName, first = _detalhes.atributo_heal:RefreshWindow (self, self.showing, true, true)
|
||||
elseif (atributo == 3) then --> energy
|
||||
total, keyName, first = _detalhes.atributo_energy:RefreshWindow (self, self.showing, true, true)
|
||||
elseif (atributo == 4) then --> misc
|
||||
total, keyName, first = _detalhes.atributo_misc:RefreshWindow (self, self.showing, true, true)
|
||||
if (self.sub_atributo == 5) then --> mortes
|
||||
local mortes = self.showing.last_events_tables
|
||||
local reportarMortes = {}
|
||||
for index, morte in ipairs (mortes) do
|
||||
reportarMortes [#reportarMortes+1] = {dead = morte [6], nome = morte [3]:gsub (("%-.*"), "")}
|
||||
end
|
||||
container = reportarMortes
|
||||
keyName = "dead"
|
||||
else
|
||||
total, keyName, first = _detalhes.atributo_misc:RefreshWindow (self, self.showing, true, true)
|
||||
end
|
||||
elseif (atributo == 5) then --> custom
|
||||
total, keyName, first = _detalhes.atributo_custom:RefreshWindow (self, self.showing, true, {key = "custom"})
|
||||
total = self.showing.totals [self.customName]
|
||||
atributo = _detalhes.custom [self.sub_atributo].attribute
|
||||
end
|
||||
|
||||
local container = self.showing [atributo]._ActorTable
|
||||
local quantidade = 0
|
||||
|
||||
for i = #container, 1, -1 do
|
||||
|
||||
local _thisActor = container [i]
|
||||
local amount = _thisActor [keyName]
|
||||
if (amount > 0) then
|
||||
report_lines [#report_lines+1] = i..".".. _thisActor.nome.." ".. _detalhes:comma_value ( _math_floor (amount) ).." (".._cstr ("%.1f", amount/total*100).."%)"
|
||||
quantidade = quantidade + 1
|
||||
if (quantidade == amt) then
|
||||
break
|
||||
|
||||
if (_type (amount) == "number") then
|
||||
if (amount > 0) then
|
||||
report_lines [#report_lines+1] = i..".".. _thisActor.nome.." ".. _detalhes:comma_value ( _math_floor (amount) ).." (".._cstr ("%.1f", amount/total*100).."%)"
|
||||
quantidade = quantidade + 1
|
||||
if (quantidade == amt) then
|
||||
break
|
||||
end
|
||||
end
|
||||
elseif (_type (amount) == "string") then
|
||||
report_lines [#report_lines+1] = i..".".. _thisActor.nome.." ".. amount
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -76,8 +76,6 @@ function _detalhes:ToolTipDead (instancia, morte, esta_barra)
|
||||
local hora_da_morte = morte [2]
|
||||
local hp_max = morte [5]
|
||||
|
||||
local linhas = {}
|
||||
|
||||
local battleress = false
|
||||
|
||||
local GameCooltip = GameCooltip
|
||||
@@ -180,7 +178,7 @@ end
|
||||
|
||||
function atributo_misc:DeadAtualizarBarra (morte, qual_barra, colocacao, instancia)
|
||||
|
||||
morte ["dead"] = true --> temporario (testes)
|
||||
morte ["dead"] = true --> marca que esta tabela é uma tabela de mortes, usado no controla na hora de montar o tooltip
|
||||
local esta_barra = instancia.barras[qual_barra] --> pega a referência da barra na janela
|
||||
|
||||
if (not esta_barra) then
|
||||
|
||||
+68
-7
@@ -80,7 +80,13 @@
|
||||
|
||||
if (BossIndex) then
|
||||
|
||||
if (_detalhes.debug) then
|
||||
_detalhes:Msg ("(debug) boss found:",_detalhes:GetBossName (ZoneMapID, BossIndex))
|
||||
end
|
||||
|
||||
if (_detalhes.in_combat) then
|
||||
|
||||
--> catch boss function if any
|
||||
local bossFunction, bossFunctionType = _detalhes:GetBossFunction (ZoneMapID, BossIndex)
|
||||
if (bossFunction) then
|
||||
if (_bit_band (bossFunctionType, 0x1) ~= 0) then --realtime
|
||||
@@ -89,6 +95,34 @@
|
||||
combat.bossFunction = _detalhes:ScheduleTimer ("bossFunction", 1)
|
||||
end
|
||||
end
|
||||
|
||||
--> catch boss end if any
|
||||
local endType, endData = _detalhes:GetEncounterEnd (ZoneMapID, BossIndex)
|
||||
if (endType and endData) then
|
||||
|
||||
if (_detalhes.debug) then
|
||||
_detalhes:Msg ("(debug) setting boss end type to:", endType)
|
||||
end
|
||||
|
||||
_detalhes.encounter.type = endType
|
||||
_detalhes.encounter.killed = {}
|
||||
_detalhes.encounter.data = {}
|
||||
|
||||
if (type (endData) == "table") then
|
||||
if (_detalhes.debug) then
|
||||
_detalhes:Msg ("(debug) boss type is table:", endType)
|
||||
end
|
||||
if (endType == 1 or endType == 2) then
|
||||
for _, npcID in ipairs (endData) do
|
||||
_detalhes.encounter.data [npcID] = false
|
||||
end
|
||||
end
|
||||
else
|
||||
if (endType == 1 or endType == 2) then
|
||||
_detalhes.encounter.data [endData] = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
_detalhes.tabela_vigente.is_boss = {
|
||||
@@ -166,6 +200,8 @@
|
||||
_detalhes:InstanciaCallFunction (_detalhes.AtualizaSegmentos) --> atualiza o showing
|
||||
end
|
||||
|
||||
table.wipe (_detalhes.encounter)
|
||||
|
||||
--> conta o tempo na tabela overall -- start time at overall table
|
||||
if (_detalhes.tabela_overall.end_time) then
|
||||
_detalhes.tabela_overall.start_time = _tempo - (_detalhes.tabela_overall.end_time - _detalhes.tabela_overall.start_time)
|
||||
@@ -465,7 +501,7 @@
|
||||
end
|
||||
end
|
||||
|
||||
function _detalhes:EqualizeActorsSchedule (host_of)
|
||||
function _detalhes:EqualizePets()
|
||||
--> check for pets without owner
|
||||
for _, actor in _ipairs (_detalhes.tabela_vigente[1]._ActorTable) do
|
||||
--> have flag and the flag tell us he is a pet
|
||||
@@ -476,14 +512,32 @@
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function _detalhes:EqualizeActorsSchedule (host_of)
|
||||
|
||||
--> store pets sent through 'needpetowner'
|
||||
_detalhes.sent_pets = _detalhes.sent_pets or {n = time()}
|
||||
if (_detalhes.sent_pets.n+20 < time()) then
|
||||
_table_wipe (_detalhes.sent_pets)
|
||||
_detalhes.sent_pets.n = time()
|
||||
end
|
||||
|
||||
--> pet equilize disabled on details 1.4.0
|
||||
--_detalhes:ScheduleTimer ("EqualizePets", 1+math.random())
|
||||
|
||||
--> do not equilize if there is any disabled capture
|
||||
if (_detalhes:CaptureIsAllEnabled()) then
|
||||
_detalhes:ScheduleTimer ("EqualizeActors", 2, host_of)
|
||||
_detalhes:ScheduleTimer ("EqualizeActors", 2+math.random()+math.random() , host_of)
|
||||
end
|
||||
end
|
||||
|
||||
function _detalhes:EqualizeActors (host_of)
|
||||
|
||||
if (_detalhes.debug) then
|
||||
_detalhes:Msg ("(debug) sending equilize actor data")
|
||||
end
|
||||
|
||||
local damage, heal, energy, misc
|
||||
|
||||
if (host_of) then
|
||||
@@ -518,6 +572,7 @@
|
||||
|
||||
local data = {damage, heal, energy, misc}
|
||||
|
||||
--> envia os dados do proprio host pra ele antes
|
||||
if (host_of) then
|
||||
_detalhes:SendCustomRaidData ("equalize_actors", host_of, nil, data)
|
||||
_detalhes:EqualizeActors()
|
||||
@@ -598,6 +653,8 @@
|
||||
--verifica por tooltips especiais:
|
||||
if (objeto.dead) then --> é uma barra de dead
|
||||
return _detalhes:ToolTipDead (self, objeto, esta_barra) --> instância, [morte], barra
|
||||
elseif (objeto.frags) then
|
||||
return _detalhes:ToolTipFrags (self, objeto, esta_barra)
|
||||
end
|
||||
|
||||
local t = objeto:ToolTip (self, qual_barra, esta_barra) --> instância, nº barra, objeto barra
|
||||
@@ -606,11 +663,15 @@
|
||||
if (esta_barra.minha_tabela.serial and esta_barra.minha_tabela.serial ~= "") then
|
||||
local avatar = NickTag:GetNicknameTable (esta_barra.minha_tabela.serial)
|
||||
if (avatar) then
|
||||
GameCooltip:SetBannerImage (1, avatar [2], 80, 40, avatarPoint, nil, nil) --> overlay [2] avatar path
|
||||
--local l, r, t, b = unpack (avatar [5])
|
||||
--local r, g, b = unpack (avatar [6])
|
||||
GameCooltip:SetBannerImage (2, avatar [4], 200, 55, backgroundPoint, avatar [5], avatar [6]) --> background
|
||||
GameCooltip:SetBannerText (1, avatar [1], textPoint) --> text [1] nickname
|
||||
if (avatar [2]) then
|
||||
GameCooltip:SetBannerImage (1, avatar [2], 80, 40, avatarPoint, nil, nil) --> overlay [2] avatar path
|
||||
end
|
||||
if (avatar [4]) then
|
||||
GameCooltip:SetBannerImage (2, avatar [4], 200, 55, backgroundPoint, avatar [5], avatar [6]) --> background
|
||||
end
|
||||
if (avatar [1]) then
|
||||
GameCooltip:SetBannerText (1, avatar [1], textPoint) --> text [1] nickname
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -439,6 +439,9 @@
|
||||
local conteudo = _tabela._ActorTable
|
||||
|
||||
--> Limpa tabelas que não estejam em grupo
|
||||
|
||||
_detalhes.clear_ungrouped = true
|
||||
|
||||
if (_detalhes.clear_ungrouped) then
|
||||
|
||||
local _iter = {index = 1, data = conteudo[1], cleaned = 0} --> ._ActorTable[1] para pegar o primeiro index
|
||||
|
||||
+44
-8
@@ -39,7 +39,7 @@
|
||||
local type, player, realm, dversion, arg6, arg7 = select (2, _detalhes:Deserialize (data))
|
||||
|
||||
if (_detalhes.debug) then
|
||||
_detalhes:Msg ("(debug) network received command", type)
|
||||
_detalhes:Msg ("(debug) network received:", type, "length:",string.len (data))
|
||||
end
|
||||
|
||||
if (type == "highfive") then
|
||||
@@ -48,16 +48,34 @@
|
||||
end
|
||||
|
||||
elseif (type == "petowner") then
|
||||
local serial = player
|
||||
local nome = realm
|
||||
local owner_table = dversion
|
||||
|
||||
dversion, serial, nome, owner_table = player, realm, dversion, arg6
|
||||
|
||||
if (dversion ~= _detalhes.realversion) then
|
||||
return
|
||||
end
|
||||
|
||||
--> check for miss timing when combat finishes
|
||||
if (not _detalhes.sent_pets) then
|
||||
_detalhes.sent_pets = {n = time()}
|
||||
else
|
||||
if (_detalhes.sent_pets.n+20 < time()) then
|
||||
_table_wipe (_detalhes.sent_pets)
|
||||
_detalhes.sent_pets.n = time()
|
||||
end
|
||||
end
|
||||
|
||||
_detalhes.sent_pets [serial] = true
|
||||
|
||||
if (not _detalhes.tabela_pets.pets [serial]) then
|
||||
_detalhes.tabela_pets.pets [serial] = owner_table
|
||||
local petActor = _detalhes.tabela_vigente[1]:PegarCombatente (_, nome)
|
||||
if (petActor) then
|
||||
|
||||
local ownerActor = _detalhes.tabela_vigente[1]:PegarCombatente (owner_table[2], owner_table[1], owner_table[3], true)
|
||||
ownerActor.total = ownerActor.total + petActor.total
|
||||
ownerActor.pets [#ownerActor.pets+1] = nome
|
||||
|
||||
if (_detalhes.debug) then
|
||||
_detalhes:Msg ("(debug) received owner for pet ",nome, "assigned to", owner_table[1])
|
||||
end
|
||||
@@ -75,16 +93,34 @@
|
||||
|
||||
local petserial = arg6
|
||||
local petnome = arg7
|
||||
|
||||
--> check for miss timing on combat finishes
|
||||
if (not _detalhes.sent_pets) then
|
||||
_detalhes.sent_pets = {n = time()}
|
||||
else
|
||||
if (_detalhes.sent_pets.n+20 < time()) then
|
||||
_table_wipe (_detalhes.sent_pets)
|
||||
_detalhes.sent_pets.n = time()
|
||||
end
|
||||
end
|
||||
|
||||
--> already sent
|
||||
if (_detalhes.sent_pets [petserial]) then
|
||||
return
|
||||
else
|
||||
_detalhes.sent_pets [petserial] = true
|
||||
end
|
||||
|
||||
local owner_table = _detalhes.tabela_pets.pets [petserial]
|
||||
|
||||
if (owner_table) then
|
||||
if (realm ~= GetRealmName()) then
|
||||
player = player .."-"..realm
|
||||
end
|
||||
|
||||
if (_detalhes.debug) then
|
||||
_detalhes:Msg ("(debug) received pet owner request, sending owner")
|
||||
end
|
||||
_detalhes:SendCommMessage ("details_comm", _detalhes:Serialize ("petowner", petserial, petnome, owner_table), "WHISPER", player)
|
||||
|
||||
_detalhes:SendCommMessage ("details_comm", _detalhes:Serialize ("petowner", _detalhes.realversion, petserial, petnome, owner_table), "RAID")
|
||||
--_detalhes:SendCommMessage ("details_comm", _detalhes:Serialize ("petowner", petserial, petnome, owner_table), "WHISPER", player)
|
||||
end
|
||||
|
||||
elseif (type == "clouddatareceived") then
|
||||
|
||||
+58
-2
@@ -1604,7 +1604,7 @@
|
||||
|
||||
------------------------------------------------------------------------------------------------
|
||||
--> early checks and fixes
|
||||
|
||||
|
||||
if (not alvo_name) then
|
||||
return
|
||||
end
|
||||
@@ -1612,7 +1612,61 @@
|
||||
------------------------------------------------------------------------------------------------
|
||||
--> build dead
|
||||
|
||||
if (not _UnitIsFeignDeath (alvo_name)) then
|
||||
--> frags
|
||||
if (alvo_flags and _bit_band (alvo_flags, 0x00000008) ~= 0 and _in_combat) then
|
||||
--> outsider death while in combat
|
||||
|
||||
if (not _current_combat.frags [alvo_name]) then
|
||||
_current_combat.frags [alvo_name] = 1
|
||||
else
|
||||
_current_combat.frags [alvo_name] = _current_combat.frags [alvo_name] + 1
|
||||
end
|
||||
|
||||
if (not _overall_combat.frags [alvo_name]) then
|
||||
_overall_combat.frags [alvo_name] = 1
|
||||
else
|
||||
_overall_combat.frags [alvo_name] = _overall_combat.frags [alvo_name] + 1
|
||||
end
|
||||
|
||||
_current_combat.frags_need_refresh = true
|
||||
_overall_combat.frags_need_refresh = true
|
||||
|
||||
local encounter_type = _detalhes.encounter.type
|
||||
if (encounter_type) then
|
||||
if (encounter_type == 1 or encounter_type == 2) then
|
||||
|
||||
local npcTable = _detalhes.encounter.data
|
||||
local serial = tonumber (alvo_serial:sub (6, 10), 16)
|
||||
|
||||
--vardump (npcTable)
|
||||
|
||||
if (npcTable [serial] ~= nil) then --> ~= default false
|
||||
|
||||
_detalhes.encounter.data [serial] = true
|
||||
|
||||
--> check if it's done
|
||||
local its_done = true
|
||||
for _, killed in pairs (_detalhes.encounter.data) do
|
||||
if (not killed) then
|
||||
its_done = false
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
--> combat finished
|
||||
if (its_done) then
|
||||
if (_detalhes.debug) then
|
||||
_detalhes:Msg ("(debug) combat finished: encounter objective is completed")
|
||||
end
|
||||
_detalhes:SairDoCombate()
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
--> player death
|
||||
elseif (not _UnitIsFeignDeath (alvo_name)) then
|
||||
if (
|
||||
--> player in your group
|
||||
_bit_band (alvo_flags, AFFILIATION_GROUP) ~= 0 and
|
||||
@@ -1837,6 +1891,7 @@
|
||||
token_list ["SPELL_INTERRUPT"] = nil
|
||||
-- dead
|
||||
token_list ["UNIT_DIED"] = nil
|
||||
token_list ["UNIT_DESTROYED"] = nil
|
||||
|
||||
end
|
||||
end
|
||||
@@ -1883,6 +1938,7 @@
|
||||
token_list ["SPELL_INTERRUPT"] = parser.interrupt
|
||||
-- dead
|
||||
token_list ["UNIT_DIED"] = parser.dead
|
||||
token_list ["UNIT_DESTROYED"] = parser.dead
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
+2
-1
@@ -248,7 +248,8 @@ function gump:NewLabel (parent, container, name, member, text, font, size, color
|
||||
end
|
||||
|
||||
if (color) then
|
||||
LabelObject.label:SetTextColor (unpack (color))
|
||||
local r, g, b, a = gump:ParseColors (color)
|
||||
LabelObject.label:SetTextColor (r, g, b, a)
|
||||
end
|
||||
|
||||
LabelObject.label:SetJustifyH ("LEFT")
|
||||
|
||||
@@ -18,7 +18,7 @@ do
|
||||
|
||||
--[[ DAMAGE ]]
|
||||
dano = 1, --> identifier
|
||||
[1] = 4, --> sub attributes
|
||||
[1] = 5, --> sub attributes
|
||||
|
||||
--[[ HEALING ]]
|
||||
cura = 2, --> identifier
|
||||
@@ -55,19 +55,22 @@ do
|
||||
dps = 2,
|
||||
damage_taken = 3,
|
||||
friendly_fire = 4,
|
||||
frags = 5,
|
||||
lista = { --[[ String Names ]]
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_DONE"],
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_DPS"],
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_TAKEN"],
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_FRIENDLYFIRE"]
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_FRIENDLYFIRE"],
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_FRAGS"]
|
||||
},
|
||||
icones = {
|
||||
{"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {0, .125, 0, 1}},
|
||||
{"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {.125, .25, 0, 1}},
|
||||
{"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {.25, .375, 0, 1}},
|
||||
{"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {.375, .5, 0, 1}}
|
||||
{"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {.375, .5, 0, 1}},
|
||||
{"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {.5, 0.625, 0, 1}}
|
||||
},
|
||||
internal = {"total", "last_dps", "damage_taken", "friendlyfire_total"}
|
||||
internal = {"total", "last_dps", "damage_taken", "friendlyfire_total", "total"}
|
||||
},
|
||||
|
||||
{
|
||||
|
||||
@@ -18,6 +18,18 @@ do
|
||||
end
|
||||
end
|
||||
|
||||
--> return the function for the boss
|
||||
function _detalhes:GetEncounterEnd (mapid, bossindex)
|
||||
local t = _detalhes.EncounterInformation [mapid] and _detalhes.EncounterInformation [mapid].encounters [bossindex]
|
||||
if (t) then
|
||||
local _end = t.combat_end
|
||||
if (_end) then
|
||||
return unpack (_end)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
--> return the function for the boss
|
||||
function _detalhes:GetBossFunction (mapid, bossindex)
|
||||
local func = _detalhes.EncounterInformation [mapid] and _detalhes.EncounterInformation [mapid].encounters [bossindex] and _detalhes.EncounterInformation [mapid].encounters [bossindex].func
|
||||
|
||||
+11
-3
@@ -80,11 +80,15 @@ function _detalhes:SaveDataOnLogout()
|
||||
--> precisa pegar o nome do plugin
|
||||
if (_detalhes.SoloTables.Mode) then
|
||||
_detalhes_database.SoloTables.Mode = _detalhes.SoloTables.Mode
|
||||
_detalhes_database.SoloTables.LastSelected = _detalhes.SoloTables.Plugins [_detalhes.SoloTables.Mode].real_name
|
||||
if (_detalhes.SoloTables.Plugins [_detalhes.SoloTables.Mode]) then
|
||||
_detalhes_database.SoloTables.LastSelected = _detalhes.SoloTables.Plugins [_detalhes.SoloTables.Mode].real_name
|
||||
end
|
||||
end
|
||||
if (_detalhes.RaidTables.Mode) then
|
||||
_detalhes_database.RaidTables.Mode = _detalhes.RaidTables.Mode
|
||||
_detalhes_database.RaidTables.LastSelected = _detalhes.RaidTables.Plugins [_detalhes.RaidTables.Mode].real_name
|
||||
if (_detalhes.RaidTables.Plugins [_detalhes.RaidTables.Mode]) then
|
||||
_detalhes_database.RaidTables.LastSelected = _detalhes.RaidTables.Plugins [_detalhes.RaidTables.Mode].real_name
|
||||
end
|
||||
end
|
||||
--> buff data
|
||||
_detalhes.Buffs:SaveBuffs()
|
||||
@@ -99,6 +103,7 @@ function _detalhes:SaveDataOnLogout()
|
||||
|
||||
_detalhes_global = _detalhes_global or {}
|
||||
_detalhes_global.savedStyles = _detalhes.savedStyles
|
||||
_detalhes_global.got_first_run = true
|
||||
--max segments
|
||||
_detalhes_global.segments_amount = _detalhes.segments_amount
|
||||
_detalhes_global.segments_amount_to_save = _detalhes.segments_amount_to_save
|
||||
@@ -286,8 +291,11 @@ end --]]
|
||||
|
||||
if (_detalhes_global) then
|
||||
--saved styles
|
||||
vardump (_detalhes_global.savedStyles)
|
||||
--vardump (_detalhes_global.savedStyles)
|
||||
_detalhes.savedStyles = _detalhes_global.savedStyles or _detalhes.savedStyles
|
||||
if (not _detalhes_global.got_first_run) then
|
||||
_detalhes.is_first_run = true
|
||||
end
|
||||
--max segments
|
||||
_detalhes.segments_amount = _detalhes_global.segments_amount or _detalhes.segments_amount
|
||||
_detalhes.segments_amount_to_save = _detalhes_global.segments_amount_to_save or _detalhes.segments_amount_to_save
|
||||
|
||||
+2
-3
@@ -143,8 +143,6 @@ function SlashCmdList.DETAILS (msg, editbox)
|
||||
elseif (msg == "alert") then
|
||||
|
||||
local instancia = _detalhes.tabela_instancias [1]
|
||||
--instancia:InstanceAlert ("Teste do alerta da instancia", [[Interface\Buttons\UI-GroupLoot-Pass-Down]], 5, clickfunc)
|
||||
--instancia:InstanceAlert ("Teste do alerta da instancia", [[Interface\Buttons\UI-GroupLoot-Pass-Down]], 5, clickfunc)
|
||||
local f = function() print ("teste") end
|
||||
instancia:InstanceAlert (Loc ["STRING_PLEASE_WAIT"], {[[Interface\COMMON\StreamCircle]], 22, 22, true}, 5, {f, "param1", "param2"})
|
||||
|
||||
@@ -161,7 +159,8 @@ function SlashCmdList.DETAILS (msg, editbox)
|
||||
|
||||
elseif (msg == "teste") then
|
||||
|
||||
print (time())
|
||||
local a, b = _detalhes:GetEncounterEnd (1098, 3)
|
||||
print (a, unpack (b))
|
||||
|
||||
elseif (msg == "yesno") then
|
||||
--_detalhes:Show()
|
||||
|
||||
@@ -62,7 +62,7 @@ function _detalhes:OpenOptionsWindow (instance)
|
||||
window.panicModeSlider.tooltip = "If enabled, when you are in a raid encounter\nand get dropped from the game, a disconnect for intance,\nDetails! immediately erase all segments\nmaking the disconnect process faster."
|
||||
|
||||
--------------- Animate Rows
|
||||
g:NewLabel (window, _, "$parentAnimateLabel", "animateLabel", "animate rows")
|
||||
g:NewLabel (window, _, "$parentAnimateLabel", "animateLabel", "dance bars")
|
||||
window.animateLabel:SetPoint (10, -80)
|
||||
--
|
||||
g:NewSwitch (window, _, "$parentAnimateSlider", "animateSlider", 60, 20, _, _, _detalhes.use_row_animations) -- ltext, rtext, defaultv
|
||||
@@ -122,7 +122,7 @@ function _detalhes:OpenOptionsWindow (instance)
|
||||
g:NewLabel (window, _, "$parentUpdateSpeedLabel", "updatespeedLabel", "update speed")
|
||||
window.updatespeedLabel:SetPoint (10, -125)
|
||||
--
|
||||
g:NewSlider (window, _, "$parentSliderUpdateSpeed", "updatespeedSlider", 160, 20, 0.3, 2, 0.1, _detalhes.update_speed, true) --parent, container, name, member, w, h, min, max, step, defaultv
|
||||
g:NewSlider (window, _, "$parentSliderUpdateSpeed", "updatespeedSlider", 160, 20, 0.3, 3, 0.1, _detalhes.update_speed, true) --parent, container, name, member, w, h, min, max, step, defaultv
|
||||
window.updatespeedSlider:SetPoint ("left", window.updatespeedLabel, "right")
|
||||
window.updatespeedSlider:SetThumbSize (50)
|
||||
window.updatespeedSlider.useDecimals = true
|
||||
@@ -130,7 +130,7 @@ function _detalhes:OpenOptionsWindow (instance)
|
||||
if (value < 1) then
|
||||
slider.amt:SetTextColor (1, value, 0)
|
||||
elseif (value > 1) then
|
||||
slider.amt:SetTextColor (-(value-2), 1, 0)
|
||||
slider.amt:SetTextColor (-(value-3), 1, 0)
|
||||
else
|
||||
slider.amt:SetTextColor (1, 1, 0)
|
||||
end
|
||||
|
||||
@@ -0,0 +1,590 @@
|
||||
local _detalhes = _G._detalhes
|
||||
local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" )
|
||||
|
||||
local g = _detalhes.gump
|
||||
|
||||
function _detalhes:OpenWelcomeWindow ()
|
||||
|
||||
GameCooltip:Close()
|
||||
local window = _G.DetailsWelcomeWindow
|
||||
|
||||
if (not window) then
|
||||
|
||||
local index = 1
|
||||
local pages = {}
|
||||
|
||||
window = CreateFrame ("frame", "DetailsWelcomeWindow", UIParent)
|
||||
window:SetPoint ("center", UIParent, "center", 0, 0)
|
||||
window:SetWidth (512)
|
||||
window:SetHeight (256)
|
||||
window:SetMovable (true)
|
||||
window:SetScript ("OnMouseDown", function() window:StartMoving() end)
|
||||
window:SetScript ("OnMouseUp", function() window:StopMovingOrSizing() end)
|
||||
|
||||
local background = window:CreateTexture (nil, "background")
|
||||
background:SetPoint ("topleft", window, "topleft")
|
||||
background:SetPoint ("bottomright", window, "bottomright")
|
||||
background:SetTexture ([[Interface\AddOns\Details\images\welcome]])
|
||||
|
||||
local rodape_bg = window:CreateTexture (nil, "artwork")
|
||||
rodape_bg:SetPoint ("bottomleft", window, "bottomleft", 11, 12)
|
||||
rodape_bg:SetPoint ("bottomright", window, "bottomright", -11, 12)
|
||||
rodape_bg:SetTexture ([[Interface\Tooltips\UI-Tooltip-Background]])
|
||||
rodape_bg:SetHeight (25)
|
||||
rodape_bg:SetVertexColor (0, 0, 0, 1)
|
||||
|
||||
local logotipo = window:CreateTexture (nil, "overlay")
|
||||
logotipo:SetPoint ("topleft", window, "topleft", 16, -20)
|
||||
logotipo:SetTexture ([[Interface\Addons\Details\images\logotipo]])
|
||||
logotipo:SetTexCoord (0.07421875, 0.73828125, 0.51953125, 0.890625)
|
||||
logotipo:SetWidth (186)
|
||||
logotipo:SetHeight (50)
|
||||
|
||||
local cancel = CreateFrame ("Button", nil, window)
|
||||
cancel:SetWidth (22)
|
||||
cancel:SetHeight (22)
|
||||
cancel:SetPoint ("bottomleft", window, "bottomleft", 12, 14)
|
||||
cancel:SetFrameLevel (window:GetFrameLevel()+1)
|
||||
cancel:SetPushedTexture ([[Interface\Buttons\UI-GroupLoot-Pass-Down]])
|
||||
cancel:SetHighlightTexture ([[Interface\Buttons\UI-GROUPLOOT-PASS-HIGHLIGHT]])
|
||||
cancel:SetNormalTexture ([[Interface\Buttons\UI-GroupLoot-Pass-Up]])
|
||||
cancel:SetScript ("OnClick", function() window:Hide() end)
|
||||
local cancelText = cancel:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
cancelText:SetPoint ("left", cancel, "right", 2, 0)
|
||||
cancelText:SetText ("Skip")
|
||||
|
||||
local forward = CreateFrame ("button", nil, window)
|
||||
forward:SetWidth (26)
|
||||
forward:SetHeight (26)
|
||||
forward:SetPoint ("bottomright", window, "bottomright", -14, 13)
|
||||
forward:SetFrameLevel (window:GetFrameLevel()+1)
|
||||
forward:SetPushedTexture ([[Interface\Buttons\UI-SpellbookIcon-NextPage-Down]])
|
||||
forward:SetHighlightTexture ([[Interface\Buttons\UI-SpellbookIcon-NextPage-Up]])
|
||||
forward:SetNormalTexture ([[Interface\Buttons\UI-SpellbookIcon-NextPage-Up]])
|
||||
forward:SetDisabledTexture ([[Interface\Buttons\UI-SpellbookIcon-NextPage-Disabled]])
|
||||
|
||||
local backward = CreateFrame ("button", nil, window)
|
||||
backward:SetWidth (26)
|
||||
backward:SetHeight (26)
|
||||
backward:SetPoint ("bottomright", window, "bottomright", -38, 13)
|
||||
backward:SetPushedTexture ([[Interface\Buttons\UI-SpellbookIcon-PrevPage-Down]])
|
||||
backward:SetHighlightTexture ([[Interface\Buttons\UI-SpellbookIcon-PrevPage-Up]])
|
||||
backward:SetNormalTexture ([[Interface\Buttons\UI-SpellbookIcon-PrevPage-Up]])
|
||||
backward:SetDisabledTexture ([[Interface\Buttons\UI-SpellbookIcon-PrevPage-Disabled]])
|
||||
|
||||
forward:SetScript ("OnClick", function()
|
||||
if (index < #pages) then
|
||||
for _, widget in ipairs (pages [index]) do
|
||||
widget:Hide()
|
||||
end
|
||||
|
||||
index = index + 1
|
||||
|
||||
for _, widget in ipairs (pages [index]) do
|
||||
widget:Show()
|
||||
end
|
||||
|
||||
if (index == #pages) then
|
||||
forward:Disable()
|
||||
end
|
||||
backward:Enable()
|
||||
end
|
||||
|
||||
|
||||
|
||||
end)
|
||||
|
||||
backward:SetScript ("OnClick", function()
|
||||
if (index > 1) then
|
||||
for _, widget in ipairs (pages [index]) do
|
||||
widget:Hide()
|
||||
end
|
||||
|
||||
index = index - 1
|
||||
|
||||
for _, widget in ipairs (pages [index]) do
|
||||
widget:Show()
|
||||
end
|
||||
|
||||
if (index == 1) then
|
||||
backward:Disable()
|
||||
end
|
||||
forward:Enable()
|
||||
end
|
||||
end)
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> page 1
|
||||
|
||||
--> introduction
|
||||
|
||||
local angel = window:CreateTexture (nil, "border")
|
||||
angel:SetPoint ("bottomright", window, "bottomright")
|
||||
angel:SetTexture ([[Interface\TUTORIALFRAME\UI-TUTORIALFRAME-SPIRITREZ]])
|
||||
angel:SetTexCoord (0.162109375, 0.591796875, 0, 1)
|
||||
angel:SetWidth (442)
|
||||
angel:SetHeight (256)
|
||||
angel:SetAlpha (.2)
|
||||
|
||||
local texto1 = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto1:SetPoint ("topleft", window, "topleft", 13, -150)
|
||||
texto1:SetText ("|cFFFFFFFFWelcome to Details! Quick Setup Wizard\n\n|rThis guide will help you with some important configurations.\nYou can skip this at any time just clicking on 'skip' button.")
|
||||
texto1:SetJustifyH ("left")
|
||||
|
||||
pages [#pages+1] = {texto1, angel}
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> page 2
|
||||
|
||||
--ampulheta:SetTexture ([[Interface\Timer\Challenges-Logo]])
|
||||
--[[
|
||||
local ampulheta = window:CreateTexture (nil, "overlay")
|
||||
|
||||
ampulheta:SetPoint ("topright", window, "topright", 60, 57)
|
||||
ampulheta:SetHeight (125*3)--125
|
||||
ampulheta:SetWidth (89*3)--82
|
||||
ampulheta:SetAlpha (.1)
|
||||
ampulheta:SetDesaturated (true)
|
||||
--]]
|
||||
|
||||
local ampulheta = window:CreateTexture (nil, "overlay")
|
||||
ampulheta:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]])
|
||||
ampulheta:SetPoint ("bottomright", window, "bottomright", -10, 10)
|
||||
ampulheta:SetHeight (125*3)--125
|
||||
ampulheta:SetWidth (89*3)--82
|
||||
ampulheta:SetAlpha (.1)
|
||||
ampulheta:SetTexCoord (1, 0, 0, 1)
|
||||
|
||||
g:NewLabel (window, _, "$parentChangeMind2Label", "changemind2Label", "if you change your mind, you can always modify again through options panel", "GameFontNormal", 9, "orange")
|
||||
window.changemind2Label:SetPoint ("center", window, "center")
|
||||
window.changemind2Label:SetPoint ("bottom", window, "bottom", 0, 19)
|
||||
window.changemind2Label.align = "|"
|
||||
|
||||
local texto2 = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto2:SetPoint ("topleft", window, "topleft", 20, -80)
|
||||
texto2:SetText ("Damage & Healing per Second Timing:")
|
||||
|
||||
local chronometer = CreateFrame ("CheckButton", "WelcomeWindowChronometer", window, "ChatConfigCheckButtonTemplate")
|
||||
chronometer:SetPoint ("topleft", window, "topleft", 40, -110)
|
||||
local continuous = CreateFrame ("CheckButton", "WelcomeWindowContinuous", window, "ChatConfigCheckButtonTemplate")
|
||||
continuous:SetPoint ("topleft", window, "topleft", 40, -160)
|
||||
|
||||
_G ["WelcomeWindowChronometerText"]:SetText ("Chronometer"..": ")
|
||||
_G ["WelcomeWindowContinuousText"]:SetText ("Continuous"..": ")
|
||||
|
||||
local chronometer_text = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
chronometer_text:SetText ("standard way of measuring time, the timer of each raid member is put on hold if his activity is ceased and back again to count when actor activity is resumed.")
|
||||
chronometer_text:SetWidth (360)
|
||||
chronometer_text:SetHeight (40)
|
||||
chronometer_text:SetJustifyH ("left")
|
||||
chronometer_text:SetJustifyV ("top")
|
||||
chronometer_text:SetTextColor (.8, .8, .8, 1)
|
||||
chronometer_text:SetPoint ("topleft", _G ["WelcomeWindowChronometerText"], "topright", 0, 0)
|
||||
|
||||
local continuous_text = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
continuous_text:SetText ("also know as 'effective time', this method uses the elapsed combat time for mensure the Dps and Hps of all raid members.")
|
||||
continuous_text:SetWidth (360)
|
||||
continuous_text:SetHeight (40)
|
||||
continuous_text:SetJustifyH ("left")
|
||||
continuous_text:SetJustifyV ("top")
|
||||
continuous_text:SetTextColor (.8, .8, .8, 1)
|
||||
continuous_text:SetPoint ("topleft", _G ["WelcomeWindowContinuousText"], "topright", 0, 0)
|
||||
|
||||
chronometer:SetHitRectInsets (0, -70, 0, 0)
|
||||
continuous:SetHitRectInsets (0, -70, 0, 0)
|
||||
|
||||
if (_detalhes.time_type == 1) then --> chronometer
|
||||
chronometer:SetChecked (true)
|
||||
continuous:SetChecked (false)
|
||||
elseif (_detalhes.time_type == 1) then --> continuous
|
||||
chronometer:SetChecked (false)
|
||||
continuous:SetChecked (true)
|
||||
end
|
||||
|
||||
chronometer:SetScript ("OnClick", function() continuous:SetChecked (false); _detalhes.time_type = 1 end)
|
||||
continuous:SetScript ("OnClick", function() chronometer:SetChecked (false); _detalhes.time_type = 2 end)
|
||||
|
||||
pages [#pages+1] = {ampulheta, texto2, chronometer, continuous, chronometer_text, continuous_text, window.changemind2Label}
|
||||
for _, widget in ipairs (pages[#pages]) do
|
||||
widget:Hide()
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> page 3
|
||||
|
||||
local mecanica = window:CreateTexture (nil, "overlay")
|
||||
mecanica:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]])
|
||||
mecanica:SetPoint ("bottomright", window, "bottomright", -10, 10)
|
||||
mecanica:SetHeight (125*3)--125
|
||||
mecanica:SetWidth (89*3)--82
|
||||
mecanica:SetAlpha (.1)
|
||||
mecanica:SetTexCoord (1, 0, 0, 1)
|
||||
|
||||
g:NewLabel (window, _, "$parentChangeMind3Label", "changemind3Label", "if you change your mind, you can always modify again through options panel", "GameFontNormal", 9, "orange")
|
||||
window.changemind3Label:SetPoint ("center", window, "center")
|
||||
window.changemind3Label:SetPoint ("bottom", window, "bottom", 0, 19)
|
||||
window.changemind3Label.align = "|"
|
||||
|
||||
local texto3 = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto3:SetPoint ("topleft", window, "topleft", 20, -80)
|
||||
texto3:SetText ("Reading combat data:")
|
||||
|
||||
local data_text = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
data_text:SetText ("Details! reads and calculate combat data in a very fast way, but if you are unconfortable with you compunter performance, you can drop some types of data which isn't important to you:")
|
||||
data_text:SetWidth (460)
|
||||
data_text:SetHeight (40)
|
||||
data_text:SetJustifyH ("left")
|
||||
data_text:SetJustifyV ("top")
|
||||
data_text:SetTextColor (1, 1, 1, 1)
|
||||
data_text:SetPoint ("topleft", window, "topleft", 30, -105)
|
||||
|
||||
local data_text2 = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
data_text2:SetText ("Tip: for a best experience, it's recommend leave all turned on.")
|
||||
data_text2:SetWidth (460)
|
||||
data_text2:SetHeight (40)
|
||||
data_text2:SetJustifyH ("left")
|
||||
data_text2:SetJustifyV ("top")
|
||||
data_text2:SetTextColor (1, 1, 1, 1)
|
||||
data_text2:SetPoint ("topleft", window, "topleft", 30, -201)
|
||||
|
||||
--------------- Captures
|
||||
g:NewImage (window, _, "$parentCaptureDamage", "damageCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]])
|
||||
window.damageCaptureImage:SetPoint (35, -155)
|
||||
window.damageCaptureImage:SetTexCoord (0, 0.125, 0, 1)
|
||||
|
||||
g:NewImage (window, _, "$parentCaptureHeal", "healCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]])
|
||||
window.healCaptureImage:SetPoint (170, -155)
|
||||
window.healCaptureImage:SetTexCoord (0.125, 0.25, 0, 1)
|
||||
|
||||
g:NewImage (window, _, "$parentCaptureEnergy", "energyCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]])
|
||||
window.energyCaptureImage:SetPoint (305, -155)
|
||||
window.energyCaptureImage:SetTexCoord (0.25, 0.375, 0, 1)
|
||||
|
||||
g:NewImage (window, _, "$parentCaptureMisc", "miscCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]])
|
||||
window.miscCaptureImage:SetPoint (35, -175)
|
||||
window.miscCaptureImage:SetTexCoord (0.375, 0.5, 0, 1)
|
||||
|
||||
g:NewImage (window, _, "$parentCaptureAura", "auraCaptureImage", 20, 20, [[Interface\AddOns\Details\images\atributos_captures]])
|
||||
window.auraCaptureImage:SetPoint (170, -175)
|
||||
window.auraCaptureImage:SetTexCoord (0.5, 0.625, 0, 1)
|
||||
|
||||
g:NewLabel (window, _, "$parentCaptureDamageLabel", "damageCaptureLabel", "Damage")
|
||||
window.damageCaptureLabel:SetPoint ("left", window.damageCaptureImage, "right", 2)
|
||||
g:NewLabel (window, _, "$parentCaptureDamageLabel", "healCaptureLabel", "Healing")
|
||||
window.healCaptureLabel:SetPoint ("left", window.healCaptureImage, "right", 2)
|
||||
g:NewLabel (window, _, "$parentCaptureDamageLabel", "energyCaptureLabel", "Energy")
|
||||
window.energyCaptureLabel:SetPoint ("left", window.energyCaptureImage, "right", 2)
|
||||
g:NewLabel (window, _, "$parentCaptureDamageLabel", "miscCaptureLabel", "Misc")
|
||||
window.miscCaptureLabel:SetPoint ("left", window.miscCaptureImage, "right", 2)
|
||||
g:NewLabel (window, _, "$parentCaptureDamageLabel", "auraCaptureLabel", "Auras")
|
||||
window.auraCaptureLabel:SetPoint ("left", window.auraCaptureImage, "right", 2)
|
||||
|
||||
local switch_icon_color = function (icon, on_off)
|
||||
icon:SetDesaturated (not on_off)
|
||||
end
|
||||
|
||||
g:NewSwitch (window, _, "$parentCaptureDamageSlider", "damageCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["damage"])
|
||||
window.damageCaptureSlider:SetPoint ("left", window.damageCaptureLabel, "right", 2)
|
||||
window.damageCaptureSlider.tooltip = "Pause or enable capture of:\n- damage done\n- damage per second\n- friendly fire\n- damage taken"
|
||||
window.damageCaptureSlider.OnSwitch = function (self, _, value)
|
||||
_detalhes:CaptureSet (value, "damage", true)
|
||||
switch_icon_color (window.damageCaptureImage, value)
|
||||
end
|
||||
switch_icon_color (window.damageCaptureImage, _detalhes.capture_real ["damage"])
|
||||
|
||||
g:NewSwitch (window, _, "$parentCaptureHealSlider", "healCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["heal"])
|
||||
window.healCaptureSlider:SetPoint ("left", window.healCaptureLabel, "right", 2)
|
||||
window.healCaptureSlider.tooltip = "Pause or enable capture of:\n- healing done (not absorbs)\n- healing per second\n- overheal\n- healing taken\n- enemy healed"
|
||||
window.healCaptureSlider.OnSwitch = function (self, _, value)
|
||||
_detalhes:CaptureSet (value, "heal", true)
|
||||
switch_icon_color (window.healCaptureImage, value)
|
||||
end
|
||||
switch_icon_color (window.healCaptureImage, _detalhes.capture_real ["heal"])
|
||||
|
||||
g:NewSwitch (window, _, "$parentCaptureEnergySlider", "energyCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["energy"])
|
||||
window.energyCaptureSlider:SetPoint ("left", window.energyCaptureLabel, "right", 2)
|
||||
window.energyCaptureSlider.tooltip = "Pause or enable capture of:\n- mana restored\n- rage generated\n- energy generated\n- runic power generated"
|
||||
window.energyCaptureSlider.OnSwitch = function (self, _, value)
|
||||
_detalhes:CaptureSet (value, "energy", true)
|
||||
switch_icon_color (window.energyCaptureImage, value)
|
||||
end
|
||||
switch_icon_color (window.energyCaptureImage, _detalhes.capture_real ["energy"])
|
||||
|
||||
g:NewSwitch (window, _, "$parentCaptureMiscSlider", "miscCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["miscdata"])
|
||||
window.miscCaptureSlider:SetPoint ("left", window.miscCaptureLabel, "right", 2)
|
||||
window.miscCaptureSlider.tooltip = "Pause or enable capture of:\n- cc breaks\n- dispell\n- interrupts\n- ress\n- deaths"
|
||||
window.miscCaptureSlider.OnSwitch = function (self, _, value)
|
||||
_detalhes:CaptureSet (value, "miscdata", true)
|
||||
switch_icon_color (window.miscCaptureImage, value)
|
||||
end
|
||||
switch_icon_color (window.miscCaptureImage, _detalhes.capture_real ["miscdata"])
|
||||
|
||||
g:NewSwitch (window, _, "$parentCaptureAuraSlider", "auraCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["aura"])
|
||||
window.auraCaptureSlider:SetPoint ("left", window.auraCaptureLabel, "right", 2)
|
||||
window.auraCaptureSlider.tooltip = "Pause or enable capture of:\n- buffs and debufs\n- absorbs (heal)\n- cooldowns\n- damage prevented"
|
||||
window.auraCaptureSlider.OnSwitch = function (self, _, value)
|
||||
_detalhes:CaptureSet (value, "aura", true)
|
||||
switch_icon_color (window.auraCaptureImage, value)
|
||||
end
|
||||
switch_icon_color (window.auraCaptureImage, _detalhes.capture_real ["aura"])
|
||||
|
||||
pages [#pages+1] = {mecanica, texto3, data_text, window.damageCaptureImage, window.healCaptureImage, window.energyCaptureImage, window.miscCaptureImage,
|
||||
window.auraCaptureImage, window.damageCaptureSlider, window.healCaptureSlider, window.energyCaptureSlider, window.miscCaptureSlider, window.auraCaptureSlider,
|
||||
window.damageCaptureLabel, window.healCaptureLabel, window.energyCaptureLabel, window.miscCaptureLabel, window.auraCaptureLabel, data_text2, window.changemind3Label}
|
||||
|
||||
for _, widget in ipairs (pages[#pages]) do
|
||||
widget:Hide()
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> page 4
|
||||
|
||||
local bg = window:CreateTexture (nil, "overlay")
|
||||
bg:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]])
|
||||
bg:SetPoint ("bottomright", window, "bottomright", -10, 10)
|
||||
bg:SetHeight (125*3)--125
|
||||
bg:SetWidth (89*3)--82
|
||||
bg:SetAlpha (.1)
|
||||
bg:SetTexCoord (1, 0, 0, 1)
|
||||
|
||||
g:NewLabel (window, _, "$parentChangeMind4Label", "changemind4Label", "if you change your mind, you can always modify again through options panel", "GameFontNormal", 9, "orange")
|
||||
window.changemind4Label:SetPoint ("center", window, "center")
|
||||
window.changemind4Label:SetPoint ("bottom", window, "bottom", 0, 19)
|
||||
window.changemind4Label.align = "|"
|
||||
|
||||
local texto4 = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto4:SetPoint ("topleft", window, "topleft", 20, -80)
|
||||
texto4:SetText ("Interface Tweaks:")
|
||||
|
||||
local interval_text = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
interval_text:SetText ("You can also adjust the interval (in seconds) between window updates, high values may save some performance.")
|
||||
interval_text:SetWidth (460)
|
||||
interval_text:SetHeight (40)
|
||||
interval_text:SetJustifyH ("left")
|
||||
interval_text:SetJustifyV ("top")
|
||||
interval_text:SetTextColor (1, 1, 1, 1)
|
||||
interval_text:SetPoint ("topleft", window, "topleft", 30, -110)
|
||||
|
||||
local dance_text = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
dance_text:SetText ("Keeping 'Dance Bars' disabled may help save performance.")
|
||||
dance_text:SetWidth (460)
|
||||
dance_text:SetHeight (40)
|
||||
dance_text:SetJustifyH ("left")
|
||||
dance_text:SetJustifyV ("top")
|
||||
dance_text:SetTextColor (1, 1, 1, 1)
|
||||
dance_text:SetPoint ("topleft", window, "topleft", 30, -170)
|
||||
|
||||
--------------- Update Speed
|
||||
g:NewLabel (window, _, "$parentUpdateSpeedLabel", "updatespeedLabel", "Update Speed")
|
||||
window.updatespeedLabel:SetPoint (31, -150)
|
||||
--
|
||||
g:NewSlider (window, _, "$parentSliderUpdateSpeed", "updatespeedSlider", 160, 20, 0.3, 3, 0.1, _detalhes.update_speed, true) --parent, container, name, member, w, h, min, max, step, defaultv
|
||||
window.updatespeedSlider:SetPoint ("left", window.updatespeedLabel, "right", 2, 0)
|
||||
window.updatespeedSlider:SetThumbSize (50)
|
||||
window.updatespeedSlider.useDecimals = true
|
||||
local updateColor = function (slider, value)
|
||||
if (value < 1) then
|
||||
slider.amt:SetTextColor (1, value, 0)
|
||||
elseif (value > 1) then
|
||||
slider.amt:SetTextColor (-(value-3), 1, 0)
|
||||
else
|
||||
slider.amt:SetTextColor (1, 1, 0)
|
||||
end
|
||||
end
|
||||
window.updatespeedSlider:SetHook ("OnValueChange", function (self, _, amount)
|
||||
_detalhes:CancelTimer (_detalhes.atualizador)
|
||||
_detalhes.update_speed = amount
|
||||
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", _detalhes.update_speed, -1)
|
||||
updateColor (self, amount)
|
||||
end)
|
||||
updateColor (window.updatespeedSlider, _detalhes.update_speed)
|
||||
|
||||
window.updatespeedSlider.tooltip = "delay between each update,\ncpu usage may |cFFFF9900increase|r with low values\nand |cFF00FF00slight reduce|r with high values."
|
||||
|
||||
--------------- Animate Rows
|
||||
g:NewLabel (window, _, "$parentAnimateLabel", "animateLabel", "Dance Bars")
|
||||
window.animateLabel:SetPoint (31, -195)
|
||||
--
|
||||
g:NewSwitch (window, _, "$parentAnimateSlider", "animateSlider", 60, 20, _, _, _detalhes.use_row_animations) -- ltext, rtext, defaultv
|
||||
window.animateSlider:SetPoint ("left",window.animateLabel, "right", 2, 0)
|
||||
window.animateSlider.OnSwitch = function (self, _, value) --> slider, fixedValue, sliderValue (false, true)
|
||||
_detalhes.use_row_animations = value
|
||||
end
|
||||
window.animateSlider.tooltip = "dancing bars is a feature which create animations\nto the left and right directions for all bars.\ncpu usage may |cFFFF9900slight increase|r with this turned on."
|
||||
|
||||
pages [#pages+1] = {bg, texto4, interval_text, dance_text, window.updatespeedLabel, window.updatespeedSlider, window.animateLabel, window.animateSlider, window.changemind4Label}
|
||||
|
||||
for _, widget in ipairs (pages[#pages]) do
|
||||
widget:Hide()
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> page 5
|
||||
|
||||
local bg6 = window:CreateTexture (nil, "overlay")
|
||||
bg6:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]])
|
||||
bg6:SetPoint ("bottomright", window, "bottomright", -10, 10)
|
||||
bg6:SetHeight (125*3)--125
|
||||
bg6:SetWidth (89*3)--82
|
||||
bg6:SetAlpha (.1)
|
||||
bg6:SetTexCoord (1, 0, 0, 1)
|
||||
|
||||
local texto5 = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto5:SetPoint ("topleft", window, "topleft", 20, -80)
|
||||
texto5:SetText ("Using the Interface: Stretch")
|
||||
|
||||
local texto_stretch = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto_stretch:SetPoint ("topleft", window, "topleft", 181, -105)
|
||||
texto_stretch:SetText ("- When you have the mouse over a Details! window, a |cFFFFFF00small hook|r will appear over the instance button. |cFFFFFF00Click, hold and pull|r up to |cFFFFFF00stretch|r the window, releasing the mouse click, the window |cFFFFFF00back to original|r size.\n\n- If you miss a |cFFFFBB00scroll bar|r, you can active it on the options panel.")
|
||||
texto_stretch:SetWidth (310)
|
||||
texto_stretch:SetHeight (100)
|
||||
texto_stretch:SetJustifyH ("left")
|
||||
texto_stretch:SetJustifyV ("top")
|
||||
texto_stretch:SetTextColor (1, 1, 1, 1)
|
||||
|
||||
local stretch_image = window:CreateTexture (nil, "overlay")
|
||||
stretch_image:SetTexture ([[Interface\Addons\Details\images\icons]])
|
||||
stretch_image:SetPoint ("right", texto_stretch, "left", -12, 0)
|
||||
stretch_image:SetWidth (144)
|
||||
stretch_image:SetHeight (61)
|
||||
stretch_image:SetTexCoord (0.716796875, 1, 0.876953125, 1)
|
||||
|
||||
pages [#pages+1] = {bg6, texto5, stretch_image, texto_stretch}
|
||||
|
||||
for _, widget in ipairs (pages[#pages]) do
|
||||
widget:Hide()
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> page 6
|
||||
|
||||
local bg6 = window:CreateTexture (nil, "overlay")
|
||||
bg6:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]])
|
||||
bg6:SetPoint ("bottomright", window, "bottomright", -10, 10)
|
||||
bg6:SetHeight (125*3)--125
|
||||
bg6:SetWidth (89*3)--82
|
||||
bg6:SetAlpha (.1)
|
||||
bg6:SetTexCoord (1, 0, 0, 1)
|
||||
|
||||
local texto6 = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto6:SetPoint ("topleft", window, "topleft", 20, -80)
|
||||
texto6:SetText ("Using the Interface: Instance Button")
|
||||
|
||||
local texto_instance_button = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto_instance_button:SetPoint ("topleft", window, "topleft", 25, -105)
|
||||
texto_instance_button:SetText ("Instance button basically do three things:\n\n- show |cFFFFFF00what instance|r is it through the |cFFFFFF00#number|r,\n- open a |cFFFFFF00new instance|r window when clicked.\n- show a menu with |cFFFFFF00closed instances|r which can be reopen at any one.")
|
||||
texto_instance_button:SetWidth (270)
|
||||
texto_instance_button:SetHeight (100)
|
||||
texto_instance_button:SetJustifyH ("left")
|
||||
texto_instance_button:SetJustifyV ("top")
|
||||
texto_instance_button:SetTextColor (1, 1, 1, 1)
|
||||
|
||||
local instance_button_image = window:CreateTexture (nil, "overlay")
|
||||
instance_button_image:SetTexture ([[Interface\Addons\Details\images\icons]])
|
||||
instance_button_image:SetPoint ("topright", window, "topright", -12, -70)
|
||||
instance_button_image:SetWidth (204)
|
||||
instance_button_image:SetHeight (141)
|
||||
instance_button_image:SetTexCoord (0.31640625, 0.71484375, 0.724609375, 1)
|
||||
|
||||
pages [#pages+1] = {bg6, texto6, instance_button_image, texto_instance_button}
|
||||
|
||||
for _, widget in ipairs (pages[#pages]) do
|
||||
widget:Hide()
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> page 7
|
||||
|
||||
local bg7 = window:CreateTexture (nil, "overlay")
|
||||
bg7:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]])
|
||||
bg7:SetPoint ("bottomright", window, "bottomright", -10, 10)
|
||||
bg7:SetHeight (125*3)--125
|
||||
bg7:SetWidth (89*3)--82
|
||||
bg7:SetAlpha (.1)
|
||||
bg7:SetTexCoord (1, 0, 0, 1)
|
||||
|
||||
local texto7 = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto7:SetPoint ("topleft", window, "topleft", 20, -80)
|
||||
texto7:SetText ("Using the Interface: Fast Switch Panel (shortcuts)")
|
||||
|
||||
local texto_shortcut = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto_shortcut:SetPoint ("topleft", window, "topleft", 25, -110)
|
||||
texto_shortcut:SetText ("- Right clicking |cFFFFFF00over a row|r or in the background opens the |cFFFFFF00shortcut menu|r.\n- You can choose which |cFFFFFF00attribute|r the shortcut will have by |cFFFFFF00right clicking|r his icon.\n- Left click |cFFFFFF00selects|r the shortcut attribute and |cFFFFFF00display|r it on the instance\n- Right click anywhere |cFFFFFF00closes|r the switch panel.")
|
||||
texto_shortcut:SetWidth (320)
|
||||
texto_shortcut:SetHeight (90)
|
||||
texto_shortcut:SetJustifyH ("left")
|
||||
texto_shortcut:SetJustifyV ("top")
|
||||
texto_shortcut:SetTextColor (1, 1, 1, 1)
|
||||
|
||||
local shortcut_image1 = window:CreateTexture (nil, "overlay")
|
||||
shortcut_image1:SetTexture ([[Interface\Addons\Details\images\icons]])
|
||||
shortcut_image1:SetPoint ("topright", window, "topright", -12, -20)
|
||||
shortcut_image1:SetWidth (160)
|
||||
shortcut_image1:SetHeight (91)
|
||||
shortcut_image1:SetTexCoord (0, 0.31250, 0.82421875, 1)
|
||||
|
||||
local shortcut_image2 = window:CreateTexture (nil, "overlay")
|
||||
shortcut_image2:SetTexture ([[Interface\Addons\Details\images\icons]])
|
||||
shortcut_image2:SetPoint ("topright", window, "topright", -12, -110)
|
||||
shortcut_image2:SetWidth (160)
|
||||
shortcut_image2:SetHeight (106)
|
||||
shortcut_image2:SetTexCoord (0, 0.31250, 0.59375, 0.80078125)
|
||||
|
||||
pages [#pages+1] = {bg7, texto7, shortcut_image1, shortcut_image2, texto_shortcut}
|
||||
|
||||
for _, widget in ipairs (pages[#pages]) do
|
||||
widget:Hide()
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> page 8
|
||||
|
||||
local bg8 = window:CreateTexture (nil, "overlay")
|
||||
bg8:SetTexture ([[Interface\MainMenuBar\UI-MainMenuBar-EndCap-Human]])
|
||||
bg8:SetPoint ("bottomright", window, "bottomright", -10, 10)
|
||||
bg8:SetHeight (125*3)--125
|
||||
bg8:SetWidth (89*3)--82
|
||||
bg8:SetAlpha (.1)
|
||||
bg8:SetTexCoord (1, 0, 0, 1)
|
||||
|
||||
local texto8 = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto8:SetPoint ("topleft", window, "topleft", 20, -80)
|
||||
texto8:SetText ("Ready to Raid!")
|
||||
|
||||
local texto = window:CreateFontString (nil, "overlay", "GameFontNormal")
|
||||
texto:SetPoint ("topleft", window, "topleft", 25, -110)
|
||||
texto:SetText ("Thank you for choosing Details!\n\nFeel free to always send feedbacks and bug reports to us (|cFFBBFFFFuse the fifth button a blue one|r), we appreciate.")
|
||||
texto:SetWidth (410)
|
||||
texto:SetHeight (90)
|
||||
texto:SetJustifyH ("left")
|
||||
texto:SetJustifyV ("top")
|
||||
texto:SetTextColor (1, 1, 1, 1)
|
||||
|
||||
local report_image1 = window:CreateTexture (nil, "overlay")
|
||||
report_image1:SetTexture ([[Interface\Addons\Details\images\icons]])
|
||||
report_image1:SetPoint ("topright", window, "topright", -30, -97)
|
||||
report_image1:SetWidth (144)
|
||||
report_image1:SetHeight (30)
|
||||
report_image1:SetTexCoord (0.71875, 1, 0.81640625, 0.875)
|
||||
|
||||
pages [#pages+1] = {bg8, texto8, texto, report_image1}
|
||||
|
||||
for _, widget in ipairs (pages[#pages]) do
|
||||
widget:Hide()
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--[[
|
||||
forward:Click()
|
||||
forward:Click()
|
||||
forward:Click()
|
||||
forward:Click()
|
||||
forward:Click()
|
||||
forward:Click()
|
||||
forward:Click()
|
||||
--]]
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -123,7 +123,7 @@ if not Loc then return end
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_DPS"] = "Damage Per Second"
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_TAKEN"] = "Damage Taken"
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_FRIENDLYFIRE"] = "Friendly Fire"
|
||||
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_FRAGS"] = "Frags"
|
||||
|
||||
Loc ["STRING_ATTRIBUTE_HEAL"] = "Heal"
|
||||
Loc ["STRING_ATTRIBUTE_HEAL_DONE"] = "Healing Done"
|
||||
|
||||
@@ -121,6 +121,7 @@ if not Loc then return end
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_DPS"] = "Dano por Segundo"
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_TAKEN"] = "Dano Recebido"
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_FRIENDLYFIRE"] = "Fogo Amigo"
|
||||
Loc ["STRING_ATTRIBUTE_DAMAGE_FRAGS"] = "Inimigos Abatidos"
|
||||
|
||||
Loc ["STRING_ATTRIBUTE_HEAL"] = "Cura"
|
||||
Loc ["STRING_ATTRIBUTE_HEAL_DONE"] = "Cura Feita"
|
||||
@@ -234,6 +235,7 @@ if not Loc then return end
|
||||
Loc ["STRING_REPORT_PREVIOUSFIGHTS"] = "lutas anteriores"
|
||||
Loc ["STRING_REPORT_INVALIDTARGET"] = "O alvo nao pode ser encontrado"
|
||||
Loc ["STRING_NOCLOSED_INSTANCES"] = "Nao ha instancias fechadas,\nclique para abrir uma nova."
|
||||
--Loc ["STRING_REPORT_FRAG"] =
|
||||
|
||||
--> report frame
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details DamageRank (plugin)
|
||||
## Notes: Plugin for Details
|
||||
## SavedVariablesPerCharacter: _detalhes_databaseDmgRank
|
||||
|
||||
@@ -229,7 +229,7 @@ end
|
||||
|
||||
elseif (event[3]) then
|
||||
|
||||
local habilidade_school = skillTable [event [2]] --> pegou a tabela com os hex --> aqui 4
|
||||
local habilidade_school = skillTable [event [2]] --> pegou a tabela com os hex
|
||||
local _school = ""
|
||||
|
||||
if (habilidade_school) then
|
||||
@@ -656,7 +656,9 @@ function EncounterDetails:OpenAndRefresh()
|
||||
end
|
||||
|
||||
barra.icone:SetTexture ("Interface\\AddOns\\Details\\images\\classes_small")
|
||||
barra.icone:SetTexCoord (_unpack (CLASS_ICON_TCOORDS [jogador.classe]))
|
||||
if (CLASS_ICON_TCOORDS [jogador.classe]) then
|
||||
barra.icone:SetTexCoord (_unpack (CLASS_ICON_TCOORDS [jogador.classe]))
|
||||
end
|
||||
|
||||
barra:Show()
|
||||
quantidade = quantidade + 1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details Encounter (plugin)
|
||||
## Notes: Plugin for Details
|
||||
## SavedVariablesPerCharacter: _detalhes_databaseEncounterDetails
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details Error Report
|
||||
## Notes: This plugin adds a button to Details tooltip where you can report bugs directly to Details Developers.
|
||||
## RequiredDeps: Details
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
## Interface: 50400
|
||||
## Title: Details: Siege of Orgrimmar
|
||||
## Notes: Plugin for Details
|
||||
## RequiredDeps: Details
|
||||
|
||||
enUS.lua
|
||||
ptBR.lua
|
||||
|
||||
SiegeOfOrgrimmar.lua
|
||||
@@ -0,0 +1,137 @@
|
||||
--- **AceLocale-3.0** manages localization in addons, allowing for multiple locale to be registered with fallback to the base locale for untranslated strings.
|
||||
-- @class file
|
||||
-- @name AceLocale-3.0
|
||||
-- @release $Id: AceLocale-3.0.lua 1035 2011-07-09 03:20:13Z kaelten $
|
||||
local MAJOR,MINOR = "AceLocale-3.0", 6
|
||||
|
||||
local AceLocale, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
|
||||
|
||||
if not AceLocale then return end -- no upgrade needed
|
||||
|
||||
-- Lua APIs
|
||||
local assert, tostring, error = assert, tostring, error
|
||||
local getmetatable, setmetatable, rawset, rawget = getmetatable, setmetatable, rawset, rawget
|
||||
|
||||
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
||||
-- List them here for Mikk's FindGlobals script
|
||||
-- GLOBALS: GAME_LOCALE, geterrorhandler
|
||||
|
||||
local gameLocale = GetLocale()
|
||||
if gameLocale == "enGB" then
|
||||
gameLocale = "enUS"
|
||||
end
|
||||
|
||||
AceLocale.apps = AceLocale.apps or {} -- array of ["AppName"]=localetableref
|
||||
AceLocale.appnames = AceLocale.appnames or {} -- array of [localetableref]="AppName"
|
||||
|
||||
-- This metatable is used on all tables returned from GetLocale
|
||||
local readmeta = {
|
||||
__index = function(self, key) -- requesting totally unknown entries: fire off a nonbreaking error and return key
|
||||
rawset(self, key, key) -- only need to see the warning once, really
|
||||
geterrorhandler()(MAJOR..": "..tostring(AceLocale.appnames[self])..": Missing entry for '"..tostring(key).."'")
|
||||
return key
|
||||
end
|
||||
}
|
||||
|
||||
-- This metatable is used on all tables returned from GetLocale if the silent flag is true, it does not issue a warning on unknown keys
|
||||
local readmetasilent = {
|
||||
__index = function(self, key) -- requesting totally unknown entries: return key
|
||||
rawset(self, key, key) -- only need to invoke this function once
|
||||
return key
|
||||
end
|
||||
}
|
||||
|
||||
-- Remember the locale table being registered right now (it gets set by :NewLocale())
|
||||
-- NOTE: Do never try to register 2 locale tables at once and mix their definition.
|
||||
local registering
|
||||
|
||||
-- local assert false function
|
||||
local assertfalse = function() assert(false) end
|
||||
|
||||
-- This metatable proxy is used when registering nondefault locales
|
||||
local writeproxy = setmetatable({}, {
|
||||
__newindex = function(self, key, value)
|
||||
rawset(registering, key, value == true and key or value) -- assigning values: replace 'true' with key string
|
||||
end,
|
||||
__index = assertfalse
|
||||
})
|
||||
|
||||
-- This metatable proxy is used when registering the default locale.
|
||||
-- It refuses to overwrite existing values
|
||||
-- Reason 1: Allows loading locales in any order
|
||||
-- Reason 2: If 2 modules have the same string, but only the first one to be
|
||||
-- loaded has a translation for the current locale, the translation
|
||||
-- doesn't get overwritten.
|
||||
--
|
||||
local writedefaultproxy = setmetatable({}, {
|
||||
__newindex = function(self, key, value)
|
||||
if not rawget(registering, key) then
|
||||
rawset(registering, key, value == true and key or value)
|
||||
end
|
||||
end,
|
||||
__index = assertfalse
|
||||
})
|
||||
|
||||
--- Register a new locale (or extend an existing one) for the specified application.
|
||||
-- :NewLocale will return a table you can fill your locale into, or nil if the locale isn't needed for the players
|
||||
-- game locale.
|
||||
-- @paramsig application, locale[, isDefault[, silent]]
|
||||
-- @param application Unique name of addon / module
|
||||
-- @param locale Name of the locale to register, e.g. "enUS", "deDE", etc.
|
||||
-- @param isDefault If this is the default locale being registered (your addon is written in this language, generally enUS)
|
||||
-- @param silent If true, the locale will not issue warnings for missing keys. Must be set on the first locale registered. If set to "raw", nils will be returned for unknown keys (no metatable used).
|
||||
-- @usage
|
||||
-- -- enUS.lua
|
||||
-- local L = LibStub("AceLocale-3.0"):NewLocale("TestLocale", "enUS", true)
|
||||
-- L["string1"] = true
|
||||
--
|
||||
-- -- deDE.lua
|
||||
-- local L = LibStub("AceLocale-3.0"):NewLocale("TestLocale", "deDE")
|
||||
-- if not L then return end
|
||||
-- L["string1"] = "Zeichenkette1"
|
||||
-- @return Locale Table to add localizations to, or nil if the current locale is not required.
|
||||
function AceLocale:NewLocale(application, locale, isDefault, silent)
|
||||
|
||||
-- GAME_LOCALE allows translators to test translations of addons without having that wow client installed
|
||||
local gameLocale = GAME_LOCALE or gameLocale
|
||||
|
||||
local app = AceLocale.apps[application]
|
||||
|
||||
if silent and app and getmetatable(app) ~= readmetasilent then
|
||||
geterrorhandler()("Usage: NewLocale(application, locale[, isDefault[, silent]]): 'silent' must be specified for the first locale registered")
|
||||
end
|
||||
|
||||
if not app then
|
||||
if silent=="raw" then
|
||||
app = {}
|
||||
else
|
||||
app = setmetatable({}, silent and readmetasilent or readmeta)
|
||||
end
|
||||
AceLocale.apps[application] = app
|
||||
AceLocale.appnames[app] = application
|
||||
end
|
||||
|
||||
if locale ~= gameLocale and not isDefault then
|
||||
return -- nop, we don't need these translations
|
||||
end
|
||||
|
||||
registering = app -- remember globally for writeproxy and writedefaultproxy
|
||||
|
||||
if isDefault then
|
||||
return writedefaultproxy
|
||||
end
|
||||
|
||||
return writeproxy
|
||||
end
|
||||
|
||||
--- Returns localizations for the current locale (or default locale if translations are missing).
|
||||
-- Errors if nothing is registered (spank developer, not just a missing translation)
|
||||
-- @param application Unique name of addon / module
|
||||
-- @param silent If true, the locale is optional, silently return nil if it's not found (defaults to false, optional)
|
||||
-- @return The locale table for the current language.
|
||||
function AceLocale:GetLocale(application, silent)
|
||||
if not silent and not AceLocale.apps[application] then
|
||||
error("Usage: GetLocale(application[, silent]): 'application' - No locales registered for '"..tostring(application).."'", 2)
|
||||
end
|
||||
return AceLocale.apps[application]
|
||||
end
|
||||
@@ -0,0 +1,4 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||
..\FrameXML\UI.xsd">
|
||||
<Script file="AceLocale-3.0.lua"/>
|
||||
</Ui>
|
||||
@@ -0,0 +1,51 @@
|
||||
-- $Id: LibStub.lua 76 2007-09-03 01:50:17Z mikk $
|
||||
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
|
||||
-- LibStub is hereby placed in the Public Domain
|
||||
-- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
|
||||
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
|
||||
local LibStub = _G[LIBSTUB_MAJOR]
|
||||
|
||||
-- Check to see is this version of the stub is obsolete
|
||||
if not LibStub or LibStub.minor < LIBSTUB_MINOR then
|
||||
LibStub = LibStub or {libs = {}, minors = {} }
|
||||
_G[LIBSTUB_MAJOR] = LibStub
|
||||
LibStub.minor = LIBSTUB_MINOR
|
||||
|
||||
-- LibStub:NewLibrary(major, minor)
|
||||
-- major (string) - the major version of the library
|
||||
-- minor (string or number ) - the minor version of the library
|
||||
--
|
||||
-- returns nil if a newer or same version of the lib is already present
|
||||
-- returns empty library object or old library object if upgrade is needed
|
||||
function LibStub:NewLibrary(major, minor)
|
||||
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
|
||||
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
|
||||
|
||||
local oldminor = self.minors[major]
|
||||
if oldminor and oldminor >= minor then return nil end
|
||||
self.minors[major], self.libs[major] = minor, self.libs[major] or {}
|
||||
return self.libs[major], oldminor
|
||||
end
|
||||
|
||||
-- LibStub:GetLibrary(major, [silent])
|
||||
-- major (string) - the major version of the library
|
||||
-- silent (boolean) - if true, library is optional, silently return nil if its not found
|
||||
--
|
||||
-- throws an error if the library can not be found (except silent is set)
|
||||
-- returns the library object if found
|
||||
function LibStub:GetLibrary(major, silent)
|
||||
if not self.libs[major] and not silent then
|
||||
error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
|
||||
end
|
||||
return self.libs[major], self.minors[major]
|
||||
end
|
||||
|
||||
-- LibStub:IterateLibraries()
|
||||
--
|
||||
-- Returns an iterator for the currently registered libraries
|
||||
function LibStub:IterateLibraries()
|
||||
return pairs(self.libs)
|
||||
end
|
||||
|
||||
setmetatable(LibStub, { __call = LibStub.GetLibrary })
|
||||
end
|
||||
@@ -0,0 +1,13 @@
|
||||
## Interface: 40200
|
||||
## Title: Lib: LibStub
|
||||
## Notes: Universal Library Stub
|
||||
## Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel
|
||||
## X-Website: http://www.wowace.com/addons/libstub/
|
||||
## X-Category: Library
|
||||
## X-License: Public Domain
|
||||
## X-Curse-Packaged-Version: r95
|
||||
## X-Curse-Project-Name: LibStub
|
||||
## X-Curse-Project-ID: libstub
|
||||
## X-Curse-Repository-ID: wow/libstub/mainline
|
||||
|
||||
LibStub.lua
|
||||
@@ -0,0 +1,41 @@
|
||||
debugstack = debug.traceback
|
||||
strmatch = string.match
|
||||
|
||||
loadfile("../LibStub.lua")()
|
||||
|
||||
local lib, oldMinor = LibStub:NewLibrary("Pants", 1) -- make a new thingy
|
||||
assert(lib) -- should return the library table
|
||||
assert(not oldMinor) -- should not return the old minor, since it didn't exist
|
||||
|
||||
-- the following is to create data and then be able to check if the same data exists after the fact
|
||||
function lib:MyMethod()
|
||||
end
|
||||
local MyMethod = lib.MyMethod
|
||||
lib.MyTable = {}
|
||||
local MyTable = lib.MyTable
|
||||
|
||||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", 1) -- try to register a library with the same version, should silently fail
|
||||
assert(not newLib) -- should not return since out of date
|
||||
|
||||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", 0) -- try to register a library with a previous, should silently fail
|
||||
assert(not newLib) -- should not return since out of date
|
||||
|
||||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", 2) -- register a new version
|
||||
assert(newLib) -- library table
|
||||
assert(rawequal(newLib, lib)) -- should be the same reference as the previous
|
||||
assert(newOldMinor == 1) -- should return the minor version of the previous version
|
||||
|
||||
assert(rawequal(lib.MyMethod, MyMethod)) -- verify that values were saved
|
||||
assert(rawequal(lib.MyTable, MyTable)) -- verify that values were saved
|
||||
|
||||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", "Blah 3 Blah") -- register a new version with a string minor version (instead of a number)
|
||||
assert(newLib) -- library table
|
||||
assert(newOldMinor == 2) -- previous version was 2
|
||||
|
||||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", "Blah 4 and please ignore 15 Blah") -- register a new version with a string minor version (instead of a number)
|
||||
assert(newLib)
|
||||
assert(newOldMinor == 3) -- previous version was 3 (even though it gave a string)
|
||||
|
||||
local newLib, newOldMinor = LibStub:NewLibrary("Pants", 5) -- register a new library, using a normal number instead of a string
|
||||
assert(newLib)
|
||||
assert(newOldMinor == 4) -- previous version was 4 (even though it gave a string)
|
||||
@@ -0,0 +1,27 @@
|
||||
debugstack = debug.traceback
|
||||
strmatch = string.match
|
||||
|
||||
loadfile("../LibStub.lua")()
|
||||
|
||||
for major, library in LibStub:IterateLibraries() do
|
||||
-- check that MyLib doesn't exist yet, by iterating through all the libraries
|
||||
assert(major ~= "MyLib")
|
||||
end
|
||||
|
||||
assert(not LibStub:GetLibrary("MyLib", true)) -- check that MyLib doesn't exist yet by direct checking
|
||||
assert(not pcall(LibStub.GetLibrary, LibStub, "MyLib")) -- don't silently fail, thus it should raise an error.
|
||||
local lib = LibStub:NewLibrary("MyLib", 1) -- create the lib
|
||||
assert(lib) -- check it exists
|
||||
assert(rawequal(LibStub:GetLibrary("MyLib"), lib)) -- verify that :GetLibrary("MyLib") properly equals the lib reference
|
||||
|
||||
assert(LibStub:NewLibrary("MyLib", 2)) -- create a new version
|
||||
|
||||
local count=0
|
||||
for major, library in LibStub:IterateLibraries() do
|
||||
-- check that MyLib exists somewhere in the libraries, by iterating through all the libraries
|
||||
if major == "MyLib" then -- we found it!
|
||||
count = count +1
|
||||
assert(rawequal(library, lib)) -- verify that the references are equal
|
||||
end
|
||||
end
|
||||
assert(count == 1) -- verify that we actually found it, and only once
|
||||
@@ -0,0 +1,14 @@
|
||||
debugstack = debug.traceback
|
||||
strmatch = string.match
|
||||
|
||||
loadfile("../LibStub.lua")()
|
||||
|
||||
local proxy = newproxy() -- non-string
|
||||
|
||||
assert(not pcall(LibStub.NewLibrary, LibStub, proxy, 1)) -- should error, proxy is not a string, it's userdata
|
||||
local success, ret = pcall(LibStub.GetLibrary, proxy, true)
|
||||
assert(not success or not ret) -- either error because proxy is not a string or because it's not actually registered.
|
||||
|
||||
assert(not pcall(LibStub.NewLibrary, LibStub, "Something", "No number in here")) -- should error, minor has no string in it.
|
||||
|
||||
assert(not LibStub:GetLibrary("Something", true)) -- shouldn't've created it from the above statement
|
||||
@@ -0,0 +1,41 @@
|
||||
debugstack = debug.traceback
|
||||
strmatch = string.match
|
||||
|
||||
loadfile("../LibStub.lua")()
|
||||
|
||||
|
||||
-- Pretend like loaded libstub is old and doesn't have :IterateLibraries
|
||||
assert(LibStub.minor)
|
||||
LibStub.minor = LibStub.minor - 0.0001
|
||||
LibStub.IterateLibraries = nil
|
||||
|
||||
loadfile("../LibStub.lua")()
|
||||
|
||||
assert(type(LibStub.IterateLibraries)=="function")
|
||||
|
||||
|
||||
-- Now pretend that we're the same version -- :IterateLibraries should NOT be re-created
|
||||
LibStub.IterateLibraries = 123
|
||||
|
||||
loadfile("../LibStub.lua")()
|
||||
|
||||
assert(LibStub.IterateLibraries == 123)
|
||||
|
||||
|
||||
-- Now pretend that a newer version is loaded -- :IterateLibraries should NOT be re-created
|
||||
LibStub.minor = LibStub.minor + 0.0001
|
||||
|
||||
loadfile("../LibStub.lua")()
|
||||
|
||||
assert(LibStub.IterateLibraries == 123)
|
||||
|
||||
|
||||
-- Again with a huge number
|
||||
LibStub.minor = LibStub.minor + 1234567890
|
||||
|
||||
loadfile("../LibStub.lua")()
|
||||
|
||||
assert(LibStub.IterateLibraries == 123)
|
||||
|
||||
|
||||
print("OK")
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||
..\FrameXML\UI.xsd">
|
||||
|
||||
<Script file="Libs\LibStub\LibStub.lua"/>
|
||||
<Include file="Libs\AceLocale-3.0\AceLocale-3.0.xml" />
|
||||
</Ui>
|
||||
@@ -0,0 +1,52 @@
|
||||
local Loc = LibStub("AceLocale-3.0"):NewLocale("Details_RaidInfo-SiegeOfOrgrimmar", "enUS", true)
|
||||
|
||||
if (not Loc) then
|
||||
return
|
||||
end
|
||||
|
||||
Loc ["PLUGIN_NAME"] = "Raid Info Siege of Orgrimmar"
|
||||
Loc ["STRING_RAID_NAME"] = "Siege of Orgrimmar"
|
||||
|
||||
---------------------------------------------------------------------------------------------------
|
||||
|
||||
-- The ancient inhabitants of Pandaria recognized the vital importance of the lifegiving Pools of Power, building an underground system of aqueducts to safeguard the waters and nurture life in the Vale of Eternal Blossoms. The touch of corruption has animated and twisted these waters, and Immerseus stands as an unnatural embodiment of the Vale's sorrow.
|
||||
Loc ["STRING_IMMERSEUS"] = "Immerseus"
|
||||
|
||||
-- The Golden Lotus and Shado-Pan guardians of the Vale of Eternal Blossoms were caught in the epicenter of the devastating blast that scarred the Vale, and torn apart by the dark energies. Their spirits linger in the place they once protected, confused and tormented by their failure.
|
||||
Loc ["STRING_THEFALLENPROTECTORS"] = "The Fallen Protectors"
|
||||
|
||||
-- Some say that the mogu race was created in the image of this titanic construct, left deep beneath Pandaria to watch over and guard the continent's darkest and most dangerous secret.
|
||||
Loc ["STRING_NORUSHEN"] = "Norushen"
|
||||
|
||||
-- The seventh sha, the Sha of Pride, was the final burden to which Emperor Shaohao clung, shrouding the land in mist and biding its time for millennia. When Garrosh awakened the Heart of Y'Shaarj, the force of his arrogance caused this dark energy to coalesce in the chamber where the Heart was unearthed.
|
||||
Loc ["STRING_SHAOFPRIDE"] = "Sha of Pride"
|
||||
|
||||
-- Warlord Zaela formed a close bond with Garrosh during events in the Twilight Highlands, and she and her Dragonmaw orcs have pledged loyalty to Garrosh's cause. Riding atop the fearsome Galakras, a direct descendant of the cataclysmic progenitor of all dragonkind, Zaela oversees the naval defense of Orgrimmar.
|
||||
Loc ["STRING_GALAKRAS"] = "Galakras"
|
||||
|
||||
-- This mechanical terror, designed nearly as much for intimidation as destruction, is the centerpiece of Garrosh's siege weaponry. Crafted in the image of the mighty Kor'kron war scorpion, the Iron Juggernaut guards the gates of Orgrimmar, crushing any who would rise up to challenge Garrosh's True Horde.
|
||||
Loc ["STRING_IRONJUGGERNAUT"] = "Iron Juggernaut"
|
||||
|
||||
-- Haromm and Kardris trained thousands of shaman to whisper reverently to the elements to requisition their aid. The army of Garrosh, however, does not ask - they take what they desire in the name of the True Horde. Dark Shamanism forces the elements into servitude, twisting them into burned-out ash, corrupted waters, and toxic air.
|
||||
Loc ["STRING_KORKRONDARKSAMAN"] = "Kor'kron Dark Shaman"
|
||||
|
||||
-- Once a grunt in service of the former warchief, Thrall, General Nazgrim rose quickly through the ranks after overwhelming victories in Grizzly Hills and the sunken city of Vashj'ir. Fiercely loyal to the Horde and bound by a rigorous code of honor and duty, Nazgrim will hold the line for his warchief until his dying breath.
|
||||
Loc ["STRING_GENERALNAZFRIM"] = "General Nazgrim"
|
||||
|
||||
-- Malkorok has been Garrosh's most loyal and trusted lieutenant throughout the Pandaria campaign. When the Warchief needed a volunteer to infuse with the power of Y'Shaarj, it was only natural that Malkorok would offer without hesitation.
|
||||
Loc ["STRING_MALKOROK"] = "Malkorok"
|
||||
|
||||
-- When Garrosh gazed across Pandaria, he saw untapped power. During the course of his campaign, Garrosh has plundered weapons, treasures, and artifacts of the pandaren, the mogu, and the mantid. They are kept in a warehouse deep within his underground base, guarded by a mysterious security system that appears to be of Titan origins.
|
||||
Loc ["STRING_SPOILSOFPANDARIA"] = "Spoils of Pandaria"
|
||||
|
||||
-- When the Isle of Giants was discovered off the coast of Pandaria, teeming with primal devilsaurs, Garrosh sent men to capture some of the most fearsome specimens, hoping to subjugate them and use them as beasts of war. Countless orcish beastmasters have fallen to Thok's jaws as they struggle to tame him, yet the creature's thirst for blood remains unslaked.
|
||||
Loc ["STRING_THOKTHEBLOODTHIRSTY"] = "Thok the Bloodthirsty"
|
||||
|
||||
-- Helix Blackfuse was the only goblin with the combination of engineering prowess, professionalism, and ruthlessness to satisfy Garrosh in his search for the engineer of the True Horde. A mercenary at heart, Blackfuse's love for his creations (and the gold they fetch) has forever linked his fate with that of his patron and Warchief.
|
||||
Loc ["STRING_SIEGECRAFTERBLACKFUSE"] = "Siegecrafter Blackfuse"
|
||||
|
||||
-- The nine surviving Klaxxi'va Paragons are ancient champions of the mantid who fought alongside the Wakener against the madness of Empress Shek'zeer. But the paragons, as do all mantid, hold a far deeper loyalty. When Garrosh unearthed the heart of Y'Shaarj, the paragons followed the whispers of their ancient master to the iron halls beneath Orgrimmar.
|
||||
Loc ["STRING_PARAGEONSOFTHEKLAXXI"] = "Paragons of the Klaxxi"
|
||||
|
||||
-- Garrosh, son of Grommash Hellscream, first learned of his father's heroism when Thrall encountered the young orc in Outland. The seeds of pride were planted. Garrosh spearheaded Horde victories in Northrend and, as Warchief, consolidated Horde power amidst the chaos of the Cataclysm. But his visions of orc supremacy by any means have brought the armies of the world crashing down upon Orgrimmar... a final reckoning that Garrosh himself awaits with brutal relish.
|
||||
Loc ["STRING_GARROSHHELLSCREAM"] = "Garrosh Hellscream"
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,11 @@
|
||||
local Loc = LibStub("AceLocale-3.0"):NewLocale("Details_RaidInfo-SiegeOfOrgrimmar", "ptBR")
|
||||
|
||||
if (not Loc) then
|
||||
return
|
||||
end
|
||||
|
||||
Loc ["PLUGIN_NAME"] = "Info da Raide Cerco a Orgrimmar"
|
||||
Loc ["STRING_RAID_NAME"] = "Cerco a Orgrimmar"
|
||||
|
||||
---------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details: Throne of Thunder
|
||||
## Notes: Plugin for Details
|
||||
## RequiredDeps: Details
|
||||
|
||||
@@ -69,7 +69,10 @@ local throne_of_thunder = {
|
||||
|
||||
boss = "Jin'rokh the Breaker",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Jinrokh the Breaker]],
|
||||
|
||||
combat_end = {1, 69465},
|
||||
|
||||
--[
|
||||
spell_mechanics = {
|
||||
[137261] = {0x1, 0x40}, --> Lightning Storm
|
||||
[137162] = {0x1, 0x100}, --> Static Burst
|
||||
@@ -84,7 +87,7 @@ local throne_of_thunder = {
|
||||
[138733] = {0x10, 0x40}, --> Ionization
|
||||
[137647] = {0x40}, --> Lightning Strike
|
||||
},
|
||||
|
||||
--]]
|
||||
phases = {
|
||||
--> fase 1
|
||||
{
|
||||
@@ -111,6 +114,8 @@ local throne_of_thunder = {
|
||||
boss = "Horridon",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Horridon]],
|
||||
|
||||
combat_end = {1, 68476},
|
||||
|
||||
spell_mechanics = {
|
||||
[136719] = {0x10}, --> Blazing Sunlight (Wastewalker)
|
||||
[136723] = {0x8}, --> Sand Trap (Voidzone)
|
||||
@@ -221,6 +226,8 @@ local throne_of_thunder = {
|
||||
boss = "Council of Elders",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Council of Elders]],
|
||||
|
||||
combat_end = {2, {69131, 69134, 69078, 69132}},
|
||||
|
||||
--> this is a fix for twisted fate spell, due Mar'li adds comes with exactly the same name as the player name, the add spell are assigned to the player
|
||||
func = function()
|
||||
local combat = _detalhes:GetCombat ("current")
|
||||
@@ -317,6 +324,8 @@ local throne_of_thunder = {
|
||||
boss = "Tortos",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Tortos]],
|
||||
|
||||
combat_end = {1, 67977},
|
||||
|
||||
spell_mechanics = {
|
||||
[134476] = {0x1}, --> "Rockfall",
|
||||
[134920] = {0x1}, --> "Quake Stomp",
|
||||
@@ -411,6 +420,8 @@ local throne_of_thunder = {
|
||||
boss = "Ji'kun",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Ji Kun]],
|
||||
|
||||
combat_end = {1, 69712},
|
||||
|
||||
spell_mechanics = {
|
||||
[134381] = {0x1}, --Quills
|
||||
[140092] = {0x100}, -- Infected Talons
|
||||
@@ -457,6 +468,8 @@ local throne_of_thunder = {
|
||||
boss = "Durumu the Forgotten",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Durumu]],
|
||||
|
||||
combat_end = {1, 68036},
|
||||
|
||||
spell_mechanics = {
|
||||
[133732] = {0x1, 0x200}, --> Infrared Light
|
||||
[133738] = {0x1, 0x200}, --> Bright Light
|
||||
@@ -542,6 +555,8 @@ local throne_of_thunder = {
|
||||
boss = "Primordius",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Primordius]],
|
||||
|
||||
combat_end = {1, 69017},
|
||||
|
||||
spell_mechanics = {
|
||||
[136220] = {0x1, 0x2000}, --> Acidic Explosion
|
||||
[136216] = {0x1, 0x40}, --> Caustic Gas
|
||||
@@ -584,6 +599,8 @@ local throne_of_thunder = {
|
||||
boss = "Dark Animus",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Dark Animus]],
|
||||
|
||||
combat_end = {1, 69427},
|
||||
|
||||
spell_mechanics = {
|
||||
[139867] = {0x1, 0x4000}, --> Interrupting Jolt
|
||||
[138659] = {0x1}, --> Touch of the Animus
|
||||
@@ -621,6 +638,8 @@ local throne_of_thunder = {
|
||||
boss = "Iron Qon",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Iron Qon]],
|
||||
|
||||
combat_end = {1, 68078},
|
||||
|
||||
spell_mechanics = {
|
||||
[136925] = {0x40}, --> Burning Blast
|
||||
[134628] = {0x200, 0x1}, --> Unleashed Flame
|
||||
@@ -727,6 +746,8 @@ local throne_of_thunder = {
|
||||
boss = "Twin Consorts",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Empyreal Queens]],
|
||||
|
||||
combat_end = {2, {68904, 68905}},
|
||||
|
||||
spell_mechanics = {
|
||||
[137410] = {0x200, 0x1}, --> Blazing Radiance
|
||||
[137492] = {0x1}, --> Nuclear Inferno
|
||||
@@ -833,6 +854,8 @@ local throne_of_thunder = {
|
||||
boss = "Lei Shen",
|
||||
portrait = [[Interface\EncounterJournal\UI-EJ-BOSS-Lei Shen]],
|
||||
|
||||
combat_end = {1, 68397},
|
||||
|
||||
spell_mechanics = {
|
||||
[136889] = {0x2, 0x1}, --> Violent Gale Winds
|
||||
[135096] = {0x40}, --> Thunderstruck
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details Save Data
|
||||
## Notes: Save Details database
|
||||
## RequiredDeps: Details
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details Spells (plugin)
|
||||
## Notes: Plugin for Details
|
||||
## SavedVariablesPerCharacter: _detalhes_databaseSpellDetails
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details TimeAttack (plugin)
|
||||
## Notes: Plugin for Details
|
||||
## SavedVariablesPerCharacter: _detalhes_databaseTimeAttack
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details Tiny Threat (plugin)
|
||||
## Notes: Plugin for Details
|
||||
## SavedVariablesPerCharacter: _detalhes_databaseThreat
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Interface: 50300
|
||||
## Interface: 50400
|
||||
## Title: Details Vanguard (plugin)
|
||||
## Notes: Plugin for Details
|
||||
## SavedVariablesPerCharacter: _detalhes_databaseVanguard
|
||||
|
||||
+9
-4
@@ -26,6 +26,7 @@ function _G._detalhes:Start()
|
||||
_detalhes.temp_table1 = {}
|
||||
|
||||
--> combat
|
||||
self.encounter = {}
|
||||
self.in_combat = false
|
||||
self.combat_id = self.combat_id or 0
|
||||
self.instances_amount = self.instances_amount or 12
|
||||
@@ -127,13 +128,13 @@ function _G._detalhes:Start()
|
||||
|
||||
--> single click row function replace
|
||||
--damage, dps, damage taken, friendly fire
|
||||
self.row_singleclick_overwrite [1] = {true, true, true, true}
|
||||
self.row_singleclick_overwrite [1] = {true, true, true, true, self.atributo_damage.ReportSingleFragsLine}
|
||||
--healing, hps, overheal, healing taken
|
||||
self.row_singleclick_overwrite [2] = {true, true, true, true}
|
||||
self.row_singleclick_overwrite [2] = {true, true, true, true, false, false}
|
||||
--mana, rage, energy, runepower
|
||||
self.row_singleclick_overwrite [3] = {true, true, true, true}
|
||||
--cc breaks, ress, interrupts, dispells, deaths
|
||||
self.row_singleclick_overwrite [4] = {true, true, true, true, self.atributo_misc.ReportSingleDeadLine}
|
||||
self.row_singleclick_overwrite [4] = {true, true, true, true, self.atributo_misc.ReportSingleDeadLine, false}
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--> initialize
|
||||
@@ -293,11 +294,15 @@ function _G._detalhes:Start()
|
||||
for index, instancia in ipairs (self.tabela_instancias) do
|
||||
if (instancia.ativa) then
|
||||
self.gump:Fade (instancia._version, 0)
|
||||
instancia._version:SetText ("Details Alpha " .. _detalhes.userversion .. " (" .. self.realversion .. ")")
|
||||
instancia._version:SetText ("Details Alpha " .. _detalhes.userversion .. " (core: " .. self.realversion .. ")")
|
||||
instancia._version:SetPoint ("bottomleft", instancia.baseframe, "bottomleft", 0, 1)
|
||||
self.gump:Fade (instancia._version, "in", 10)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (self.is_first_run) then
|
||||
_detalhes:OpenWelcomeWindow()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user