476 lines
20 KiB
Lua
476 lines
20 KiB
Lua
local C_NamePlate = C_NamePlate
|
|
local Gladdy = LibStub("Gladdy")
|
|
local L = Gladdy.L
|
|
local tremove, tinsert = tremove, tinsert
|
|
local GetSpellInfo, CreateFrame = GetSpellInfo, CreateFrame
|
|
local GetTime, GetPlayerInfoByGUID, UnitIsEnemy, UnitGUID = GetTime, GetPlayerInfoByGUID, UnitIsEnemy, UnitGUID
|
|
local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo
|
|
|
|
local cooldowns = {
|
|
[2484] = 3, --Earthbind
|
|
[8143] = 4, -- Tremor
|
|
[8166] = 4, -- Poison Cleansing
|
|
[8170] = 4, -- Disease Cleansing
|
|
[1535] = { cd = 4, once = true }, -- Fire Nova 1
|
|
[8498] = { cd = 4, once = true }, -- Fire Nova 2
|
|
[8499] = { cd = 4, once = true }, -- Fire Nova 3
|
|
[11314] = { cd = 4, once = true }, -- Fire Nova 4
|
|
[11315] = { cd = 4, once = true }, -- Fire Nova 5
|
|
[25546] = { cd = 4, once = true }, -- Fire Nova 6
|
|
[25547] = { cd = 4, once = true }, -- Fire Nova 7
|
|
[8190] = 2, -- Magma 1
|
|
[10585] = 2, -- Magma 2
|
|
[10586] = 2, -- Magma 3
|
|
[10587] = 2, -- Magma 4
|
|
[25552] = 2, -- Magma 5
|
|
[5394] = 2, -- Healing Stream 1
|
|
[6375] = 2, -- Healing Stream 2
|
|
[6377] = 2, -- Healing Stream 3
|
|
[10462] = 2, -- Healing Stream 4
|
|
[10463] = 2, -- Healing Stream 5
|
|
[25567] = 2, -- Healing Stream 6
|
|
[5675] = 2, -- Mana Spring 1
|
|
[10495] = 2, -- Mana Spring 2
|
|
[10496] = 2, -- Mana Spring 3
|
|
[10497] = 2, -- Mana Spring 4
|
|
[25570] = 2, -- Mana Spring 5
|
|
}
|
|
|
|
local ninetyDegreeInRad = 90 * math.pi / 180
|
|
|
|
---------------------------------------------------
|
|
|
|
-- Core
|
|
|
|
---------------------------------------------------
|
|
|
|
|
|
local TotemPulse = Gladdy:NewModule("Totem Pulse", nil, {
|
|
totemPulseEnabled = true,
|
|
totemPulseEnabledShowFriendly = true,
|
|
totemPulseEnabledShowEnemy = true,
|
|
totemPulseAttachToTotemPlate = true,
|
|
totemPulseStyle = "", -- "COOLDOWN", "COOLDOWNREVERSE", "BARVERTICAL", "BARHORIZONTAL"
|
|
totemPulseTextColor = { r = 1, g = 1, b = 1, a = 0 },
|
|
--bar
|
|
totemPulseBarWidth = 40,
|
|
totemPulseBarHeight = 20,
|
|
totemPulseBarColor = { r = 1, g = 0, b = 0, a = 1 },
|
|
totemPulseBarBgColor = { r = 0, g = 1, b = 0, a = 1 },
|
|
totemPulseBarBorderColor = { r = 0, g = 0, b = 0, a = 1 },
|
|
totemPulseBarBorderSize = 5,
|
|
totemPulseBarBorderStyle = "Gladdy Tooltip squared",
|
|
totemPulseBarTexture = "Smooth",
|
|
--cooldown
|
|
totemPulseCooldownAlpha = 1,
|
|
})
|
|
|
|
function TotemPulse.OnEvent(self, event, ...)
|
|
TotemPulse[event](self, ...)
|
|
end
|
|
|
|
function TotemPulse:Initialize()
|
|
self.cooldowns = cooldowns
|
|
self.timeStamps = {}
|
|
self.cooldownCache = {}
|
|
self.barCache = {}
|
|
self.activeFrames = { bars = {}, cooldowns = {} }
|
|
self:SetScript("OnEvent", self.OnEvent)
|
|
self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
|
|
self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
|
|
self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
|
|
self:RegisterEvent("UNIT_NAME_UPDATE")
|
|
end
|
|
|
|
---------------------------------------------------
|
|
|
|
-- EVENTS
|
|
|
|
---------------------------------------------------
|
|
|
|
function TotemPulse:COMBAT_LOG_EVENT_UNFILTERED()
|
|
local _,eventType,_,sourceGUID,_,_,_,destGUID,_,_,_,spellID,spellName,spellSchool,extraSpellId,extraSpellName,extraSpellSchool = CombatLogGetCurrentEventInfo()
|
|
print(eventType, spellName, spellID, destGUID)
|
|
if eventType == "SPELL_SUMMON" then
|
|
if cooldowns[spellID] then
|
|
print(eventType, spellName, spellID, GetPlayerInfoByGUID(sourceGUID))
|
|
self.timeStamps[destGUID] = { timeStamp = GetTime(), spellID = spellID }
|
|
end
|
|
elseif eventType == "UNIT_DESTROYED" then
|
|
self.timeStamps[destGUID] = nil
|
|
end
|
|
end
|
|
|
|
function TotemPulse:NAME_PLATE_UNIT_REMOVED(unitId)
|
|
local nameplate = C_NamePlate.GetNamePlateForUnit(unitId)
|
|
if nameplate.totemTick then
|
|
print("NAME_PLATE_UNIT_REMOVED", nameplate.totemTick)
|
|
nameplate.totemTick:SetScript("OnUpdate", nil)
|
|
nameplate.totemTick:Hide()
|
|
nameplate.totemTick:SetParent(nil)
|
|
tinsert(nameplate.totemTick.bar and self.barCache or self.cooldownCache, nameplate.totemTick)
|
|
self.activeFrames.bars[nameplate.totemTick] = nil
|
|
self.activeFrames.cooldowns[nameplate.totemTick] = nil
|
|
nameplate.totemTick = nil
|
|
end
|
|
end
|
|
|
|
function TotemPulse:NAME_PLATE_UNIT_ADDED(unitId)
|
|
self:OnUnitAdded(unitId, "NAME_PLATE_UNIT_ADDED")
|
|
end
|
|
|
|
function TotemPulse:UNIT_NAME_UPDATE(unitId)
|
|
self:OnUnitAdded(unitId, "UNIT_NAME_UPDATE")
|
|
end
|
|
|
|
function TotemPulse:OnUnitAdded(unitId, event)
|
|
local isEnemy = UnitIsEnemy("player", unitId)
|
|
local guid = UnitGUID(unitId)
|
|
|
|
local nameplate = C_NamePlate.GetNamePlateForUnit(unitId)
|
|
|
|
if nameplate then
|
|
print(event, self.timeStamps[guid], nameplate.totemTick)
|
|
if self.timeStamps[guid] then
|
|
self:AddTimerFrame(nameplate, self.timeStamps[guid], Gladdy.db.totemPulseAttachToTotemPlate and nameplate.gladdyTotemFrame)
|
|
else
|
|
if nameplate.totemTick then
|
|
nameplate.totemTick:SetScript("OnUpdate", nil)
|
|
nameplate.totemTick:Hide()
|
|
nameplate.totemTick:SetParent(nil)
|
|
tinsert(nameplate.totemTick.bar and self.barCache or self.cooldownCache, nameplate.totemTick)
|
|
self.activeFrames.bars[nameplate.totemTick] = nil
|
|
self.activeFrames.cooldowns[nameplate.totemTick] = nil
|
|
nameplate.totemTick = nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------
|
|
|
|
-- FRAMES
|
|
|
|
---------------------------------------------------
|
|
|
|
function TotemPulse:CreateCooldownFrame(gladdyTotemFrame)
|
|
local totemTick
|
|
|
|
if gladdyTotemFrame then
|
|
if #self.cooldownCache > 0 then
|
|
totemTick = tremove(self.cooldownCache, #self.cooldownCache)
|
|
else
|
|
Gladdy:Print("TotemPulse:CreateCooldownFrame()", "CreateCooldown")
|
|
totemTick = CreateFrame("Cooldown", nil, nil, "CooldownFrameTemplate")
|
|
totemTick.noCooldownCount = true
|
|
totemTick:SetFrameStrata("MEDIUM")
|
|
totemTick:SetFrameLevel(4)
|
|
totemTick:SetReverse(true)
|
|
totemTick:SetHideCountdownNumbers(true)
|
|
totemTick:SetAlpha(Gladdy.db.totemPulseCooldownAlpha)
|
|
|
|
totemTick.text = totemTick:CreateFontString(nil, "OVERLAY")
|
|
totemTick.text:SetPoint("LEFT", totemTick, "LEFT", 4, 0)
|
|
totemTick.text:SetFont("Fonts\\FRIZQT__.TTF", 16, "OUTLINE")
|
|
totemTick.text:SetJustifyH("LEFT")
|
|
totemTick.text:SetShadowOffset(1, -1)
|
|
totemTick.text:SetTextColor(Gladdy:SetColor(Gladdy.db.totemPulseTextColor))
|
|
end
|
|
else
|
|
if #self.barCache > 0 then
|
|
Gladdy:Print("TotemPulse:CreateCooldownFrame()", #self.barCache)
|
|
totemTick = tremove(self.barCache, #self.barCache)
|
|
else
|
|
Gladdy:Print("TotemPulse:CreateCooldownFrame()", "CreateBar")
|
|
totemTick = CreateFrame("Frame", nil)
|
|
|
|
totemTick:SetWidth(Gladdy.db.totemPulseBarWidth)
|
|
totemTick:SetHeight(Gladdy.db.totemPulseBarHeight)
|
|
|
|
totemTick.backdrop = CreateFrame("Frame", nil, totemTick, BackdropTemplateMixin and "BackdropTemplate")
|
|
totemTick.backdrop:SetAllPoints(totemTick)
|
|
totemTick.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "totemPulseBarBorderStyle"),
|
|
edgeSize = Gladdy.db.totemPulseBarBorderSize })
|
|
totemTick.backdrop:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.totemPulseBarBorderColor))
|
|
totemTick.backdrop:SetFrameLevel(1)
|
|
--totemTick.backdrop:SetFrameStrata(Gladdy.db.castBarFrameStrata)
|
|
--totemTick.backdrop:SetFrameLevel(Gladdy.db.castBarFrameLevel - 1)
|
|
|
|
totemTick.bar = CreateFrame("StatusBar", nil, totemTick)
|
|
totemTick.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "totemPulseBarTexture"))
|
|
totemTick.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.totemPulseBarColor))
|
|
totemTick.bar:SetOrientation("Vertical")
|
|
totemTick.bar:SetFrameLevel(0)
|
|
totemTick.bar:SetPoint("TOPLEFT", totemTick, "TOPLEFT", (Gladdy.db.totemPulseBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.totemPulseBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
|
totemTick.bar:SetPoint("BOTTOMRIGHT", totemTick, "BOTTOMRIGHT", -(Gladdy.db.totemPulseBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.totemPulseBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
|
|
|
totemTick.spark = totemTick.bar:CreateTexture(nil, "OVERLAY")
|
|
totemTick.spark:SetTexture("Interface\\CastingBar\\UI-CastingBar-Spark")
|
|
totemTick.spark:SetBlendMode("ADD")
|
|
totemTick.spark:SetWidth(8)
|
|
totemTick.spark:SetHeight(40)
|
|
totemTick.spark.position = 0
|
|
totemTick.spark:SetRotation(ninetyDegreeInRad)
|
|
|
|
totemTick.bg = totemTick.bar:CreateTexture(nil, "BACKGROUND")
|
|
totemTick.bg:SetTexture(Gladdy:SMFetch("statusbar", "totemPulseBarTexture"))
|
|
totemTick.bg:SetAllPoints(totemTick.bar)
|
|
totemTick.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.totemPulseBarBgColor))
|
|
|
|
totemTick.text = totemTick.bar:CreateFontString(nil, "OVERLAY")
|
|
totemTick.text:SetPoint("LEFT", totemTick, "LEFT", 4, 0)
|
|
totemTick.text:SetFont("Fonts\\FRIZQT__.TTF", 16, "OUTLINE")
|
|
totemTick.text:SetJustifyH("LEFT")
|
|
totemTick.text:SetShadowOffset(1, -1)
|
|
totemTick.text:SetTextColor(Gladdy:SetColor(Gladdy.db.totemPulseTextColor))
|
|
end
|
|
end
|
|
return totemTick
|
|
end
|
|
|
|
function TotemPulse:AddTimerFrame(nameplate, timestamp, gladdyTotemFrame)
|
|
if nameplate:IsShown() and cooldowns[timestamp.spellID] then
|
|
if not nameplate.totemTick then
|
|
nameplate.totemTick = TotemPulse:CreateCooldownFrame(gladdyTotemFrame)
|
|
end
|
|
nameplate.totemTick:SetParent(nameplate)
|
|
nameplate.totemTick:ClearAllPoints()
|
|
if gladdyTotemFrame then
|
|
nameplate.totemTick:SetPoint("TOPLEFT", gladdyTotemFrame, "TOPLEFT", Gladdy.db.npTotemPlatesSize/16, -Gladdy.db.npTotemPlatesSize/16)
|
|
nameplate.totemTick:SetPoint("BOTTOMRIGHT", gladdyTotemFrame, "BOTTOMRIGHT", -Gladdy.db.npTotemPlatesSize/16, Gladdy.db.npTotemPlatesSize/16)
|
|
else
|
|
nameplate.totemTick:SetPoint("TOP", nameplate, "BOTTOM")
|
|
end
|
|
|
|
local cd = type(cooldowns[timestamp.spellID]) == "table" and cooldowns[timestamp.spellID].cd or cooldowns[timestamp.spellID]
|
|
local once = type(cooldowns[timestamp.spellID]) == "table"
|
|
local cooldown = (timestamp.timeStamp - GetTime()) % cd
|
|
|
|
if not gladdyTotemFrame then
|
|
nameplate.totemTick.bar:SetMinMaxValues(0, cd)
|
|
nameplate.totemTick.bar:SetValue(cooldown)
|
|
self.activeFrames.bars[nameplate.totemTick] = nameplate.totemTick
|
|
else
|
|
self.activeFrames.cooldowns[nameplate.totemTick] = nameplate.totemTick
|
|
end
|
|
|
|
nameplate.totemTick.timestamp = timestamp.timeStamp
|
|
nameplate.totemTick.maxValue = cd
|
|
nameplate.totemTick.value = cooldown
|
|
nameplate.totemTick.once = once
|
|
|
|
print("once", once, " - totemTick.once", nameplate.totemTick.once, " - cd off", math.abs(timestamp.timeStamp - GetTime()) > cd)
|
|
if once and GetTime() - timestamp.timeStamp > cd then
|
|
nameplate.totemTick:SetScript("OnUpdate", nil)
|
|
nameplate.totemTick:Hide()
|
|
print("nameplate.totemTick:Hide()")
|
|
else
|
|
nameplate.totemTick:SetScript("OnUpdate", function(totemTick, elapsed)
|
|
totemTick.now = GetTime()
|
|
totemTick.value = (totemTick.timestamp - totemTick.now) % totemTick.maxValue
|
|
if totemTick.once and totemTick.now - totemTick.timestamp >= totemTick.maxValue then
|
|
totemTick:SetScript("OnUpdate", nil)
|
|
print("OnUpdate totemTick:Hide()")
|
|
totemTick:Hide()
|
|
end
|
|
if not totemTick.bar and not (totemTick.once and totemTick.now - totemTick.timestamp >= totemTick.maxValue) then
|
|
totemTick:SetCooldown(totemTick.now - totemTick.value, totemTick.maxValue)
|
|
elseif totemTick.bar then
|
|
totemTick.spark.position = (totemTick.value / totemTick.maxValue) * totemTick.bar:GetHeight()
|
|
if ( totemTick.spark.position < 0 ) then
|
|
totemTick.spark.position = 0
|
|
end
|
|
totemTick.spark:SetPoint("CENTER", totemTick.bar, "BOTTOM", 0, totemTick.spark.position)
|
|
totemTick.bar:SetValue(totemTick.value)
|
|
end
|
|
totemTick.text:SetFormattedText("%.1f", totemTick.value)
|
|
end)
|
|
print("nameplate.totemTick:Show()")
|
|
nameplate.totemTick:Show()
|
|
end
|
|
else
|
|
if nameplate.totemTick then
|
|
nameplate.totemTick:SetScript("OnUpdate", nil)
|
|
nameplate.totemTick:Hide()
|
|
nameplate.totemTick:SetParent(nil)
|
|
tinsert(nameplate.totemTick.bar and self.barCache or self.cooldownCache, nameplate.totemTick)
|
|
self.activeFrames.bars[nameplate.totemTick] = nil
|
|
self.activeFrames.cooldowns[nameplate.totemTick] = nil
|
|
nameplate.totemTick = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
function TotemPulse:UpdateBar(bar)
|
|
bar:SetWidth(Gladdy.db.totemPulseBarWidth)
|
|
bar:SetHeight(Gladdy.db.totemPulseBarHeight)
|
|
|
|
bar.backdrop:SetBackdrop({ edgeFile = Gladdy:SMFetch("border", "totemPulseBarBorderStyle"),
|
|
edgeSize = Gladdy.db.totemPulseBarBorderSize })
|
|
bar.backdrop:SetBackdropBorderColor(Gladdy:SetColor(Gladdy.db.totemPulseBarBorderColor))
|
|
|
|
bar.bar:SetStatusBarTexture(Gladdy:SMFetch("statusbar", "totemPulseBarTexture"))
|
|
bar.bar:SetStatusBarColor(Gladdy:SetColor(Gladdy.db.totemPulseBarColor))
|
|
bar.bar:SetOrientation("Vertical")
|
|
bar.bar:SetPoint("TOPLEFT", bar, "TOPLEFT", (Gladdy.db.totemPulseBarBorderSize/Gladdy.db.statusbarBorderOffset), -(Gladdy.db.totemPulseBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
|
bar.bar:SetPoint("BOTTOMRIGHT", bar, "BOTTOMRIGHT", -(Gladdy.db.totemPulseBarBorderSize/Gladdy.db.statusbarBorderOffset), (Gladdy.db.totemPulseBarBorderSize/Gladdy.db.statusbarBorderOffset))
|
|
|
|
bar.spark:SetWidth(8)
|
|
bar.spark:SetHeight(40)
|
|
bar.spark:SetRotation(ninetyDegreeInRad)
|
|
|
|
bar.bg:SetTexture(Gladdy:SMFetch("statusbar", "totemPulseBarTexture"))
|
|
bar.bg:SetVertexColor(Gladdy:SetColor(Gladdy.db.totemPulseBarBgColor))
|
|
|
|
bar.text:SetFont("Fonts\\FRIZQT__.TTF", 16, "OUTLINE")
|
|
bar.text:SetTextColor(Gladdy:SetColor(Gladdy.db.totemPulseTextColor))
|
|
end
|
|
|
|
function TotemPulse:UpdateCooldown(cooldown)
|
|
cooldown:SetReverse(true)
|
|
cooldown:SetAlpha(Gladdy.db.totemPulseCooldownAlpha)
|
|
cooldown.text:SetFont("Fonts\\FRIZQT__.TTF", 16, "OUTLINE")
|
|
cooldown.text:SetTextColor(Gladdy:SetColor(Gladdy.db.totemPulseTextColor))
|
|
end
|
|
|
|
function TotemPulse:UpdateFrameOnce()
|
|
for _,bar in pairs(self.activeFrames.bars) do
|
|
self:UpdateBar(bar)
|
|
end
|
|
for _,cooldown in pairs(self.activeFrames.cooldowns) do
|
|
self:UpdateCooldown(cooldown)
|
|
end
|
|
for _,bar in pairs(self.barCache) do
|
|
self:UpdateBar(bar)
|
|
end
|
|
for _,cooldown in pairs(self.cooldownCache) do
|
|
self:UpdateCooldown(cooldown)
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------
|
|
|
|
-- TEST
|
|
|
|
---------------------------------------------------
|
|
|
|
|
|
---------------------------------------------------
|
|
|
|
-- OPTIONS
|
|
|
|
---------------------------------------------------
|
|
|
|
function TotemPulse:GetOptions()
|
|
return {
|
|
headerClassicon = {
|
|
type = "header",
|
|
name = L["Totem Pulse"],
|
|
order = 2,
|
|
},
|
|
totemPulseEnabled = Gladdy:option({
|
|
type = "toggle",
|
|
name = L["Totem Pulse Enabled"],
|
|
order = 3,
|
|
}),
|
|
totemPulseAttachToTotemPlate = Gladdy:option({
|
|
type = "toggle",
|
|
name = L["Attach to Totem Plates"],
|
|
order = 4,
|
|
}),
|
|
group = {
|
|
type = "group",
|
|
childGroups = "tree",
|
|
name = L["Frame"],
|
|
order = 4,
|
|
args = {
|
|
barFrame = {
|
|
type = "group",
|
|
name = L["Bar"],
|
|
order = 1,
|
|
args = {
|
|
headerSize = {
|
|
type = "header",
|
|
name = L["Bar Size"],
|
|
order = 1,
|
|
},
|
|
totemPulseBarHeight = Gladdy:option({
|
|
type = "range",
|
|
name = L["Bar height"],
|
|
desc = L["Height of the bar"],
|
|
order = 3,
|
|
min = 0.1,
|
|
max = 200,
|
|
step = .1,
|
|
width = "full",
|
|
}),
|
|
totemPulseBarWidth = Gladdy:option({
|
|
type = "range",
|
|
name = L["Bar width"],
|
|
desc = L["Width of the bars"],
|
|
order = 4,
|
|
min = 0.1,
|
|
max = 600,
|
|
step = .1,
|
|
width = "full",
|
|
}),
|
|
headerTexture = {
|
|
type = "header",
|
|
name = L["Texture"],
|
|
order = 5,
|
|
},
|
|
totemPulseBarTexture = Gladdy:option({
|
|
type = "select",
|
|
name = L["Bar texture"],
|
|
desc = L["Texture of the bar"],
|
|
order = 9,
|
|
dialogControl = "LSM30_Statusbar",
|
|
values = AceGUIWidgetLSMlists.statusbar,
|
|
}),
|
|
totemPulseBarColor = Gladdy:colorOption({
|
|
type = "color",
|
|
name = L["Bar color"],
|
|
desc = L["Color of the cast bar"],
|
|
order = 10,
|
|
hasAlpha = true,
|
|
}),
|
|
totemPulseBarBgColor = Gladdy:colorOption({
|
|
type = "color",
|
|
name = L["Background color"],
|
|
desc = L["Color of the cast bar background"],
|
|
order = 11,
|
|
hasAlpha = true,
|
|
}),
|
|
headerBorder = {
|
|
type = "header",
|
|
name = L["Border"],
|
|
order = 12,
|
|
},
|
|
totemPulseBarBorderSize = Gladdy:option({
|
|
type = "range",
|
|
name = L["Border size"],
|
|
order = 13,
|
|
min = 0.5,
|
|
max = Gladdy.db.castBarHeight/2,
|
|
step = 0.5,
|
|
width = "full",
|
|
}),
|
|
totemPulseBarBorderStyle = Gladdy:option({
|
|
type = "select",
|
|
name = L["Status Bar border"],
|
|
order = 51,
|
|
dialogControl = "LSM30_Border",
|
|
values = AceGUIWidgetLSMlists.border,
|
|
}),
|
|
totemPulseBarBorderColor = Gladdy:colorOption({
|
|
type = "color",
|
|
name = L["Status Bar border color"],
|
|
order = 52,
|
|
hasAlpha = true,
|
|
}),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
end |