- Added Enemy Damage Taken by clicking with middle mouse button over a enemy bar.

- Implemented code for early tests with new version checker.
- Renamed option menu "externals" to "Data Feed".
This commit is contained in:
tercio
2014-07-02 20:40:23 -03:00
parent 3baa00474b
commit 5fea5b238d
14 changed files with 387 additions and 193 deletions
+4 -2
View File
@@ -8,8 +8,10 @@
_ = nil
_detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0", "LibHotCorners")
_detalhes.userversion = "v1.18.0a"
_detalhes.version = "Alpha 020"
_detalhes.version = "v1.18.1 (core 20)"
_detalhes.userversion = "v1.18.1"
_detalhes.build_counter = 1
_detalhes.realversion = 20
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+48 -2
View File
@@ -1124,9 +1124,55 @@ end
function atributo_custom:IsSpellTarget()
return self.spellid and self.target and true
end
function atributo_custom:RemoveCustom (index)
if (not _detalhes.tabela_instancias) then
--> do not remove customs while the addon is loading.
return
end
table.remove (_detalhes.custom, index)
for _, instance in _ipairs (_detalhes.tabela_instancias) do
if (instance.atributo == 5 and instance.sub_atributo == index) then
instance:ResetAttribute()
elseif (instance.atributo == 5 and instance.sub_atributo > index) then
instance.sub_atributo = instance.sub_atributo - 1
instance.sub_atributo_last [5] = 1
else
instance.sub_atributo_last [5] = 1
end
end
_detalhes.switch:OnRemoveCustom (index)
end
function _detalhes.refresh:r_atributo_custom()
for _, custom_object in _ipairs (_detalhes.custom) do
--> check for non used temp displays
if (_detalhes.tabela_instancias) then
for i = #_detalhes.custom, 1, -1 do
local custom_object = _detalhes.custom [i]
if (custom_object.temp) then
--> check if there is a instance showing this custom
local showing = false
for index, instance in _ipairs (_detalhes.tabela_instancias) do
if (instance.atributo == 5 and instance.sub_atributo == i) then
showing = true
end
end
if (not showing) then
atributo_custom:RemoveCustom (i)
end
end
end
end
--> restore metatable and indexes
for index, custom_object in _ipairs (_detalhes.custom) do
_setmetatable (custom_object, atributo_custom)
custom_object.__index = atributo_custom
end
+7
View File
@@ -1691,6 +1691,13 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown)
end
--> enemies
if (instancia.sub_atributo == 6) then
GameCooltip:AddLine (" ")
GameCooltip:AddLine ("|cFFFFCC00middle button|r: real-time damage taken")
GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, 16, 14/512, 64/512, 127/512, 204/512)
end
return true
end
+6 -1
View File
@@ -2011,7 +2011,12 @@ function _detalhes:MontaAtributosOption (instancia, func)
CoolTip:AddMenu (2, _detalhes.OpenCustomDisplayWindow, nil, nil, nil, Loc ["STRING_CUSTOM_NEW"], "Interface\\PaperDollInfoFrame\\Character-Plus", true)
for index, custom in _ipairs (_detalhes.custom) do
CoolTip:AddLine (custom.name, nil, 2)
if (custom.temp) then
CoolTip:AddLine (custom.name .. Loc ["STRING_CUSTOM_TEMPORARILY"], nil, 2)
else
CoolTip:AddLine (custom.name, nil, 2)
end
CoolTip:AddMenu (2, func, true, 5, index)
CoolTip:AddIcon (custom.icon, 2, 1, 16, 16)
end
+25 -5
View File
@@ -1217,10 +1217,23 @@ function _detalhes:CatchRaidBuffUptime (in_or_out)
if (_IsInRaid()) then
local pot_usage = {}
local pot_usage_test = {}
for raidIndex = 1, _GetNumGroupMembers() do
for buffIndex = 1, 41 do
local name, _, _, _, _, _, _, unitCaster, _, _, spellid = _UnitAura ("raid"..raidIndex, buffIndex, nil, "HELPFUL")
if (in_or_out == "BUFF_UPTIME_IN") then
if (_detalhes.PotionList [spellid]) then
print ("Pre Potion Found on raidIndex", raidIndex, unitCaster, spellid)
local playerName, realmName = _UnitName ("raid"..raidIndex)
if (realmName and realmName ~= "") then
playerName = playerName .. "-" .. realmName
end
pot_usage_test [playerName] = spellid
end
end
--print (name, unitCaster, "==", "raid"..raidIndex)
if (name and unitCaster == "raid"..raidIndex) then
@@ -1243,7 +1256,7 @@ function _detalhes:CatchRaidBuffUptime (in_or_out)
end
end
--> i don't remmember why do we iterate through the player again.
--> unitCaster return player instead of raidIndex
for buffIndex = 1, 41 do
local name, _, _, _, _, _, _, unitCaster, _, _, spellid = _UnitAura ("player", buffIndex, nil, "HELPFUL")
if (name and unitCaster == "player") then
@@ -1262,17 +1275,24 @@ function _detalhes:CatchRaidBuffUptime (in_or_out)
end
if (in_or_out == "BUFF_UPTIME_IN") then
local string_output = "pre-potion: "
local string_output = "pre-potion raw: "
for playername, potspellid in _pairs (pot_usage_test) do
local name, _, icon = _GetSpellInfo (potspellid)
local _, class = UnitClass (playername)
local class_color = RAID_CLASS_COLORS [class].colorStr
string_output = string_output .. "|c" .. class_color .. playername .. "|r |T" .. icon .. ":14:14:0:0:64:64:0:64:0:64|t "
end
_detalhes.debug_pots1 = string_output
local string_output = "pre-potion: "
for playername, potspellid in _pairs (pot_usage) do
local name, _, icon = _GetSpellInfo (potspellid)
local _, class = UnitClass (playername)
local class_color = RAID_CLASS_COLORS [class].colorStr
string_output = string_output .. "|c" .. class_color .. playername .. "|r |T" .. icon .. ":14:14:0:0:64:64:0:64:0:64|t "
end
_detalhes:Msg (string_output)
_detalhes.debug_pots2 = string_output
end
+5
View File
@@ -461,6 +461,11 @@
if (_detalhes.tabela_vigente.instance_type == "raid") then
_detalhes.last_encounter2 = _detalhes.last_encounter
_detalhes.last_encounter = _detalhes.tabela_vigente.is_boss.name
--debug
_detalhes:Msg (_detalhes.debug_pots1 or "")
_detalhes:Msg (_detalhes.debug_pots2 or "")
end
if (bossKilled) then
+209 -1
View File
@@ -361,4 +361,212 @@
end
end
end
end
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--> update
function _detalhes:CheckVersion()
local room_name = "DetailsVCheck"
local CONST_VERSION_CHECK = "VCHECK"
local CONST_VERSION = "VERSION"
local CONST_SEND_OWNER = "SOWNER"
local CONST_OWNER_OUTDATE = "OWNEROUT"
local waiting_version = false
local waiting_owner = false
--entrar na sala
JoinChannelByName (room_name)
function _detalhes:GetChannelId()
local list = {GetChannelList()}
for i = 1, #list, 2 do
if (list [i+1] == room_name) then
return list [i]
end
end
return nil
end
function _detalhes:GetChannelInternalId()
for id = 1, GetNumDisplayChannels() do
local name = GetChannelDisplayInfo (id)
if (name == room_name) then
return id
end
end
end
function _detalhes:IamOwner()
local channel_id = _detalhes:GetChannelId()
local channel_id_internal = _detalhes:GetChannelInternalId()
if (not channel_id or not channel_id_internal) then
return
end
SetSelectedDisplayChannel (channel_id)
local name, _, _, _, count = GetChannelDisplayInfo (channel_id_internal)
if (name ~= room_name) then
return
end
for i = 1, count do
local name, owner = GetChannelRosterInfo (channel_id_internal, i)
if (name and name == _detalhes.playername) then
return owner
end
end
end
function _detalhes:LeaveChannel (force_leave)
if (_detalhes:IamOwner() and not force_leave) then
if (_detalhes.debug) then
_detalhes:Msg ("(debug) fail to leave the channel, we are the owner.")
end
return
end
if (_detalhes.debug) then
_detalhes:Msg ("(debug) leaving the update channel.")
end
LeaveChannelByName (room_name)
end
function _detalhes:CheckVersionChannel()
local channel_id = _detalhes:GetChannelId()
if (_detalhes.debug) then
_detalhes:Msg ("(debug) requesting version on update channel: ", channel_id)
end
if (not channel_id) then
return
end
waiting_version = true
SendChatMessage (room_name .. CONST_VERSION_CHECK .. " " .. _detalhes.build_counter, "CHANNEL", nil, channel_id)
end
_detalhes:ScheduleTimer ("CheckVersionChannel", 4)
self.listener:RegisterEvent ("CHAT_MSG_CHANNEL")
function _detalhes.parser_functions:CHAT_MSG_CHANNEL (...)
local channel_id = _detalhes:GetChannelId()
if (not channel_id) then
return
end
local message, sender, language, channelString, target, flags, unknown, channelNumber, channelName, unknown, counter, guid = ...
if (channelName == room_name) then
local key, value, extra = message:gsub (room_name, ""):match ("^(%S*)%s*(.-)$")
value, extra = value:match ("^(%S*)%s*(.-)$")
if (_detalhes.debug) then
_detalhes:Msg ("(debug) update channel received command: ", key, value, extra)
end
--> send version
if (key == CONST_VERSION_CHECK) then
if (_detalhes:IamOwner()) then
if (IsInRaid() or IsInGroup()) then
SendChatMessage (room_name .. CONST_VERSION .. " " .. _detalhes.build_counter .. " 1", "CHANNEL", nil, channel_id)
waiting_owner = true
if (_detalhes.debug) then
_detalhes:Msg ("(debug) version sent (we need a new owner).")
end
else
SendChatMessage (room_name .. CONST_VERSION .. " " .. _detalhes.build_counter, "CHANNEL", nil, channel_id)
if (_detalhes.debug) then
_detalhes:Msg ("(debug) version sent.")
end
end
end
elseif (key == CONST_VERSION and waiting_version) then
waiting_version = false
value = tonumber (value)
if (value > _detalhes.build_counter) then
--> nova versao encontrada
-- avisar o jogador
_detalhes:ScheduleTimer ("LeaveChannel", 5)
local lower_instance = _detalhes:GetLowerInstanceNumber()
if (lower_instance) then
lower_instance = _detalhes:GetInstance (lower_instance)
if (lower_instance) then
lower_instance:InstanceAlert ("Update Available!", {[[Interface\GossipFrame\AvailableQuestIcon]], 16, 16, false}, 60, {function() _detalhes:Msg ("Check curse client to download the newer version.") end})
end
end
if (_detalhes.debug) then
_detalhes:Msg ("(debug) found a new version.")
end
elseif (value == _detalhes.build_counter) then
--> mesma versao
if (_detalhes.debug) then
_detalhes:Msg ("(debug) no newer version found.")
end
if (extra and tonumber (extra)) then
if (not IsInRaid() and not IsInGroup()) then
if (_detalhes.debug) then
_detalhes:Msg ("(debug) owner need to leave, we can be the new owner.")
end
SendChatMessage (room_name .. CONST_SEND_OWNER, "CHANNEL", nil, channel_id)
end
end
_detalhes:ScheduleTimer ("LeaveChannel", 10)
elseif (value < _detalhes.build_counter) then
--> a versao do owner esta desatualizada
SendChatMessage (room_name .. CONST_OWNER_OUTDATE, "CHANNEL", nil, channel_id)
if (_detalhes.debug) then
_detalhes:Msg ("(debug) owner have a out date version, warning him.")
end
end
elseif (key == CONST_SEND_OWNER) then
if (_detalhes:IamOwner() and waiting_owner) then
SetChannelOwner (room_name, sender)
waiting_owner = false
_detalhes:ScheduleTimer ("LeaveChannel", 5)
if (_detalhes.debug) then
_detalhes:Msg ("(debug) we found a new owner, leaving the channel.")
end
end
elseif (key == CONST_OWNER_OUTDATE) then
if (_detalhes:IamOwner()) then
_detalhes:ScheduleTimer ("LeaveChannel", 5, true)
if (_detalhes.debug) then
_detalhes:Msg ("(debug) Oh ho, we are owner and our version is old, leaving...")
end
end
end
end
end
end
+26
View File
@@ -79,6 +79,10 @@ function SlashCmdList.DETAILS (msg, editbox)
-------- debug ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
elseif (msg == "chatmsg") then
SendChatMessage("[RCELVA]"..RC.version.."_"..id.."_announce_"..time().."_", "CHANNEL", nil, RC:getChanID(GetChannelList()))
elseif (msg == "chaticon") then
_detalhes:Msg ("|TInterface\\AddOns\\Details\\images\\icones_barra:" .. 14 .. ":" .. 14 .. ":0:0:256:32:0:32:0:32|tteste")
@@ -245,6 +249,28 @@ function SlashCmdList.DETAILS (msg, editbox)
print ("GetTime()", GetTime())
print ("time()", time())
elseif (msg == "buffs") then
for buffIndex = 1, 41 do
--local name, _, _, _, _, _, _, unitCaster, _, _, spellid = UnitAura ("player", buffIndex, nil, "HELPFUL")
--if (name) then
-- print (name, unitCaster, spellid)
--end
local name, _, _, _, _, _, _, unitCaster, _, _, spellid = UnitAura ("raid1", buffIndex, nil, "HELPFUL")
if (name) then
print (name, unitCaster, spellid)
end
local name, _, _, _, _, _, _, unitCaster, _, _, spellid = UnitAura ("raid2", buffIndex, nil, "HELPFUL")
if (name) then
print (name, unitCaster, spellid)
end
end
elseif (msg == "malkorok") then
print ("nome | count | unitCaster | spellId | isBossDebuff | value1 | value2 | value3")
+1 -173
View File
@@ -1456,176 +1456,4 @@
_G.DetailsCustomPanel:Show()
end
end
--[[
--init:
local combat, instance_container, instance = ...
local total, top, amount = 0, 0, 0
--get the misc actor container
local misc_container = combat:GetActorList ( DETAILS_ATTRIBUTE_MISC )
--do the loop:
for _, player in ipairs ( misc_container ) do
--only player in group
if (player:IsGroupPlayer()) then
local found_potion = false
--get the spell debuff uptime container
local debuff_uptime_container = player.debuff_uptime and player.debuff_uptime_spell_tables and player.debuff_uptime_spell_tables._ActorTable
if (debuff_uptime_container) then
--potion of focus (can't use as pre-potion, so, its amount is always 1)
local focus_potion = debuff_uptime_container [105701]
if (focus_potion) then
total = total + 1
found_potion = true
if (top < 1) then
top = 1
end
--add amount to the player
instance_container:AddValue (player, 1)
end
end
--get the spell buff uptime container
local buff_uptime_container = player.buff_uptime and player.buff_uptime_spell_tables and player.buff_uptime_spell_tables._ActorTable
if (buff_uptime_container) then
--potion of the jade serpent
local jade_serpent_potion = buff_uptime_container [105702]
if (jade_serpent_potion) then
local used = jade_serpent_potion.activedamt
if (used > 0) then
total = total + used
found_potion = true
if (used > top) then
top = used
end
--add amount to the player
instance_container:AddValue (player, used)
end
end
--potion of mogu power
local mogu_power_potion = buff_uptime_container [105706]
if (mogu_power_potion) then
local used = mogu_power_potion.activedamt
if (used > 0) then
total = total + used
found_potion = true
if (used > top) then
top = used
end
--add amount to the player
instance_container:AddValue (player, used)
end
end
--virmen's bite
local virmens_bite_potion = buff_uptime_container [105697]
if (virmens_bite_potion) then
local used = virmens_bite_potion.activedamt
if (used > 0) then
total = total + used
found_potion = true
if (used > top) then
top = used
end
--add amount to the player
instance_container:AddValue (player, used)
end
end
--potion of the mountains
local mountains_potion = buff_uptime_container [105698]
if (mountains_potion) then
local used = mountains_potion.activedamt
if (used > 0) then
total = total + used
found_potion = true
if (used > top) then
top = used
end
--add amount to the player
instance_container:AddValue (player, used)
end
end
end
if (found_potion) then
amount = amount + 1
end
end
end
--return:
return total, top, amount
tooltip =
--init:
local player, combat, instance = ...
--get the debuff container for potion of focus
local debuff_uptime_container = player.debuff_uptime and player.debuff_uptime_spell_tables and player.debuff_uptime_spell_tables._ActorTable
if (debuff_uptime_container) then
local focus_potion = debuff_uptime_container [105701]
if (focus_potion) then
local name, _, icon = GetSpellInfo (105701)
GameCooltip:AddLine (name, 1) --> can use only 1 focus potion (can't be pre-potion)
_detalhes:AddTooltipBackgroundStatusbar()
GameCooltip:AddIcon (icon, 1, 1, 14, 14)
end
end
--get the buff container for all the others potions
local buff_uptime_container = player.buff_uptime and player.buff_uptime_spell_tables and player.buff_uptime_spell_tables._ActorTable
if (buff_uptime_container) then
--potion of the jade serpent
local jade_serpent_potion = buff_uptime_container [105702]
if (jade_serpent_potion) then
local name, _, icon = GetSpellInfo (105702)
GameCooltip:AddLine (name, jade_serpent_potion.activedamt)
_detalhes:AddTooltipBackgroundStatusbar()
GameCooltip:AddIcon (icon, 1, 1, 14, 14)
end
--potion of mogu power
local mogu_power_potion = buff_uptime_container [105706]
if (mogu_power_potion) then
local name, _, icon = GetSpellInfo (105706)
GameCooltip:AddLine (name, mogu_power_potion.activedamt)
_detalhes:AddTooltipBackgroundStatusbar()
GameCooltip:AddIcon (icon, 1, 1, 14, 14)
end
--virmen's bite
local virmens_bite_potion = buff_uptime_container [105697]
if (virmens_bite_potion) then
local name, _, icon = GetSpellInfo (105697)
GameCooltip:AddLine (name, virmens_bite_potion.activedamt)
_detalhes:AddTooltipBackgroundStatusbar()
GameCooltip:AddIcon (icon, 1, 1, 14, 14)
end
--potion of the mountains
local mountains_potion = buff_uptime_container [105698]
if (mountains_potion) then
local name, _, icon = GetSpellInfo (105698)
GameCooltip:AddLine (name, mountains_potion.activedamt)
_detalhes:AddTooltipBackgroundStatusbar()
GameCooltip:AddIcon (icon, 1, 1, 14, 14)
end
end
local spell = actor.spell_tables._ActorTable [15407]
spell.targets:SortByKey ("total")
for _, target in ipairs (spell.targets._ActorTable) do
GameCooltip:AddLine (target.nome, _detalhes.ToKFunctions [_detalhes.tooltip.abbreviation] (_, target.total))
_detalhes:AddTooltipBackgroundStatusbar()
GameCooltip:AddIcon ("Interface\\FriendsFrame\\StatusIcon-Offline", 1, 1, 14, 14)
end
--]]
+2 -2
View File
@@ -2357,7 +2357,7 @@ function gump:CriaJanelaInfo()
if (player2_misc) then
local spell = player2_misc.debuff_uptime_spell_tables and player2_misc.debuff_uptime_spell_tables._ActorTable and player2_misc.debuff_uptime_spell_tables._ActorTable [spellid]
if (spell) then
if (spell and spell.uptime) then
local minutos, segundos = _math_floor (spell.uptime/60), _math_floor (spell.uptime%60)
if (player1_uptime > spell.uptime) then
local diff = player1_uptime - spell.uptime
@@ -2414,7 +2414,7 @@ function gump:CriaJanelaInfo()
if (player3_misc) then
local spell = player3_misc.debuff_uptime_spell_tables and player3_misc.debuff_uptime_spell_tables._ActorTable and player3_misc.debuff_uptime_spell_tables._ActorTable [spellid]
if (spell) then
if (spell and spell.uptime) then
local minutos, segundos = _math_floor (spell.uptime/60), _math_floor (spell.uptime%60)
if (player1_uptime > spell.uptime) then
local diff = player1_uptime - spell.uptime
+4 -4
View File
@@ -392,7 +392,7 @@ function _detalhes:OpenOptionsWindow (instance, no_reopen)
--> left panel buttons
local menus = { --labels nos menus
{"Display", "Combat", "Tooltips", "Externals", "Profiles"},
{"Display", "Combat", "Tooltips", "Data Feed", "Profiles"},
{"Skin Selection", "Row Settings", "Row Texts", "Show & Hide Settings", "Window Settings", "Title Text", "Menus: Left Buttons", "Menus: Right Buttons", "Wallpaper", "Miscellaneous"},
{"Data Collector", "Performance Tweaks", "Plugins Management", "Spell Customization", "Data for Charts"}
}
@@ -416,7 +416,7 @@ local menus = { --labels nos menus
"Data for Charts", --16
"Show & Hide Settings", --17
"Miscellaneous", --18
"Externals", --19
"Data Feed", --19
"Tooltip", --20
}
@@ -600,7 +600,7 @@ local menus = { --labels nos menus
[16] = {}, --charts data
[17] = {}, --instance settings
[18] = {}, --miscellaneous settings
[19] = {}, --externals widgets
[19] = {}, --data feed widgets
[20] = {}, --tooltips
} --> vai armazenar os frames das opções
@@ -1333,7 +1333,7 @@ function window:CreateFrame20()
end
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Advanced Settings - Externals Widgets ~19
-- Advanced Settings - Data Feed Widgets ~19
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function window:CreateFrame19()
+39 -1
View File
@@ -1397,9 +1397,47 @@ local function barra_scripts (esta_barra, instancia, i)
if (esta_barra.fading_in) then
return
end
if (button == "RightButton") then
return _detalhes.switch:ShowMe (instancia)
elseif (button == "MiddleButton") then
--> verifica se é damage taken
if (instancia.atributo == 1 and instancia.sub_atributo == 6) then --> enemies
local inimigo = esta_barra.minha_tabela.nome
local custom_name = inimigo .. Loc ["STRING_CUSTOM_ENEMY_DT"]
--> procura se já tem um custom:
for index, CustomObject in _ipairs (_detalhes.custom) do
if (CustomObject:GetName() == custom_name) then
return instancia:TrocaTabela (instancia.segmento, 5, index)
end
end
--> criar um custom para este actor.
local new_custom_object = {
name = custom_name,
icon = [[Interface\ICONS\Pet_Type_Undead]],
attribute = "damagedone",
author = _detalhes.playername,
desc = inimigo .. " Damage Taken",
source = "[raid]",
target = inimigo,
script = false,
tooltip = false,
temp = true
}
tinsert (_detalhes.custom, new_custom_object)
setmetatable (new_custom_object, _detalhes.atributo_custom)
new_custom_object.__index = _detalhes.atributo_custom
instancia:TrocaTabela (instancia.segmento, 5, #_detalhes.custom)
--func, true, 5, index
end
end
esta_barra.texto_direita:SetPoint ("right", esta_barra.statusbar, "right", 1, -1)
File diff suppressed because one or more lines are too long
+3
View File
@@ -206,6 +206,9 @@ function _G._detalhes:Start()
end
end
--> check version
_detalhes:CheckVersion()
--> restore cooltip anchor position
DetailsTooltipAnchor:Restore()