PageRenderTime 63ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/Tukui/modules/unitframes/layouts/tukui.lua

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