Advertisement
Zerewa

Untitled

Dec 4th, 2017
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.23 KB | None | 0 0
  1. -- Based on Skada's Healing.lua, Overhealing.lua, TotalHealing.lua, Absorbs.lua
  2. -- Depends upon SkadaHealing and replaces SkadaAborbs module
  3.  
  4. -- NOTE: have to disable SkadaAbsorbs currently or both addons will double count absorbs
  5.  
  6. local L = LibStub("AceLocale-3.0"):GetLocale("SkadaHealAbsorbs", false)
  7.  
  8. local Skada = Skada
  9.  
  10. -- hacked out local crap here
  11. local mod = Skada:NewModule("Healing and Absorbs")
  12. local spellsmod = Skada:NewModule("Healing and Absorbs spell list")
  13. local healedmod = Skada:NewModule("Healed and Absorbed players")
  14.  
  15.  
  16. -- This bit shamelessly copied straight from RecountGuessedAbsorbs - thanks!
  17. local AbsorbSpellDuration =
  18. {
  19. -- Death Knight
  20. [48707] = 5, -- Anti-Magic Shell (DK) Rank 1 -- Does not currently seem to show tracable combat log events. It shows energizes which do not reveal the amount of damage absorbed
  21. [51052] = 10, -- Anti-Magic Zone (DK)( Rank 1 (Correct spellID?)
  22. -- Does DK Spell Deflection show absorbs in the CL?
  23. [51271] = 20, -- Unbreakable Armor (DK)
  24. [77535] = 10, -- Blood Shield (DK)
  25. -- Druid
  26. [62606] = 10, -- Savage Defense proc. (Druid) Tooltip of the original spell doesn't clearly state that this is an absorb, but the buff does.
  27. -- Mage
  28. [11426] = 60, -- Ice Barrier (Mage) Rank 1
  29. [13031] = 60,
  30. [13032] = 60,
  31. [13033] = 60,
  32. [27134] = 60,
  33. [33405] = 60,
  34. [43038] = 60,
  35. [43039] = 60, -- Rank 8
  36. [6143] = 30, -- Frost Ward (Mage) Rank 1
  37. [8461] = 30,
  38. [8462] = 30,
  39. [10177] = 30,
  40. [28609] = 30,
  41. [32796] = 30,
  42. [43012] = 30, -- Rank 7
  43. [1463] = 60, -- Mana shield (Mage) Rank 1
  44. [8494] = 60,
  45. [8495] = 60,
  46. [10191] = 60,
  47. [10192] = 60,
  48. [10193] = 60,
  49. [27131] = 60,
  50. [43019] = 60,
  51. [43020] = 60, -- Rank 9
  52. [543] = 30 , -- Fire Ward (Mage) Rank 1
  53. [8457] = 30,
  54. [8458] = 30,
  55. [10223] = 30,
  56. [10225] = 30,
  57. [27128] = 30,
  58. [43010] = 30, -- Rank 7
  59. -- Paladin
  60. [58597] = 6, -- Sacred Shield (Paladin) proc (Fixed, thanks to Julith)
  61. [86273] = 6, -- Illuminated Healing
  62. [88063] = 6, -- Guarded by the Light
  63. -- Priest
  64. [17] = 30, -- Power Word: Shield (Priest) Rank 1
  65. [592] = 30,
  66. [600] = 30,
  67. [3747] = 30,
  68. [6065] = 30,
  69. [6066] = 30,
  70. [10898] = 30,
  71. [10899] = 30,
  72. [10900] = 30,
  73. [10901] = 30,
  74. [25217] = 30,
  75. [25218] = 30,
  76. [48065] = 30,
  77. [48066] = 30, -- Rank 14
  78. [47509] = 12, -- Divine Aegis (Priest) Rank 1
  79. [47511] = 12,
  80. [47515] = 12, -- Divine Aegis (Priest) Rank 3 (Some of these are not actual buff spellIDs)
  81. [47753] = 12, -- Divine Aegis (Priest) Rank 1
  82. [54704] = 12, -- Divine Aegis (Priest) Rank 1
  83. [47788] = 10, -- Guardian Spirit (Priest) (50 nominal absorb, this may not show in the CL)
  84. [62618] = 25, -- Power Word: Barrier
  85. [81781] = 25,
  86. -- Warlock
  87. [7812] = 30, -- Sacrifice (warlock) Rank 1
  88. [19438] = 30,
  89. [19440] = 30,
  90. [19441] = 30,
  91. [19442] = 30,
  92. [19443] = 30,
  93. [27273] = 30,
  94. [47985] = 30,
  95. [47986] = 30, -- rank 9
  96. [6229] = 30, -- Shadow Ward (warlock) Rank 1
  97. [11739] = 30,
  98. [11740] = 30,
  99. [28610] = 30,
  100. [47890] = 30,
  101. [47891] = 30, -- Rank 6
  102. -- Consumables
  103. [29674] = 86400, -- Lesser Ward of Shielding
  104. [29719] = 86400, -- Greater Ward of Shielding (these have infinite duration, set for a day here :P)
  105. [29701] = 86400,
  106. [28538] = 120, -- Major Holy Protection Potion
  107. [28537] = 120, -- Major Shadow
  108. [28536] = 120, -- Major Arcane
  109. [28513] = 120, -- Major Nature
  110. [28512] = 120, -- Major Frost
  111. [28511] = 120, -- Major Fire
  112. [7233] = 120, -- Fire
  113. [7239] = 120, -- Frost
  114. [7242] = 120, -- Shadow Protection Potion
  115. [7245] = 120, -- Holy
  116. [6052] = 120, -- Nature Protection Potion
  117. [53915] = 120, -- Mighty Shadow Protection Potion
  118. [53914] = 120, -- Mighty Nature Protection Potion
  119. [53913] = 120, -- Mighty Frost Protection Potion
  120. [53911] = 120, -- Mighty Fire
  121. [53910] = 120, -- Mighty Arcane
  122. [17548] = 120, -- Greater Shadow
  123. [17546] = 120, -- Greater Nature
  124. [17545] = 120, -- Greater Holy
  125. [17544] = 120, -- Greater Frost
  126. [17543] = 120, -- Greater Fire
  127. [17549] = 120, -- Greater Arcane
  128. [28527] = 15, -- Fel Blossom
  129. [29432] = 3600, -- Frozen Rune usage (Naxx classic)
  130. -- Item usage
  131. [36481] = 4, -- Arcane Barrier (TK Kael'Thas) Shield
  132. [57350] = 6, -- Darkmoon Card: Illusion
  133. [17252] = 30, -- Mark of the Dragon Lord (LBRS epic ring) usage
  134. [25750] = 15, -- Defiler's Talisman/Talisman of Arathor Rank 1
  135. [25747] = 15,
  136. [25746] = 15,
  137. [23991] = 15,
  138. [31000] = 300, -- Pendant of Shadow's End Usage
  139. [30997] = 300, -- Pendant of Frozen Flame Usage
  140. [31002] = 300, -- Pendant of the Null Rune
  141. [30999] = 300, -- Pendant of Withering
  142. [30994] = 300, -- Pendant of Thawing
  143. [31000] = 300, --
  144. [23506]= 20, -- Arena Grand Master Usage (Aura of Protection)
  145. [12561] = 60, -- Goblin Construction Helmet usage
  146. [31771] = 20, -- Runed Fungalcap usage
  147. [21956] = 10, -- Mark of Resolution usage
  148. [29506] = 20, -- The Burrower's Shell
  149. [4057] = 60, -- Flame Deflector
  150. [4077] = 60, -- Ice Deflector
  151. [39228] = 20, -- Argussian Compass (may not be an actual absorb)
  152. -- Item procs
  153. [27779] = 30, -- Divine Protection - Priest dungeon set 1/2 Proc
  154. [11657] = 20, -- Jang'thraze (Zul Farrak) proc
  155. [10368] = 15, -- Uther's Strength proc
  156. [37515] = 15, -- Warbringer Armor Proc
  157. [42137] = 86400, -- Greater Rune of Warding Proc
  158. [26467] = 30, -- Scarab Brooch proc
  159. [26470] = 8, -- Scarab Brooch proc (actual)
  160. [27539] = 6, -- Thick Obsidian Breatplate proc
  161. [28810] = 30, -- Faith Set Proc Armor of Faith
  162. [54808] = 12, -- Noise Machine proc Sonic Shield
  163. [55019] = 12, -- Sonic Shield (one of these too ought to be wrong)
  164. [64411] = 15, -- Blessing of the Ancient (Val'anyr Hammer of Ancient Kings equip effect)
  165. [64413] = 8, -- Val'anyr, Hammer of Ancient Kings proc Protection of Ancient Kings
  166. -- Misc
  167. [40322] = 30, -- Teron's Vengeful Spirit Ghost - Spirit Shield
  168. -- Boss abilities
  169. [65874] = 15, -- Twin Val'kyr's Shield of Darkness 175000
  170. [67257] = 15, -- 300000
  171. [67256] = 15, -- 700000
  172. [67258] = 15, -- 1200000
  173. [65858] = 15, -- Twin Val'kyr's Shield of Lights 175000
  174. [67260] = 15, -- 300000
  175. [67259] = 15, -- 700000
  176. [67261] = 15, -- 1200000
  177. }
  178.  
  179. local shields = {}
  180.  
  181. local function AuraApplied(timestamp, eventtype, srcGUID, srcName, srcFlags, dstGUID, dstName, dstFlags, ...)
  182. local spellId, spellName, spellSchool, auraType = ...
  183. if AbsorbSpellDuration[spellId] then
  184.  
  185. shields[dstName] = shields[dstName] or {}
  186. shields[dstName][spellId] = shields[dstName][spellId] or {}
  187. shields[dstName][spellId][srcName] = timestamp + AbsorbSpellDuration[spellId]
  188.  
  189. end
  190. end
  191.  
  192. local function AuraRemoved(timestamp, eventtype, srcGUID, srcName, srcFlags, dstGUID, dstName, dstFlags, ...)
  193. local spellId, spellName, spellSchool, auraType = ...
  194. if AbsorbSpellDuration[spellId] then
  195.  
  196. if shields[dstName] and shields[dstName][spellId] and shields[dstName][spellId][dstName] then
  197. -- As advised in RecountGuessedAbsorbs, do not remove shields straight away as an absorb can come after the aura removed event.
  198. shields[dstName][spellId][dstName] = timestamp + 0.1
  199. end
  200.  
  201. end
  202. end
  203.  
  204. local function log_absorb(set, srcName, dstName, amount, spell_id)
  205. -- Get the player
  206. local player = Skada:get_player(set, UnitGUID(srcName), UnitName(srcName))
  207. if player then
  208. -- add the absorb amount to the player's current healed total
  209. player.absorbTotal = player.absorbTotal + amount
  210.  
  211. -- Also add to the set total heals
  212. set.absorbTotal = set.absorbTotal + amount
  213.  
  214. -- Create recipient if it does not exist.
  215. if not player.absorbed[dstName] then
  216. player.absorbed[dstName] = {class = select(2, UnitClass(dstName)), amount = 0}
  217. end
  218.  
  219. -- Add to recipient absorbs.
  220. player.absorbed[dstName].amount = player.absorbed[dstName].amount + amount
  221.  
  222. -- Create spell if it does not exist.
  223. local spellName = GetSpellInfo(spell_id)
  224. if not player.absorbSpells[spellName] then
  225. player.absorbSpells[spellName] = {id = spell_id, name = spellName, hits = 0, healing = 0, overhealing = 0, critical = 0, min = 0, max = 0}
  226. end
  227.  
  228. -- Get the spell from player.
  229. local spell = player.absorbSpells[spellName]
  230.  
  231. spell.healing = spell.healing + amount
  232. spell.hits = (spell.hits or 0) + 1
  233.  
  234. --NOTE The min code here is just copied from Skada's Healing.lua, but it doesn't work in either spot, needs a better implementation
  235. if not spell.min or amount < spell.min then
  236. spell.min = amount
  237. end
  238. if not spell.max or amount > spell.max then
  239. spell.max = amount
  240. end
  241.  
  242. --DEBUG
  243. --local channelID = GetChannelName("SkadaDebug");
  244. --if( channelID > 0 and set == Skada.current and amount > 15000 ) then
  245. -- SendChatMessage("Absorb: source["..srcName.."] -> destination["..dstName.."] || spell["..spellName.."] -> value["..amount.."]","CHANNEL", nil,channelID)
  246. --end
  247. end
  248. end
  249.  
  250. local function consider_absorb(amount, dstName, timestamp)
  251. local mintime = nil
  252. local found_shield_src
  253. local spell_id
  254. for shield_id, spells in pairs(shields[dstName]) do
  255. for shield_src, ts in pairs(spells) do
  256. if ts - timestamp > 0 and (mintime == nil or ts - timestamp < mintime) then
  257. found_shield_src = shield_src
  258. spell_id = shield_id
  259. end
  260. end
  261. end
  262.  
  263. if found_shield_src then
  264. log_absorb(Skada.current, found_shield_src, dstName, amount,spell_id)
  265. log_absorb(Skada.total, found_shield_src, dstName, amount,spell_id)
  266. end
  267. end
  268.  
  269. local function SwingDamage(timestamp, eventtype, srcGUID, srcName, srcFlags, dstGUID, dstName, dstFlags, ...)
  270. local samount, soverkill, sschool, sresisted, sblocked, absorbed, scritical, sglancing, scrushing = ...
  271. if absorbed and absorbed > 0 and dstName and shields[dstName] and srcName then
  272. --Skada:Print(dstName.." absorbed "..absorbed.." from "..srcName.." (SWING)")
  273. consider_absorb(absorbed, dstName, timestamp)
  274. end
  275. end
  276.  
  277. local function SpellDamage(timestamp, eventtype, srcGUID, srcName, srcFlags, dstGUID, dstName, dstFlags, ...)
  278. local spellId, spellName, spellSchool, samount, soverkill, sschool, sresisted, sblocked, absorbed, scritical, sglancing, scrushing = ...
  279. if absorbed and absorbed > 0 and dstName and shields[dstName] and srcName then
  280. --Skada:Print(dstName.." absorbed "..absorbed.." from "..srcName.." (SPELL)")
  281. consider_absorb(absorbed, dstName, timestamp)
  282. end
  283. end
  284.  
  285. local function SpellMissed(timestamp, eventtype, srcGUID, srcName, srcFlags, dstGUID, dstName, dstFlags, ...)
  286. local spellId, spellName, spellSchool, misstype, isOffHand, absorbed = ...
  287. if misstype == "ABSORB" and absorbed and absorbed > 0 and dstName and shields[dstName] and srcName then
  288. --Skada:Print(dstName.." absorbed "..absorbed.." from "..srcName.." (MISS)")
  289. consider_absorb(absorbed, dstName, timestamp)
  290. end
  291. end
  292.  
  293. local function SwingMissed(timestamp, eventtype, srcGUID, srcName, srcFlags, dstGUID, dstName, dstFlags, ...)
  294. local missType, isOffHand, amount = ...
  295. if missType == "ABSORB" and amount and amount > 0 and dstName and shields[dstName] and srcName then
  296. consider_absorb(amount, dstName, timestamp)
  297. end
  298. end
  299.  
  300. local function getHPS(set, player)
  301. local totaltime = Skada:PlayerActiveTime(set, player)
  302.  
  303. return (player.healing+player.absorbTotal) / math.max(1,totaltime)
  304. end
  305.  
  306. function mod:Update(win, set)
  307. local nr = 1
  308. local max = 0
  309.  
  310. for i, player in ipairs(set.players) do
  311. if ((player.healing+player.absorbTotal) > 0) then
  312.  
  313. local d = win.dataset[nr] or {}
  314. win.dataset[nr] = d
  315.  
  316. d.id = player.id
  317. d.value = player.healing + player.absorbTotal
  318. d.label = player.name
  319. d.valuetext = Skada:FormatValueText(
  320. Skada:FormatNumber(player.healing+player.absorbTotal),
  321. self.metadata.columns.Healing,
  322. string.format("%02.1f", getHPS(set, player)),
  323. self.metadata.columns.HPS,
  324. (" (%02.1f%%)"):format((player.healing+player.absorbTotal) / (set.healing+set.absorbTotal) * 100),
  325. self.metadata.columns.Percent
  326. )
  327. d.class = player.class
  328.  
  329. if((player.healing+player.absorbTotal) > max) then
  330. max = player.healing+player.absorbTotal
  331. end
  332.  
  333. nr = nr + 1
  334. end
  335. end
  336.  
  337. win.metadata.maxvalue = max
  338. end
  339.  
  340. local function spell_tooltip(win, id, label, tooltip)
  341. local player = Skada:find_player(win:get_selected_set(), spellsmod.playerid)
  342. if player then
  343. local spell = player.healingspells[label]
  344. --if not spell then spell = player.absorbSpells[label] end
  345.  
  346. if spell then
  347. tooltip:AddLine(player.name.." - "..label)
  348. if spell.max and spell.min then
  349. --tooltip:AddDoubleLine(L["Minimum hit:"], Skada:FormatNumber(spell.min), 255,255,255,255,255,255)
  350. tooltip:AddDoubleLine(L["Maximum hit:"], Skada:FormatNumber(spell.max), 255,255,255,255,255,255)
  351. end
  352.  
  353. tooltip:AddDoubleLine(L["Average hit:"], Skada:FormatNumber(spell.healing / spell.hits), 255,255,255,255,255,255)
  354. if spell.hits then
  355. tooltip:AddDoubleLine(L["Critical"]..":", ("%02.1f%%"):format(spell.critical / spell.hits * 100), 255,255,255,255,255,255)
  356. end
  357. if spell.hits then
  358. tooltip:AddDoubleLine(L["Overhealing"]..":", ("%02.1f%%"):format(spell.overhealing / (spell.overhealing + spell.healing) * 100), 255,255,255,255,255,255)
  359. end
  360. if spell.hits and spell.absorbed then
  361. tooltip:AddDoubleLine(L["Absorbed"]..":", ("%02.1f%%"):format(spell.absorbed / (spell.overhealing + spell.healing) * 100), 255,255,255,255,255,255)
  362. end
  363. end
  364. end
  365. end
  366.  
  367. function spellsmod:Enter(win, id, label)
  368. spellsmod.playerid = id
  369. spellsmod.title = label..L["'s Healing & Absorbs"]
  370. end
  371.  
  372. -- Spell view of a player.
  373. function spellsmod:Update(win, set)
  374. -- View spells for this player.
  375.  
  376. local player = Skada:find_player(set, self.playerid)
  377. local nr = 1
  378. local max = 0
  379.  
  380. if player then
  381. local healAbsorbSpells = {}
  382.  
  383. -- copy the healingspells table
  384. for spellname, spell in pairs(player.healingspells) do healAbsorbSpells[spellname] = spell end
  385.  
  386. -- merge in the absorbSpells table
  387. for spellname, spell in pairs(player.absorbSpells) do healAbsorbSpells[spellname] = spell end
  388.  
  389. for spellname, spell in pairs(healAbsorbSpells) do
  390.  
  391. local d = win.dataset[nr] or {}
  392. win.dataset[nr] = d
  393.  
  394. d.id = spell.id
  395. d.label = spell.name
  396. d.value = spell.healing
  397. d.valuetext = Skada:FormatValueText(
  398. Skada:FormatNumber(spell.healing), self.metadata.columns.Healing,
  399. string.format("%02.1f%%", spell.healing / (player.healing + player.absorbTotal) * 100), self.metadata.columns.Percent
  400. )
  401. d.icon = select(3, GetSpellInfo(spell.id))
  402.  
  403. if spell.healing > max then
  404. max = spell.healing
  405. end
  406.  
  407. nr = nr + 1
  408. end
  409. end
  410.  
  411. win.metadata.maxvalue = max
  412. end
  413.  
  414. function healedmod:Enter(win, id, label)
  415. healedmod.playerid = id
  416. healedmod.title = L["Healed by"].." "..label
  417. end
  418.  
  419. -- Healed players view of a player.
  420. function healedmod:Update(win, set)
  421. local player = Skada:find_player(set, healedmod.playerid)
  422. local nr = 1
  423. local max = 0
  424.  
  425. if player then
  426. local healAbsorbs = {}
  427.  
  428. -- copy the heal table
  429. for name, heal in pairs(player.healed) do healAbsorbs[name] = heal end
  430.  
  431. -- merge in the absorb table
  432. for name, heal in pairs(player.absorbed) do
  433. if not healAbsorbs[name] then
  434. healAbsorbs[name] = heal
  435. else
  436. healAbsorbs[name].amount = healAbsorbs[name].amount + heal.amount
  437. end
  438. end
  439. for name, heal in pairs(healAbsorbs) do
  440. if heal.amount > 0 then
  441.  
  442. local d = win.dataset[nr] or {}
  443. win.dataset[nr] = d
  444.  
  445. d.id = name
  446. d.label = name
  447. d.value = heal.amount
  448. d.class = heal.class
  449. d.valuetext = Skada:FormatValueText(
  450. Skada:FormatNumber(heal.amount), self.metadata.columns.Healing,
  451. string.format("%02.1f%%", heal.amount / (player.healing+player.absorbTotal) * 100), self.metadata.columns.Percent
  452. )
  453. if heal.amount > max then
  454. max = heal.amount
  455. end
  456.  
  457. nr = nr + 1
  458. end
  459. end
  460. end
  461.  
  462. win.metadata.maxvalue = max
  463. end
  464.  
  465. function mod:OnEnable()
  466. mod.metadata = {showspots = true, click1 = spellsmod, click2 = healedmod, columns = {Healing = true, HPS = true, Percent = true}}
  467. spellsmod.metadata = {tooltip=spell_tooltip, columns = {Healing = true, Percent = true}}
  468. healedmod.metadata = {showspots = true, columns = {Healing = true, Percent = true}}
  469.  
  470. Skada:RegisterForCL(AuraApplied, 'SPELL_AURA_REFRESH', {src_is_interesting_nopets = true})
  471. Skada:RegisterForCL(AuraApplied, 'SPELL_AURA_APPLIED', {src_is_interesting_nopets = true})
  472. Skada:RegisterForCL(AuraRemoved, 'SPELL_AURA_REMOVED', {src_is_interesting_nopets = true})
  473. Skada:RegisterForCL(SpellDamage, 'DAMAGE_SHIELD', {dst_is_interesting_nopets = true})
  474. Skada:RegisterForCL(SpellDamage, 'SPELL_DAMAGE', {dst_is_interesting_nopets = true})
  475. Skada:RegisterForCL(SpellDamage, 'SPELL_PERIODIC_DAMAGE', {dst_is_interesting_nopets = true})
  476. Skada:RegisterForCL(SpellDamage, 'SPELL_BUILDING_DAMAGE', {dst_is_interesting_nopets = true})
  477. Skada:RegisterForCL(SpellDamage, 'RANGE_DAMAGE', {dst_is_interesting_nopets = true})
  478. Skada:RegisterForCL(SwingDamage, 'SWING_DAMAGE', {dst_is_interesting_nopets = true})
  479. Skada:RegisterForCL(SpellMissed, 'SPELL_MISSED', {dst_is_interesting_nopets = true})
  480. Skada:RegisterForCL(SpellMissed, 'SPELL_PERIODIC_MISSED', {dst_is_interesting_nopets = true})
  481. Skada:RegisterForCL(SpellMissed, 'SPELL_BUILDING_MISSED', {dst_is_interesting_nopets = true})
  482. Skada:RegisterForCL(SpellMissed, 'RANGE_MISSED', {dst_is_interesting_nopets = true})
  483. Skada:RegisterForCL(SwingMissed, 'SWING_MISSED', {dst_is_interesting_nopets = true})
  484.  
  485. Skada:AddMode(self)
  486. end
  487.  
  488. function mod:OnDisable()
  489. Skada:RemoveMode(self)
  490. end
  491.  
  492. function mod:AddToTooltip(set, tooltip)
  493. local endtime = set.endtime
  494. if not endtime then
  495. endtime = time()
  496. end
  497. local raidhps = (set.healing+set.absorbTotal) / (endtime - set.starttime + 1)
  498. GameTooltip:AddDoubleLine(L["HPS"], ("%02.1f"):format(raidhps), 1,1,1)
  499. end
  500.  
  501. function mod:GetSetSummary(set)
  502. return Skada:FormatNumber(set.healing+set.absorbTotal)
  503. end
  504.  
  505. -- Called by Skada when a new player is added to a set.
  506. function mod:AddPlayerAttributes(player)
  507. if not player.absorbed then
  508. player.absorbed = {} -- Stored absorbs per recipient
  509. end
  510. if not player.absorbTotal then
  511. player.absorbTotal = 0 -- Total absorbs
  512. player.absorbSpells = {} -- Absorbed spells
  513. end
  514. end
  515.  
  516. -- Called by Skada when a new set is created.
  517. -- Conveniently this is when a new fight starts, so we can clear our shield cache.
  518. function mod:AddSetAttributes(set)
  519. if not set.absorbTotal then
  520. set.absorbTotal = 0
  521. end
  522. shields = {}
  523. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement