Open Raid Library update

This commit is contained in:
Tercio Jose
2022-04-28 15:52:11 -03:00
parent d4f50e7cb7
commit 1afb897904
8 changed files with 298 additions and 63 deletions
+5
View File
@@ -6,6 +6,11 @@ end
local openRaidLib = LibStub:GetLibrary("LibOpenRaid-1.0")
--> comm prefix deprecated
openRaidLib.commPrefixDeprecated = {
}
local spamLimit = {}
local showDeprecatedMessage = function(deprecatedCall, newCall)
-31
View File
@@ -216,35 +216,4 @@ function openRaidLib.FilterCooldowns(unitName, allCooldowns, filters)
end
return resultFilters
end
--compare the current list of spells of the player with a new spell list generated
--add or remove spells from the current list, make the cache dirt and return a table with spells removed or added
function openRaidLib.CooldownManager.CheckForSpellsAdeedOrRemoved()
local playerName = UnitName("player")
local currentCooldowns = openRaidLib.CooldownManager.UnitData[playerName]
local _, newCooldownList = openRaidLib.CooldownManager.GetPlayerCooldownList()
local spellsAdded, spellsRemoved = {}, {}
for spellId, cooldownInfo in pairs(newCooldownList) do
if (not currentCooldowns[spellId]) then
--a spell has been added
currentCooldowns[spellId] = cooldownInfo
spellsAdded[#spellsAdded+1] = {spellId}
--mark the filter cache of this unit as dirt
openRaidLib.CooldownManager.NeedRebuildFilters[playerName] = true
end
end
for spellId, cooldownInfo in pairs(currentCooldowns) do
if (not newCooldownList[spellId]) then
--a spell has been removed
currentCooldowns[spellId] = nil
spellsRemoved[#spellsRemoved+1] = {spellId}
--mark the filter cache of this unit as dirt
openRaidLib.CooldownManager.NeedRebuildFilters[playerName] = true
end
end
return spellsAdded, spellsRemoved
end
+162 -17
View File
@@ -25,11 +25,11 @@ Change Log:
- player information is always available even when not in a group.
TODO:
- need to finish the CheckForSpellsAdeedOrRemoved(), need to send the comm, need to create the local callbacks
- create comm to add or remove a cooldown from an unit
- (finished but not active atm) need to finish the CheckForSpellsAdeedOrRemoved(), need to send the comm, need to create the local callbacks
- (finished but not active atm) create comm to add or remove a cooldown from an unit
- make talents changes also send only cooldowns added or changed
- add into gear info how many tier set parts the player has
- keystone info (portion of the logic is implemented, need to share the information)
- add unit_connected through comm to know if a unit disconnected, do the lib realy need this? I don't think so
- raid lockouts normal-heroic-mythic
- soulbind character (covenant choise) - probably not used in 10.0
@@ -41,7 +41,7 @@ BUGS:
local major = "LibOpenRaid-1.0"
local CONST_LIB_VERSION = 32
local CONST_LIB_VERSION = 33
LIB_OPEN_RAID_CAN_LOAD = false
--declae the library within the LibStub
@@ -67,8 +67,7 @@ LIB_OPEN_RAID_CAN_LOAD = false
local CONST_COMM_COOLDOWNUPDATE_PREFIX = "U"
local CONST_COMM_COOLDOWNFULLLIST_PREFIX = "C"
local CONST_COMM_COOLDOWNADDSPELL_PREFIX = "S"
local CONST_COMM_COOLDOWNREMOVESPELL_PREFIX = "E"
local CONST_COMM_COOLDOWNCHANGES_PREFIX = "S"
local CONST_COMM_GEARINFO_FULL_PREFIX = "G"
local CONST_COMM_GEARINFO_DURABILITY_PREFIX = "R"
@@ -125,7 +124,6 @@ LIB_OPEN_RAID_CAN_LOAD = false
openRaidLib.commHandler = {}
function openRaidLib.commHandler.OnReceiveComm(self, event, prefix, text, channel, sender, target, zoneChannelID, localID, name, instanceID)
--check if the data belong to us
if (prefix == CONST_COMM_PREFIX) then
--check if the lib can receive comms
@@ -140,7 +138,7 @@ LIB_OPEN_RAID_CAN_LOAD = false
if (playerName == sender) then
return
end
local data = text
local LibDeflate = LibStub:GetLibrary("LibDeflate")
local dataCompressed = LibDeflate:DecodeForWoWAddonChannel(data)
@@ -148,8 +146,18 @@ LIB_OPEN_RAID_CAN_LOAD = false
--get the first byte of the data, it indicates what type of data was transmited
local dataTypePrefix = data:match("^.")
if (not dataTypePrefix) then
return
elseif (openRaidLib.commPrefixDeprecated[dataTypePrefix]) then
return
end
--get the table with functions regitered for this type of data
local callbackTable = openRaidLib.commHandler.commCallback[dataTypePrefix]
if (not callbackTable) then
return
end
--convert to table
local dataAsTable = {strsplit(",", data)}
@@ -173,6 +181,7 @@ LIB_OPEN_RAID_CAN_LOAD = false
[CONST_COMM_FULLINFO_PREFIX] = {}, --update all
[CONST_COMM_COOLDOWNFULLLIST_PREFIX] = {}, --all cooldowns of a player
[CONST_COMM_COOLDOWNUPDATE_PREFIX] = {}, --an update of a single cooldown
[CONST_COMM_COOLDOWNCHANGES_PREFIX] = {}, --cooldowns got added or removed
[CONST_COMM_GEARINFO_FULL_PREFIX] = {}, --an update of gear information
[CONST_COMM_GEARINFO_DURABILITY_PREFIX] = {}, --an update of the player gear durability
[CONST_COMM_PLAYER_DEAD_PREFIX] = {}, --player is dead
@@ -287,6 +296,8 @@ LIB_OPEN_RAID_CAN_LOAD = false
"CooldownListUpdate",
"CooldownListWipe",
"CooldownUpdate",
"CooldownAdded",
"CooldownRemoved",
"UnitDeath",
"UnitAlive",
"GearListWipe",
@@ -453,6 +464,9 @@ LIB_OPEN_RAID_CAN_LOAD = false
["UNIT_SPELLCAST_SUCCEEDED"] = function(...)
local unitId, castGUID, spellId = ...
C_Timer.After(0.1, function()
--some spells has many different spellIds, get the default
spellId = LIB_OPEN_RAID_SPELL_DEFAULT_IDS[spellId] or spellId
--trigger internal callbacks
openRaidLib.internalCallback.TriggerEvent("playerCast", spellId, UnitIsUnit(unitId, "pet"))
end)
end,
@@ -1564,15 +1578,8 @@ end
end
function openRaidLib.CooldownManager.OnPlayerPetChanged()
--local spellsAdded, spellsRemoved = openRaidLib.CooldownManager.CheckForSpellsAdeedOrRemoved()
--and send a comm telling this player has a new spell instead of sending all the list of spells
-- local dataToSend = CONST_COMM_COOLDOWNFULLLIST_PREFIX .. ","
-- openRaidLib.commHandler.SendCommData(dataToSend)
--openRaidLib.Schedules.NewUniqueTimer(0.5, openRaidLib.CooldownManager.SendAllPlayerCooldowns, "CooldownManager", "sendAllPlayerCooldowns_Schedule")
--disabled atm
--openRaidLib.CooldownManager.CheckCooldownChanges()
end
openRaidLib.internalCallback.RegisterCallback("onLeaveGroup", openRaidLib.CooldownManager.OnPlayerLeaveGroup)
@@ -1584,6 +1591,144 @@ end
openRaidLib.internalCallback.RegisterCallback("mythicDungeonStart", openRaidLib.CooldownManager.OnMythicPlusStart)
openRaidLib.internalCallback.RegisterCallback("playerPetChange", openRaidLib.CooldownManager.OnPlayerPetChanged)
--send a list through comm with cooldowns added or removed
function openRaidLib.CooldownManager.CheckCooldownChanges()
--important: CheckForSpellsAdeedOrRemoved() already change the cooldowns on the player locally
local spellsAdded, spellsRemoved = openRaidLib.CooldownManager.CheckForSpellsAdeedOrRemoved()
--add a prefix to make things easier during unpack
if (#spellsAdded > 0) then
tinsert(spellsAdded, 1, "A")
end
--insert the spells that has been removed at the end of the spells added table and pack the table
if (#spellsRemoved > 0) then
spellsAdded[#spellsAdded+1] = "R"
for _, spellId in ipairs(spellsRemoved) do
spellsAdded[#spellsAdded+1] = spellId
end
end
--send a comm if has any changes
if (#spellsAdded > 0) then
--pack
local playerCooldownChangesString = openRaidLib.PackTable(spellsAdded)
local dataToSend = CONST_COMM_COOLDOWNCHANGES_PREFIX .. ","
dataToSend = dataToSend .. playerCooldownChangesString
openRaidLib.commHandler.SendCommData(dataToSend)
diagnosticComm("CheckCooldownChanges| " .. dataToSend) --debug
end
end
function openRaidLib.CooldownManager.OnReceiveUnitCooldownChanges(data, unitName)
local currentCooldowns = openRaidLib.CooldownManager.UnitData[unitName]
--if does not have the full list of cooldowns of this unit, ignore cooldown add/remove comms
if (not currentCooldowns or not openRaidLib.CooldownManager.HasFullCooldownList[unitName]) then
return
end
--create a table to be ready to unpack
local addedCooldowns = {}
local removedCooldowns = {}
local isCooldownAdded = false
local isCooldownRemoved = false
--the letters A and R separate cooldowns added and cooldowns removed
for i = 1, #data do
local thisData = data[i]
if (thisData == "A") then
isCooldownAdded = true
elseif (thisData == "R") then
isCooldownAdded = false
isCooldownRemoved = true
end
if (isCooldownAdded) then
thisData = tonumber(thisData)
if (thisData) then
addedCooldowns[#addedCooldowns+1] = thisData
end
elseif(isCooldownRemoved) then
local spellId = tonumber(thisData)
if (spellId) then
removedCooldowns[#removedCooldowns+1] = spellId
end
end
end
if (#addedCooldowns > 0) then
tinsert(addedCooldowns, 1, #addedCooldowns) --amount of indexes for UnpackTable()
local cooldownsAddedUnpacked = openRaidLib.UnpackTable(addedCooldowns, 1, true, true, 5)
for spellId, cooldownInfo in pairs(cooldownsAddedUnpacked) do
--add the spell into the list of cooldowns of this unit
local timeLeft, charges, timeOffset, duration = unpack(cooldownInfo)
openRaidLib.CooldownManager.CooldownSpellUpdate(unitName, spellId, timeLeft, charges, timeOffset, duration)
--mark the filter cache of this unit as dirt
openRaidLib.CooldownManager.NeedRebuildFilters[unitName] = true
--trigger public callback
openRaidLib.publicCallback.TriggerCallback("CooldownAdded", openRaidLib.GetUnitID(unitName), spellId, cooldownInfo, openRaidLib.GetUnitCooldowns(unitName), openRaidLib.CooldownManager.UnitData)
end
end
if (#removedCooldowns > 0) then
for _, spellId in ipairs(removedCooldowns) do
--remove the spell from this unit cooldown list
currentCooldowns[spellId] = nil
--mark the filter cache of this unit as dirt
openRaidLib.CooldownManager.NeedRebuildFilters[unitName] = true
--trigger public callback
openRaidLib.publicCallback.TriggerCallback("CooldownRemoved", openRaidLib.GetUnitID(unitName), spellId, openRaidLib.GetUnitCooldowns(unitName), openRaidLib.CooldownManager.UnitData)
end
end
end
openRaidLib.commHandler.RegisterComm(CONST_COMM_COOLDOWNCHANGES_PREFIX, openRaidLib.CooldownManager.OnReceiveUnitCooldownChanges)
--compare the current list of spells of the player with a new spell list generated
--add or remove spells from the player cooldown list
--return two tables, the first has added spells and is a index table ready to pack and send to comm
--the second table is a index table with a list of spells that has been removed, also ready to pack
function openRaidLib.CooldownManager.CheckForSpellsAdeedOrRemoved()
local playerName = UnitName("player")
local currentCooldowns = openRaidLib.CooldownManager.UnitData[playerName]
local _, newCooldownList = openRaidLib.CooldownManager.GetPlayerCooldownList()
local spellsAdded, spellsRemoved = {}, {}
for spellId, cooldownInfo in pairs(newCooldownList) do
if (not currentCooldowns[spellId]) then
--a spell has been added
local timeLeft, charges, timeOffset, duration = unpack(cooldownInfo)
openRaidLib.CooldownManager.CooldownSpellUpdate(playerName, spellId, timeLeft, charges, timeOffset, duration)
local timeLeft, charges, startTimeOffset, duration = openRaidLib.CooldownManager.GetPlayerCooldownStatus(spellId)
spellsAdded[#spellsAdded+1] = spellId
spellsAdded[#spellsAdded+1] = timeLeft
spellsAdded[#spellsAdded+1] = charges
spellsAdded[#spellsAdded+1] = startTimeOffset
spellsAdded[#spellsAdded+1] = duration
--mark the filter cache of this unit as dirt
openRaidLib.CooldownManager.NeedRebuildFilters[playerName] = true
openRaidLib.publicCallback.TriggerCallback("CooldownAdded", "player", spellId, cooldownInfo, openRaidLib.GetUnitCooldowns("player"), openRaidLib.CooldownManager.UnitData)
end
end
for spellId in pairs(currentCooldowns) do
if (not newCooldownList[spellId]) then
--a spell has been removed
currentCooldowns[spellId] = nil
spellsRemoved[#spellsRemoved+1] = spellId
--mark the filter cache of this unit as dirt
openRaidLib.CooldownManager.NeedRebuildFilters[playerName] = true
openRaidLib.publicCallback.TriggerCallback("CooldownRemoved", "player", spellId, openRaidLib.GetUnitCooldowns("player"), openRaidLib.CooldownManager.UnitData)
end
end
return spellsAdded, spellsRemoved
end
--update the list of cooldowns of the player it self locally
--this is called right after changes in the player cooldowns
function openRaidLib.CooldownManager.UpdatePlayerCooldownsLocally(playerCooldownHash)
+39 -7
View File
@@ -333,7 +333,7 @@ LIB_OPEN_RAID_COOLDOWNS_BY_SPEC = {
--affliction
[265] = {
[205180] = 1, --Summon Darkglare
[342601] = 1, --Ritual of Doom
--[342601] = 1, --Ritual of Doom
[113860] = 1, --Dark Soul: Misery (talent)
[104773] = 2, --Unending Resolve
[108416] = 2, --Dark Pact (talent)
@@ -344,7 +344,7 @@ LIB_OPEN_RAID_COOLDOWNS_BY_SPEC = {
--demonology
[266] = {
[265187] = 1, --Summon Demonic Tyrant
[342601] = 1, --Ritual of Doom
--[342601] = 1, --Ritual of Doom
[267171] = 1, --Demonic Strength (talent)
[111898] = 1, --Grimoire: Felguard (talent)
[267217] = 1, --Nether Portal (talent)
@@ -359,7 +359,7 @@ LIB_OPEN_RAID_COOLDOWNS_BY_SPEC = {
--destruction
[267] = {
[1122] = 1, --Summon Infernal
[342601] = 1, --Ritual of Doom
--[342601] = 1, --Ritual of Doom
[113858] = 1, --Dark Soul: Instability (talent)
[104773] = 2, --Unending Resolve
[108416] = 2, --Dark Pact (talent)
@@ -544,7 +544,7 @@ LIB_OPEN_RAID_COOLDOWNS_BY_SPEC = {
[22812] = 2, --Barkskin
[61336] = 2, --Survival Instincts
[108238] = 2, --Renewal (talent)
[77764] = 4, --Stampeding Roar
[77761] = 4, --Stampeding Roar
[132469] = 5, --Typhoon
[319454] = 5, --Heart of the Wild (talent)
[106839] = 6, --Skull Bash (interrupt)
@@ -758,7 +758,7 @@ LIB_OPEN_RAID_COOLDOWNS_INFO = {
--warlock
[205180] = {cooldown = 180, duration = 20, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Summon Darkglare
[342601] = {cooldown = 3600, duration = false, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Ritual of Doom
--[342601] = {cooldown = 3600, duration = false, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Ritual of Doom
[113860] = {cooldown = 120, duration = 20, talent = 19293, charges = 1, class = "WARLOCK", type = 1}, --Dark Soul: Misery (talent)
[104773] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "WARLOCK", type = 2}, --Unending Resolve
[108416] = {cooldown = 60, duration = 20, talent = 19286, charges = 1, class = "WARLOCK", type = 2}, --Dark Pact (talent)
@@ -836,7 +836,6 @@ LIB_OPEN_RAID_COOLDOWNS_INFO = {
[106951] = {cooldown = 180, duration = 15, talent = false, charges = 1, class = "DRUID", type = 1}, --Berserk
[102543] = {cooldown = 30, duration = 180, talent = 21704, charges = 1, class = "DRUID", type = 1}, --Incarnation: King of the Jungle (talent)
[61336] = {cooldown = 120, duration = 6, talent = false, charges = 2, class = "DRUID", type = 2}, --Survival Instincts (2min feral 4min guardian, same spellid)
[77764] = {cooldown = 120, duration = 8, talent = false, charges = 1, class = "DRUID", type = 4}, --Stampeding Roar (utility)
[102558] = {cooldown = 180, duration = 30, talent = 22388, charges = 1, class = "DRUID", type = 2}, --Incarnation: Guardian of Ursoc (talent)
[33891] = {cooldown = 180, duration = 30, talent = 22421, charges = 1, class = "DRUID", type = 2}, --Incarnation: Tree of Life (talent)
[102342] = {cooldown = 60, duration = 12, talent = false, charges = 1, class = "DRUID", type = 3}, --Ironbark
@@ -1016,4 +1015,37 @@ LIB_OPEN_RAID_SPELL_INTERRUPT = {
[19647] = LIB_OPEN_RAID_COOLDOWNS_INFO[19647], --Spell Lock (pet felhunter ability)
[89766] = LIB_OPEN_RAID_COOLDOWNS_INFO[89766], --Axe Toss (pet felguard ability)
}
}
LIB_OPEN_RAID_SPELL_DEFAULT_IDS = {
--stampeding roar (druid)
[106898] = 77761,
[77764] = 77761, --"Uncategorized" on wowhead, need to test if still exists
--spell lock (warlock pet)
[119910] = 19647, --"Uncategorized" on wowhead
[132409] = 19647, --"Uncategorized" on wowhead
--[115781] = 19647, --optical blast used by old talent observer, still a thing?
--[251523] = 19647, --wowhead list this spell as sibling spell
--[251922] = 19647, --wowhead list this spell as sibling spell
--axe toss (warlock pet)
[119914] = 89766, --"Uncategorized" on wowhead
[347008] = 89766, --"Uncategorized" on wowhead
--hex (shaman)
[210873] = 51514, --Compy
[211004] = 51514, --Spider
[211010] = 51514, --Snake
[211015] = 51514, --Cockroach
[269352] = 51514, --Skeletal Hatchling
[277778] = 51514, --Zandalari Tendonripper
[277784] = 51514, --Wicker Mongrel
[309328] = 51514, --Living Honey
--typhoon
--[61391] = 132469,
--metamorphosis
[191427] = 200166,
--187827 vengeance need to test these spellIds
--191427 havoc
}
--need to add mass dispell (32375)
+72 -6
View File
@@ -42,10 +42,11 @@ unitCooldows = {
local cooldownInfo = openRaidLib.GetUnitCooldownInfo(unitId, spellId)
--get cooldown timers to use with progress bar or cooldown frames, percent are normalized (0 to 1), timeLeft is seconds, minValue/maxValue/currentValue are in GetTime() time space, amount of charges
--minValue is the same as startTime, maxValue is the same as expirationTime, currentValue is GetTime()
--by using unitID and spellID
local isReady, normalizedPercent, timeLeft, charges, minValue, maxValue, currentValue = openRaidLib.GetCooldownStatusFromUnitSpellID(unitId, spellId)
local isReady, normalizedPercent, timeLeft, charges, minValue, maxValue, currentValue, cooldownDuration = openRaidLib.GetCooldownStatusFromUnitSpellID(unitId, spellId)
--by using a cooldown info
local isReady, normalizedPercent, timeLeft, charges, minValue, maxValue, currentValue = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
local isReady, normalizedPercent, timeLeft, charges, minValue, maxValue, currentValue, cooldownDuration = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
EQUIPMENT:
@@ -110,19 +111,35 @@ function MyAddonObject.OnReceiveCooldownListUpdate(unitId, unitCooldows, allUnit
--using the 'unitCooldows' table passed for the updated unit
for spellId, cooldownInfo in pairs(unitCooldows) do
local isReady, timeLeft, charges, normalizedPercent, minValue, maxValue, currentValue = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
--minValue, maxValue, currentValue is the same as startTime, expirationTime, GetTime()
local isReady, timeLeft, charges, normalizedPercent, minValue, maxValue, currentValue, cooldownDuration = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
--statusbar frame
local statusbar = CreateFrame("statusbar", "MyStatusBar", UIParent)
statusbar:SetMinMaxValues(minValue, maxValue)
statusbar:SetValue(currentValue)
--cooldown frame
local cooldownFrame = CreateFrame("cooldown", "MyCooldownFrame", UIParent)
local startTime = minValue
CooldownFrame_Set(cooldownFrame, startTime, cooldownDuration, timeLeft > 0)
--or
cooldownFrame:SetCooldown(startTime, cooldownDuration)
end
--this event also passes a table with all player cooldowns
for unitName, unitCooldows in pairs(allUnitsCooldowns) do
for spellId, cooldownInfo in pairs(unitCooldows) do
local isReady, timeLeft, charges, normalizedPercent, minValue, maxValue, currentValue = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
--minValue, maxValue, currentValue is the same as startTime, expirationTime, GetTime()
local isReady, timeLeft, charges, normalizedPercent, minValue, maxValue, currentValue, cooldownDuration = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
--statusbar frame
local statusbar = CreateFrame("statusbar", "MyStatusBar", UIParent)
statusbar:SetMinMaxValues(0, 1)
statusbar:SetValue(normalizedPercent)
--cooldown frame
local cooldownFrame = CreateFrame("cooldown", "MyCooldownFrame", UIParent)
local startTime = minValue
CooldownFrame_Set(cooldownFrame, startTime, cooldownDuration, timeLeft > 0)
--or
cooldownFrame:SetCooldown(startTime, cooldownDuration)
end
end
end
@@ -132,7 +149,7 @@ openRaidLib.RegisterCallback(MyAddonObject, "CooldownListUpdate", "OnReceiveCool
===================================================================================================================================
"CooldownUpdate": triggered when an unit in the group uses a cooldown or the timeleft of a cooldown of an unit got an update
@unitId: which unit got updated
@unitId: which unit got the update
@spellId: id of the cooldown spell
@cooldownInfo: a table containing information about the cooldown time
@unitCooldows: list of cooldowns of the unit
@@ -140,15 +157,64 @@ openRaidLib.RegisterCallback(MyAddonObject, "CooldownListUpdate", "OnReceiveCool
===================================================================================================================================
function MyAddonObject.OnReceiveCooldownUpdate(unitId, spellId, cooldownInfo, unitCooldows, allUnitsCooldowns)
local isReady, timeLeft, charges, normalizedPercent, minValue, maxValue, currentValue = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
--minValue, maxValue, currentValue is the same as startTime, expirationTime, GetTime()
local isReady, timeLeft, charges, normalizedPercent, minValue, maxValue, currentValue, cooldownDuration = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
--statusbar frame
local statusbar = CreateFrame("statusbar", "MyStatusBar", UIParent)
statusbar:SetMinMaxValues(minValue, maxValue)
statusbar:SetValue(currentValue)
--cooldown frame
local cooldownFrame = CreateFrame("cooldown", "MyCooldownFrame", UIParent)
local startTime = minValue
CooldownFrame_Set(cooldownFrame, startTime, cooldownDuration, timeLeft > 0)
--or
cooldownFrame:SetCooldown(startTime, cooldownDuration)
end
--registering the callback:
openRaidLib.RegisterCallback(MyAddonObject, "CooldownUpdate", "OnReceiveCooldownUpdate")
===================================================================================================================================
"CooldownAdded": triggered when an unit get a new cooldown
@unitId: which unit got the update
@spellId: id of the cooldown spell
@cooldownInfo: a table containing information about the cooldown time
@unitCooldows: list of cooldowns of the unit
@allUnitsCooldowns: a list of all players and their cooldowns
===================================================================================================================================
function MyAddonObject.OnUnitNewCooldown(unitId, spellId, cooldownInfo, unitCooldows, allUnitsCooldowns)
--minValue, maxValue, currentValue is the same as startTime, expirationTime, GetTime()
local isReady, timeLeft, charges, normalizedPercent, minValue, maxValue, currentValue, cooldownDuration = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
local statusbar = CreateFrame("statusbar", "MyStatusBar", UIParent)
statusbar:SetMinMaxValues(minValue, maxValue)
statusbar:SetValue(currentValue)
--cooldown frame
local cooldownFrame = CreateFrame("cooldown", "MyCooldownFrame", UIParent)
local startTime = minValue
CooldownFrame_Set(cooldownFrame, startTime, cooldownDuration, timeLeft > 0)
--or
cooldownFrame:SetCooldown(startTime, cooldownDuration)
end
--registering the callback:
openRaidLib.RegisterCallback(MyAddonObject, "CooldownAdded", "OnUnitNewCooldown")
===================================================================================================================================
"CooldownRemoved": triggered when an unit lost a cooldown spell
@unitId: which unit got the update
@spellId: id of the cooldown spell
@unitCooldows: list of cooldowns of the unit
@allUnitsCooldowns: a list of all players and their cooldowns
===================================================================================================================================
function MyAddonObject.OnUnitLostCooldown(unitId, spellId, unitCooldows, allUnitsCooldowns)
--the unit lost a cooldown
end
--registering the callback:
openRaidLib.RegisterCallback(MyAddonObject, "CooldownRemoved", "OnUnitLostCooldown")
===================================================================================================================================
"CooldownListWipe": when the list of cooldowns get a wipe, usually when the player leave the group
===================================================================================================================================
+2 -2
View File
@@ -6,8 +6,8 @@
local version, build, date, tocversion = GetBuildInfo()
_detalhes.build_counter = 9779
_detalhes.alpha_build_counter = 9779 --if this is higher than the regular counter, use it instead
_detalhes.build_counter = 9780
_detalhes.alpha_build_counter = 9780 --if this is higher than the regular counter, use it instead
_detalhes.bcc_counter = 33
_detalhes.dont_open_news = true
_detalhes.game_version = version
+5
View File
@@ -3716,6 +3716,11 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
elseif (not alvo_name) then
return
end
--development honey pot for interrupt spells
if (TrackerCleuDB and TrackerCleuDB.honey_pot) then
TrackerCleuDB.honey_pot[spellid] = true
end
_current_misc_container.need_refresh = true
+13
View File
@@ -20,6 +20,8 @@ function Details.CooldownTracking.EnableTracker()
openRaidLib.RegisterCallback(Details.CooldownTracking, "CooldownListUpdate", "OnReceiveUnitFullCooldownList")
openRaidLib.RegisterCallback(Details.CooldownTracking, "CooldownUpdate", "OnReceiveSingleCooldownUpdate")
openRaidLib.RegisterCallback(Details.CooldownTracking, "CooldownListWipe", "OnCooldownListWipe")
openRaidLib.RegisterCallback(Details.CooldownTracking, "CooldownAdded", "OnCooldownAdded")
openRaidLib.RegisterCallback(Details.CooldownTracking, "CooldownRemoved", "OnCooldownRemoved")
Details.CooldownTracking.RefreshCooldownFrames()
end
@@ -86,6 +88,17 @@ end
Details.CooldownTracking.RefreshCooldownFrames()
end
--when a cooldown has been added to an unit
function Details.CooldownTracking.OnCooldownAdded(unitId, spellId, cooldownInfo, unitCooldows, allUnitsCooldowns)
--here could update the cooldown of the unit, but I'm too lazy so it update all units
Details.CooldownTracking.RefreshCooldownFrames()
end
--when a cooldown has been removed from an unit
function Details.CooldownTracking.OnCooldownRemoved(unitId, spellId, unitCooldows, allUnitsCooldowns)
Details.CooldownTracking.RefreshCooldownFrames()
end
--> Frames
--hide all bars created