diff --git a/oUF/libs/LibHealComm-4.0/LibHealComm-4.0.lua b/oUF/libs/LibHealComm-4.0/LibHealComm-4.0.lua index ff9a67f..d0ad708 100644 --- a/oUF/libs/LibHealComm-4.0/LibHealComm-4.0.lua +++ b/oUF/libs/LibHealComm-4.0/LibHealComm-4.0.lua @@ -85,8 +85,8 @@ local spellRankTableData = { [8] = { 9839, 9857, 9758, 10329, 10928, 10395, 10839, 23568, 24413, 25233, 27259, 27220 }, [9] = { 9840, 9858, 9888, 25292, 10929, 10396, 18608, 25235 }, [10] = { 9841, 9889, 25315, 25357, 18610, 23567, 24414, 26980, 27135 }, - [11] = { 25299, 25297, 30020, 27136, 25221, 25391, 27030 }, - [12] = { 26981, 26978, 25222, 25396, 27031 }, + [11] = { 25299, 25297, 30020, 27136, 25221, 25391 }, + [12] = { 26981, 26978, 25222, 25396 }, [13] = { 26982, 26979 }, } @@ -126,6 +126,7 @@ HealComm.pendingHots = HealComm.pendingHots or {} HealComm.spellData = HealComm.spellData or {} HealComm.talentData = HealComm.talentData or {} HealComm.tempPlayerList = HealComm.tempPlayerList or {} +HealComm.spellDesc = HealComm.spellDesc or {} if( not HealComm.unitToPet ) then HealComm.unitToPet = {["player"] = "pet"} @@ -133,10 +134,44 @@ if( not HealComm.unitToPet ) then for i = 1, MAX_RAID_MEMBERS do HealComm.unitToPet["raid" .. i] = "raidpet" .. i end end -local spellData, hotData, tempPlayerList, pendingHeals, pendingHots = HealComm.spellData, HealComm.hotData, HealComm.tempPlayerList, HealComm.pendingHeals, HealComm.pendingHots +local spellDesc, spellData, hotData, tempPlayerList, pendingHeals, pendingHots = HealComm.spellDesc, HealComm.spellData, HealComm.hotData, HealComm.tempPlayerList, HealComm.pendingHeals, HealComm.pendingHots local equippedSetCache, itemSetsData, talentData = HealComm.equippedSetCache, HealComm.itemSetsData, HealComm.talentData local activeHots, activePets = HealComm.activeHots, HealComm.activePets +--[[Added to try ID indexing for spell data access +spellDesc: spell description table in format used by hotData previously +hotData: index table to bound all spell IDs to their descriptions +[spell id] = [spell description in spellDesc table] +--]] + +--Function to set all entries of table T to specified Value +local function Set (Value, T) + local set = {} + for _, l in ipairs(T) do + set[l] = Value + end + return set +end + +--Function to append content of table T2 at the end of table T1 +local function TableAppend(T1, T2) + for i,v in pairs(T2) do + table.insert(T1, i, v) + end +end + +--[[ +Function to add new spell to hot table +Data: spell description table +IDs: list of id for each rank of the spell +--]] +local function AddHot(Data, IDs) + table.insert(spellDesc, Data) + local idTable = Set(Data, IDs) + TableAppend(hotData, idTable) +end +--end + -- Figure out what they are now since a few things change based off of this local playerClass = select(2, UnitClass("player")) @@ -698,10 +733,6 @@ end local function calculateGeneralAmount(level, amount, spellPower, spModifier, healModifier) local penalty = level > 20 and 1 or (1 - ((20 - level) * 0.0375)) - if isTBC then - -- TBC added another downrank penalty - penalty = penalty * min(1, (level + 11) / playerLevel) - end spellPower = spellPower * penalty @@ -722,35 +753,25 @@ end --[[ What the different callbacks do: - AuraHandler: Specific aura tracking needed for this class, who has Beacon up on them and such - ResetChargeData: Due to spell "queuing" you can't always rely on aura data for buffs that last one or two casts, for example Divine Favor (+100% crit, one spell) if you cast Holy Light and queue Flash of Light the library would still see they have Divine Favor and give them crits on both spells. The reset means that the flag that indicates they have the aura can be killed and if they interrupt the cast then it will call this and let you reset the flags. - What happens in terms of what the client thinks and what actually is, is something like this: - UNIT_SPELLCAST_START, Holy Light -> Divine Favor up UNIT_SPELLCAST_SUCCEEDED, Holy Light -> Divine Favor up (But it was really used) UNIT_SPELLCAST_START, Flash of Light -> Divine Favor up (It's not actually up but auras didn't update) UNIT_AURA -> Divine Favor up (Split second where it still thinks it's up) UNIT_AURA -> Divine Favor faded (Client catches up and realizes it's down) - CalculateHealing: Calculates the healing value, does all the formula calculations talent modifiers and such - CalculateHotHealing: Used specifically for calculating the heals of hots - GetHealTargets: Who the heal is going to hit, used for setting extra targets for Beacon of Light + Paladin heal or Prayer of Healing. The returns should either be: - "compressedGUID1,compressedGUID2,compressedGUID3,compressedGUID4", healthAmount Or if you need to set specific healing values for one GUID it should be "compressedGUID1,healthAmount1,compressedGUID2,healAmount2,compressedGUID3,healAmount3", -1 - The latter is for cases like Glyph of Healing Wave where you need a heal for 1,000 on A and a heal for 200 on the player for B without sending 2 events. The -1 tells the library to look in the GUId list for the heal amounts - **NOTE** Any GUID returned from GetHealTargets must be compressed through a call to compressGUID[guid] ]] @@ -766,6 +787,17 @@ local function getBaseHealAmount(spellData, spellName, spellRank) return average[min(playerLevel - requiresLevel + 1, #average)] end +--Function copies functionality of getBaseHealAmount but uses spellID as an argument instead of spellName +local function getBaseHealAmountBYID(spellData, spellID, spellRank) + spellData = spellData[spellID] + local average = spellData.averages[spellRank] + if type(average) == "number" then + return average + end + local requiresLevel = spellData.levels[spellRank] + return average[min(playerLevel - requiresLevel + 1, #average)] +end + if( playerClass == "DRUID" ) then LoadClassData = function() local GiftofNature = GetSpellInfo(17104) @@ -779,9 +811,16 @@ if( playerClass == "DRUID" ) then local EmpoweredRejuv = GetSpellInfo(33886) or "EmpoweredRejuv" local EmpoweredTouch = GetSpellInfo(33879) or "EmpoweredTouch" - hotData[Regrowth] = { interval = 3, ticks = 7, coeff = isTBC and 0.7 or 0.5, levels = { 12, 18, 24, 30, 36, 42, 48, 54, 60, 65 }, averages = { 98, 175, 259, 343, 427, 546, 686, 861, 1064, 1274 }} - hotData[Rejuvenation] = { interval = 3, levels = { 4, 10, 16, 22, 28, 34, 40, 46, 52, 58, 60, 63, 69 }, averages = { 32, 56, 116, 180, 244, 304, 388, 488, 608, 756, 888, 932, 1060 }} - hotData[Lifebloom] = {interval = 1, ticks = 7, coeff = 0.52, dhCoeff = 0.34335, levels = {64}, averages = {273}, bomb = {600}} + --Regrowth + local RegrowthHot = { interval = 3, ticks = 7, coeff = isTBC and 0.7 or 0.5, levels = { 12, 18, 24, 30, 36, 42, 48, 54, 60, 65 }, + averages = { 98, 175, 259, 343, 427, 546, 686, 861, 1064, 1274}} + AddHot(RegrowthHot, {8936, 8938, 8939, 8940, 8941, 9750, 9856, 9857, 9858, 26980}) + --Rejuvenation + AddHot({ interval = 3, levels = { 4, 10, 16, 22, 28, 34, 40, 46, 52, 58, 60, 63, 69 }, + averages = { 32, 56, 116, 180, 244, 304, 388, 488, 608, 756, 888, 932, 1060 }}, + {774, 1058, 1430, 2090, 2091, 3627, 8910, 9839, 9840, 9841, 25299, 26981, 26982}) + --Revewal + AddHot({interval = 1, ticks = 7, coeff = 0.52, dhCoeff = 0.34335, levels = {64}, averages = {273}, bomb = {600}}, {33763}) spellData[HealingTouch] = { levels = {1, 8, 14, 20, 26, 32, 38, 44, 50, 56, 60, 62, 69}, averages = { {avg(37, 51), avg(37, 52), avg(38, 53), avg(39, 54), avg(40, 55)}, @@ -797,7 +836,7 @@ if( playerClass == "DRUID" ) then {avg(2267, 2677), avg(2274, 2685), avg(2281, 2692), avg(2288, 2699), avg(2296, 2707), avg(2303, 2714)}, {avg(2364, 2790), avg(2371, 2798), avg(2378, 2805), avg(2386, 2813), avg(2393, 2820), avg(2401, 2827)}, {avg(2707, 3197), avg(2715, 3206)} }} - spellData[Regrowth] = {coeff = 0.5 * (2 / 3.5) , levels = hotData[Regrowth].levels, averages = { + spellData[Regrowth] = {coeff = 0.5 * (2 / 3.5) , levels = RegrowthHot.levels, averages = { {avg(84, 98), avg(85, 100), avg(87, 102), avg(89, 104), avg(91, 106), avg(93, 107)}, {avg(164, 188), avg(166, 191), avg(169, 193), avg(171, 196), avg(174, 198), avg(176, 201)}, {avg(240, 274), avg(243, 278), avg(246, 281), avg(249, 284), avg(252, 287), avg(255, 290)}, @@ -856,7 +895,7 @@ if( playerClass == "DRUID" ) then -- Calculate hot heals CalculateHotHealing = function(guid, spellID) local spellName, spellRank = GetSpellInfo(spellID), SpellIDToRank[spellID] - local healAmount = getBaseHealAmount(hotData, spellName, spellRank) + local healAmount = getBaseHealAmountBYID(hotData, spellID, spellRank) local spellPower = GetSpellBonusHealing() local healModifier = HealComm:GetHealModifier(guid) * playerHealModifier local spModifier = 1 @@ -884,7 +923,7 @@ if( playerClass == "DRUID" ) then end local duration = 12 - local ticks = duration / hotData[spellName].interval + local ticks = duration / hotData[spellID].interval if( equippedSetCache["Stormrage"] >= 8 ) then healAmount = healAmount + (healAmount / ticks) -- Add Tick Amount Gained by Set. @@ -901,42 +940,42 @@ if( playerClass == "DRUID" ) then healAmount = healAmount + 15 end elseif( spellName == Regrowth ) then - spellPower = spellPower * hotData[spellName].coeff * (1 + talentData[EmpoweredRejuv].current) - spellPower = spellPower / hotData[spellName].ticks - healAmount = healAmount / hotData[spellName].ticks + spellPower = spellPower * hotData[spellID].coeff * (1 + talentData[EmpoweredRejuv].current) + spellPower = spellPower / hotData[spellID].ticks + healAmount = healAmount / hotData[spellID].ticks totalTicks = 7 - + if( equippedSetCache["Nordrassil"] >= 2 ) then totalTicks = totalTicks + 2 end - + elseif( spellName == Lifebloom ) then -- Figure out the bomb heal, apparently Gift of Nature double dips and will heal 10% for the HOT + 10% again for the direct heal local bombSpellPower = spellPower if( playerCurrentRelic and bloomBombIdols[playerCurrentRelic] ) then bombSpellPower = bombSpellPower + bloomBombIdols[playerCurrentRelic] end - - local bombSpell = bombSpellPower * hotData[spellName].dhCoeff * (1 + talentData[EmpoweredRejuv].current) - bombAmount = math.ceil(calculateGeneralAmount(hotData[spellName].levels[spellRank], hotData[spellName].bomb[spellRank], bombSpell, spModifier, healModifier)) - + + local bombSpell = bombSpellPower * hotData[spellID].dhCoeff * (1 + talentData[EmpoweredRejuv].current) + bombAmount = math.ceil(calculateGeneralAmount(hotData[spellID].levels[spellRank], hotData[spellID].bomb[spellRank], bombSpell, spModifier, healModifier)) + -- Figure out the hot tick healing - spellPower = spellPower * (hotData[spellName].coeff * (1 + talentData[EmpoweredRejuv].current)) - + spellPower = spellPower * (hotData[spellID].coeff * (1 + talentData[EmpoweredRejuv].current)) + -- Idol of the Emerald Queen, +47 SP per tick if( playerCurrentRelic == 27886 ) then spellPower = spellPower + 47 end - - spellPower = spellPower / hotData[spellName].ticks - healAmount = healAmount / hotData[spellName].ticks + + spellPower = spellPower / hotData[spellID].ticks + healAmount = healAmount / hotData[spellID].ticks -- Figure out total ticks totalTicks = 7 - + end - healAmount = calculateGeneralAmount(hotData[spellName].levels[spellRank], healAmount, spellPower, spModifier, healModifier) + healAmount = calculateGeneralAmount(hotData[spellID].levels[spellRank], healAmount, spellPower, spModifier, healModifier) - return HOT_HEALS, ceil(healAmount), totalTicks, hotData[spellName].interval, bombAmount + return HOT_HEALS, ceil(healAmount), totalTicks, hotData[spellID].interval, bombAmount end -- Calcualte direct and channeled heals @@ -960,22 +999,22 @@ if( playerClass == "DRUID" ) then spellPower = spellPower * spellData[spellName].coeff -- Healing Touch elseif( spellName == HealingTouch ) then - + healAmount = healAmount + (spellPower * talentData[EmpoweredTouch].current) - + local castTime = spellRank >= 5 and 3.5 or (spellRank == 4 and 3 or (spellRank == 3 and 2.5 or (spellRank == 2 and 2 or 1.5))) spellPower = spellPower * (castTime / 3.5) - + if( playerCurrentRelic == 22399 ) then healAmount = healAmount + 100 elseif( playerCurrentRelic == 28568 ) then healAmount = healAmount + 136 end - + if equippedSetCache["Thunderheart"] >= 4 then healModifier = healModifier + 0.05 end - + -- Tranquility elseif( spellName == Tranquility ) then spellPower = spellPower * spellData[spellName].coeff * (1 + talentData[EmpoweredRejuv].current) @@ -1138,10 +1177,14 @@ if( playerClass == "PRIEST" ) then local EmpoweredHealing = GetSpellInfo(33158) or "Empowered Healing" local Renewal = GetSpellInfo(37563) or "Renewal" -- T4 bonus - hotData[Renew] = {coeff = 1, interval = 3, ticks = 5, levels = {8, 14, 20, 26, 32, 38, 44, 50, 56, 60, 65, 70}, averages = { + --Renew + local RenewData = {coeff = 1, interval = 3, ticks = 5, levels = {8, 14, 20, 26, 32, 38, 44, 50, 56, 60, 65, 70}, averages = { 45, 100, 175, 245, 315, 400, 510, 650, 810, 970, 1010, 1110 }} - hotData[GreaterHealHot] = hotData[Renew] - hotData[Renewal] = {coeff = 0, interval = 3, ticks = 3, levels = {70}, averages = {150}} + AddHot(RenewData, {139, 6074, 6075, 6076, 6077, 6078, 10927, 10928, 10929, 25315, 25221, 25222}) + --GreaterHealHot + AddHot(RenewData, {22009}) + --Renewal + AddHot({coeff = 0, interval = 3, ticks = 3, levels = {70}, averages = {150}}, {37563}) spellData[FlashHeal] = {coeff = 1.5 / 3.5, levels = {20, 26, 32, 38, 44, 50, 56, 61, 67}, averages = { {avg(193, 237), avg(194, 239), avg(196, 241), avg(198, 243), avg(200, 245), avg(202, 247)}, @@ -1216,7 +1259,7 @@ if( playerClass == "PRIEST" ) then CalculateHotHealing = function(guid, spellID) local spellName, spellRank = GetSpellInfo(spellID), SpellIDToRank[spellID] - local healAmount = getBaseHealAmount(hotData, spellName, spellRank) + local healAmount = getBaseHealAmountBYID(hotData, spellID, spellRank) local spellPower = GetSpellBonusHealing() local healModifier = HealComm:GetHealModifier(guid) * playerHealModifier local spModifier = 1 @@ -1238,7 +1281,7 @@ if( playerClass == "PRIEST" ) then end local duration = 15 - local ticks = hotData[spellName].ticks + local ticks = hotData[spellID].ticks if( equippedSetCache["Oracle"] >= 5 or equippedSetCache["Avatar"] >= 4 ) then healAmount = healAmount + (healAmount / ticks) -- Add Tick Amount Gained by Set. @@ -1252,8 +1295,8 @@ if( playerClass == "PRIEST" ) then healAmount = healAmount / ticks end - healAmount = calculateGeneralAmount(hotData[spellName].levels[spellRank], healAmount, spellPower, spModifier, healModifier) - return HOT_HEALS, ceil(healAmount), totalTicks, hotData[spellName].interval + healAmount = calculateGeneralAmount(hotData[spellID].levels[spellRank], healAmount, spellPower, spModifier, healModifier) + return HOT_HEALS, ceil(healAmount), totalTicks, hotData[spellID].interval end -- If only every other class was as easy as Paladins @@ -1375,13 +1418,13 @@ if( playerClass == "SHAMAN" ) then -- Chain Heal if( spellName == ChainHeal ) then spellPower = spellPower * spellData[spellName].coeff - + if( equippedSetCache["Skyshatter"] >= 4 ) then healModifier = healModifier * 1.05 end - + healModifier = healModifier * (1 + talentData[ImpChainHeal].current) - + if playerCurrentRelic == 28523 then healAmount = healAmount + 87 end -- Heaing Wave elseif( spellName == HealingWave ) then @@ -1392,9 +1435,9 @@ if( playerClass == "SHAMAN" ) then --healModifier = healModifier * (talentData[HealingWay].spent == 3 and 1.25 or talentData[HealingWay].spent == 2 and 1.16 or talentData[HealingWay].spent == 1 and 1.08 or 1) local castTime = spellRank > 3 and 3 or spellRank == 3 and 2.5 or spellRank == 2 and 2 or 1.5 - + if playerCurrentRelic == 27544 then spellPower = spellPower + 88 end - + spellPower = spellPower * (castTime / 3.5) -- Lesser Healing Wave @@ -1521,7 +1564,7 @@ end -- Keep track of where all the data should be going local instanceType local function updateDistributionChannel() - if( instanceType == "pvp" or instanceType == "arena" ) then + if( instanceType == "pvp" ) then distribution = "INSTANCE_CHAT" elseif( IsInRaid() ) then distribution = "RAID" @@ -1840,21 +1883,21 @@ end local function parseHotBomb(casterGUID, wasUpdated, spellID, amount, ...) local spellName, spellRank = GetSpellInfo(spellID) if( not amount or not spellName or select("#", ...) == 0 ) then return end - + -- If we don't have a pending hot then there is no bomb as far as were concerned local hotPending = pendingHots[casterGUID] and pendingHots[casterGUID][spellName] if( not hotPending or not hotPending.bitType ) then return end hotPending.hasBomb = true - + pendingHeals[casterGUID] = pendingHeals[casterGUID] or {} pendingHeals[casterGUID][spellName] = pendingHeals[casterGUID][spellName] or {} - + local pending = pendingHeals[casterGUID][spellName] pending.endTime = hotPending.endTime pending.spellID = spellID pending.bitType = BOMB_HEALS pending.stack = 1 -- TBC Lifebloom bomb heal does not stack - + loadHealList(pending, amount, pending.stack, pending.endTime, nil, ...) if( not wasUpdated ) then @@ -2099,14 +2142,14 @@ function HealComm:COMBAT_LOG_EVENT_UNFILTERED(...) -- New hot was applied elseif( ( eventType == "SPELL_AURA_APPLIED" or eventType == "SPELL_AURA_REFRESH" or eventType == "SPELL_AURA_APPLIED_DOSE" ) and bit.band(sourceFlags, COMBATLOG_OBJECT_AFFILIATION_MINE) == COMBATLOG_OBJECT_AFFILIATION_MINE ) then - if( hotData[spellName] ) then + if( hotData[spellID] ) then -- Single target so we can just send it off now thankfully local bitType, amount, totalTicks, tickInterval, bombAmount = CalculateHotHealing(destGUID, spellID) if( bitType ) then local targets, amt = GetHealTargets(type, destGUID, max(amount, 0), spellID) if targets then parseHotHeal(sourceGUID, false, spellID, amt, totalTicks, tickInterval, strsplit(",", targets)) - + -- Hot with a bomb! if( bombAmount ) then local bombTargets, bombAmount = GetHealTargets(BOMB_HEALS, destGUID, math.max(bombAmount, 0), spellName) @@ -2143,19 +2186,19 @@ function HealComm:COMBAT_LOG_EVENT_UNFILTERED(...) local amount = getRecord(pending, destGUID) if( amount ) then parseHotHeal(sourceGUID, true, spellID, amount, pending.totalTicks, pending.tickInterval, compressGUID[destGUID]) - + -- Plant the bomb local bombPending = pending.hasBomb and pendingHeals[sourceGUID][spellName] if( bombPending and bombPending.bitType ) then local bombAmount = getRecord(bombPending, destGUID) if( bombAmount ) then parseHotBomb(sourceGUID, true, spellID, bombAmount, compressGUID[destGUID]) - + sendMessage(string.format("UB:%s:%d:%d:%s:%d:%d:%s", pending.totalTicks, spellID, bombAmount, compressGUID[destGUID], amount, pending.tickInterval, compressGUID[destGUID])) return end end - + sendMessage(string.format("U:%s:%d:%d:%d:%s", spellID, amount, pending.totalTicks, pending.tickInterval, compressGUID[destGUID])) end end @@ -2164,7 +2207,7 @@ function HealComm:COMBAT_LOG_EVENT_UNFILTERED(...) if compressGUID[destGUID] then -- Hot faded that we cast local pending = pendingHots[playerGUID] and pendingHots[playerGUID][spellName] - if hotData[spellName] then + if hotData[spellID] then parseHealEnd(sourceGUID, pending, "id", spellID, false, compressGUID[destGUID]) sendMessage(format("HS::%d::%s", spellID, compressGUID[destGUID])) elseif spellData[spellName] and spellData[spellName]._isChanneled then @@ -2204,7 +2247,7 @@ function HealComm:UNIT_SPELLCAST_SENT(unit, targetName, castGUID, spellID) local spellName = GetSpellInfo(spellID) if(unit ~= "player") then return end - if hotData[spellName] or spellData[spellName] then + if hotData[spellID] or spellData[spellName] then targetName = targetName or UnitName("player") castTarget = gsub(targetName, "(.-)%-(.*)$", "%1") @@ -2600,6 +2643,7 @@ function HealComm:OnInitialize() wipe(hotData) wipe(itemSetsData) wipe(talentData) + wipe(spellDesc) -- Load all of the classes formulas and such if LoadClassData then @@ -2609,11 +2653,8 @@ function HealComm:OnInitialize() do local FirstAid = GetSpellInfo(746) - spellData[FirstAid] = { - ticks = {6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8}, - interval = 1, - averages = {66, 114, 161, 301, 400, 640, 800, 1104, 1360, 2000, 2800, 3400} - } + spellData[FirstAid] = { ticks = {6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 10}, interval = 1, averages = { + 66, 114, 161, 301, 400, 640, 800, 1104, 1360, 2000} } local _GetHealTargets = GetHealTargets @@ -2736,4 +2777,10 @@ function HealComm:PLAYER_LOGIN() self:ZONE_CHANGED_NEW_AREA() self:GROUP_ROSTER_UPDATE() +end + +if( not IsLoggedIn() ) then + HealComm.eventFrame:RegisterEvent("PLAYER_LOGIN") +else + HealComm:PLAYER_LOGIN() end \ No newline at end of file diff --git a/rBag/core.lua b/rBag/core.lua index d422a7f..3b1e228 100644 --- a/rBag/core.lua +++ b/rBag/core.lua @@ -123,8 +123,8 @@ function Bags:CreateContainer(storagetype, ...) Container:SetScale(1) Container:SetWidth(((ButtonSize + ButtonSpacing) * ItemsPerRow) + 22 - ButtonSpacing) Container:SetPoint(...) - -- Container:SetFrameStrata("HIGH") - -- Container:SetFrameLevel(1) + Container:SetFrameStrata("MEDIUM") + Container:SetFrameLevel(1) Container:Hide() L.F.CreateBackdrop(Container) Container:EnableMouse(true) diff --git a/rFilter_Zork/classes/hunter.lua b/rFilter_Zork/classes/hunter.lua index 84c99ee..d2efca6 100644 --- a/rFilter_Zork/classes/hunter.lua +++ b/rFilter_Zork/classes/hunter.lua @@ -40,12 +40,12 @@ if L.C.playerClass == "HUNTER" then -- rFilter:CreateBuff(212283,"player",36,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",176,0},"show",{0,1},true,nil) rFilter:CreateCooldown(14286,36,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",176,0},"[combat]show;hide",{0.2,1},true) - -- 法力分流, row 2 col 1 - rFilter:CreateBuff(28734,"player",24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",8,-42},"show",{0,1},true,nil) - rFilter:CreateCooldown(28734,24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",8,-42},"[combat]show;hide",{0.2,1},true) - -- 法力洪流, row 2 col 2 - rFilter:CreateDebuff(28730,"target",24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",38,-42},"show",{0,1},true,nil) - rFilter:CreateCooldown(28730,24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",38,-42},"[combat]show;hide",{0.2,1},true) + -- 多重射击, row 2 col 1 + -- rFilter:CreateBuff(35099,"player",24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",8,-42},"show",{0,1},true,nil) + rFilter:CreateCooldown(27021,24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",8,-42},"[combat]show;hide",{0.2,1},true) + -- mislead, row 2 col 2 + rFilter:CreateBuff(34477,"player",24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",38,-42},"show",{0,1},true,nil) + rFilter:CreateCooldown(34477,24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",38,-42},"[combat]show;hide",{0.2,1},true) -- 假死, row 2 col 3 rFilter:CreateBuff(5384,"player",24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",68,-42},"show",{0,1},true,nil) rFilter:CreateCooldown(5384,24,{"TOPLEFT",oUF_SimplePlayer,"TOPRIGHT",68,-42},"[combat]show;hide",{0.2,1},true)