Guest User

PhotoRobot.lua

a guest
Jul 16th, 2014
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.15 KB | None | 0 0
  1. -- PhotoRobot v0.3.5
  2. -- Buff/Debuff monitor for default and custom unitframes
  3. -- Written by OUGHT
  4. -- Based on PortraitTimers by Killakhan
  5.  
  6. local addonName, addon = ...
  7. addon.version = "0.3.5"
  8. local L = addon
  9.  
  10. local defaults = {
  11. showArenaAuras = true,
  12. showPlayerAuras = true,
  13. showPartyFrames = true,
  14. showPartyAuras = true,
  15. fontSize = "Normal",
  16. r = 1.0,
  17. g = 1.0,
  18. b = 1.0,
  19. a = 1.0,
  20. arenaFrameScale = 1,
  21. showDecimals = true,
  22. fontParent = "CENTER",
  23. }
  24.  
  25. addon.fontsDB = {
  26. ["Normal"] = "GameFontNormalLarge",
  27. ["Small"] = "GameFontNormal",
  28. ["Large"] = "GameFontNormalHuge",
  29. }
  30.  
  31. addon.f = CreateFrame("Frame", addonName.."mainFrame", UIParent)
  32.  
  33. -- main update frames
  34. addon.TargetFrame = CreateFrame("Frame", addonName.."_TargetFrame", UIParent)
  35. local tFrame = addon.TargetFrame
  36. tFrame:SetWidth(1)
  37. tFrame:SetHeight(1)
  38. tFrame:SetFrameStrata("DIALOG")
  39. addon.FocusFrame = CreateFrame("Frame", addonName.."_FocusFrame", UIParent)
  40. local fFrame = addon.FocusFrame
  41. fFrame:SetWidth(1)
  42. fFrame:SetHeight(1)
  43. fFrame:SetFrameStrata("DIALOG")
  44. addon.PlayerFrame = CreateFrame("Frame", addonName.."_PlayerFrame", UIParent)
  45. local pFrame = addon.PlayerFrame
  46. pFrame:SetWidth(1)
  47. pFrame:SetHeight(1)
  48. pFrame:SetFrameStrata("DIALOG")
  49. for i = 1, 4 do
  50. addon["PartyFrame"..i] = CreateFrame("Frame", addonName.."_PartyFrame"..i, UIParent)
  51. local frame = addon["PartyFrame"..i]
  52. frame:SetWidth(1)
  53. frame:SetHeight(1)
  54. frame:SetFrameStrata("DIALOG")
  55. -- print("created " .. frame:GetName())
  56. end
  57. for i = 1, 5 do
  58. addon["ArenaFrame"..i] = CreateFrame("Frame", addonName.."_ArenaFrame"..i, UIParent)
  59. local frame = addon["ArenaFrame"..i]
  60. frame:SetWidth(1)
  61. frame:SetHeight(1)
  62. frame:SetFrameStrata("DIALOG")
  63. -- print("created " .. frame:GetName())
  64. end
  65.  
  66. addon.f:SetScript("OnEvent", function(self, event, ...)
  67. if addon[event] then
  68. return addon[event](addon, event, ...)
  69. end
  70. end)
  71.  
  72. addon.f:RegisterEvent("PLAYER_LOGIN")
  73. addon.f:RegisterEvent("PLAYER_ENTERING_WORLD")
  74. addon.f:RegisterEvent("ADDON_LOADED")
  75. addon.f:RegisterEvent("ARENA_OPPONENT_UPDATE")
  76.  
  77. -- event functions
  78. function addon:PLAYER_ENTERING_WORLD(event, ...)
  79. --[[local _, instance = IsInInstance() I don't know why this block is added, I try to solve by brute force
  80. local parent
  81. if instance == "raid" then
  82. addon.f:UnregisterEvent("UNIT_AURA")
  83. addon.f:UnregisterEvent("PLAYER_TARGET_CHANGED")
  84. addon.f:UnregisterEvent("PLAYER_FOCUS_CHANGED")
  85. addon.f:UnregisterEvent("PARTY_MEMBERS_CHANGED")
  86. tFrame:SetScript("OnUpdate", nil)
  87. tFrame:Hide()
  88. fFrame:SetScript("OnUpdate", nil)
  89. fFrame:Hide()
  90. for i = 1, 4 do
  91. local frame = addon["PartyFrame"..i]
  92. frame:Hide()
  93. frame:SetScript("OnUpdate", nil)
  94. end
  95. else]]
  96. addon.f:RegisterEvent("UNIT_AURA")
  97. addon.f:RegisterEvent("PLAYER_TARGET_CHANGED")
  98. addon.f:RegisterEvent("PLAYER_FOCUS_CHANGED")
  99. addon.f:RegisterEvent("PARTY_MEMBERS_CHANGED")
  100. --end
  101.  
  102. if addon.XPerl_loaded then -- XPerl
  103. -- target
  104. if XPerl_Target.conf.portrait3D == 1 then -- name, portrait, parent, frame
  105. parent = XPerl_TargetportraitFrameportrait3D
  106. else
  107. parent = XPerl_TargetportraitFrame
  108. end
  109. self.CreateAuraIcons(addonName.."TargetTexture", XPerl_TargetportraitFrame.portrait, parent, tFrame)
  110. -- focus
  111. if XPerl_Focus.conf.portrait3D == 1 then
  112. parent = XPerl_FocusportraitFrameportrait3D
  113. else
  114. parent = XPerl_FocusportraitFrame
  115. end
  116. self.CreateAuraIcons(addonName.."FocusTexture", XPerl_FocusportraitFrame.portrait, parent, fFrame)
  117. -- player
  118. if XPerl_Player.conf.portrait3D == 1 then
  119. parent = XPerl_PlayerportraitFrameportrait3D
  120. else
  121. parent = XPerl_PlayerportraitFrame
  122. end
  123. self.CreateAuraIcons(addonName.."PlayerTexture", XPerl_PlayerportraitFrame.portrait, parent, pFrame)
  124. -- party
  125. for i = 1, 4 do
  126. local frame = _G["XPerl_party"..i.."portraitFrame"]
  127. local partyFrame = _G["XPerl_party"..i]
  128. if frame and partyFrame then
  129. if partyFrame.conf.portrait3D == 1 then
  130. parent = _G["XPerl_party"..i.."portraitFrameportrait3D"]
  131. else
  132. parent = frame
  133. end
  134. self.CreateAuraIcons(addonName.."PartyTexture"..i, frame.portrait, parent, addon["PartyFrame"..i])
  135. -- addon.XPearl_partyEnabled = true
  136. -- else
  137. -- addon.XPearl_partyEnabled = false
  138. end
  139. end
  140. elseif addon.SUF_loaded then
  141. -- target
  142. if ShadowUF.db.profile.units.target.portrait.type == "3D" then
  143. parent = SUFUnittarget.portraitModel
  144. else
  145. parent = SUFUnittarget
  146. end
  147. self.CreateAuraIcons(addonName.."TargetTexture", SUFUnittarget.portrait, parent, tFrame)
  148. -- focus
  149. if ShadowUF.db.profile.units.focus.portrait.type == "3D" and SUFUnitfocus.portraitModel then
  150. parent = SUFUnitfocus.portraitModel
  151. else
  152. parent = SUFUnitfocus
  153. end
  154. self.CreateAuraIcons(addonName.."FocusTexture", SUFUnitfocus.portrait, parent, fFrame)
  155. -- player
  156. if ShadowUF.db.profile.units.player.portrait.type == "3D" and SUFUnitplayer.portraitModel then
  157. parent = SUFUnitplayer.portraitModel
  158. else
  159. parent = SUFUnitplayer
  160. end
  161. self.CreateAuraIcons(addonName.."PlayerTexture", SUFUnitplayer.portrait, parent, pFrame)
  162. -- party
  163. addon.UpdateSUFPartyFrames()
  164. elseif addon.PitBull_Loaded then
  165. -- player
  166. self.CreateAuraIcons(addonName.."PlayerTexture", PitBull4_Frames_player.Portrait, PitBull4_Frames_player.Portrait, pFrame)
  167. -- party
  168. -- self.UpdatePitbullPartyFrames()
  169. addon.checkbox1:Hide()
  170. return
  171. else
  172. self.CreateAuraIcons(addonName.."TargetTexture", TargetFrame.portrait, TargetFrame, tFrame)
  173. self.CreateAuraIcons(addonName.."FocusTexture", FocusFrame.portrait, FocusFrame, fFrame)
  174. self.CreateAuraIcons(addonName.."PlayerTexture", PlayerFrame.portrait, PlayerFrame, pFrame)
  175. -- if self.db.showPartyFrames then
  176. -- self.f:RegisterEvent("PARTY_MEMBERS_CHANGED")
  177. -- end
  178. for i = 1, 4 do
  179. local frame = _G["PartyMemberFrame"..i]
  180. if frame then
  181. self.CreateAuraIcons(addonName.."PartyTexture"..i, frame.portrait, frame, addon["PartyFrame"..i])
  182. end
  183. end
  184. self.checkbox2:Show()
  185. end
  186. end
  187.  
  188. function addon:ARENA_OPPONENT_UPDATE(event, unit, status)
  189. if (unit == "arena1" or unit == "arena2" or unit == "arena3" or unit == "arena4" or unit == "arena5") and status == "seen" then
  190. -- print("found unit: " .. unit)
  191.  
  192. end
  193. end
  194.  
  195. function addon:PARTY_MEMBERS_CHANGED(event)
  196. if addon.SUF_loaded then
  197. addon.UpdateSUFPartyFrames()
  198. elseif addon.PitBull_Loaded then -- i hate you pitbull
  199. addon.f:SetScript("OnUpdate", addon.UpdatePitbullPartyFrames_delayed)
  200. end
  201. -- show blizzard frames
  202. if self.db.showPartyFrames and not (addon.SUF_loaded or addon.PitBull_Loaded or addon.XPerl_loaded) then
  203. local _, instance = IsInInstance()
  204. if instance == "arena" then
  205. -- print("in arena")
  206. for i = 1, 4 do
  207. local unit = "party"..i
  208. if UnitExists(unit) then
  209. addon.UpdatePartyFrames(_G["PartyMemberFrame"..i])
  210. end
  211. end
  212. end
  213. end
  214. end
  215.  
  216. function addon:UNIT_AURA(event, unit)
  217. --print("UNIT_AURA " .. unit)
  218. if unit == "target" or unit == "focus" then
  219. addon.CheckAuras(unit)
  220. end
  221. if addon.db.showArenaAuras and (ArenaEnemyFrame1 or ArenaEnemyFrame2 or ArenaEnemyFrame3 or ArenaEnemyFrame4 or ArenaEnemyFrame5) then
  222. if unit == "arena1" or unit == "arena2" or unit == "arena3" or unit == "arena4" or unit == "arena5" then
  223. addon.CheckAuras(unit)
  224. end
  225. end
  226. if addon.db.showPartyAuras then
  227. if unit == "party1" or unit == "party2" or unit == "party3" or unit == "party4" then
  228. if addon.XPerl_loaded or addon.SUF_loaded then
  229. addon.CheckAuras(unit)
  230. else
  231. if (unit == "party1" and (PartyMemberFrame1:IsVisible())) or
  232. (unit == "party2" and (PartyMemberFrame2:IsVisible())) or
  233. (unit == "party3" and (PartyMemberFrame3:IsVisible())) or
  234. (unit == "party4" and (PartyMemberFrame4:IsVisible())) then
  235. addon.CheckAuras(unit)
  236. end
  237. end
  238. end
  239. end
  240. if addon.db.showPlayerAuras then
  241. if unit == "player" then
  242. addon.CheckAuras(unit)
  243. end
  244. end
  245. end
  246.  
  247.  
  248. function addon:PLAYER_TARGET_CHANGED(event)
  249. tFrame.auras = {}
  250. --addon.SetPortraitTexture(tFrame, nil)
  251. if UnitExists("target") then
  252. if addon.PitBull_Loaded then
  253. if not tFrame.auraIcon then
  254. self.CreateAuraIcons(addonName.."TargetTexture", PitBull4_Frames_target.Portrait, PitBull4_Frames_target.Portrait, tFrame)
  255. else
  256. tFrame.auraIcon:SetParent(PitBull4_Frames_target.Portrait) -- pitbull is funny
  257. end
  258. end
  259. addon.CheckAuras("target")
  260. else
  261. tFrame:Hide()
  262. end
  263. end
  264.  
  265.  
  266. function addon:PLAYER_FOCUS_CHANGED(event)
  267. fFrame.auras = {}
  268. if UnitExists("focus") then
  269. if addon.PitBull_Loaded then
  270. if not fFrame.auraIcon then
  271. self.CreateAuraIcons(addonName.."FocusTexture", PitBull4_Frames_focus.Portrait, PitBull4_Frames_focus.Portrait, fFrame)
  272. end
  273. fFrame.auraIcon:SetParent(PitBull4_Frames_focus.Portrait) -- pitbull is funny
  274. end
  275. addon.CheckAuras("focus")
  276. else
  277. fFrame:Hide()
  278. end
  279. end
  280.  
  281.  
  282. function addon:ADDON_LOADED(event, addon)
  283. if addon == "PhotoRobot" then
  284. DEFAULT_CHAT_FRAME:AddMessage("|c00FF9900[PR]: |rPhotoRobot v"..self.version.." Loaded")
  285.  
  286. if not PhotoRobotDB then
  287. PhotoRobotDB = {}
  288. end
  289. self.db = self.CopyDefaults(defaults, PhotoRobotDB)
  290.  
  291. self.CreateConfig()
  292. UIDropDownMenu_SetText(self.dropdown1, self.db.fontSize)
  293. self.colorButton.texture:SetTexture("Interface\\ChatFrame\\ChatFrameColorSwatch")
  294. self.colorButton.texture:SetTexture(self.db.r, self.db.g, self.db.b)
  295. self.checkbox1:SetChecked(self.db.showPartyAuras)
  296. self.checkbox2:SetChecked(self.db.showPartyFrames)
  297. self.checkbox3:SetChecked(self.db.showPlayerAuras)
  298. self.checkbox4:SetChecked(self.db.showArenaAuras)
  299. self.submenu1.checkbox1:SetChecked(self.db.showDecimals)
  300. self.slider1:SetValue(self.db.arenaFrameScale)
  301. self.arenaTextureFrame:SetScale(self.db.arenaFrameScale)
  302.  
  303. self.UpdateConfigDecimals(self.db.showDecimals)
  304. self.UpdateFontParent(self.db.fontParent)
  305. self.f:UnregisterEvent("ADDON_LOADED")
  306. elseif addon == "Blizzard_ArenaUI" then
  307. for i = 1, 5 do
  308. local frame = _G["ArenaEnemyFrame"..i]
  309. local petFrame = _G["ArenaEnemyFrame"..i.."PetFrame"]
  310. if frame and petFrame then
  311. self.CreateAuraIcons(addonName.."ArenaTexture"..i, frame.classPortrait, frame, addon["ArenaFrame"..i])
  312. frame:SetScale(addon.db.arenaFrameScale)
  313. petFrame:SetScale(addon.db.arenaFrameScale)
  314. end
  315. end
  316. end
  317. end
  318.  
  319. function addon:PLAYER_LOGIN(event)
  320. if IsAddOnLoaded("AuraTimers") then -- check for old addon
  321. self.AT_loaded = true
  322. DEFAULT_CHAT_FRAME:AddMessage("|c00FF9900[PT]: |c00FF0000Warning!|r You must remove any previous versions of AuraTimers before installing PhotoRobot!")
  323. return
  324. end
  325. if IsAddOnLoaded("PortraitTimers") then -- check for old addon
  326. self.AT_loaded = true
  327. DEFAULT_CHAT_FRAME:AddMessage("|c00FF9900[PT]: |c00FF0000Warning!|r You must remove any previous versions of PortraitTimers before installing PhotoRobot!")
  328. return
  329. end
  330. if IsAddOnLoaded("PitBull4") then -- check for pitbull
  331. DEFAULT_CHAT_FRAME:AddMessage("|c00FF9900[PT]: |rPitBull4 Detected.")
  332. self.PitBull_Loaded = true
  333. end
  334. if IsAddOnLoaded("XPerl") then -- check for xperl
  335. DEFAULT_CHAT_FRAME:AddMessage("|c00FF9900[PT]: |rXPerl Detected.")
  336. self.XPerl_loaded = true
  337. end
  338. if IsAddOnLoaded("ShadowedUnitFrames") then -- check for sUF
  339. DEFAULT_CHAT_FRAME:AddMessage("|c00FF9900[PT]: |rsUF Detected.")
  340. self.SUF_loaded = true
  341. end
  342. end
  343.  
  344. function addon.UpdateFontParent(parent)
  345. addon.testFont:ClearAllPoints()
  346. addon.testFont2:ClearAllPoints()
  347. addon.arenaTextureFrame.font:ClearAllPoints()
  348. addon.testFont:SetPoint(parent, addon.texture, parent)
  349. addon.testFont2:SetPoint(parent, addon.texture2, parent)
  350. addon.arenaTextureFrame.font:SetPoint(parent, addon.arenaTextureFrame.port, parent)
  351. end
  352.  
  353. function addon.UpdateConfigDecimals(checked)
  354. if checked == true then
  355. addon.testFont:SetText("8.2")
  356. addon.testFont2:SetText("4.9")
  357. addon.arenaTextureFrame.font:SetText("2.7")
  358. else
  359. addon.testFont:SetText("8")
  360. addon.testFont2:SetText("4")
  361. addon.arenaTextureFrame.font:SetText("2")
  362. end
  363. end
  364.  
  365. function addon.UpdateSUFPartyFrames()
  366. -- sUF party frames
  367. if addon.SUF_loaded then
  368. local parent
  369. for i = 1, 4 do
  370. local frame = _G["SUFHeaderpartyUnitButton"..i]
  371. if frame and frame.portrait then
  372. if ShadowUF.db.profile.units.party.portrait.type == "3D" then
  373. parent = frame.portraitModel
  374. else
  375. parent = frame
  376. end
  377. addon.CreateAuraIcons(addonName.."PartyTexture"..i, frame.portrait, parent, addon["PartyFrame"..i])
  378. -- addon.SUF_partyEnabled = true
  379. end
  380. end
  381. end
  382. end
  383.  
  384. function addon.UpdatePartyFrames(self)
  385. local id = self:GetID();
  386. if ( GetPartyMember(id) ) then
  387. self:Show();
  388.  
  389. UnitFrame_Update(self);
  390.  
  391. local masterIcon = _G[self:GetName().."MasterIcon"];
  392. local lootMethod;
  393. local lootMaster;
  394. lootMethod, lootMaster = GetLootMethod();
  395. if ( id == lootMaster ) then
  396. masterIcon:Show();
  397. else
  398. masterIcon:Hide();
  399. end
  400. else
  401. self:Hide();
  402. end
  403. PartyMemberFrame_UpdatePet(self);
  404. PartyMemberFrame_UpdatePvPStatus(self);
  405. RefreshDebuffs(self, "party"..id, nil, nil, true);
  406. PartyMemberFrame_UpdateVoiceStatus(self);
  407. PartyMemberFrame_UpdateReadyCheck(self);
  408. PartyMemberFrame_UpdateOnlineStatus(self);
  409. PartyMemberFrame_UpdatePhasingDisplay(self);
  410. UpdatePartyMemberBackground();
  411. -- print("created " .. self:GetName())
  412. end
  413.  
  414. function addon.CopyDefaults(src, dst)
  415. if not src then return { } end
  416. if not dst then dst = { } end
  417. for k, v in pairs(src) do
  418. if type(v) == "table" then
  419. dst[k] = addon.CopyDefaults(v, dst[k])
  420. elseif type(v) ~= type(dst[k]) then
  421. dst[k] = v
  422. end
  423. end
  424. return dst
  425. end
  426.  
  427.  
  428. function addon.CreateAuraIcons(name, portrait, parent, frame)
  429. if frame.auraIcon or not (parent and portrait) then return end
  430. frame.auraIcon = parent:CreateTexture(name, "OVERlAY")
  431. frame.auraIcon:SetPoint("CENTER", portrait)
  432. frame.auraIcon:SetAllPoints(portrait)
  433. if not frame.font then
  434. addon.CreateFontStrings(name .. "_Font", frame)
  435. end
  436.  
  437. if not frame.auras then
  438. frame.auras = {}
  439. end
  440.  
  441. --print("Created " .. frame.auraIcon:GetName())
  442. --SetPortraitToTexture(frame.auraIcon, "Interface\\Icons\\spell_holy_divineprotection")
  443. --frame.auraIcon:SetTexture("Interface\\Icons\\spell_holy_divineprotection")
  444. --addon.SetPortraitTexture(frame, "Interface\\AddOns\\PortraitTimers\\Coolface")
  445. end
  446.  
  447. function addon.CreateFontStrings(name, frame)
  448. local fontString
  449. for k, v in pairs(addon.fontsDB) do
  450. if k == addon.db.fontSize then
  451. -- print(k, v)
  452. fontString = v
  453. end
  454. end
  455. frame.font = frame:CreateFontString(name, "OVERLAY")
  456. -- frame.font:ClearAllPoints()
  457. frame.font:SetPoint(addon.db.fontParent, frame.auraIcon, addon.db.fontParent)
  458.  
  459. local newfont, size = _G[fontString]:GetFont()
  460. frame.font:SetFont(newfont, size, "OUTLINE")
  461. frame.font:SetText("")
  462. frame.font:SetTextColor(addon.db.r, addon.db.g, addon.db.b, addon.db.a)
  463. -- print("Created " .. frame.font:GetName())
  464. end
  465.  
  466. function addon.SetFontSize(newFont, frame)
  467. if frame.font then
  468. local outlineFont, size = _G[newFont]:GetFont()
  469. frame.font:SetTextColor(addon.db.r, addon.db.g, addon.db.b, addon.db.a)
  470. if frame:GetName():find("Party") or frame:GetName():find("Arena") then
  471. frame.font:SetFont(outlineFont, size/1.3, "OUTLINE")
  472. else
  473. frame.font:SetFont(outlineFont, size, "OUTLINE")
  474. end
  475. end
  476. end
  477.  
  478. function addon.HideAll(unit)
  479. --print("hide frame " .. unit)
  480. local frame = addon.GetUnitFrame(unit)
  481. if not frame then return end
  482. frame:Hide()
  483. if frame.auraIcon then
  484. frame.auraIcon:Hide()
  485. end
  486. if frame.font then
  487. frame.font:SetText("")
  488. end
  489. frame.auras = {}
  490. end
  491.  
  492. -- Makes list of all auras on unit
  493. function addon.ListAuras(unit)
  494. local auras = {}
  495. local i
  496. i = 1
  497. repeat
  498. --print(unit .. ' ' .. i)
  499. local name, _, texture, _, _, _, eTime = UnitBuff(unit, i)
  500. if (name ~= nil) then
  501. table.insert(auras, { ["name"] = name,
  502. ["texture"] = texture,
  503. ["eTime"] = eTime - GetTime()})
  504. end
  505. i = i+1
  506. until (name == nil)
  507.  
  508. i = 1
  509. repeat
  510. local name, _, texture, _, _, _, eTime = UnitDebuff(unit, i)
  511. if (name ~= nil) then
  512. table.insert(auras, { ["name"] = name,
  513. ["texture"] = texture,
  514. ["eTime"] = eTime - GetTime()})
  515. end
  516. i = i+1
  517. until (name == nil)
  518.  
  519. --[[for i = 1, #auras do
  520. print(auras[i].name)
  521. end ]]
  522.  
  523. return auras
  524. end
  525.  
  526. -- Checks trackable and adds new auras
  527. function addon.CheckAuras(unit)
  528. --print("check aura " .. unit)
  529. local auras = {}
  530. local auCheck = addon.ListAuras(unit)
  531.  
  532. for idx, spellID in ipairs(addon.spellDB) do
  533. local spell = GetSpellInfo(spellID)
  534. if (spell ~= nil) then
  535. --print("checking aura " .. spellID .. " on " .. unit)
  536. for i = 1, #auCheck do
  537. if (auCheck[i].name == spell) then
  538. --print((tTime - GetTime()) .. " sec")
  539. table.insert(auras,
  540. {
  541. ["spell"] = auCheck[i].name,
  542. ["texture"] = auCheck[i].texture,
  543. ["eTime"] = auCheck[i].eTime,
  544. })
  545. --print("Adding in auras " .. spellID)
  546. end
  547. i = i+1
  548. end
  549. end
  550. end
  551. --[[for i, au in ipairs(auras) do
  552. print(i.. ". " .. au.spell)
  553. end]]
  554.  
  555. if (auras ~= nil) and (#auras > 0) then
  556. local frame = addon.GetUnitFrame(unit)
  557. for i, au in ipairs(auras) do
  558. flag = false
  559. if (#frame.auras > 0) then
  560. for j, fau in ipairs(frame.auras) do
  561. if (au.spell == fau.spell) then
  562. flag = true
  563. end
  564. end
  565. end
  566. if not flag then
  567. --print("Found aura " .. au.spell .. " on " .. unit .. ", expires in " .. au.eTime .. " seconds.")
  568. --if not au.unit then print("Unit is NIL!!! Galactics in danger!!!") end
  569. addon.SetAura(unit, au.spell, au.texture, au.eTime)
  570. end
  571. end
  572. else
  573. addon.HideAll(unit)
  574. end
  575. end -- func
  576.  
  577. -- Updates current aura
  578. function addon.UpdateAura(auCheck, aura)
  579. local res = nil
  580. local flag = false
  581. --print(#auCheck)
  582. for i = 1, #auCheck do
  583. if (flag ~= true) and (auCheck[i].name == aura.spell) then
  584. res = auCheck[i].eTime
  585. flag = true
  586. --print("Updated aura " .. auCheck[i].name .. ", expires in " .. res .. " seconds.")
  587. end
  588. end
  589. return res
  590. end
  591.  
  592. -- Checks trackable auras and updates time in it
  593. function addon.UpdateAuras(frame, auras)
  594. --print("check aura " .. unit)
  595. local auCheck = addon.ListAuras(frame)
  596. local res = nil
  597. if auras == nil then
  598. --print("Auras = NIL!!! Galactics in danger!!!")
  599. return
  600. end
  601. local n = #auras
  602. for i = 1, n do
  603. res = addon.UpdateAura(auCheck, auras[i])
  604. if res ~= nil then
  605. auras[i].time = res
  606. else
  607. --print("Aura has broken!")
  608. auras[i].time = 0
  609. end
  610. end
  611. end -- func
  612.  
  613. function addon.SetPortraitTexture(frame, texture)
  614. if not frame then return end
  615. if addon.PitBull_Loaded then
  616. frame.auraIcon:SetTexture(texture)
  617. frame.auraIcon:SetTexCoord(0.07, 0.93, 0.07, 0.93)
  618. elseif addon.XPerl_loaded or addon.SUF_loaded then
  619. frame.auraIcon:SetTexture(texture)
  620. else
  621. SetPortraitToTexture(frame.auraIcon, texture)
  622. end
  623. end
  624.  
  625. function addon.SetFormattedText(time)
  626. if addon.db.showDecimals then
  627. return string.format("%.1f", time)
  628. else
  629. return string.format("%.0f", time)
  630. end
  631. end
  632.  
  633. function addon.CompareSpells(t1, t2)
  634. --print("Comparing "..t1.spell.." and "..t2.spell)
  635. for i, sp in ipairs(addon.spellDB)
  636. do
  637. local spell = GetSpellInfo(sp)
  638. if (spell == t1.spell) then
  639. --print(sp.." won!")
  640. return false
  641. elseif (spell == t2.spell) then
  642. --print(sp.." won!")
  643. return true
  644. end
  645. end
  646. return false
  647. end
  648.  
  649.  
  650.  
  651. function addon.SetAura(unit, spell, texture, eTime)
  652. local frame = addon.GetUnitFrame(unit)
  653. if not frame then return end
  654. if not frame.auraIcon then return end
  655.  
  656. for idx, au in ipairs(frame.auras) do
  657. if spell == au.spell then return end
  658. end
  659.  
  660. --print("Attempting to change texture of " ..unit .. " to " .. texture);
  661. --addon.SetPortraitTexture(frame, texture)
  662. --addon.SetFontSize(addon.fontsDB[addon.db.fontSize], frame)
  663. --frame.font:SetText(addon.SetFormattedText(eTime-GetTime()))
  664. --frame.font:ClearAllPoints()
  665. --frame.font:SetPoint(addon.db.fontParent, frame.auraIcon, addon.db.fontParent)
  666.  
  667. table.insert(frame.auras, {})
  668. local i = #frame.auras
  669. frame.auras[i].spell = spell;
  670. frame.auras[i].texture = texture
  671. frame.auras[i].time = eTime
  672. frame.name = unit
  673. --print("Adding " .. spell .. " to auras at " .. i .. " position \n Sorting...");
  674. table.sort(frame.auras, addon.CompareSpells)
  675.  
  676. --[[for idx, au in ipairs(frame.auras) do
  677. print(idx .. ". " .. au.spell);
  678. end]]
  679.  
  680. frame.first = true
  681. frame:Show()
  682. frame.auraIcon:Show()
  683.  
  684. frame:SetScript("OnUpdate", addon.UpdateTimer)
  685. end
  686.  
  687. function addon.UpdateTimer(self, elapsed)
  688. -- emergency timer
  689. if (self.tick == nil) then self.tick = 0.4 end
  690. self.check = false
  691. self.tick = self.tick - elapsed
  692. if (self.tick <= 0) then
  693. self.tick = 0.4
  694. self.check = true
  695. --print(self)
  696. end
  697.  
  698. local expired = {}
  699. --local chAuras = addon.ListAuras(self.name)
  700. local c = #self.auras
  701. if c == 0 then return end
  702. for i = 1, c do
  703. self.auras[i].time = self.auras[i].time - elapsed
  704. if self.auras[i].time <= 0 then
  705. table.insert(expired, i)
  706. --print("|c00FF0000" .. self.auras[i].spell .. " expired!|r")
  707. end
  708. if self.check then -- emergency handler
  709. --print("Checking!")
  710. --[[local flag = false
  711. for j = 1, #chAuras do
  712. if chAuras[j].name == self.auras[i].spell then
  713. flag = true
  714. end
  715. end
  716. if not flag then
  717. table.insert(expired, i)
  718. --print("|c00FF0000" .. self.auras[i].spell .. " broken!|r")
  719. end]]
  720. addon.UpdateAuras(self.name, self.auras)
  721. end
  722. end
  723.  
  724. if #expired > 0 then
  725. for i = #expired, 1, -1 do
  726. table.remove(self.auras, expired[i])
  727. end
  728. --[[for idx, au in ipairs(self.auras) do
  729. print(idx .. ". " .. au.spell);
  730. end]]
  731. table.sort(self.auras, addon.CompareSpells)
  732. end
  733.  
  734. --[[for idx, au in ipairs(self.auras) do
  735. print(idx .. ". " .. au.spell);
  736. end]]
  737.  
  738. if #self.auras == 0 then
  739. --print("Hiding all #1");
  740. addon.HideAll(self.name)
  741. return
  742. end
  743. local cur = self.auras[#self.auras]
  744. --print("Ticking " .. cur.spell .. ", unit " .. self.name .. ", time left " .. cur.time);
  745. if not self.first then
  746. if cur.time > 0 and UnitExists(self.name) and self:IsVisible() then
  747. addon.SetPortraitTexture(self, cur.texture)
  748. self.font:SetText(addon.SetFormattedText(cur.time))
  749. else
  750. --[[print(cur.time > 0)
  751. print(UnitExists(cur.name))
  752. print(self:IsVisible())]]
  753. table.remove(self.auras)
  754. if #self.auras == 0 then
  755. --print("Hiding all #2")
  756. addon.HideAll(self.name)
  757. end
  758. end
  759. end
  760. self.first = false
  761. end
  762.  
  763.  
  764. function addon.GetUnitFrame(unit)
  765. local frame
  766. if unit == "target" then
  767. frame = tFrame
  768. elseif unit == "focus" then
  769. frame = fFrame
  770. elseif unit == "player" then
  771. frame = pFrame
  772. elseif unit == "party1" then
  773. frame = addon.PartyFrame1
  774. elseif unit == "party2" then
  775. frame = addon.PartyFrame2
  776. elseif unit == "party3" then
  777. frame = addon.PartyFrame3
  778. elseif unit == "party4" then
  779. frame = addon.PartyFrame4
  780. elseif unit == "arena1" then
  781. frame = addon.ArenaFrame1
  782. elseif unit == "arena2" then
  783. frame = addon.ArenaFrame2
  784. elseif unit == "arena3" then
  785. frame = addon.ArenaFrame3
  786. elseif unit == "arena4" then
  787. frame = addon.ArenaFrame4
  788. elseif unit == "arena5" then
  789. frame = addon.ArenaFrame5
  790. end
  791. return frame
  792. end
  793.  
  794. function addon.ShowColorPicker(r, g, b, changedCallback)
  795. ColorPickerFrame.opacity = 1
  796. ColorPickerFrame.hasOpacity = false
  797. ColorPickerFrame.previousValues = {r,g,b}
  798. ColorPickerFrame.func, ColorPickerFrame.opacityFunc, ColorPickerFrame.cancelFunc =
  799. changedCallback, changedCallback, changedCallback;
  800. ColorPickerFrame:Hide(); -- Need to run the OnShow handler.
  801. ColorPickerFrame:Show();
  802. end
  803.  
  804. function addon.myColorCallback(restore)
  805. local newR, newG, newB
  806. if restore then -- canel
  807. newR, newG, newB = unpack(restore);
  808. else
  809. newR, newG, newB = ColorPickerFrame:GetColorRGB();
  810. end
  811. addon.db.r, addon.db.g, addon.db.b = newR, newG, newB
  812. addon.colorButton.texture:SetTexture(addon.db.r, addon.db.g, addon.db.b)
  813. addon.testFont:SetTextColor(addon.db.r, addon.db.g, addon.db.b, addon.db.a)
  814. addon.testFont2:SetTextColor(addon.db.r, addon.db.g, addon.db.b, addon.db.a)
  815. addon.arenaTextureFrame.font:SetTextColor(addon.db.r, addon.db.g, addon.db.b, addon.db.a)
  816. end
Advertisement
Add Comment
Please, Sign In to add comment