PageRenderTime 64ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/Tukui/modules/unitframes/layouts/asphyxia2.lua

http://github.com/Asphyxia/Tukui
Lua | 2015 lines | 1569 code | 299 blank | 147 comment | 211 complexity | 5141aaa91efe28d1cca87ac38426e1a2 MD5 | raw file
  1. local ADDON_NAME, ns = ...
  2. local oUF = ns.oUF or oUF
  3. assert(oUF, "Tukui was unable to locate oUF install.")
  4. ns._Objects = {}
  5. ns._Headers = {}
  6. local T, C, L = unpack(select(2, ...)) -- Import: T - functions, constants, variables; C - config; L - locales
  7. if not C["unitframes"].enable == true then return end
  8. if C["unitframes"].style ~= "Asphyxia2" then return end
  9. ------------------------------------------------------------------------
  10. -- local variables
  11. ------------------------------------------------------------------------
  12. local font1 = C["media"].uffont
  13. local font2 = C["media"].font
  14. local font = C["media"].pixelfont
  15. local normTex = C["media"].normTex
  16. local glowTex = C["media"].glowTex
  17. local bubbleTex = C["media"].bubbleTex
  18. local backdrop = {
  19. bgFile = C["media"].blank,
  20. insets = {top = -T.mult, left = -T.mult, bottom = -T.mult, right = -T.mult},
  21. }
  22. ------------------------------------------------------------------------
  23. -- Layout
  24. ------------------------------------------------------------------------
  25. local function Shared(self, unit)
  26. -- set our own colors
  27. self.colors = T.oUF_colors
  28. -- register click
  29. self:RegisterForClicks("AnyUp")
  30. self:SetScript('OnEnter', UnitFrame_OnEnter)
  31. self:SetScript('OnLeave', UnitFrame_OnLeave)
  32. -- menu? lol
  33. self.menu = T.SpawnMenu
  34. ------------------------------------------------------------------------
  35. -- Features we want for all units at the same time
  36. ------------------------------------------------------------------------
  37. -- here we create an invisible frame for all element we want to show over health/power.
  38. local InvFrame = CreateFrame("Frame", nil, self)
  39. InvFrame:SetFrameStrata("HIGH")
  40. InvFrame:SetFrameLevel(5)
  41. InvFrame:SetAllPoints()
  42. -- symbols, now put the symbol on the frame we created above.
  43. local RaidIcon = InvFrame:CreateTexture(nil, "OVERLAY")
  44. RaidIcon:SetTexture("Interface\\AddOns\\Tukui\\medias\\textures\\raidicons.blp") -- thx hankthetank for texture
  45. RaidIcon:SetHeight(20)
  46. RaidIcon:SetWidth(20)
  47. RaidIcon:SetPoint("TOP", 0, 11)
  48. self.RaidIcon = RaidIcon
  49. ------------------------------------------------------------------------
  50. -- Player and Target units layout (mostly mirror'd)
  51. ------------------------------------------------------------------------
  52. if (unit == "player" or unit == "target") then
  53. -- create a panel
  54. local panel = CreateFrame("Frame", nil, self)
  55. if T.lowversion then
  56. panel:CreatePanel("Default", 186, 21, "BOTTOM", self, "BOTTOM", 0, 0)
  57. else
  58. panel:CreatePanel("Default", 186, 21, "BOTTOM", self, "BOTTOM", 0, 0)
  59. end
  60. panel:SetFrameLevel(2)
  61. panel:SetFrameStrata("MEDIUM")
  62. panel:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  63. panel:SetAlpha(0)
  64. self.panel = panel
  65. -- health bar
  66. local health = CreateFrame('StatusBar', nil, self)
  67. health:Height(13)
  68. health:SetPoint("TOPLEFT")
  69. health:SetPoint("TOPRIGHT")
  70. health:SetStatusBarTexture(normTex)
  71. -- Border for HealthBar
  72. local HealthBorder = CreateFrame("Frame", nil, health)
  73. HealthBorder:SetPoint("TOPLEFT", health, "TOPLEFT", -2, 2)
  74. HealthBorder:SetPoint("BOTTOMRIGHT", health, "BOTTOMRIGHT", 2, -2)
  75. HealthBorder:SetTemplate("Default")
  76. HealthBorder:CreateShadow("Default")
  77. HealthBorder:SetFrameLevel(2)
  78. self.HealthBorder = HealthBorder
  79. -- health bar background
  80. local healthBG = health:CreateTexture(nil, 'BORDER')
  81. healthBG:SetAllPoints()
  82. healthBG:SetTexture(0, 0, 0)
  83. health.value = T.SetFontString(health, font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  84. health.value:Point("RIGHT", health, "RIGHT", -4, 1)
  85. health.PostUpdate = T.PostUpdateHealth
  86. self.Health = health
  87. self.Health.bg = healthBG
  88. health.frequentUpdates = true
  89. if C["unitframes"].showsmooth == true then
  90. health.Smooth = true
  91. end
  92. if C["unitframes"].unicolor == true then
  93. health.colorTapping = false
  94. health.colorDisconnected = false
  95. health.colorClass = false
  96. health:SetStatusBarColor(.150, .150, .150, 1)
  97. healthBG:SetVertexColor(0, 0, 0, 1)
  98. else
  99. health.colorDisconnected = true
  100. health.colorTapping = true
  101. health.colorClass = true
  102. health.colorReaction = true
  103. end
  104. -- power
  105. local power = CreateFrame('StatusBar', nil, self)
  106. power:Size(244, 2)
  107. if unit == "player" then
  108. power:Point("TOPRIGHT", health, "BOTTOMRIGHT", 7, -11)
  109. elseif unit == "target" then
  110. power:Point("TOPLEFT", health, "BOTTOMLEFT", -7, -11)
  111. end
  112. power:SetStatusBarTexture(normTex)
  113. -- Border for Power
  114. local PowerBorder = CreateFrame("Frame", nil, power)
  115. PowerBorder:SetPoint("TOPLEFT", power, "TOPLEFT", -2, 2)
  116. PowerBorder:SetPoint("BOTTOMRIGHT", power, "BOTTOMRIGHT", 2, -2)
  117. PowerBorder:SetTemplate("Default")
  118. PowerBorder:CreateShadow("Default")
  119. PowerBorder:SetFrameLevel(power:GetFrameLevel() - 1)
  120. self.PowerBorder = PowerBorder
  121. local powerBG = power:CreateTexture(nil, 'BORDER')
  122. powerBG:SetAllPoints(power)
  123. powerBG:SetTexture(normTex)
  124. powerBG.multiplier = 0.3
  125. power.value = T.SetFontString(health, font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  126. power.value:Point("LEFT", health, "LEFT", 4, 1)
  127. power.PreUpdate = T.PreUpdatePower
  128. power.PostUpdate = T.PostUpdatePower
  129. self.Power = power
  130. self.Power.bg = powerBG
  131. power.frequentUpdates = true
  132. power.colorDisconnected = true
  133. if C["unitframes"].showsmooth == true then
  134. power.Smooth = true
  135. end
  136. if C["unitframes"].unicolor == true then
  137. power.colorTapping = true
  138. power.colorClass = true
  139. power.colorReaction = true
  140. powerBG.multiplier = 0.1
  141. else
  142. power.colorPower = true
  143. end
  144. --[[-- portraits
  145. if (C["unitframes"].charportrait == true) then
  146. local portrait = CreateFrame("PlayerModel", nil, health)
  147. portrait:SetFrameLevel(health:GetFrameLevel())
  148. portrait:SetAllPoints(health)
  149. portrait:SetAlpha(.15)
  150. portrait.PostUpdate = T.PortraitUpdate
  151. self.Portrait = portrait
  152. end--]]
  153. -- portraits
  154. if (C["unitframes"].charportrait == true) then
  155. local portrait = CreateFrame("PlayerModel", self:GetName().."_Portrait", self)
  156. portrait:SetFrameLevel(8)
  157. portrait:SetHeight(12)
  158. portrait:SetWidth(230)
  159. portrait:SetAlpha(1)
  160. if unit == "player" then
  161. portrait:SetPoint("TOPRIGHT", health, "BOTTOMRIGHT", 0, -24)
  162. elseif unit == "target" then
  163. portrait:SetPoint("TOPLEFT", health, "BOTTOMLEFT", 0, -24)
  164. end
  165. table.insert(self.__elements, T.HidePortrait)
  166. self.Portrait = portrait
  167. -- Border for Portrait
  168. local PFrame = CreateFrame("Frame", nil, portrait)
  169. PFrame:SetPoint("TOPLEFT", portrait, "TOPLEFT", T.Scale(-2), T.Scale(2))
  170. PFrame:SetPoint("BOTTOMRIGHT", portrait, "BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  171. PFrame:SetTemplate("Default")
  172. PFrame:CreateShadow("Default")
  173. PFrame:SetFrameLevel(2)
  174. self.PFrame = PFrame
  175. end
  176. if (C["unitframes"].classicon == true) then
  177. local classicon = CreateFrame("Frame", self:GetName().."_ClassIconBorder", self)
  178. --classicon:CreateShadow("Default")
  179. if unit == "player" then
  180. classicon:CreatePanel("Default", 38, 38, "RIGHT", TukuiPlayer, "LEFT", -14, -4)
  181. elseif unit == "target" then
  182. classicon:CreatePanel("Default", 38, 38, "LEFT", TukuiTarget, "RIGHT", 14, -4)
  183. end
  184. local class = classicon:CreateTexture(self:GetName().."_ClassIcon", "ARTWORK")
  185. class:Point("TOPLEFT", 2, -2)
  186. class:Point("BOTTOMRIGHT", -2, 2)
  187. self.ClassIcon = class
  188. end
  189. if T.myclass == "PRIEST" and C["unitframes"].weakenedsoulbar then
  190. local ws = CreateFrame("StatusBar", self:GetName().."_WeakenedSoul", power)
  191. ws:SetAllPoints(power)
  192. ws:SetStatusBarTexture(C.media.normTex)
  193. ws:GetStatusBarTexture():SetHorizTile(false)
  194. ws:SetBackdrop(backdrop)
  195. ws:SetBackdropColor(unpack(C.media.backdropcolor))
  196. ws:SetStatusBarColor(191/255, 10/255, 10/255)
  197. self.WeakenedSoul = ws
  198. end
  199. if (unit == "player") then
  200. -- combat icon
  201. local Combat = health:CreateTexture(nil, "OVERLAY")
  202. Combat:Height(19)
  203. Combat:Width(19)
  204. Combat:SetPoint("CENTER",0,0)
  205. Combat:SetVertexColor(0.69, 0.31, 0.31)
  206. self.Combat = Combat
  207. -- custom info (low mana warning)
  208. FlashInfo = CreateFrame("Frame", "TukuiFlashInfo", self)
  209. FlashInfo:SetScript("OnUpdate", T.UpdateManaLevel)
  210. FlashInfo.parent = self
  211. FlashInfo:SetAllPoints(health)
  212. FlashInfo.ManaLevel = T.SetFontString(FlashInfo, font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  213. FlashInfo.ManaLevel:SetPoint("CENTER", health, "CENTER", 0, 1)
  214. self.FlashInfo = FlashInfo
  215. -- pvp status icon
  216. local PVP = health:CreateTexture(nil, "OVERLAY")
  217. PVP:SetHeight(32)
  218. PVP:SetWidth(32)
  219. PVP:SetPoint("CENTER", 5, -6)
  220. self.PvP = PVP
  221. if(UnitIsPVP(unit) and factionGroup) then
  222. if(factionGroup == 'Horde') then
  223. pvp:SetTexture([[Interface\AddOns\Tukui\medias\textures\Horde]])
  224. else
  225. pvp:SetTexture([[Interface\AddOns\Tukui\medias\textures\Alliance]])
  226. end
  227. end
  228. -- leader icon
  229. local Leader = InvFrame:CreateTexture(nil, "OVERLAY")
  230. Leader:Height(14)
  231. Leader:Width(14)
  232. Leader:Point("TOPLEFT", -9, 9)
  233. self.Leader = Leader
  234. -- master looter
  235. local MasterLooter = InvFrame:CreateTexture(nil, "OVERLAY")
  236. MasterLooter:Height(14)
  237. MasterLooter:Width(14)
  238. self.MasterLooter = MasterLooter
  239. self:RegisterEvent("PARTY_LEADER_CHANGED", T.MLAnchorUpdate)
  240. self:RegisterEvent("PARTY_MEMBERS_CHANGED", T.MLAnchorUpdate)
  241. --This is the edited code for the original rep/exp bar
  242. -- experience bar on player via mouseover for player currently levelling a character
  243. if T.level ~= MAX_PLAYER_LEVEL then
  244. local Experience = CreateFrame("StatusBar", self:GetName().."_Experience", self)
  245. Experience:SetStatusBarTexture(normTex)
  246. Experience:SetStatusBarColor(0, 0.4, 1, .8)
  247. Experience:Size(TukuiChatBackgroundLeft:GetWidth() - 4, 2)
  248. Experience:Point("BOTTOM", TukuiChatBackgroundLeft, "TOP", 0, 5)
  249. Experience:SetFrameLevel(8)
  250. Experience:SetFrameStrata("HIGH")
  251. Experience.Tooltip = true
  252. self.Experience = Experience
  253. local ExperienceBG = Experience:CreateTexture(nil, 'BORDER')
  254. ExperienceBG:SetAllPoints()
  255. ExperienceBG:SetTexture(normTex)
  256. ExperienceBG:SetVertexColor(0,0,0)
  257. Experience.Text = self.Experience:CreateFontString(nil, 'OVERLAY')
  258. Experience.Text:SetFont(font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  259. Experience.Text:SetPoint('CENTER', 0, 1)
  260. Experience.Text:SetShadowOffset(T.mult, -T.mult)
  261. self.Experience.Text = Experience.Text
  262. self.Experience.PostUpdate = T.ExperienceText
  263. self.Experience.Rested = CreateFrame('StatusBar', nil, self.Experience)
  264. self.Experience.Rested:SetAllPoints(self.Experience)
  265. self.Experience.Rested:SetStatusBarTexture(normTex)
  266. self.Experience.Rested:SetStatusBarColor(1, 0, 1, 0.2)
  267. local Resting = self:CreateTexture(nil, "OVERLAY")
  268. Resting:SetHeight(28)
  269. Resting:SetWidth(28)
  270. Resting:SetPoint("BOTTOMRIGHT", self, "TOPLEFT", 10 -4)
  271. Resting:SetTexture([=[Interface\CharacterFrame\UI-StateIcon]=])
  272. Resting:SetTexCoord(0, 0.5, 0, 0.421875)
  273. self.Resting = Resting
  274. local ExperienceFrame = CreateFrame("Frame", nil, self.Experience)
  275. ExperienceFrame:SetPoint("TOPLEFT", T.Scale(-2), T.Scale(2))
  276. ExperienceFrame:SetPoint("BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  277. ExperienceFrame:SetTemplate("Transparent")
  278. ExperienceFrame:CreateShadow("Default")
  279. ExperienceFrame:SetFrameLevel(self.Experience:GetFrameLevel() - 1)
  280. local function ModifiedBackdrop(self)
  281. local color = RAID_CLASS_COLORS[T.myclass]
  282. self:SetBackdropColor(unpack(C["media"].backdropcolor))
  283. self:SetBackdropBorderColor(color.r, color.g, color.b)
  284. end
  285. local function OriginalBackdrop(self)
  286. self:SetBackdropColor(unpack(C["media"].backdropcolor))
  287. self:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  288. end
  289. end
  290. -- reputation bar for max level character
  291. if T.level == MAX_PLAYER_LEVEL then
  292. local Reputation = CreateFrame("StatusBar", self:GetName().."_Reputation", self)
  293. Reputation:SetStatusBarTexture(normTex)
  294. Reputation:Size(TukuiChatBackgroundLeft:GetWidth() - 4, 2)
  295. Reputation:Point("BOTTOM", TukuiChatBackgroundLeft, "TOP", 0, 5)
  296. Reputation:SetFrameLevel(10)
  297. local ReputationBG = Reputation:CreateTexture(nil, 'BORDER')
  298. ReputationBG:SetAllPoints()
  299. ReputationBG:SetTexture(normTex)
  300. ReputationBG:SetVertexColor(0,0,0)
  301. Reputation.Text = Reputation:CreateFontString(nil, 'OVERLAY')
  302. Reputation.Text:SetFont(font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  303. Reputation.Text:SetPoint('CENTER', 0, 1)
  304. Reputation.Text:SetShadowOffset(T.mult, -T.mult)
  305. Reputation.Text:Show()
  306. Reputation.PostUpdate = T.UpdateReputation
  307. Reputation.Text = Reputation.Text
  308. Reputation.PostUpdate = T.UpdateReputationColor
  309. Reputation.Tooltip = true
  310. self.Reputation = Reputation
  311. local ReputationFrame = CreateFrame("Frame", nil, self.Reputation)
  312. ReputationFrame:SetPoint("TOPLEFT", T.Scale(-2), T.Scale(2))
  313. ReputationFrame:SetPoint("BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  314. ReputationFrame:SetTemplate("Transparent")
  315. ReputationFrame:CreateShadow("Default")
  316. ReputationFrame:SetFrameLevel(self.Reputation:GetFrameLevel() - 1)
  317. local function ModifiedBackdrop(self)
  318. local color = RAID_CLASS_COLORS[T.myclass]
  319. self:SetBackdropColor(unpack(C["media"].backdropcolor))
  320. self:SetBackdropBorderColor(color.r, color.g, color.b)
  321. end
  322. local function OriginalBackdrop(self)
  323. self:SetBackdropColor(unpack(C["media"].backdropcolor))
  324. self:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  325. end
  326. end
  327. -- show druid mana when shapeshifted in bear, cat or whatever
  328. if T.myclass == "DRUID" then
  329. CreateFrame("Frame"):SetScript("OnUpdate", function() T.UpdateDruidMana(self) end)
  330. local DruidMana = T.SetFontString(health, font1, 12)
  331. DruidMana:SetTextColor(1, 0.49, 0.04)
  332. self.DruidManaText = DruidMana
  333. end
  334. if C["unitframes"].classbar then
  335. if T.myclass == "DRUID" then
  336. -- DRUID MANA BAR
  337. local DruidManaBackground = CreateFrame("Frame", nil, self)
  338. DruidManaBackground:Point("BOTTOMLEFT", self, "TOPLEFT", 0, 7)
  339. DruidManaBackground:Size(230, 2)
  340. DruidManaBackground:SetFrameLevel(8)
  341. DruidManaBackground:SetFrameStrata("MEDIUM")
  342. DruidManaBackground:SetTemplate("Default")
  343. DruidManaBackground:SetBackdropBorderColor(0,0,0,0)
  344. local DruidManaBarStatus = CreateFrame('StatusBar', nil, DruidManaBackground)
  345. DruidManaBarStatus:SetPoint('LEFT', DruidManaBackground, 'LEFT', 0, 0)
  346. DruidManaBarStatus:SetSize(DruidManaBackground:GetWidth(), DruidManaBackground:GetHeight())
  347. DruidManaBarStatus:SetStatusBarTexture(normTex)
  348. DruidManaBarStatus:SetStatusBarColor(.30, .52, .90)
  349. DruidManaBarStatus:SetScript("OnShow", function() T.DruidBarDisplay(self, false) end)
  350. DruidManaBarStatus:SetScript("OnUpdate", function() T.DruidBarDisplay(self, true) end) -- just forcing 1 update on login for buffs/shadow/etc.
  351. DruidManaBarStatus:SetScript("OnHide", function() T.DruidBarDisplay(self, false) end)
  352. self.DruidManaBackground = DruidManaBackground
  353. self.DruidMana = DruidManaBarStatus
  354. DruidManaBackground.FrameBackdrop = CreateFrame( "Frame", nil, DruidManaBackground )
  355. DruidManaBackground.FrameBackdrop:SetTemplate( "Default" )
  356. DruidManaBackground.FrameBackdrop:SetPoint( "TOPLEFT", -2, 2 )
  357. DruidManaBackground.FrameBackdrop:SetPoint( "BOTTOMRIGHT", 2, -2 )
  358. DruidManaBackground.FrameBackdrop:SetFrameLevel( DruidManaBackground:GetFrameLevel() - 1 )
  359. local eclipseBar = CreateFrame('Frame', nil, self)
  360. eclipseBar:Point("LEFT", health, "TOPLEFT", 0, 8)
  361. eclipseBar:Size(230, 2)
  362. eclipseBar:SetFrameStrata("MEDIUM")
  363. eclipseBar:SetFrameLevel(8)
  364. eclipseBar:SetBackdropBorderColor(0,0,0,0)
  365. eclipseBar:SetScript("OnShow", function() T.DruidBarDisplay(self, false) end)
  366. eclipseBar:SetScript("OnHide", function() T.DruidBarDisplay(self, false) end)
  367. local lunarBar = CreateFrame('StatusBar', nil, eclipseBar)
  368. lunarBar:SetPoint('LEFT', eclipseBar, 'LEFT', 0, 0)
  369. lunarBar:SetSize(eclipseBar:GetWidth(), eclipseBar:GetHeight())
  370. lunarBar:SetStatusBarTexture(normTex)
  371. lunarBar:SetStatusBarColor(.30, .52, .90)
  372. eclipseBar.LunarBar = lunarBar
  373. local solarBar = CreateFrame('StatusBar', nil, eclipseBar)
  374. solarBar:SetPoint('LEFT', lunarBar:GetStatusBarTexture(), 'RIGHT', 0, 0)
  375. solarBar:SetSize(eclipseBar:GetWidth(), eclipseBar:GetHeight())
  376. solarBar:SetStatusBarTexture(normTex)
  377. solarBar:SetStatusBarColor(.80, .82, .60)
  378. eclipseBar.SolarBar = solarBar
  379. local eclipseBarText = eclipseBar:CreateFontString(nil, 'OVERLAY')
  380. eclipseBarText:SetPoint('TOP', eclipseBar, 0, 25)
  381. eclipseBarText:SetPoint('BOTTOM', eclipseBar)
  382. eclipseBarText:SetFont(font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  383. eclipseBarText:SetShadowOffset(T.mult, -T.mult)
  384. eclipseBarText:SetShadowColor(0, 0, 0, 0.4)
  385. eclipseBar.PostUpdatePower = T.EclipseDirection
  386. -- hide "low mana" text on load if eclipseBar is shown
  387. if eclipseBar and eclipseBar:IsShown() then FlashInfo.ManaLevel:SetAlpha(0) end
  388. self.EclipseBar = eclipseBar
  389. self.EclipseBar.Text = eclipseBarText
  390. eclipseBar.FrameBackdrop = CreateFrame("Frame", nil, eclipseBar)
  391. eclipseBar.FrameBackdrop:SetTemplate("Default")
  392. eclipseBar.FrameBackdrop:CreateShadow("Default")
  393. eclipseBar.FrameBackdrop:SetPoint("TOPLEFT", -2, 2)
  394. eclipseBar.FrameBackdrop:SetPoint("BOTTOMRIGHT", 2, -2)
  395. eclipseBar.FrameBackdrop:SetFrameLevel(eclipseBar:GetFrameLevel() - 1)
  396. end
  397. -- set holy power bar or shard bar
  398. if (T.myclass == "WARLOCK" or T.myclass == "PALADIN") then
  399. local bars = CreateFrame("Frame", nil, self)
  400. bars:SetPoint("BOTTOMLEFT", self, "TOPLEFT", 0, 7)
  401. bars:Size(230, 2)
  402. bars:SetBackdropBorderColor(0,0,0,0)
  403. for i = 1, 3 do
  404. bars[i]=CreateFrame("StatusBar", self:GetName().."_Shard"..i, bars)
  405. bars[i]:Height(2)
  406. bars[i]:SetStatusBarTexture(normTex)
  407. bars[i]:GetStatusBarTexture():SetHorizTile(false)
  408. bars[i].bg = bars[i]:CreateTexture(nil, 'BORDER')
  409. if T.myclass == "WARLOCK" then
  410. bars[i]:SetStatusBarColor(148/255, 130/255, 201/255)
  411. bars[i].bg:SetTexture(148/255, 130/255, 201/255)
  412. elseif T.myclass == "PALADIN" then
  413. bars[i]:SetStatusBarColor(228/255,225/255,16/255)
  414. bars[i].bg:SetTexture(228/255,225/255,16/255)
  415. end
  416. if i == 1 then
  417. bars[i]:SetPoint("LEFT", bars)
  418. bars[i]:Width(229/3) -- setting SetWidth here just to fit fit 250 perfectly
  419. bars[i].bg:SetAllPoints(bars[i])
  420. else
  421. bars[i]:Point("LEFT", bars[i-1], "RIGHT", 1, 0)
  422. bars[i]:Width(229/3) -- setting SetWidth here just to fit fit 250 perfectly
  423. bars[i].bg:SetAllPoints(bars[i])
  424. end
  425. bars[i].bg:SetTexture(normTex)
  426. bars[i].bg:SetAlpha(.15)
  427. end
  428. if T.myclass == "WARLOCK" then
  429. bars.Override = T.UpdateShards
  430. self.SoulShards = bars
  431. elseif T.myclass == "PALADIN" then
  432. bars.Override = T.UpdateHoly
  433. self.HolyPower = bars
  434. end
  435. bars.FrameBackdrop = CreateFrame("Frame", nil, bars)
  436. bars.FrameBackdrop:SetTemplate("Default")
  437. bars.FrameBackdrop:CreateShadow("Default")
  438. bars.FrameBackdrop:SetPoint("TOPLEFT", -2, 2)
  439. bars.FrameBackdrop:SetPoint("BOTTOMRIGHT", 2, -2)
  440. bars.FrameBackdrop:SetFrameLevel(bars:GetFrameLevel() - 1)
  441. end
  442. -- deathknight runes
  443. if T.myclass == "DEATHKNIGHT" then
  444. local Runes = CreateFrame("Frame", nil, self)
  445. Runes:Point("BOTTOMLEFT", self, "TOPLEFT", 0, 7)
  446. Runes:Size(230, 2)
  447. for i = 1, 6 do
  448. Runes[i] = CreateFrame("StatusBar", self:GetName().."_Runes"..i, health)
  449. Runes[i]:SetHeight(2)
  450. if i == 1 then
  451. Runes[i]:SetWidth(35)
  452. else
  453. Runes[i]:SetWidth(229/6)
  454. end
  455. if (i == 1) then
  456. Runes[i]:Point("BOTTOMLEFT", self, "TOPLEFT", 0, 7)
  457. else
  458. Runes[i]:Point("TOPLEFT", Runes[i-1], "TOPRIGHT", 1, 0)
  459. end
  460. Runes[i]:SetStatusBarTexture(normTex)
  461. Runes[i]:GetStatusBarTexture():SetHorizTile(false)
  462. end
  463. self.Runes = Runes
  464. Runes.FrameBackdrop = CreateFrame("Frame", nil, Runes)
  465. Runes.FrameBackdrop:SetTemplate("Default")
  466. Runes.FrameBackdrop:CreateShadow("Default")
  467. Runes.FrameBackdrop:SetPoint("TOPLEFT", -2, 2)
  468. Runes.FrameBackdrop:SetPoint("BOTTOMRIGHT", 2, -2)
  469. Runes.FrameBackdrop:SetFrameLevel(Runes:GetFrameLevel() - 1)
  470. end
  471. -- shaman totem bar
  472. if T.myclass == "SHAMAN" then
  473. local TotemBar = {}
  474. TotemBar.Destroy = true
  475. for i = 1, 4 do
  476. TotemBar[i] = CreateFrame("StatusBar", self:GetName().."_TotemBar"..i, self)
  477. if (i == 1) then
  478. TotemBar[i]:Point("BOTTOMLEFT", self, "TOPLEFT", 0, 7)
  479. else
  480. TotemBar[i]:Point("TOPLEFT", TotemBar[i-1], "TOPRIGHT", 5, 0)
  481. end
  482. TotemBar[i]:SetStatusBarTexture(normTex)
  483. TotemBar[i]:Height(2)
  484. if i == 4 then
  485. TotemBar[i]:SetWidth(215/4)
  486. else
  487. TotemBar[i]:SetWidth(215/4)
  488. end
  489. TotemBar[i]:SetBackdrop(backdrop)
  490. TotemBar[i]:SetBackdropColor(0, 0, 0)
  491. TotemBar[i]:SetMinMaxValues(0, 1)
  492. TotemBar[i].bg = TotemBar[i]:CreateTexture(nil, "BORDER")
  493. TotemBar[i].bg:SetAllPoints(TotemBar[i])
  494. TotemBar[i].bg:SetTexture(normTex)
  495. TotemBar[i].bg.multiplier = 0.3
  496. TotemBar[i].FrameBackdrop = CreateFrame("Frame", nil, TotemBar[i])
  497. TotemBar[i].FrameBackdrop:SetTemplate("Default")
  498. TotemBar[i].FrameBackdrop:CreateShadow("Default")
  499. TotemBar[i].FrameBackdrop:SetPoint("TOPLEFT", -2, 2)
  500. TotemBar[i].FrameBackdrop:SetPoint("BOTTOMRIGHT", 2, -2)
  501. TotemBar[i].FrameBackdrop:SetFrameLevel(TotemBar[i]:GetFrameLevel() - 1)
  502. end
  503. self.TotemBar = TotemBar
  504. end
  505. end
  506. -- script for low mana
  507. self:SetScript("OnEnter", function(self)
  508. if self.EclipseBar and self.EclipseBar:IsShown() then
  509. self.EclipseBar.Text:Hide()
  510. end
  511. FlashInfo.ManaLevel:Hide()
  512. UnitFrame_OnEnter(self)
  513. end)
  514. self:SetScript("OnLeave", function(self)
  515. if self.EclipseBar and self.EclipseBar:IsShown() then
  516. self.EclipseBar.Text:Show()
  517. end
  518. FlashInfo.ManaLevel:Show()
  519. UnitFrame_OnLeave(self)
  520. end)
  521. end
  522. if (unit == "target") then
  523. -- Unit name on target
  524. local Name = health:CreateFontString(nil, "OVERLAY")
  525. Name:Point("CENTER", health, "CENTER", 0, 1)
  526. Name:SetJustifyH("LEFT")
  527. Name:SetFont(font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  528. Name:SetShadowOffset(1.25, -1.25)
  529. self:Tag(Name, '[Tukui:getnamecolor][Tukui:nameshort] [Tukui:diffcolor][level] [shortclassification]')
  530. --self.Name = Name
  531. --combo points change to support sCombo
  532. local cp = T.SetFontString(self, font, 15, "MONOCHROMEOUTLINE")
  533. cp:SetPoint("RIGHT", health.border, "LEFT", -5, 0)
  534. self.CPoints = cp
  535. end
  536. if (unit == "target" and C["unitframes"].targetauras) or (unit == "player" and C["unitframes"].playerauras) then
  537. local buffs = CreateFrame("Frame", nil, self)
  538. local debuffs = CreateFrame("Frame", nil, self)
  539. if (T.myclass == "SHAMAN" or T.myclass == "DEATHKNIGHT" or T.myclass == "PALADIN" or T.myclass == "WARLOCK") and (C["unitframes"].playerauras) and (unit == "player") then
  540. if T.lowversion then
  541. buffs:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 34)
  542. else
  543. buffs:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 38)
  544. end
  545. else
  546. if T.lowversion then
  547. buffs:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 26)
  548. else
  549. buffs:SetPoint("TOPLEFT", self, "TOPLEFT", -2, 32)
  550. end
  551. end
  552. if T.lowversion then
  553. buffs:SetHeight(21.5)
  554. buffs:SetWidth(186)
  555. buffs.size = 21.5
  556. buffs.num = 8
  557. debuffs:SetHeight(21.5)
  558. debuffs:SetWidth(186)
  559. debuffs:SetPoint("BOTTOMLEFT", buffs, "TOPLEFT", 0, 2)
  560. debuffs.size = 21.5
  561. debuffs.num = 24
  562. else
  563. buffs:SetHeight(26)
  564. buffs:SetWidth(252)
  565. buffs.size = 27.5
  566. buffs.num = 8
  567. debuffs:SetHeight(26)
  568. debuffs:SetWidth(247)
  569. debuffs:SetPoint("BOTTOMLEFT", buffs, "TOPLEFT", -2, 2)
  570. debuffs.size = 26
  571. debuffs.num = 24
  572. end
  573. buffs.spacing = 2
  574. buffs.initialAnchor = 'TOPLEFT'
  575. buffs.PostCreateIcon = T.PostCreateAura
  576. buffs.PostUpdateIcon = T.PostUpdateAura
  577. self.Buffs = buffs
  578. debuffs.spacing = 2
  579. debuffs.initialAnchor = 'TOPRIGHT'
  580. debuffs["growth-y"] = "UP"
  581. debuffs["growth-x"] = "LEFT"
  582. debuffs.PostCreateIcon = T.PostCreateAura
  583. debuffs.PostUpdateIcon = T.PostUpdateAura
  584. -- An option to show only our debuffs on target
  585. if unit == "target" then
  586. debuffs.onlyShowPlayer = C.unitframes.onlyselfdebuffs
  587. end
  588. self.Debuffs = debuffs
  589. end
  590. -- cast bar for player and target
  591. if (C["unitframes"].unitcastbar == true) then
  592. local castbar = CreateFrame("StatusBar", self:GetName().."CastBar", self)
  593. castbar:SetStatusBarTexture(normTex)
  594. castbar.bg = castbar:CreateTexture(nil, "BORDER")
  595. castbar.bg:SetAllPoints(castbar)
  596. castbar.bg:SetTexture(normTex)
  597. castbar.bg:SetVertexColor(.05, .05, .05)
  598. if unit == "player" then
  599. if C["unitframes"].cbicons == true then
  600. castbar:SetWidth(TukuiBar1:GetWidth() - 31)
  601. else
  602. castbar:SetWidth(TukuiBar1:GetWidth() - 4)
  603. end
  604. castbar:SetHeight(20)
  605. castbar:Point("BOTTOMRIGHT", TukuiBar1, "TOPRIGHT", -2, 5)
  606. elseif unit == "target" then
  607. if C["unitframes"].cbicons == true then
  608. castbar:SetWidth(225 - 28)
  609. else
  610. castbar:SetWidth(246)
  611. end
  612. castbar:SetHeight(20)
  613. castbar:Point("BOTTOM", TukuiBar1, "TOP", 0, 60)
  614. end
  615. castbar:SetFrameLevel(6)
  616. if( C["unitframes"].cbspark == true ) then
  617. castbar.Spark = castbar:CreateTexture(nil, 'OVERLAY')
  618. castbar.Spark:SetHeight(36)
  619. castbar.Spark:SetWidth(15)
  620. castbar.Spark:SetBlendMode('ADD')
  621. end
  622. -- Border
  623. castbar.border = CreateFrame("Frame", nil, castbar)
  624. castbar.border:CreatePanel("Default",1,1,"TOPLEFT", castbar, "TOPLEFT", -2, 2)
  625. castbar.border:CreateShadow("Default")
  626. castbar.border:Point("BOTTOMRIGHT", castbar, "BOTTOMRIGHT", 2, -2)
  627. castbar.CustomTimeText = T.CustomCastTimeText
  628. castbar.CustomDelayText = T.CustomCastDelayText
  629. castbar.PostCastStart = T.PostCastStart
  630. castbar.PostChannelStart = T.PostCastStart
  631. castbar.time = T.SetFontString(castbar,font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  632. castbar.time:Point("RIGHT", castbar.bg, "RIGHT", -4, 0)
  633. castbar.time:SetTextColor(0, 4, 0)
  634. castbar.time:SetJustifyH("RIGHT")
  635. castbar.Text = T.SetFontString(castbar,font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  636. castbar.Text:Point("LEFT", castbar.bg, "LEFT", 4, 0)
  637. castbar.Text:SetTextColor(0.3, 0.2, 1)
  638. castbar.Text:Width(100)
  639. castbar.Text:Height(10)
  640. if C["unitframes"].cbicons == true then
  641. castbar.button = CreateFrame("Frame", nil, castbar)
  642. castbar.button:Size(24)
  643. castbar.button:SetTemplate("Default")
  644. castbar.button:CreateShadow("Default")
  645. castbar.button:SetPoint("RIGHT",castbar,"LEFT", -5, 0)
  646. castbar.icon = castbar.button:CreateTexture(nil, "ARTWORK")
  647. castbar.icon:Point("TOPLEFT", castbar.button, 2, -2)
  648. castbar.icon:Point("BOTTOMRIGHT", castbar.button, -2, 2)
  649. castbar.icon:SetTexCoord(0.08, 0.92, 0.08, .92)
  650. end
  651. -- cast bar latency on player
  652. if unit == "player" and C["unitframes"].cblatency == true then
  653. castbar.safezone = castbar:CreateTexture(nil, "ARTWORK")
  654. castbar.safezone:SetTexture(normTex)
  655. castbar.safezone:SetVertexColor(0.8, 0.2, 0.2, 0.75)
  656. castbar.SafeZone = castbar.safezone
  657. end
  658. self.Castbar = castbar
  659. self.Castbar.Time = castbar.time
  660. self.Castbar.Icon = castbar.icon
  661. end
  662. -- add combat feedback support
  663. if C["unitframes"].combatfeedback == true then
  664. local CombatFeedbackText
  665. CombatFeedbackText = T.SetFontString(health, font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  666. CombatFeedbackText:SetPoint("CENTER", 0, 1)
  667. CombatFeedbackText.colors = {
  668. DAMAGE = {0.69, 0.31, 0.31},
  669. CRUSHING = {0.69, 0.31, 0.31},
  670. CRITICAL = {0.69, 0.31, 0.31},
  671. GLANCING = {0.69, 0.31, 0.31},
  672. STANDARD = {0.84, 0.75, 0.65},
  673. IMMUNE = {0.84, 0.75, 0.65},
  674. ABSORB = {0.84, 0.75, 0.65},
  675. BLOCK = {0.84, 0.75, 0.65},
  676. RESIST = {0.84, 0.75, 0.65},
  677. MISS = {0.84, 0.75, 0.65},
  678. HEAL = {0.33, 0.59, 0.33},
  679. CRITHEAL = {0.33, 0.59, 0.33},
  680. ENERGIZE = {0.31, 0.45, 0.63},
  681. CRITENERGIZE = {0.31, 0.45, 0.63},
  682. }
  683. self.CombatFeedbackText = CombatFeedbackText
  684. end
  685. if C["unitframes"].healcomm then
  686. local mhpb = CreateFrame('StatusBar', nil, self.Health)
  687. mhpb:SetPoint('TOPLEFT', self.Health:GetStatusBarTexture(), 'TOPRIGHT', 0, 0)
  688. mhpb:SetPoint('BOTTOMLEFT', self.Health:GetStatusBarTexture(), 'BOTTOMRIGHT', 0, 0)
  689. if T.lowversion then
  690. mhpb:SetWidth(186)
  691. else
  692. mhpb:SetWidth(250)
  693. end
  694. mhpb:SetStatusBarTexture(normTex)
  695. mhpb:SetStatusBarColor(0, 1, 0.5, 0.25)
  696. mhpb:SetMinMaxValues(0,1)
  697. local ohpb = CreateFrame('StatusBar', nil, self.Health)
  698. ohpb:SetPoint('TOPLEFT', mhpb:GetStatusBarTexture(), 'TOPRIGHT', 0, 0)
  699. ohpb:SetPoint('BOTTOMLEFT', mhpb:GetStatusBarTexture(), 'BOTTOMRIGHT', 0, 0)
  700. ohpb:SetWidth(250)
  701. ohpb:SetStatusBarTexture(normTex)
  702. ohpb:SetStatusBarColor(0, 1, 0, 0.25)
  703. self.HealPrediction = {
  704. myBar = mhpb,
  705. otherBar = ohpb,
  706. maxOverflow = 1,
  707. }
  708. end
  709. -- player aggro
  710. if C["unitframes"].playeraggro == true then
  711. table.insert(self.__elements, T.UpdateThreat)
  712. self:RegisterEvent('PLAYER_TARGET_CHANGED', T.UpdateThreat)
  713. self:RegisterEvent('UNIT_THREAT_LIST_UPDATE', T.UpdateThreat)
  714. self:RegisterEvent('UNIT_THREAT_SITUATION_UPDATE', T.UpdateThreat)
  715. end
  716. end
  717. ------------------------------------------------------------------------
  718. -- Target of Target unit layout
  719. ------------------------------------------------------------------------
  720. if (unit == "targettarget") then
  721. -- create panel for both high and low version
  722. local panel = CreateFrame("Frame", nil, self)
  723. if T.lowversion then
  724. panel:CreatePanel("Default", 129, 17, "BOTTOM", self, "BOTTOM", 0, T.Scale(0))
  725. panel:SetFrameLevel(2)
  726. panel:SetFrameStrata("MEDIUM")
  727. panel:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  728. panel:SetAlpha(0)
  729. self.panel = panel
  730. else
  731. panel:CreatePanel("Default", 129, 17, "BOTTOM", self, "BOTTOM", 0, T.Scale(0))
  732. panel:SetFrameLevel(2)
  733. panel:SetFrameStrata("MEDIUM")
  734. panel:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  735. panel:SetAlpha(0)
  736. self.panel = panel
  737. end
  738. -- health bar
  739. local health = CreateFrame('StatusBar', nil, self)
  740. health:Height(15)
  741. health:SetPoint("TOPLEFT")
  742. health:SetPoint("TOPRIGHT")
  743. health:SetStatusBarTexture(normTex)
  744. -- Border for ToT
  745. local HealthBorder = CreateFrame("Frame", nil, health)
  746. HealthBorder:SetPoint("TOPLEFT", health, "TOPLEFT", -2, 2)
  747. HealthBorder:SetPoint("BOTTOMRIGHT", health, "BOTTOMRIGHT", 2, -2)
  748. HealthBorder:SetTemplate("Default")
  749. HealthBorder:CreateShadow("Default")
  750. HealthBorder:SetFrameLevel(2)
  751. self.HealthBorder = HealthBorder
  752. local healthBG = health:CreateTexture(nil, 'BORDER')
  753. healthBG:SetAllPoints()
  754. healthBG:SetTexture(0, 0, 0)
  755. self.Health = health
  756. self.Health.bg = healthBG
  757. health.frequentUpdates = true
  758. if C["unitframes"].showsmooth == true then
  759. health.Smooth = true
  760. end
  761. if C["unitframes"].unicolor == true then
  762. health.colorDisconnected = false
  763. health.colorClass = false
  764. health:SetStatusBarColor(.150, .150, .150, 1)
  765. healthBG:SetVertexColor(0, 0, 0, 1)
  766. else
  767. health.colorDisconnected = true
  768. health.colorClass = true
  769. health.colorReaction = true
  770. end
  771. -- power
  772. local power = CreateFrame('StatusBar', nil, self)
  773. power:Size(130, 2)
  774. power:Point("TOP", health, "BOTTOM", 0, -7)
  775. power:SetStatusBarTexture(normTex)
  776. -- Border for Power
  777. local PowerBorder = CreateFrame("Frame", nil, power)
  778. PowerBorder:SetPoint("TOPLEFT", power, "TOPLEFT", -2, 2)
  779. PowerBorder:SetPoint("BOTTOMRIGHT", power, "BOTTOMRIGHT", 2, -2)
  780. PowerBorder:SetTemplate("Default")
  781. PowerBorder:CreateShadow("Default")
  782. PowerBorder:SetFrameLevel(power:GetFrameLevel() - 1)
  783. self.PowerBorder = PowerBorder
  784. power.frequentUpdates = true
  785. if C["unitframes"].showsmooth == true then
  786. power.Smooth = true
  787. end
  788. local powerBG = power:CreateTexture(nil, 'BORDER')
  789. powerBG:SetAllPoints(power)
  790. powerBG:SetTexture(normTex)
  791. powerBG.multiplier = 0.3
  792. self.Power = power
  793. self.Power.bg = powerBG
  794. if C["unitframes"].showsmooth == true then
  795. power.Smooth = true
  796. end
  797. if C["unitframes"].unicolor == true then
  798. power.colorTapping = true
  799. power.colorClass = true
  800. power.colorReaction = true
  801. powerBG.multiplier = 0.1
  802. else
  803. power.colorPower = true
  804. end
  805. -- Unit name
  806. local Name = health:CreateFontString(nil, "OVERLAY")
  807. Name:SetPoint("CENTER", self.Health, "CENTER", 0, 1)
  808. Name:SetFont(font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  809. Name:SetJustifyH("CENTER")
  810. self:Tag(Name, '[Tukui:getnamecolor][Tukui:namemedium]')
  811. self.Name = Name
  812. if C["unitframes"].totdebuffs == true then
  813. local debuffs = CreateFrame("Frame", nil, health)
  814. debuffs:SetHeight(24)
  815. debuffs:SetWidth(128)
  816. debuffs.size = 24
  817. debuffs.spacing = 3
  818. debuffs.num = 5
  819. debuffs:SetPoint("TOPLEFT", health, "TOPLEFT", -2, 29)
  820. debuffs.initialAnchor = "TOPLEFT"
  821. debuffs["growth-y"] = "UP"
  822. debuffs.PostCreateIcon = T.PostCreateAura
  823. debuffs.PostUpdateIcon = T.PostUpdateAura
  824. self.Debuffs = debuffs
  825. end
  826. end
  827. ------------------------------------------------------------------------
  828. -- Pet unit layout
  829. ------------------------------------------------------------------------
  830. if (unit == "pet") then
  831. -- create panel for both high and low version
  832. local panel = CreateFrame("Frame", nil, self)
  833. if T.lowversion then
  834. panel:CreatePanel("Default", 129, 17, "BOTTOM", self, "BOTTOM", 0, T.Scale(0))
  835. panel:SetFrameLevel(2)
  836. panel:SetFrameStrata("MEDIUM")
  837. panel:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  838. panel:SetAlpha(0)
  839. self.panel = panel
  840. else
  841. panel:CreatePanel("Default", 129, 17, "BOTTOM", self, "BOTTOM", 0, T.Scale(0))
  842. panel:SetFrameLevel(2)
  843. panel:SetFrameStrata("MEDIUM")
  844. panel:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  845. panel:SetAlpha(0)
  846. self.panel = panel
  847. end
  848. -- health bar
  849. local health = CreateFrame('StatusBar', nil, self)
  850. if C["unitframes"].extendedpet == true then
  851. health:Height(15)
  852. else
  853. health:Height(22)
  854. end
  855. health:SetPoint("TOPLEFT")
  856. health:SetPoint("TOPRIGHT")
  857. health:SetStatusBarTexture(normTex)
  858. -- Border for Health
  859. local HealthBorder = CreateFrame("Frame", nil, health)
  860. HealthBorder:SetPoint("TOPLEFT", health, "TOPLEFT", -2, 2)
  861. HealthBorder:SetPoint("BOTTOMRIGHT", health, "BOTTOMRIGHT", 2, -2)
  862. HealthBorder:SetTemplate("Default")
  863. HealthBorder:CreateShadow("Default")
  864. HealthBorder:SetFrameLevel(2)
  865. self.HealthBorder = HealthBorder
  866. health.PostUpdate = T.PostUpdatePetColor
  867. self.Health = health
  868. self.Health.bg = healthBG
  869. local healthBG = health:CreateTexture(nil, 'BORDER')
  870. healthBG:SetAllPoints()
  871. healthBG:SetTexture(0, 0, 0)
  872. health.frequentUpdates = true
  873. if C["unitframes"].showsmooth == true then
  874. health.Smooth = true
  875. end
  876. if C["unitframes"].unicolor == true then
  877. health.colorDisconnected = false
  878. health.colorClass = false
  879. health:SetStatusBarColor(.150, .150, .150, 1)
  880. healthBG:SetVertexColor(0, 0, 0, 1)
  881. else
  882. health.colorDisconnected = true
  883. health.colorClass = true
  884. health.colorReaction = true
  885. if T.myclass == "HUNTER" then
  886. health.colorHappiness = true
  887. end
  888. end
  889. -- power
  890. if C["unitframes"].extendedpet == true then
  891. local power = CreateFrame('StatusBar', nil, self)
  892. power:Size(130, 2)
  893. power:Point("TOP", health, "BOTTOM", 0, -7)
  894. power:SetStatusBarTexture(normTex)
  895. power.frequentUpdates = true
  896. power.colorPower = true
  897. if C["unitframes"].showsmooth == true then
  898. power.Smooth = true
  899. end
  900. local powerBG = power:CreateTexture(nil, 'BORDER')
  901. powerBG:SetAllPoints(power)
  902. powerBG:SetTexture(normTex)
  903. powerBG.multiplier = 0.3
  904. -- Border for Power
  905. local PowerBorder = CreateFrame("Frame", nil, power)
  906. PowerBorder:SetPoint("TOPLEFT", power, "TOPLEFT", -2, 2)
  907. PowerBorder:SetPoint("BOTTOMRIGHT", power, "BOTTOMRIGHT", 2, -2)
  908. PowerBorder:SetTemplate("Default")
  909. PowerBorder:CreateShadow("Default")
  910. PowerBorder:SetFrameLevel(power:GetFrameLevel() - 1)
  911. self.PowerBorder = PowerBorder
  912. self.Power = power
  913. self.Power.bg = powerBG
  914. end
  915. -- Unit name
  916. local Name = health:CreateFontString(nil, "OVERLAY")
  917. Name:SetPoint("CENTER", self.Health, "CENTER", 1, 1)
  918. Name:SetFont(font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  919. Name:SetJustifyH("CENTER")
  920. self:Tag(Name, '[Tukui:getnamecolor][Tukui:namemedium]')
  921. self.Name = Name
  922. -- update pet name, this should fix "UNKNOWN" pet names on pet unit, health and bar color sometime being "grayish".
  923. self:RegisterEvent("UNIT_PET", T.updateAllElements)
  924. end
  925. ------------------------------------------------------------------------
  926. -- Pet target unit layout
  927. ------------------------------------------------------------------------
  928. if (unit == "pettarget") then
  929. -- health bar
  930. local health = CreateFrame('StatusBar', nil, self)
  931. health:Height(15)
  932. health:SetPoint("TOPLEFT")
  933. health:SetPoint("TOPRIGHT")
  934. health:SetStatusBarTexture(normTex)
  935. -- Border for ToT
  936. local HealthBorder = CreateFrame("Frame", nil, health)
  937. HealthBorder:SetPoint("TOPLEFT", health, "TOPLEFT", -2, 2)
  938. HealthBorder:SetPoint("BOTTOMRIGHT", health, "BOTTOMRIGHT", 2, -2)
  939. HealthBorder:SetTemplate("Default")
  940. HealthBorder:CreateShadow("Default")
  941. HealthBorder:SetFrameLevel(2)
  942. self.HealthBorder = HealthBorder
  943. local healthBG = health:CreateTexture(nil, 'BORDER')
  944. healthBG:SetAllPoints()
  945. healthBG:SetTexture(0, 0, 0)
  946. self.Health = health
  947. self.Health.bg = healthBG
  948. health.frequentUpdates = true
  949. if C["unitframes"].showsmooth == true then
  950. health.Smooth = true
  951. end
  952. if C["unitframes"].unicolor == true then
  953. health.colorDisconnected = false
  954. health.colorClass = false
  955. health:SetStatusBarColor(.150, .150, .150, 1)
  956. healthBG:SetVertexColor(0, 0, 0, 1)
  957. else
  958. health.colorDisconnected = true
  959. health.colorClass = true
  960. health.colorReaction = true
  961. end
  962. -- power
  963. local power = CreateFrame('StatusBar', nil, self)
  964. power:Size(128, 2)
  965. power:Point("TOP", health, "BOTTOM", 0, -7)
  966. power:SetStatusBarTexture(normTex)
  967. -- Border for Power
  968. local PowerBorder = CreateFrame("Frame", nil, power)
  969. PowerBorder:SetPoint("TOPLEFT", power, "TOPLEFT", -2, 2)
  970. PowerBorder:SetPoint("BOTTOMRIGHT", power, "BOTTOMRIGHT", 2, -2)
  971. PowerBorder:SetTemplate("Default")
  972. PowerBorder:CreateShadow("Default")
  973. PowerBorder:SetFrameLevel(power:GetFrameLevel() - 1)
  974. self.PowerBorder = PowerBorder
  975. power.frequentUpdates = true
  976. if C["unitframes"].showsmooth == true then
  977. power.Smooth = true
  978. end
  979. local powerBG = power:CreateTexture(nil, 'BORDER')
  980. powerBG:SetAllPoints(power)
  981. powerBG:SetTexture(normTex)
  982. powerBG.multiplier = 0.3
  983. self.Power = power
  984. self.Power.bg = powerBG
  985. if C["unitframes"].showsmooth == true then
  986. power.Smooth = true
  987. end
  988. if C["unitframes"].unicolor == true then
  989. power.colorTapping = true
  990. power.colorClass = true
  991. power.colorReaction = true
  992. powerBG.multiplier = 0.1
  993. else
  994. power.colorPower = true
  995. end
  996. -- Unit name
  997. local Name = health:CreateFontString(nil, "OVERLAY")
  998. Name:SetPoint("CENTER", self.Health, "CENTER", 0, 1)
  999. Name:SetFont(font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1000. Name:SetJustifyH("CENTER")
  1001. self:Tag(Name, '[Tukui:getnamecolor][Tukui:namemedium]')
  1002. self.Name = Name
  1003. -- update pet name, this should fix "UNKNOWN" pet names on pet unit, health and bar color sometime being "grayish".
  1004. self:RegisterEvent("UNIT_PET", T.updateAllElements)
  1005. end
  1006. ------------------------------------------------------------------------
  1007. -- Focus unit layout
  1008. ------------------------------------------------------------------------
  1009. if (unit == "focus") then
  1010. -- health
  1011. local health = CreateFrame('StatusBar', nil, self)
  1012. health:Height(18)
  1013. health:SetPoint("TOPLEFT")
  1014. health:SetPoint("TOPRIGHT")
  1015. health:SetStatusBarTexture(normTex)
  1016. -- Border for Health
  1017. local HealthBorder = CreateFrame("Frame", nil, health)
  1018. HealthBorder:SetPoint("TOPLEFT", health, "TOPLEFT", -2, 2)
  1019. HealthBorder:SetPoint("BOTTOMRIGHT", health, "BOTTOMRIGHT", 2, -2)
  1020. HealthBorder:SetTemplate("Default")
  1021. HealthBorder:CreateShadow("Default")
  1022. HealthBorder:SetFrameLevel(2)
  1023. self.HealthBorder = HealthBorder
  1024. health.frequentUpdates = true
  1025. health.colorDisconnected = true
  1026. if C["unitframes"].showsmooth == true then
  1027. health.Smooth = true
  1028. end
  1029. health.colorClass = true
  1030. local healthBG = health:CreateTexture(nil, 'BORDER')
  1031. healthBG:SetAllPoints()
  1032. healthBG:SetTexture(0, 0, 0)
  1033. health.value = T.SetFontString(health, font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1034. health.value:Point("LEFT", 2, 0)
  1035. health.PostUpdate = T.PostUpdateHealth
  1036. self.Health = health
  1037. self.Health.bg = healthBG
  1038. health.frequentUpdates = true
  1039. if C["unitframes"].showsmooth == true then
  1040. health.Smooth = true
  1041. end
  1042. if C["unitframes"].unicolor == true then
  1043. health.colorDisconnected = false
  1044. health.colorClass = false
  1045. health:SetStatusBarColor(.150, .150, .150, 1)
  1046. healthBG:SetVertexColor(0, 0, 0, 1)
  1047. else
  1048. health.colorDisconnected = true
  1049. health.colorClass = true
  1050. health.colorReaction = true
  1051. end
  1052. -- power
  1053. local power = CreateFrame('StatusBar', nil, self)
  1054. power:Size(200, 2)
  1055. power:Point("TOP", health, "BOTTOM", 0, -7)
  1056. power:SetStatusBarTexture(normTex)
  1057. -- Border for Power
  1058. local PowerBorder = CreateFrame("Frame", nil, power)
  1059. PowerBorder:SetPoint("TOPLEFT", power, "TOPLEFT", -2, 2)
  1060. PowerBorder:SetPoint("BOTTOMRIGHT", power, "BOTTOMRIGHT", 2, -2)
  1061. PowerBorder:SetTemplate("Default")
  1062. PowerBorder:CreateShadow("Default")
  1063. PowerBorder:SetFrameLevel(power:GetFrameLevel() - 1)
  1064. self.PowerBorder = PowerBorder
  1065. power.frequentUpdates = true
  1066. power.colorPower = true
  1067. if C["unitframes"].showsmooth == true then
  1068. power.Smooth = true
  1069. end
  1070. local powerBG = power:CreateTexture(nil, 'BORDER')
  1071. powerBG:SetAllPoints(power)
  1072. powerBG:SetTexture(normTex)
  1073. powerBG.multiplier = 0.3
  1074. power.value = T.SetFontString(health, font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1075. power.value:Point("RIGHT", -2, 1)
  1076. power.PreUpdate = T.PreUpdatePower
  1077. power.PostUpdate = T.PostUpdatePower
  1078. self.Power = power
  1079. self.Power.bg = powerBG
  1080. -- names
  1081. local Name = health:CreateFontString(nil, "OVERLAY")
  1082. Name:SetPoint("CENTER", health, "CENTER", 0, 1)
  1083. Name:SetJustifyH("CENTER")
  1084. Name:SetFont(font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1085. Name:SetShadowColor(0, 0, 0)
  1086. Name:SetShadowOffset(1.25, -1.25)
  1087. self:Tag(Name, '[Tukui:getnamecolor][Tukui:nameshort]')
  1088. self.Name = Name
  1089. -- create debuff for arena units
  1090. local debuffs = CreateFrame("Frame", nil, self)
  1091. debuffs:SetHeight(26)
  1092. debuffs:SetWidth(200)
  1093. debuffs:Point('RIGHT', self, 'LEFT', -4, 0)
  1094. debuffs.size = 26
  1095. debuffs.num = 8
  1096. debuffs.spacing = 2
  1097. debuffs.initialAnchor = 'RIGHT'
  1098. debuffs["growth-x"] = "LEFT"
  1099. debuffs.PostCreateIcon = T.PostCreateAura
  1100. debuffs.PostUpdateIcon = T.PostUpdateAura
  1101. self.Debuffs = debuffs
  1102. local castbar = CreateFrame("StatusBar", self:GetName().."CastBar", self)
  1103. castbar:SetPoint("LEFT", 0, 0)
  1104. castbar:SetPoint("RIGHT", -23, 0)
  1105. castbar:SetPoint("BOTTOM", 0, -20)
  1106. castbar:SetHeight(16)
  1107. castbar:SetStatusBarTexture(normTex)
  1108. castbar:SetFrameLevel(6)
  1109. castbar.bg = CreateFrame("Frame", nil, castbar)
  1110. castbar.bg:SetTemplate("Default")
  1111. castbar.bg:CreateShadow("Default")
  1112. castbar.bg:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  1113. castbar.bg:Point("TOPLEFT", -2, 2)
  1114. castbar.bg:Point("BOTTOMRIGHT", 2, -2)
  1115. castbar.bg:SetFrameLevel(5)
  1116. castbar.time = T.SetFontString(castbar,font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  1117. castbar.time:Point("RIGHT", castbar, "RIGHT", -4, 0)
  1118. castbar.time:SetTextColor(0, 4, 0)
  1119. castbar.time:SetJustifyH("RIGHT")
  1120. castbar.CustomTimeText = T.CustomCastTimeText
  1121. castbar.Text = T.SetFontString(castbar,font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  1122. castbar.Text:SetPoint("LEFT", castbar, "LEFT", 4, 0)
  1123. castbar.Text:SetTextColor(0.3, 0.2, 1)
  1124. castbar.Text:Width(100)
  1125. castbar.Text:Height(12)
  1126. castbar.CustomDelayText = T.CustomCastDelayText
  1127. castbar.PostCastStart =T.PostCastStart
  1128. castbar.PostChannelStart = T.PostCastStart
  1129. castbar.button = CreateFrame("Frame", nil, castbar)
  1130. castbar.button:Height(castbar:GetHeight()+4)
  1131. castbar.button:Width(castbar:GetHeight()+4)
  1132. castbar.button:Point("LEFT", castbar, "RIGHT", 5, 0)
  1133. castbar.button:SetTemplate("Default")
  1134. castbar.button:CreateShadow("Default")
  1135. castbar.button:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  1136. castbar.icon = castbar.button:CreateTexture(nil, "ARTWORK")
  1137. castbar.icon:Point("TOPLEFT", castbar.button, 2, -2)
  1138. castbar.icon:Point("BOTTOMRIGHT", castbar.button, -2, 2)
  1139. castbar.icon:SetTexCoord(0.08, 0.92, 0.08, .92)
  1140. self.Castbar = castbar
  1141. self.Castbar.Time = castbar.time
  1142. self.Castbar.Icon = castbar.icon
  1143. end
  1144. ------------------------------------------------------------------------
  1145. -- Focus target unit layout
  1146. ------------------------------------------------------------------------
  1147. if (unit == "focustarget") then
  1148. -- health
  1149. local health = CreateFrame('StatusBar', nil, self)
  1150. health:Height(18)
  1151. health:SetPoint("TOPLEFT")
  1152. health:SetPoint("TOPRIGHT")
  1153. health:SetStatusBarTexture(normTex)
  1154. -- Border for Health
  1155. local HealthBorder = CreateFrame("Frame", nil, health)
  1156. HealthBorder:SetPoint("TOPLEFT", health, "TOPLEFT", -2, 2)
  1157. HealthBorder:SetPoint("BOTTOMRIGHT", health, "BOTTOMRIGHT", 2, -2)
  1158. HealthBorder:SetTemplate("Default")
  1159. HealthBorder:CreateShadow("Default")
  1160. HealthBorder:SetFrameLevel(2)
  1161. self.HealthBorder = HealthBorder
  1162. health.frequentUpdates = true
  1163. health.colorDisconnected = true
  1164. if C["unitframes"].showsmooth == true then
  1165. health.Smooth = true
  1166. end
  1167. health.colorClass = true
  1168. local healthBG = health:CreateTexture(nil, 'BORDER')
  1169. healthBG:SetAllPoints()
  1170. healthBG:SetTexture(0, 0, 0)
  1171. health.value = T.SetFontString(health, font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1172. health.value:Point("LEFT", 2, 0)
  1173. health.PostUpdate = T.PostUpdateHealth
  1174. self.Health = health
  1175. self.Health.bg = healthBG
  1176. health.frequentUpdates = true
  1177. if C["unitframes"].showsmooth == true then
  1178. health.Smooth = true
  1179. end
  1180. if C["unitframes"].unicolor == true then
  1181. health.colorDisconnected = false
  1182. health.colorClass = false
  1183. health:SetStatusBarColor(.150, .150, .150, 1)
  1184. healthBG:SetVertexColor(0, 0, 0, 1)
  1185. else
  1186. health.colorDisconnected = true
  1187. health.colorClass = true
  1188. health.colorReaction = true
  1189. end
  1190. -- power
  1191. local power = CreateFrame('StatusBar', nil, self)
  1192. power:Size(200, 2)
  1193. power:Point("TOP", health, "BOTTOM", 0, -7)
  1194. power:SetStatusBarTexture(normTex)
  1195. -- Border for Power
  1196. local PowerBorder = CreateFrame("Frame", nil, power)
  1197. PowerBorder:SetPoint("TOPLEFT", power, "TOPLEFT", -2, 2)
  1198. PowerBorder:SetPoint("BOTTOMRIGHT", power, "BOTTOMRIGHT", 2, -2)
  1199. PowerBorder:SetTemplate("Default")
  1200. PowerBorder:CreateShadow("Default")
  1201. PowerBorder:SetFrameLevel(power:GetFrameLevel() - 1)
  1202. self.PowerBorder = PowerBorder
  1203. power.frequentUpdates = true
  1204. power.colorPower = true
  1205. if C["unitframes"].showsmooth == true then
  1206. power.Smooth = true
  1207. end
  1208. local powerBG = power:CreateTexture(nil, 'BORDER')
  1209. powerBG:SetAllPoints(power)
  1210. powerBG:SetTexture(normTex)
  1211. powerBG.multiplier = 0.3
  1212. power.value = T.SetFontString(health, font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1213. power.value:Point("RIGHT", -2, 1)
  1214. power.PreUpdate = T.PreUpdatePower
  1215. power.PostUpdate = T.PostUpdatePower
  1216. self.Power = power
  1217. self.Power.bg = powerBG
  1218. -- names
  1219. local Name = health:CreateFontString(nil, "OVERLAY")
  1220. Name:SetPoint("CENTER", health, "CENTER", 0, 1)
  1221. Name:SetJustifyH("CENTER")
  1222. Name:SetFont(font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1223. Name:SetShadowColor(0, 0, 0)
  1224. Name:SetShadowOffset(1.25, -1.25)
  1225. self:Tag(Name, '[Tukui:getnamecolor][Tukui:nameshort]')
  1226. self.Name = Name
  1227. -- create debuff for arena units
  1228. local debuffs = CreateFrame("Frame", nil, self)
  1229. debuffs:SetHeight(26)
  1230. debuffs:SetWidth(200)
  1231. debuffs:Point('RIGHT', self, 'LEFT', -4, 0)
  1232. debuffs.size = 26
  1233. debuffs.num = 0
  1234. debuffs.spacing = 2
  1235. debuffs.initialAnchor = 'RIGHT'
  1236. debuffs["growth-x"] = "LEFT"
  1237. debuffs.PostCreateIcon = T.PostCreateAura
  1238. debuffs.PostUpdateIcon = T.PostUpdateAura
  1239. self.Debuffs = debuffs
  1240. local castbar = CreateFrame("StatusBar", self:GetName().."CastBar", self)
  1241. castbar:SetPoint("LEFT", 0, 0)
  1242. castbar:SetPoint("RIGHT", -23, 0)
  1243. castbar:SetPoint("BOTTOM", 0, -20)
  1244. castbar:SetHeight(16)
  1245. castbar:SetStatusBarTexture(normTex)
  1246. castbar:SetFrameLevel(6)
  1247. castbar.bg = CreateFrame("Frame", nil, castbar)
  1248. castbar.bg:SetTemplate("Default")
  1249. castbar.bg:CreateShadow("Default")
  1250. castbar.bg:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  1251. castbar.bg:Point("TOPLEFT", -2, 2)
  1252. castbar.bg:Point("BOTTOMRIGHT", 2, -2)
  1253. castbar.bg:SetFrameLevel(5)
  1254. castbar.time = T.SetFontString(castbar,font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  1255. castbar.time:Point("RIGHT", castbar, "RIGHT", -4, 0)
  1256. castbar.time:SetTextColor(0, 4, 0)
  1257. castbar.time:SetJustifyH("RIGHT")
  1258. castbar.CustomTimeText = T.CustomCastTimeText
  1259. castbar.Text = T.SetFontString(castbar,font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  1260. castbar.Text:SetPoint("LEFT", castbar, "LEFT", 4, 0)
  1261. castbar.Text:SetTextColor(0.3, 0.2, 1)
  1262. castbar.Text:Width(100)
  1263. castbar.Text:Height(12)
  1264. castbar.CustomDelayText = T.CustomCastDelayText
  1265. castbar.PostCastStart = T.PostCastStart
  1266. castbar.PostChannelStart = T.PostCastStart
  1267. castbar.button = CreateFrame("Frame", nil, castbar)
  1268. castbar.button:Height(castbar:GetHeight()+4)
  1269. castbar.button:Width(castbar:GetHeight()+4)
  1270. castbar.button:Point("LEFT", castbar, "RIGHT", 5, 0)
  1271. castbar.button:SetTemplate("Default")
  1272. castbar.button:CreateShadow("Default")
  1273. castbar.button:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  1274. castbar.icon = castbar.button:CreateTexture(nil, "ARTWORK")
  1275. castbar.icon:Point("TOPLEFT", castbar.button, 2, -2)
  1276. castbar.icon:Point("BOTTOMRIGHT", castbar.button, -2, 2)
  1277. castbar.icon:SetTexCoord(0.08, 0.92, 0.08, .92)
  1278. self.Castbar = castbar
  1279. self.Castbar.Time = castbar.time
  1280. self.Castbar.Icon = castbar.icon
  1281. end
  1282. ------------------------------------------------------------------------
  1283. -- Arena or boss units layout (both mirror'd)
  1284. ------------------------------------------------------------------------
  1285. if (unit and unit:find("arena%d") and C["arena"].unitframes == true) or (unit and unit:find("boss%d") and C["unitframes"].showboss == true) then
  1286. -- Right-click focus on arena or boss units
  1287. self:SetAttribute("type2", "focus")
  1288. -- health
  1289. local health = CreateFrame('StatusBar', nil, self)
  1290. health:Height(18)
  1291. health:SetPoint("TOPLEFT")
  1292. health:SetPoint("TOPRIGHT")
  1293. health:SetStatusBarTexture(normTex)
  1294. -- Border for Health
  1295. local HealthBorder = CreateFrame("Frame", nil, health)
  1296. HealthBorder:SetPoint("TOPLEFT", health, "TOPLEFT", -2, 2)
  1297. HealthBorder:SetPoint("BOTTOMRIGHT", health, "BOTTOMRIGHT", 2, -2)
  1298. HealthBorder:SetTemplate("Default")
  1299. HealthBorder:CreateShadow("Default")
  1300. HealthBorder:SetFrameLevel(2)
  1301. self.HealthBorder = HealthBorder
  1302. health.frequentUpdates = true
  1303. health.colorDisconnected = true
  1304. if C["unitframes"].showsmooth == true then
  1305. health.Smooth = true
  1306. end
  1307. health.colorClass = true
  1308. local healthBG = health:CreateTexture(nil, 'BORDER')
  1309. healthBG:SetAllPoints()
  1310. healthBG:SetTexture(0, 0, 0)
  1311. health.value = T.SetFontString(health, font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1312. health.value:Point("LEFT", 2, 0)
  1313. health.PostUpdate = T.PostUpdateHealth
  1314. self.Health = health
  1315. self.Health.bg = healthBG
  1316. health.frequentUpdates = true
  1317. if C["unitframes"].showsmooth == true then
  1318. health.Smooth = true
  1319. end
  1320. if C["unitframes"].unicolor == true then
  1321. health.colorDisconnected = false
  1322. health.colorClass = false
  1323. health:SetStatusBarColor(.150, .150, .150, 1)
  1324. healthBG:SetVertexColor(0, 0, 0, 1)
  1325. else
  1326. health.colorDisconnected = true
  1327. health.colorClass = true
  1328. health.colorReaction = true
  1329. end
  1330. -- power
  1331. local power = CreateFrame('StatusBar', nil, self)
  1332. power:Size(200, 2)
  1333. power:Point("TOP", health, "BOTTOM", 0, -7)
  1334. power:SetStatusBarTexture(normTex)
  1335. -- Border for Power
  1336. local PowerBorder = CreateFrame("Frame", nil, power)
  1337. PowerBorder:SetPoint("TOPLEFT", power, "TOPLEFT", -2, 2)
  1338. PowerBorder:SetPoint("BOTTOMRIGHT", power, "BOTTOMRIGHT", 2, -2)
  1339. PowerBorder:SetTemplate("Default")
  1340. PowerBorder:CreateShadow("Default")
  1341. PowerBorder:SetFrameLevel(power:GetFrameLevel() - 1)
  1342. self.PowerBorder = PowerBorder
  1343. power.frequentUpdates = true
  1344. power.colorPower = true
  1345. if C["unitframes"].showsmooth == true then
  1346. power.Smooth = true
  1347. end
  1348. local powerBG = power:CreateTexture(nil, 'BORDER')
  1349. powerBG:SetAllPoints(power)
  1350. powerBG:SetTexture(normTex)
  1351. powerBG.multiplier = 0.3
  1352. power.value = T.SetFontString(health, font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1353. power.value:Point("RIGHT", -2, 0.5)
  1354. power.PreUpdate = T.PreUpdatePower
  1355. power.PostUpdate = T.PostUpdatePower
  1356. self.Power = power
  1357. self.Power.bg = powerBG
  1358. -- names
  1359. local Name = health:CreateFontString(nil, "OVERLAY")
  1360. Name:SetPoint("CENTER", health, "CENTER", 0, 1)
  1361. Name:SetJustifyH("CENTER")
  1362. Name:SetFont(font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1363. Name:SetShadowColor(0, 0, 0)
  1364. Name:SetShadowOffset(1.25, -1.25)
  1365. Name.frequentUpdates = 0.2
  1366. self:Tag(Name, '[Tukui:getnamecolor][Tukui:nameshort]')
  1367. self.Name = Name
  1368. if (unit and unit:find("boss%d")) then
  1369. -- alt power bar
  1370. local AltPowerBar = CreateFrame("StatusBar", nil, self.Health)
  1371. AltPowerBar:SetFrameLevel(self.Health:GetFrameLevel() + 1)
  1372. AltPowerBar:Height(2)
  1373. AltPowerBar:SetStatusBarTexture(C.media.normTex)
  1374. AltPowerBar:GetStatusBarTexture():SetHorizTile(false)
  1375. AltPowerBar:SetStatusBarColor(1, 0, 0)
  1376. AltPowerBar:SetPoint("LEFT")
  1377. AltPowerBar:SetPoint("RIGHT")
  1378. AltPowerBar:SetPoint("TOP", self.Health, "TOP")
  1379. AltPowerBar:SetBackdrop(backdrop)
  1380. AltPowerBar:SetBackdropColor(0, 0, 0)
  1381. self.AltPowerBar = AltPowerBar
  1382. -- create buff at left of unit if they are boss units
  1383. local buffs = CreateFrame("Frame", nil, self)
  1384. buffs:SetHeight(31)
  1385. buffs:SetWidth(102)
  1386. buffs:Point("TOPRIGHT", self, "TOPLEFT", -5, 2)
  1387. buffs.size = 31
  1388. buffs.num = 3
  1389. buffs.spacing = 3
  1390. buffs.initialAnchor = 'RIGHT'
  1391. buffs["growth-x"] = "LEFT"
  1392. buffs.PostCreateIcon = T.PostCreateAura
  1393. buffs.PostUpdateIcon = T.PostUpdateAura
  1394. self.Buffs = buffs
  1395. -- because it appear that sometime elements are not correct.
  1396. self:HookScript("OnShow", T.updateAllElements)
  1397. end
  1398. -- create debuff for arena units
  1399. local debuffs = CreateFrame("Frame", nil, self)
  1400. debuffs:SetHeight(31)
  1401. debuffs:SetWidth(102)
  1402. debuffs:Point('TOPLEFT', self, 'TOPRIGHT', 5, 2)
  1403. debuffs.size = 31
  1404. debuffs.num = 3
  1405. debuffs.spacing = 3
  1406. debuffs.initialAnchor = 'LEFT'
  1407. debuffs["growth-x"] = "RIGHT"
  1408. debuffs.PostCreateIcon = T.PostCreateAura
  1409. debuffs.PostUpdateIcon = T.PostUpdateAura
  1410. self.Debuffs = debuffs
  1411. -- trinket feature via trinket plugin
  1412. if (C.arena.unitframes) and (unit and unit:find('arena%d')) then
  1413. local Trinketbg = CreateFrame("Frame", nil, self)
  1414. Trinketbg:SetHeight(31)
  1415. Trinketbg:SetWidth(31)
  1416. Trinketbg:Point("TOPRIGHT", self, "TOPLEFT", -5, 2)
  1417. Trinketbg:SetTemplate("Default")
  1418. Trinketbg:CreateShadow("Default")
  1419. Trinketbg:SetFrameLevel(0)
  1420. self.Trinketbg = Trinketbg
  1421. local Trinket = CreateFrame("Frame", nil, Trinketbg)
  1422. Trinket:SetAllPoints(Trinketbg)
  1423. Trinket:Point("TOPLEFT", Trinketbg, 2, -2)
  1424. Trinket:Point("BOTTOMRIGHT", Trinketbg, -2, 2)
  1425. Trinket:SetFrameLevel(1)
  1426. Trinket.trinketUseAnnounce = true
  1427. self.Trinket = Trinket
  1428. end
  1429. -- boss & arena frames cast bar!
  1430. local castbar = CreateFrame("StatusBar", self:GetName().."CastBar", self)
  1431. castbar:SetPoint("LEFT", 23, -1)
  1432. castbar:SetPoint("RIGHT", 0, -1)
  1433. castbar:SetPoint("BOTTOM", 0, -23)
  1434. castbar:SetHeight(16)
  1435. castbar:SetStatusBarTexture(normTex)
  1436. castbar:SetFrameLevel(6)
  1437. castbar.bg = CreateFrame("Frame", nil, castbar)
  1438. castbar.bg:SetTemplate("Default")
  1439. castbar.bg:CreateShadow("Default")
  1440. castbar.bg:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  1441. castbar.bg:Point("TOPLEFT", -2, 2)
  1442. castbar.bg:Point("BOTTOMRIGHT", 2, -2)
  1443. castbar.bg:SetFrameLevel(5)
  1444. castbar.time = T.SetFontString(castbar,font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  1445. castbar.time:Point("RIGHT", castbar, "RIGHT", -4, 0)
  1446. castbar.time:SetTextColor(0, 4, 0)
  1447. castbar.time:SetJustifyH("RIGHT")
  1448. castbar.CustomTimeText = T.CustomCastTimeText
  1449. castbar.Text = T.SetFontString(castbar,font, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  1450. castbar.Text:Point("LEFT", castbar, "LEFT", 4, 0)
  1451. castbar.Text:SetTextColor(0.3, 0.2, 1)
  1452. castbar.Text:Width(100)
  1453. castbar.Text:Height(10)
  1454. castbar.CustomDelayText = T.CustomCastDelayText
  1455. castbar.PostCastStart = T.PostCastStart
  1456. castbar.PostChannelStart = T.PostCastStart
  1457. castbar.button = CreateFrame("Frame", nil, castbar)
  1458. castbar.button:Height(castbar:GetHeight()+4)
  1459. castbar.button:Width(castbar:GetHeight()+4)
  1460. castbar.button:Point("RIGHT", castbar, "LEFT",-5, 0)
  1461. castbar.button:SetTemplate("Default")
  1462. castbar.button:CreateShadow("Default")
  1463. castbar.button:SetBackdropBorderColor(unpack(C["media"].bordercolor))
  1464. castbar.icon = castbar.button:CreateTexture(nil, "ARTWORK")
  1465. castbar.icon:Point("TOPLEFT", castbar.button, T.Scale(2), T.Scale(-2))
  1466. castbar.icon:Point("BOTTOMRIGHT", castbar.button, -2, 2)
  1467. castbar.icon:SetTexCoord(0.08, 0.92, 0.08, .92)
  1468. self.Castbar = castbar
  1469. self.Castbar.Time = castbar.time
  1470. self.Castbar.Icon = castbar.icon
  1471. end
  1472. ------------------------------------------------------------------------
  1473. -- Main tanks and Main Assists layout (both mirror'd)
  1474. ------------------------------------------------------------------------
  1475. if (self:GetParent():GetName():match"TukuiMainTank" or self:GetParent():GetName():match"TukuiMainAssist") then
  1476. -- Right-click focus on maintank or mainassist units
  1477. self:SetAttribute("type2", "focus")
  1478. -- health
  1479. local health = CreateFrame('StatusBar', nil, self)
  1480. health:Height(20)
  1481. health:SetPoint("TOPLEFT")
  1482. health:SetPoint("TOPRIGHT")
  1483. health:SetStatusBarTexture(normTex)
  1484. local healthBG = health:CreateTexture(nil, 'BORDER')
  1485. healthBG:SetAllPoints()
  1486. healthBG:SetTexture(0, 0, 0)
  1487. -- Border for HealthBar
  1488. local HealthBorder = CreateFrame("Frame", nil, health)
  1489. HealthBorder:SetPoint("TOPLEFT", health, "TOPLEFT", -2, 2)
  1490. HealthBorder:SetPoint("BOTTOMRIGHT", health, "BOTTOMRIGHT", 2, -2)
  1491. HealthBorder:SetTemplate("Default")
  1492. HealthBorder:CreateShadow("Default")
  1493. HealthBorder:SetFrameLevel(2)
  1494. self.HealthBorder = HealthBorder
  1495. self.Health = health
  1496. self.Health.bg = healthBG
  1497. health.frequentUpdates = true
  1498. if C["unitframes"].showsmooth == true then
  1499. health.Smooth = true
  1500. end
  1501. if C["unitframes"].unicolor == true then
  1502. health.colorDisconnected = false
  1503. health.colorClass = false
  1504. health:SetStatusBarColor(.150, .150, .150, 1)
  1505. healthBG:SetVertexColor(0, 0, 0, 1)
  1506. else
  1507. health.colorDisconnected = true
  1508. health.colorClass = true
  1509. health.colorReaction = true
  1510. end
  1511. -- names
  1512. local Name = health:CreateFontString(nil, "OVERLAY")
  1513. Name:SetPoint("CENTER", health, "CENTER", 0, 1)
  1514. Name:SetJustifyH("CENTER")
  1515. Name:SetFont(font, C["datatext"].fontsize+1, "MONOCHROMEOUTLINE")
  1516. Name:SetShadowColor(0, 0, 0)
  1517. Name:SetShadowOffset(1.25, -1.25)
  1518. self:Tag(Name, '[Tukui:getnamecolor][Tukui:nameshort]')
  1519. self.Name = Name
  1520. end
  1521. return self
  1522. end
  1523. ------------------------------------------------------------------------
  1524. -- Default position of Tukui unitframes
  1525. ------------------------------------------------------------------------
  1526. oUF:RegisterStyle('Tukui', Shared)
  1527. T.Player = 230
  1528. T.Target = 230
  1529. T.ToT = 130
  1530. T.Pet = 130
  1531. T.Focus = 115
  1532. T.Focustarget = 115
  1533. T.Boss = 200
  1534. T.Pettarget = 130
  1535. -----------------------------------------------------------------------
  1536. -- Unitframe Spawn
  1537. -----------------------------------------------------------------------
  1538. local player = oUF:Spawn('player', "TukuiPlayer")
  1539. local target = oUF:Spawn('target', "TukuiTarget")
  1540. local tot = oUF:Spawn('targettarget', "TukuiTargetTarget")
  1541. local pet = oUF:Spawn('pet', "TukuiPet")
  1542. local focus = oUF:Spawn('focus', "TukuiFocus")
  1543. -- Sizes
  1544. player:Size(T.Player, player.Health:GetHeight() + player.Power:GetHeight() + player.panel:GetHeight() + 6)
  1545. target:Size(T.Target, target.Health:GetHeight() + target.Power:GetHeight() + target.panel:GetHeight() + 6)
  1546. tot:Size(T.ToT, tot.Health:GetHeight() + tot.Power:GetHeight() + tot.panel:GetHeight() + 6)
  1547. pet:Size(T.Pet, pet.Health:GetHeight() + pet.Power:GetHeight() + pet.panel:GetHeight() + 6)
  1548. focus:Size(200, 25)
  1549. local f = CreateFrame("Frame")
  1550. f:RegisterEvent("PLAYER_ENTERING_WORLD")
  1551. f:SetScript("OnEvent", function(self, event, addon)
  1552. player:ClearAllPoints()
  1553. target:ClearAllPoints()
  1554. tot:ClearAllPoints()
  1555. pet:ClearAllPoints()
  1556. focus:ClearAllPoints()
  1557. if IsAddOnLoaded("Tukui_Raid") then
  1558. --[ DPS ]--
  1559. player:Point("TOP", UIParent, "BOTTOM", -170 , 260)
  1560. target:Point("TOP", UIParent, "BOTTOM", 170, 260)
  1561. tot:Point("TOPRIGHT", TukuiTarget, "BOTTOMRIGHT", 0, -20)
  1562. pet:Point("TOPLEFT", TukuiPlayer, "BOTTOMLEFT", 0, -20)
  1563. focus:Point("TOP", UIParent, "BOTTOM", -450, 602)
  1564. elseif IsAddOnLoaded("Tukui_Raid_Healing") then
  1565. --[ HEAL ]--
  1566. player:Point("TOP", UIParent, "BOTTOM", -312 , 350)
  1567. target:Point("TOP", UIParent, "BOTTOM", 312, 350)
  1568. tot:Point("TOPRIGHT", TukuiTarget, "BOTTOMRIGHT", 0, -25)
  1569. pet:Point("TOPLEFT", TukuiPlayer, "BOTTOMLEFT", 0, -25)
  1570. focus:Point("TOP", UIParent, "BOTTOM", -450, 602)
  1571. else
  1572. --[ NONE ]--
  1573. player:Point("TOP", UIParent, "BOTTOM", -309 , 350)
  1574. target:Point("TOP", UIParent, "BOTTOM", 309, 350)
  1575. tot:Point("TOPRIGHT", TukuiTarget, "BOTTOMRIGHT", 0, -25)
  1576. pet:Point("TOPLEFT", TukuiPlayer, "BOTTOMLEFT", 0, -25)
  1577. focus:Point("TOP", UIParent, "BOTTOM", -450, 602)
  1578. end
  1579. end)
  1580. -- pettarget
  1581. if C["unitframes"].pettarget == true then
  1582. local pettarget = oUF:Spawn('pettarget', "TukuiPetTarget")
  1583. pettarget:SetPoint("BOTTOMRIGHT", player, "TOPRIGHT", 0,5)
  1584. pettarget:Size(128, 26)
  1585. end
  1586. -- focus target
  1587. if C.unitframes.showfocustarget then
  1588. local focustarget = oUF:Spawn("focustarget", "TukuiFocusTarget")
  1589. focustarget:SetPoint("TOP", TukuiFocus, "BOTTOM", 0 , -35)
  1590. focustarget:Size(200, 29)
  1591. end
  1592. if C.arena.unitframes then
  1593. local arena = {}
  1594. for i = 1, 5 do
  1595. arena[i] = oUF:Spawn("arena"..i, "TukuiArena"..i)
  1596. if i == 1 then
  1597. arena[i]:SetPoint("TOP", UIParent, "BOTTOM", 500, 550)
  1598. else
  1599. arena[i]:SetPoint("BOTTOM", arena[i-1], "TOP", 0, 35)
  1600. end
  1601. arena[i]:Size(200, 27)
  1602. end
  1603. end
  1604. if C["unitframes"].showboss then
  1605. for i = 1,MAX_BOSS_FRAMES do
  1606. local t_boss = _G["Boss"..i.."TargetFrame"]
  1607. t_boss:UnregisterAllEvents()
  1608. t_boss.Show = T.dummy
  1609. t_boss:Hide()
  1610. _G["Boss"..i.."TargetFrame".."HealthBar"]:UnregisterAllEvents()
  1611. _G["Boss"..i.."TargetFrame".."ManaBar"]:UnregisterAllEvents()
  1612. end
  1613. end
  1614. local boss = {}
  1615. for i = 1, MAX_BOSS_FRAMES do
  1616. boss[i] = oUF:Spawn("boss"..i, "TukuiBoss"..i)
  1617. if i == 1 then
  1618. boss[i]:SetPoint("TOP", UIParent, "BOTTOM", 500, 550)
  1619. else
  1620. boss[i]:SetPoint('BOTTOM', boss[i-1], 'TOP', 0, 35)
  1621. end
  1622. boss[i]:Size(200, 27)
  1623. end
  1624. local assisttank_width = 100
  1625. local assisttank_height = 20
  1626. if C["unitframes"].maintank == true then
  1627. local tank = oUF:SpawnHeader('TukuiMainTank', nil, 'raid',
  1628. 'oUF-initialConfigFunction', ([[
  1629. self:SetWidth(%d)
  1630. self:SetHeight(%d)
  1631. ]]):format(assisttank_width, assisttank_height),
  1632. 'showRaid', true,
  1633. 'groupFilter', 'MAINTANK',
  1634. 'yOffset', 7,
  1635. 'point' , 'BOTTOM',
  1636. 'template', 'oUF_TukuiMtt'
  1637. )
  1638. tank:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
  1639. end
  1640. if C["unitframes"].mainassist == true then
  1641. local assist = oUF:SpawnHeader("TukuiMainAssist", nil, 'raid',
  1642. 'oUF-initialConfigFunction', ([[
  1643. self:SetWidth(%d)
  1644. self:SetHeight(%d)
  1645. ]]):format(assisttank_width, assisttank_height),
  1646. 'showRaid', true,
  1647. 'groupFilter', 'MAINASSIST',
  1648. 'yOffset', 7,
  1649. 'point' , 'BOTTOM',
  1650. 'template', 'oUF_TukuiMtt'
  1651. )
  1652. if C["unitframes"].maintank == true then
  1653. assist:SetPoint("TOPLEFT", TukuiMainTank, "BOTTOMLEFT", 2, -50)
  1654. else
  1655. assist:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
  1656. end
  1657. end
  1658. -- this is just a fake party to hide Blizzard frame if no Tukui raid layout are loaded.
  1659. local party = oUF:SpawnHeader("oUF_noParty", nil, "party", "showParty", true)
  1660. ------------------------------------------------------------------------
  1661. -- Right-Click on unit frames menu.
  1662. -- Doing this to remove SET_FOCUS eveywhere.
  1663. -- SET_FOCUS work only on default unitframes.
  1664. -- Main Tank and Main Assist, use /maintank and /mainassist commands.
  1665. ------------------------------------------------------------------------
  1666. -- Hunter Dismiss Pet Taint (Blizzard issue)
  1667. local PET_DISMISS = "PET_DISMISS"
  1668. if T.myclass == "HUNTER" then PET_DISMISS = nil end
  1669. do
  1670. UnitPopupMenus["SELF"] = { "PVP_FLAG", "LOOT_METHOD", "LOOT_THRESHOLD", "OPT_OUT_LOOT_TITLE", "LOOT_PROMOTE", "DUNGEON_DIFFICULTY", "RAID_DIFFICULTY", "RESET_INSTANCES", "RAID_TARGET_ICON", "SELECT_ROLE", "CONVERT_TO_PARTY", "CONVERT_TO_RAID", "LEAVE", "CANCEL" };
  1671. UnitPopupMenus["PET"] = { "PET_PAPERDOLL", "PET_RENAME", "PET_ABANDON", PET_DISMISS, "CANCEL" };
  1672. UnitPopupMenus["PARTY"] = { "MUTE", "UNMUTE", "PARTY_SILENCE", "PARTY_UNSILENCE", "RAID_SILENCE", "RAID_UNSILENCE", "BATTLEGROUND_SILENCE", "BATTLEGROUND_UNSILENCE", "WHISPER", "PROMOTE", "PROMOTE_GUIDE", "LOOT_PROMOTE", "VOTE_TO_KICK", "UNINVITE", "INSPECT", "ACHIEVEMENTS", "TRADE", "FOLLOW", "DUEL", "RAID_TARGET_ICON", "SELECT_ROLE", "PVP_REPORT_AFK", "RAF_SUMMON", "RAF_GRANT_LEVEL", "CANCEL" }
  1673. UnitPopupMenus["PLAYER"] = { "WHISPER", "INSPECT", "INVITE", "ACHIEVEMENTS", "TRADE", "FOLLOW", "DUEL", "RAID_TARGET_ICON", "RAF_SUMMON", "RAF_GRANT_LEVEL", "CANCEL" }
  1674. UnitPopupMenus["RAID_PLAYER"] = { "MUTE", "UNMUTE", "RAID_SILENCE", "RAID_UNSILENCE", "BATTLEGROUND_SILENCE", "BATTLEGROUND_UNSILENCE", "WHISPER", "INSPECT", "ACHIEVEMENTS", "TRADE", "FOLLOW", "DUEL", "RAID_TARGET_ICON", "SELECT_ROLE", "RAID_LEADER", "RAID_PROMOTE", "RAID_DEMOTE", "LOOT_PROMOTE", "RAID_REMOVE", "PVP_REPORT_AFK", "RAF_SUMMON", "RAF_GRANT_LEVEL", "CANCEL" };
  1675. UnitPopupMenus["RAID"] = { "MUTE", "UNMUTE", "RAID_SILENCE", "RAID_UNSILENCE", "BATTLEGROUND_SILENCE", "BATTLEGROUND_UNSILENCE", "RAID_LEADER", "RAID_PROMOTE", "RAID_MAINTANK", "RAID_MAINASSIST", "RAID_TARGET_ICON", "LOOT_PROMOTE", "RAID_DEMOTE", "RAID_REMOVE", "PVP_REPORT_AFK", "CANCEL" };
  1676. UnitPopupMenus["VEHICLE"] = { "RAID_TARGET_ICON", "VEHICLE_LEAVE", "CANCEL" }
  1677. UnitPopupMenus["TARGET"] = { "RAID_TARGET_ICON", "CANCEL" }
  1678. UnitPopupMenus["ARENAENEMY"] = { "CANCEL" }
  1679. UnitPopupMenus["FOCUS"] = { "RAID_TARGET_ICON", "CANCEL" }
  1680. UnitPopupMenus["BOSS"] = { "RAID_TARGET_ICON", "CANCEL" }
  1681. end
  1682. --UNITFRAME LINES FOR PLAYER AND TARGET FRAME
  1683. -- Unitframe Lines for Player Frame
  1684. local line = CreateFrame("Frame", "Tukuiline", TukuiPlayer)
  1685. Tukuiline:CreatePanel("Default", 250, 2, "CENTER", player, "CENTER", 0, 14)
  1686. line:SetFrameLevel(2)
  1687. line:SetFrameStrata("BACKGROUND")
  1688. local line2 = CreateFrame("Frame", "Tukuiline2", TukuiPlayer)
  1689. Tukuiline2:CreatePanel("Default", 250, 2, "BOTTOM", player, "BOTTOM", 0, -2)
  1690. line2:SetFrameLevel(2)
  1691. line2:SetFrameStrata("BACKGROUND")
  1692. local line3 = CreateFrame("Frame", "Tukuiline3", TukuiPlayer)
  1693. Tukuiline3:CreatePanel("Default", 2, 38, "RIGHT", player, "LEFT", -10, -4)
  1694. line3:SetFrameLevel(2)
  1695. line3:SetFrameStrata("BACKGROUND")
  1696. local line4 = CreateFrame("Frame", "Tukuiline4", TukuiPlayer)
  1697. Tukuiline4:CreatePanel("Default", 2, 38, "LEFT", player, "RIGHT", 10, -4)
  1698. line4:SetFrameLevel(2)
  1699. line4:SetFrameStrata("BACKGROUND")
  1700. -- Unitframe Lines for Target Frame
  1701. local line5 = CreateFrame("Frame", "Tukuiline5", TukuiTarget)
  1702. Tukuiline5:CreatePanel("Default", 250, 2, "CENTER", target, "CENTER", 0, 14)
  1703. line5:SetFrameLevel(2)
  1704. line5:SetFrameStrata("BACKGROUND")
  1705. local line6 = CreateFrame("Frame", "Tukuiline6", TukuiTarget)
  1706. Tukuiline6:CreatePanel("Default", 250, 2, "BOTTOM", target, "BOTTOM", 0, -2)
  1707. line6:SetFrameLevel(2)
  1708. line6:SetFrameStrata("BACKGROUND")
  1709. local line7 = CreateFrame("Frame", "Tukuiline7", TukuiTarget)
  1710. Tukuiline7:CreatePanel("Default", 2, 38, "RIGHT", target, "LEFT", -10, -4)
  1711. line7:SetFrameLevel(2)
  1712. line7:SetFrameStrata("BACKGROUND")
  1713. local line8 = CreateFrame("Frame", "Tukuiline8", TukuiTarget)
  1714. Tukuiline8:CreatePanel("Default", 2, 38, "LEFT", target, "RIGHT", 10, -4)
  1715. line8:SetFrameLevel(2)
  1716. line8:SetFrameStrata("BACKGROUND")