550 lines
22 KiB
Lua
550 lines
22 KiB
Lua
local AceLocale = LibStub ("AceLocale-3.0")
|
|
local Loc = AceLocale:GetLocale ("DetailsDmgRank")
|
|
|
|
--> Needed locals
|
|
local _GetTime = GetTime --> wow api local
|
|
local _UFC = UnitAffectingCombat --> wow api local
|
|
local _IsInRaid = IsInRaid --> wow api local
|
|
local _IsInGroup = IsInGroup --> wow api local
|
|
local _UnitAura = UnitAura --> wow api local
|
|
local _math_floor = math.floor --> lua library local
|
|
local _cstr = string.format --> lua library local
|
|
|
|
--> Create the plugin Object
|
|
local DmgRank = _detalhes:NewPluginObject ("Details_DmgRank")
|
|
--> Main Frame
|
|
local DmgRankFrame = DmgRank.Frame
|
|
|
|
|
|
--> this function will run when the plugin receives the Addon_Loaded event, ["data"] = previus saved player rank
|
|
local function CreatePluginFrames (data)
|
|
|
|
--> catch Details! main object
|
|
local _detalhes = _G._detalhes
|
|
local DetailsFrameWork = _detalhes.gump
|
|
--local
|
|
|
|
--> default rank table
|
|
DmgRank.rank = data or {level = 1, dps = 0, dpshistory = {}, lasttry = {}, annouce = true}
|
|
--DmgRank.rank.level = 20
|
|
|
|
--> OnEvent Table
|
|
function DmgRank:OnDetailsEvent (event, ...)
|
|
if (event == "HIDE") then --> plugin hidded, disabled
|
|
DmgRankFrame:SetScript ("OnUpdate", nil)
|
|
DmgRank:Cancel()
|
|
|
|
elseif (event == "SHOW") then
|
|
|
|
elseif (event == "REFRESH") then --> requested a refresh window
|
|
DmgRank:Refresh()
|
|
|
|
elseif (event == "COMBAT_PLAYER_TIMESTARTED") then --> combat started
|
|
--print ("recebeu event start")
|
|
local combat = select (1, ...)
|
|
--print (combat)
|
|
DmgRank:Start()
|
|
|
|
end
|
|
end
|
|
|
|
------------- Build Ranking ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
--> damage goal table
|
|
DmgRank.TimeGoal = {
|
|
|
|
--> The 30 seconds Trial
|
|
{time = 30, damage = 1500000, name = Loc ["CHALLENGENAME_1"]}, -- Ready to Raid -- rank 2 --> -- Patrulha --> 50K DPS required
|
|
{time = 30, damage = 1800000, name = Loc ["CHALLENGENAME_2"]}, -- Damage Practice --rank 3 --> -- Soldier --> 60K DPS required
|
|
{time = 30, damage = 2100000, name = Loc ["CHALLENGENAME_3"]}, -- The Training Continue... -- rank 4 --> -- Corporal --> 70K DPS required
|
|
|
|
--> 90 seconds bracket
|
|
{time = 90, damage = 5080000, name = Loc ["CHALLENGENAME_4"]}, -- You Just Need a Little More Time -- rank 5 --> -- Sergeant --> 56K DPS required
|
|
{time = 90, damage = 5814800, name = Loc ["CHALLENGENAME_5"]}, -- Became a Knight -- rank 6 --> -- Sergeant --> 64K DPS required
|
|
|
|
--> middle bracket
|
|
{time = 120, damage = 7901760, name = Loc ["CHALLENGENAME_6"]}, -- Two Minutes -- rank 7 --> Iron Knight --> 65K DPS required
|
|
{time = 120, damage = 8442112, name = Loc ["CHALLENGENAME_7"]}, --rank 8 --> Steel Knight --> 70K DPS required
|
|
{time = 180, damage = 13452000, name = Loc ["CHALLENGENAME_8"]}, --rank 9 --> --> The High Knight --> 74K DPS required
|
|
{time = 180, damage = 14152100, name = Loc ["CHALLENGENAME_9"]}, --rank 10 --> Yes Sir! -- Thorium Knight --> 78K DPS required
|
|
{time = 180, damage = 15052100, name = Loc ["CHALLENGENAME_10"]}, --rank 11 --> Salute -- Silver Lieutenant --> 83K DPS required
|
|
|
|
--> burst bracket
|
|
{time = 40, damage = 5000000, name = Loc ["CHALLENGENAME_11"]}, --rank 12 --> In Burst We Trust -- Gold Lieutenant --> 125K DPS required
|
|
{time = 40, damage = 5700000, name = Loc ["CHALLENGENAME_12"]}, --rank 13 --> Watch me Explode -- Stone Guardian --> 142K DPS required
|
|
{time = 40, damage = 6300000, name = Loc ["CHALLENGENAME_13"]}, --rank 14 --> T.N.T-- Fel Guardian --> 157K DPS required
|
|
|
|
--> long run bracket
|
|
{time = 300, damage = 35052100, name = Loc ["CHALLENGENAME_14"]}, --rank 15 --> Time is Damage My Friend -- Titan Guardian --> 116K DPS required
|
|
{time = 330, damage = 41151120, name = Loc ["CHALLENGENAME_15"]}, --rank 16 - Just a Little Patience --> Bronze Centurion --> 124K DPS required
|
|
{time = 360, damage = 47395100, name = Loc ["CHALLENGENAME_16"]}, --rank 17 --> Silver Centurion --> 131K DPS required
|
|
|
|
{time = 300, damage = 56911000, name = Loc ["CHALLENGENAME_17"]}, --rank 18 --> Flame Centurion --> ?K DPS required
|
|
{time = 360, damage = 71821980, name = Loc ["CHALLENGENAME_18"]}, --rank 19 --> Lower Vanquisher --> ?K DPS required
|
|
{time = 180, damage = 45910990, name = Loc ["CHALLENGENAME_19"]}, --rank 20 --> Middle Vanquisher --> ?K DPS required
|
|
|
|
--> end
|
|
{time = nil, damage = nil, name = ""}, --rank 21 --> none
|
|
}
|
|
|
|
--> tiles and badges
|
|
DmgRank.Titles = {
|
|
|
|
Loc ["RANKNAME_1"], --> rank 1 --> -- recruit -- Recruta -- Farmer
|
|
Loc ["RANKNAME_2"], --> rank 2 --> soldier
|
|
Loc ["RANKNAME_3"], --> rank 3 --> corporal
|
|
|
|
Loc ["RANKNAME_4"], --> rank 4 --> -- Gold Sergeant
|
|
Loc ["RANKNAME_5"], --> rank 5 --> -- Star Sergeant
|
|
|
|
Loc ["RANKNAME_6"], --> rank 6 - Iron Knight
|
|
Loc ["RANKNAME_7"], --> rank 7 - Steel Knight
|
|
Loc ["RANKNAME_8"], --> rank 8 - Mithril Knight
|
|
Loc ["RANKNAME_9"], --> rank 9 - Thorium Knight
|
|
|
|
Loc ["RANKNAME_10"], --> rank 10 - Silver Lieutenant
|
|
Loc ["RANKNAME_11"], --> rank 11 - Gold Lieutenant
|
|
|
|
Loc ["RANKNAME_12"], --> rank 12 - Stone Guardian
|
|
Loc ["RANKNAME_13"], --> rank 13 - Fel Guardian
|
|
Loc ["RANKNAME_14"], --> rank 14 - Titan Guardian
|
|
|
|
Loc ["RANKNAME_15"], --> rank 15 - Bronze Centurion
|
|
Loc ["RANKNAME_16"], --> rank 16 - Silver Centurion
|
|
Loc ["RANKNAME_17"], --> rank 17 - Flame Centurion
|
|
|
|
Loc ["RANKNAME_18"], --> rank 18 - "Lower Vanquisher"
|
|
Loc ["RANKNAME_19"], --> rank 19 - "Middle Vanquisher"
|
|
Loc ["RANKNAME_20"], --> rank 20 - "High Vanquisher"
|
|
|
|
--[[
|
|
legionary
|
|
Commander
|
|
General
|
|
marshal
|
|
Champion -- campeoao
|
|
Conqueror -- conquistador
|
|
--]]
|
|
|
|
}
|
|
DmgRank.Badges = {}
|
|
DmgRank.Badges.TexCoords = {
|
|
{0.7734375, 0.89453125, 0.060546875, 0.181640625}, --> rank 1
|
|
{0.1640625, 0.259765625, 0.083984375, 0.185546875}, --> rank 2 - soldier
|
|
{0.31640625, 0.412109375, 0.06640625, 0.18359375}, --> rank 3 --> Corporal
|
|
{0.45703125, 0.55078125, 0.05859375, 0.177734375}, --> rank 4 --> Gold Sergeant
|
|
{0.607421875, 0.701171875, 0.044921875, 0.177734375}, --> rank 5 --> star Sergeant
|
|
|
|
{0.017578125, 0.169921875, 0.236328125, 0.3984375}, --> rank 6 - Iron Knight
|
|
{0.201171875, 0.357421875, 0.234375, 0.3984375}, --> rank 7 - Steel Knight
|
|
{0.38671875, 0.541015625, 0.234375, 0.3984375}, --> rank 8 - Mithril Knight
|
|
{0.572265625, 0.7265625, 0.234375, 0.3984375}, --> rank 9 - Thorium Knight
|
|
|
|
{0.16015625, 0.2734375, 0.44921875, 0.583984375}, --> rank 10 - Silver Lieutenant
|
|
{0.0234375, 0.130859375, 0.44921875, 0.583984375}, --> rank 11 - Gold Lieutenant
|
|
|
|
{0.30078125, 0.4375, 0.44140625, 0.5859375}, --> rank 12 - Stone Guardian
|
|
{0.45703125, 0.59375, 0.44140625, 0.5859375}, --> rank 13 - Fel Guardian
|
|
{0.61328125, 0.75, 0.44140625, 0.5859375}, --> rank 14 - Titan Guardian
|
|
|
|
{0.017578125, 0.173828125, 0.625, 0.78125}, --> rank 15 - Bronze Centurion
|
|
{0.212890625, 0.369140625, 0.625, 0.78125}, --> rank 16 - Silver Centurion
|
|
{0.408203125, 0.56640625, 0.625, 0.78125}, --> rank 17 - Flame Centurion
|
|
|
|
{0.00390625, 0.208984375, 0.810546875, 0.9765625}, --> rank 18 - Lower Vanquisher
|
|
{0.21875, 0.42578125, 0.810546875, 0.9765625}, --> rank 19 - Middle Vanquisher
|
|
{0.43359375, 0.638671875, 0.810546875, 0.9765625}, --> rank 20 - High Vanquisher
|
|
|
|
}
|
|
DmgRank.Badges.Sizes = {
|
|
{50, 50}, --> rank 1
|
|
{50, 52}, --> rank 2 - soldier
|
|
{50, 60}, --> rank 3 - Corporal
|
|
{49, 59}, --> rank 4 - Gold Sergeant
|
|
{48, 61}, ---> rank 5 - star Sergeant
|
|
{56, 63}, --> rank 6 - Iron Knight
|
|
{56, 63}, -->rank 7 - Steel Knight
|
|
{56, 63}, --> rank 8 - Mithril Knight
|
|
{56, 63}, --> rank 9 - Thorium Knight
|
|
|
|
{61, 59}, --> rank 10 - Silver Lieutenant
|
|
{55, 67}, --> rank 11 - Gold Lieutenant
|
|
|
|
{70, 74}, --> rank 12 - Stone Guardian
|
|
{70, 74}, --> rank 13 - Fel Guardian
|
|
{70, 74}, --> rank 14 - Titan Guardian
|
|
|
|
{70, 70}, --> rank 15 - Bronze Centurion
|
|
{70, 70}, --> rank 16 - Silver Centurion
|
|
{70, 70}, --> rank 17 - Flame Centurion
|
|
|
|
{80, 65}, --> rank 18 - Lower Vanquisher
|
|
{80, 65}, --> rank 19 - Middle Vanquisher
|
|
{80, 65}, --> rank 20 - High Vanquisher
|
|
}
|
|
DmgRank.Badges.SetPointMod = {
|
|
{0, 6}, --> rank 1
|
|
{0, 5}, --> rank 2 - soldier
|
|
{0, 10}, --> rank 3 - Corporal
|
|
{0, 10}, --> rank 4 - Gold Sergeant
|
|
{0, 16}, --> rank 5 - star Sergeant
|
|
{0, 12}, --> rank 6 - Iron Knight
|
|
{0, 12}, --> rank 7 - Steel Knight
|
|
{0, 12}, --> rank 8 - Mithril Knight
|
|
{0, 12}, --> rank 9 - Thorium Knight
|
|
|
|
{0, 12}, --> rank 10 - Silver Lieutenant
|
|
{0, 17}, --> rank 11 - Gold Lieutenant
|
|
|
|
{0, 20}, --> rank 12 - Stone Guardian
|
|
{0, 20}, --> rank 13 - Fel Guardian
|
|
{0, 20}, --> rank 14 - Titan Guardian
|
|
|
|
{0, 20}, --> rank 15 - Bronze Centurion
|
|
{0, 20}, --> rank 16 - Silver Centurion
|
|
{0, 20}, --> rank 17 - Flame Centurion
|
|
|
|
{-3, 16}, --> rank 18 - Lower Vanquisher
|
|
{-3, 16}, --> rank 19 - Middle Vanquisher
|
|
{-3, 16}, --> rank 20 - High Vanquisher
|
|
|
|
}
|
|
|
|
--> main frame and background texture
|
|
|
|
DmgRankFrame:SetPoint ("topleft", UIParent)
|
|
DmgRankFrame:SetResizable (false) --> cant resize, this is a fixed size
|
|
DmgRankFrame:SetWidth (300) --> need to be 300x300 to fit details window
|
|
DmgRankFrame:SetHeight (300) --> need to be 300x300 to fit details window
|
|
DmgRank.Frame = DmgRankFrame
|
|
DmgRankFrame:Hide()
|
|
|
|
--> default background picture
|
|
local background = DmgRankFrame:CreateTexture (nil, "background")
|
|
background:SetTexture ("Interface\\ACHIEVEMENTFRAME\\UI-Achievement-StatsBackground")
|
|
background:SetPoint ("topleft", DmgRankFrame, "topleft", 2, 0)
|
|
background:SetPoint ("bottomright", DmgRankFrame, "bottomright", -2, 0)
|
|
background:SetVertexColor (.7, .7, .7, 1)
|
|
background:SetDrawLayer ("background", 1)
|
|
DmgRank.BackgroundTex = background
|
|
|
|
local AnimeFrame = CreateFrame ("frame", nil, DmgRankFrame)
|
|
AnimeFrame:SetAllPoints (DmgRankFrame)
|
|
|
|
local background2 = AnimeFrame:CreateTexture (nil, "background")
|
|
background2:SetTexture ("Interface\\AddOns\\Details_DmgRank\\solo_bgtimeattack")
|
|
background2:SetPoint ("topleft", DmgRankFrame, "topleft", 2, 0)
|
|
background2:SetPoint ("bottomright", DmgRankFrame, "bottomright", -2, 0)
|
|
DmgRank.BackgroundTex2 = background2
|
|
background2:SetDrawLayer ("background", 2)
|
|
|
|
local RotateAnimGroup = AnimeFrame:CreateAnimationGroup()
|
|
local rotate = RotateAnimGroup:CreateAnimation ("Rotation")
|
|
rotate:SetDegrees (360)
|
|
rotate:SetDuration (120)
|
|
RotateAnimGroup:SetLooping ("repeat")
|
|
RotateAnimGroup:Play()
|
|
|
|
--> next rank at display
|
|
local challengeName = DetailsFrameWork:NewLabel (DmgRankFrame, DmgRankFrame, nil, "challengeName", "", "QuestFont_Shadow_Huge")
|
|
challengeName:SetPoint ("center", DmgRankFrame, "center")
|
|
challengeName:SetPoint ("top", DmgRankFrame, "top", 0, -98)
|
|
DmgRank.challengeName = challengeName
|
|
|
|
local challengeGoal = DetailsFrameWork:NewLabel (DmgRankFrame, DmgRankFrame, nil, "challengeGoal", "", "GameFontHighlightSmall")
|
|
challengeGoal:SetPoint ("center", DmgRankFrame, "center")
|
|
challengeGoal:SetPoint ("top", DmgRankFrame, "top", 0, -118)
|
|
DmgRank.challengeGoal = challengeGoal
|
|
|
|
--> main time display
|
|
local showTimeMinutes = DetailsFrameWork:NewLabel (DmgRankFrame, DmgRankFrame, nil, "showTimeMinutes", "00:", "GameFontHighlightLarge")
|
|
showTimeMinutes:SetPoint ("center", DmgRankFrame, "center")
|
|
showTimeMinutes:SetPoint ("top", DmgRankFrame, "top", -25, -150)
|
|
showTimeMinutes:SetJustifyH ("RIGHT")
|
|
DmgRank.TimeMinutes = showTimeMinutes
|
|
|
|
local showTimeSeconds = DetailsFrameWork:NewLabel (DmgRankFrame, DmgRankFrame, nil, "showTimeSeconds", "00:", "GameFontHighlightLarge")
|
|
showTimeSeconds:SetPoint ("center", DmgRankFrame, "center")
|
|
showTimeSeconds:SetPoint ("top", DmgRankFrame, "top", 0, -150)
|
|
DmgRank.TimeSeconds = showTimeSeconds
|
|
|
|
local showTimeMiliSeconds = DetailsFrameWork:NewLabel (DmgRankFrame, DmgRankFrame, nil, "showTimeMiliSeconds", "00", "GameFontHighlightLarge")
|
|
showTimeMiliSeconds:SetPoint ("center", DmgRankFrame, "center")
|
|
showTimeMiliSeconds:SetPoint ("top", DmgRankFrame, "top", 23, -150)
|
|
DmgRank.TimeMiliSeconds = showTimeMiliSeconds
|
|
|
|
--> main damage display
|
|
local damage = DetailsFrameWork:NewLabel (DmgRankFrame, DmgRankFrame, "showdamage", nil, "00.000.000", "GameFontHighlightLarge")
|
|
damage:SetPoint ("center", DmgRankFrame, "center")
|
|
damage:SetPoint ("top", DmgRankFrame, "top", 0, -170)
|
|
DmgRank.MainDamageDisplay = damage
|
|
|
|
--> background da badge e titulo
|
|
local bg1 = DetailsFrameWork:NewPanel (DmgRankFrame, _, "DetailsDmgRankBadgeBackground", _, 280, 75)
|
|
bg1:SetPoint ("topleft", DmgRankFrame, 10, -10)
|
|
bg1:DisableGradient()
|
|
|
|
local GlowFrame = CreateFrame ("frame", "DetailsRankUpGlowFrame", bg1.widget, "DetailsAlertRankUpTemplate")
|
|
GlowFrame:SetPoint ("topleft", bg1.widget)
|
|
GlowFrame:SetWidth (280)
|
|
GlowFrame:SetHeight (60)
|
|
GlowFrame:Hide()
|
|
|
|
--> badge icon display
|
|
local titleIcon = bg1:CreateTexture (nil, "overlay")
|
|
titleIcon:SetTexture ("Interface\\AddOns\\Details_DmgRank\\images\\badges")
|
|
titleIcon:SetTexCoord (unpack (DmgRank.Badges.TexCoords [DmgRank.rank.level]))
|
|
titleIcon:SetWidth (DmgRank.Badges.Sizes [DmgRank.rank.level] [1]*1.33)
|
|
titleIcon:SetHeight (DmgRank.Badges.Sizes [DmgRank.rank.level] [2]*1.33)
|
|
titleIcon:SetPoint ("topleft", DmgRankFrame, "topleft", 20, -20)
|
|
DmgRank.TitleIcon = titleIcon
|
|
|
|
--> title
|
|
local pretitle = DetailsFrameWork:NewLabel (bg1, bg1, nil, "pretitle", Loc ["STRING_CURRENTRANK"], "GameFontHighlightSmall")
|
|
pretitle:SetPoint ("left", titleIcon, "right", 20, 9)
|
|
DmgRank.PreTitle = pretitle
|
|
|
|
local title = DetailsFrameWork:NewLabel (bg1, bg1, nil, "title", DmgRank.Titles [DmgRank.rank.level], "GameFontHighlightLarge")
|
|
title:SetPoint ("left", titleIcon, "right", 20, -9)
|
|
DmgRank.Title = title
|
|
|
|
--> announce switch
|
|
local announce = DetailsFrameWork:NewSwitch (bg1, _, "DetailsDmgRankAnnouce", "announceSwitch", 60, 20, _, _, DmgRank.rank.annouce)
|
|
bg1.announceSwitch:SetPoint ("topleft", DmgRankFrame, 12, -184)
|
|
bg1.announceSwitch.OnSwitch = function (self, _, value)
|
|
DmgRank.rank.annouce = value
|
|
end
|
|
DetailsFrameWork:NewLabel (bg1, _, nil, "announceLabel", Loc ["STRING_ANNOUNCE"], "GameFontHighlightSmall")
|
|
bg1.announceLabel:SetPoint ("bottom", bg1.announceSwitch, "top", -5, -2)
|
|
|
|
--> background dos tempos das ultimas tries
|
|
local lasttrylabel = DetailsFrameWork:NewLabel (bg1, bg1, nil, "lasttrylabel", Loc ["STRING_LASTTRIES"], "GameFontHighlightSmall") -->
|
|
lasttrylabel:SetPoint ("topleft", DmgRankFrame, 12, -204)
|
|
local lastranklabel = DetailsFrameWork:NewLabel (bg1, bg1, nil, "lastranklabel", Loc ["STRING_LASTRANKS"], "GameFontHighlightSmall") -->
|
|
lastranklabel:SetPoint ("topleft", DmgRankFrame, 162, -204)
|
|
|
|
local bg_esq = DetailsFrameWork:NewPanel (DmgRankFrame, _, "DetailsDmgRankLeftBackground", _, 130, 85, _, {.9, .9, .9, .7})
|
|
bg_esq:SetPoint ("topleft", DmgRankFrame, 10, -215)
|
|
local bg_dir = DetailsFrameWork:NewPanel (DmgRankFrame, _, "DetailsDmgRankRightBackground", _, 130, 85, _, {.9, .9, .9, .7})
|
|
bg_dir:SetPoint ("topleft", DmgRankFrame, 160, -215)
|
|
|
|
--> try dps dos 5 ultimos ranks
|
|
DmgRank.Try = {}
|
|
for i = 1, 5 do
|
|
DetailsFrameWork:NewLabel (bg_esq, bg_esq, nil, "try"..i, "0", "GameFontHighlightSmall")
|
|
bg_esq ["try"..i]:SetPoint ("bottomleft", DmgRankFrame, "bottomleft", 20, math.abs (i*15-83))
|
|
DmgRank.Try [i] = bg_esq ["try"..i]
|
|
end
|
|
|
|
--> dps dos 5 ultimos ranks
|
|
DmgRank.Dps = {}
|
|
for i = 1, 5 do
|
|
DetailsFrameWork:NewLabel (bg_dir, bg_dir, nil, "dps"..i, "0", "GameFontHighlightSmall")
|
|
bg_dir ["dps"..i]:SetPoint ("bottomleft", DmgRankFrame, "bottomleft", 170, math.abs (i*15-83))
|
|
DmgRank.Dps [i] = bg_dir ["dps"..i]
|
|
end
|
|
|
|
--> refresh all window components
|
|
function DmgRank:Refresh()
|
|
--> update badge icon and text
|
|
|
|
if (not self) then
|
|
self = DmgRank
|
|
end
|
|
|
|
self.challengeName:SetText (self.TimeGoal[DmgRank.rank.level].name)
|
|
if (self.TimeGoal[DmgRank.rank.level].damage) then
|
|
self.challengeGoal:SetText (_detalhes:comma_value (self.TimeGoal[DmgRank.rank.level].damage) .. " ".. Loc ["STRING_DAMAGEIN"] .." " .. self.TimeGoal[DmgRank.rank.level].time .. " " ..Loc ["STRING_SECONDS"])
|
|
else
|
|
self.challengeGoal:SetText ("")
|
|
end
|
|
self.Title:SetText (self.Titles [DmgRank.rank.level])
|
|
|
|
self.TitleIcon:SetTexCoord (unpack (self.Badges.TexCoords [DmgRank.rank.level]))
|
|
self.TitleIcon:SetWidth (self.Badges.Sizes [DmgRank.rank.level] [1]*1.33)
|
|
self.TitleIcon:SetHeight (self.Badges.Sizes [DmgRank.rank.level] [2]*1.33)
|
|
self.TitleIcon:SetPoint ("topleft", DmgRankFrame, 20+self.Badges.SetPointMod[DmgRank.rank.level][1], -20+self.Badges.SetPointMod[DmgRank.rank.level][2])
|
|
|
|
--> update last try atempts
|
|
for i = 1, 5 do
|
|
if (DmgRank.rank.lasttry [i]) then
|
|
self.Try [i]:SetText ("#"..i..": ".. _detalhes:comma_value (DmgRank.rank.lasttry [i]))
|
|
else
|
|
self.Try [i]:SetText ("-")
|
|
end
|
|
end
|
|
|
|
--> update last levels ups
|
|
for i = 1, 5 do
|
|
if (DmgRank.rank.dpshistory [i]) then
|
|
self.Dps [i]:SetText (Loc ["STRING_RANK"] .. " ".. DmgRank.rank.dpshistory [i])
|
|
else
|
|
self.Dps [i]:SetText ("-")
|
|
end
|
|
end
|
|
end
|
|
|
|
--> Refresh on Addon Load
|
|
DmgRank:Refresh()
|
|
|
|
local update = 0
|
|
local player --> short cut for Player Actor Object
|
|
|
|
--> Cancel function
|
|
function DmgRank:Cancel()
|
|
if (DmgRank.Time and DmgRank.Time.Working) then
|
|
print (Loc ["STRING_CANCELLED"])
|
|
DmgRank.Time.Working = false
|
|
DmgRank.Time.Done = true
|
|
DmgRank.Frame:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
--> Exec function
|
|
local DoDmgRank = function (self, elapsed)
|
|
|
|
DmgRank.Time.Elapsed = DmgRank.Time.Elapsed + elapsed
|
|
update = update + elapsed
|
|
|
|
if (_GetTime() > DmgRank.Time.EndTime) then --> reached the end time
|
|
if (DmgRank.Time.Working and not DmgRank.Time.Done) then
|
|
DmgRank:Cancel()
|
|
DmgRank:Finish()
|
|
end
|
|
else
|
|
--> aqui vem as fun��es que verificam se o jogador esta em grupo ou se tem algum buff proibido
|
|
DmgRank.Time.Tick = DmgRank.Time.Tick + elapsed
|
|
if (DmgRank.Time.Tick > 1) then
|
|
DmgRank.Time.Tick = 0
|
|
if (not _UFC ("player")) then --> isn't in combat
|
|
print (Loc ["STRING_CANCELLED_NOT_COMBAT"])
|
|
DmgRank:Cancel()
|
|
elseif (_IsInRaid() or _IsInGroup()) then
|
|
print (Loc ["STRING_CANCELLED_IN_GROUP"])
|
|
DmgRank:Cancel()
|
|
else
|
|
--> check for not allowed buffs:
|
|
for i = 1, 41 do
|
|
local auraName, _, _, _, _, _, _, _, _, _, spellId = _UnitAura ("player", i)
|
|
if (spellId and (spellId == 2825 or spellId == 80353 or spellId == 90355)) then --> bloodlust//timewarp//ancient hysteria
|
|
print (Loc ["STRING_CANCELLED_AURA"] .. auraName)
|
|
DmgRank:Cancel()
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if (update > 0.050) then
|
|
|
|
local minutos, segundos = _math_floor (DmgRank.Time.Elapsed/60), _math_floor (DmgRank.Time.Elapsed%60)
|
|
if (segundos < 10) then
|
|
segundos = "0"..segundos
|
|
end
|
|
local mili = _cstr ("%.2f", DmgRank.Time.Elapsed - _math_floor (DmgRank.Time.Elapsed))*100
|
|
if (mili < 10) then
|
|
mili = "0"..mili
|
|
end
|
|
DmgRank.TimeMinutes:SetText ("0".. minutos .. ":")
|
|
DmgRank.TimeSeconds:SetText (segundos ..":")
|
|
DmgRank.TimeMiliSeconds:SetText (mili)
|
|
|
|
DmgRank.MainDamageDisplay:SetText (_detalhes:comma_value (player.total))
|
|
update = 0
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
--> add failed attempt to falied records
|
|
function DmgRank:FailedLevelUpRank()
|
|
table.insert (DmgRank.rank.lasttry, 1, player.total)
|
|
table.remove (DmgRank.rank.lasttry, 6)
|
|
DmgRank:Refresh()
|
|
end
|
|
|
|
--> Levelup
|
|
function DmgRank:LevelUpRank()
|
|
_detalhes:PlayGlow (GlowFrame)
|
|
DmgRank.rank.level = DmgRank.rank.level + 1
|
|
|
|
if (DmgRank.rank.annouce) then
|
|
SendChatMessage (UnitName ("player") .. " " .. Loc ["STRING_ANNOUNCE_STRING"] .. " " .. DmgRank.rank.level .. " (" .. self.Titles [DmgRank.rank.level] .. ") " .. Loc ["STRING_ANNOUNCE_ON"] .. " Details! " .. Loc ["STRING_PLUGIN_NAME"] .. ".", "GUILD")
|
|
end
|
|
|
|
DmgRank.rank.dps = player.total
|
|
table.insert (DmgRank.rank.dpshistory, 1, DmgRank.rank.level..": ".._detalhes:comma_value (player.total))
|
|
table.remove (DmgRank.rank.dpshistory, 6)
|
|
DmgRank:Refresh()
|
|
end
|
|
|
|
--> When the time is gone
|
|
function DmgRank:Finish()
|
|
local DamageGoal = DmgRank.TimeGoal [DmgRank.rank.level].damage --> damage
|
|
if (player.total > DamageGoal) then --> yeah, you didit
|
|
DmgRank:LevelUpRank()
|
|
else
|
|
DmgRank:FailedLevelUpRank()
|
|
end
|
|
end
|
|
|
|
--> When a new combat is received by the PlugIn
|
|
function DmgRank:Start()
|
|
|
|
if (DmgRank.Time and DmgRank.Time.Working) then
|
|
return
|
|
end
|
|
|
|
if (not DmgRank.TimeGoal[DmgRank.rank.level].damage) then
|
|
return
|
|
end
|
|
|
|
--> reset
|
|
DmgRank.TimeMinutes:SetText ("00:")
|
|
DmgRank.TimeSeconds:SetText ("00:")
|
|
DmgRank.TimeMiliSeconds:SetText ("00")
|
|
DmgRank.MainDamageDisplay:SetText ("00.000.000")
|
|
|
|
DmgRank.Time = {}
|
|
DmgRank.Time.StartTime = _GetTime()
|
|
DmgRank.Time.EndTime = DmgRank.Time.StartTime + DmgRank.TimeGoal[DmgRank.rank.level].time
|
|
DmgRank.Time.Elapsed = 0
|
|
DmgRank.Time.Done = nil
|
|
DmgRank.Time.Working = true
|
|
DmgRank.Time.Tick = 0
|
|
player = _detalhes:GetActor() --> param 1 = combat | param 2 = attribute | param 3 = player name
|
|
update = 0
|
|
DmgRank.Frame:SetScript ("OnUpdate", DoDmgRank)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function DmgRank:OnEvent (_, event, ...)
|
|
|
|
if (event == "ADDON_LOADED") then
|
|
local AddonName = select (1, ...)
|
|
if (AddonName == "Details_DmgRank") then
|
|
|
|
if (_G._detalhes) then
|
|
|
|
--> create widgets
|
|
CreatePluginFrames (_detalhes_databaseDmgRank)
|
|
|
|
local MINIMAL_DETAILS_VERSION_REQUIRED = 1
|
|
|
|
--> Install plugin inside details
|
|
local install = _G._detalhes:InstallPlugin ("SOLO", Loc ["STRING_PLUGIN_NAME"], "Interface\\Icons\\ACHIEVEMENT_GUILDPERK_HONORABLEMENTION_RANK2", DmgRank, "DETAILS_PLUGIN_DAMAGE_RANK", MINIMAL_DETAILS_VERSION_REQUIRED)
|
|
if (type (install) == "table" and install.error) then
|
|
print (install.error)
|
|
end
|
|
|
|
--> Register needed events
|
|
_G._detalhes:RegisterEvent (DmgRank, "COMBAT_PLAYER_TIMESTARTED")
|
|
|
|
end
|
|
end
|
|
|
|
elseif (event == "PLAYER_LOGOUT") then
|
|
_detalhes_databaseDmgRank = DmgRank.rank
|
|
end
|
|
end |