PageRenderTime 68ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/Tukui/modules/unitframes/layouts/smelly.lua

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