You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
448 lines
22 KiB
448 lines
22 KiB
|
|
Open Raid is a library to share the player information while playing in a group or raid.
|
|
|
|
Install:
|
|
Place the library at your addon folder/libs/LibOpenRaid/
|
|
Inside LibOpenRaid there's 5 files.
|
|
Add <Include file="Libs\LibOpenRaid\lib.xml"/> to your libs.xml located in the root folder of the addon or
|
|
<Include file="LibOpenRaid\lib.xml"/> if it is located inside the Libs folder.
|
|
Close and open the game client.
|
|
|
|
Inside your lua file, get the library object, you need to do this in order to grab a reference of the library:
|
|
local openRaidLib = LibStub:GetLibrary("LibOpenRaid-1.0")
|
|
With this object, you can start querying the library for information.
|
|
|
|
Functions:
|
|
|
|
local sentRequest = openRaidLib.RequestAllData()
|
|
Request to all players in the group to send infomation on: cooldowns, gear and player data.
|
|
Instants after calling this, expect to receive several callbacks.
|
|
|
|
COOLDOWNS:
|
|
--get all cooldowns from all units
|
|
local allUnitsCooldowns = openRaidLib.GetAllUnitsCooldown()
|
|
allUnitsCooldowns = {
|
|
["playerName1"] = {[cooldownSpellId] = cooldownInfo, [cooldownSpellId] = cooldownInfo, ...}
|
|
["playerName2"] = {[cooldownSpellId] = cooldownInfo, [cooldownSpellId] = cooldownInfo, ...}
|
|
["playerName3"] = {[cooldownSpellId] = cooldownInfo, [cooldownSpellId] = cooldownInfo, ...}
|
|
}
|
|
|
|
--get all cooldowns from a single unit
|
|
local unitCooldows = openRaidLib.GetUnitCooldowns(unitId [,filter])
|
|
@unittId: "player", "target", "party2", "raid12", ...
|
|
@filter: "defensive-raid", "defensive-target", "defensive-personal", "ofensive", "utility", "interrupt"
|
|
can pass more than one filter separating by comma, example: "defensive-raid, defensive-target"
|
|
unitCooldows = {
|
|
[cooldownSpellId] = cooldownInfo,
|
|
[cooldownSpellId] = cooldownInfo,
|
|
[cooldownSpellId] = cooldownInfo,
|
|
}
|
|
|
|
--get a cooldownInfo of a single spell from any unit
|
|
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, cooldownDuration = openRaidLib.GetCooldownStatusFromUnitSpellID(unitId, spellId)
|
|
--by using a cooldown info
|
|
local isReady, normalizedPercent, timeLeft, charges, minValue, maxValue, currentValue, cooldownDuration = openRaidLib.GetCooldownStatusFromCooldownInfo(cooldownInfo)
|
|
|
|
--add spells to a custom filter
|
|
--to change the spells in the filter just call it again with different spells, spells not included in the new table are removed from the filter
|
|
--to remove the filter, call it with an empty table
|
|
@filterName: any string containing alphanumeric characters
|
|
@spells: a table containing spellIds {spellId, spellId, spellId, ...}
|
|
openRaidLib.AddCooldownFilter(filterName, spells)
|
|
|
|
--get a list of filters which a spell has, returns a table in map format: {[filterName] = true}
|
|
--@spellId: the ID of a spell
|
|
--@defaultFilterOnly (bool): if true only return built-in filters, example: "defensive-raid", "ofensive".
|
|
--@customFiltersOnly (bool): if true onlt return a list of custom filters where the spell was added.
|
|
local filterListArray = openRaidLib.GetSpellFilters(spellId, defaultFilterOnly, customFiltersOnly)
|
|
|
|
--request information about a spell for all units in the raid, units which has this cooldown will report back with a "CooldownUpdate" event
|
|
openRaidLib.RequestCooldownInfo(spellId)
|
|
|
|
EQUIPMENT:
|
|
local allPlayersGear = openRaidLib.GetAllUnitsGear()
|
|
allPlayersGear = {
|
|
["playerName1"] = playerGear,
|
|
["playerName2"] = playerGear,
|
|
["playerName3"] = playerGear,
|
|
}
|
|
|
|
local playerGear = openRaidLib.GetUnitGear(unitId)
|
|
playerGear = {
|
|
.durability = number
|
|
.ilevel = number
|
|
.noGems = {socketId}
|
|
.noEnchants = {socketId}
|
|
.weaponEnchant = number (oils)
|
|
.equippedGear = {
|
|
{
|
|
.slotId = number
|
|
.gemSlots = number
|
|
.itemLevel = number
|
|
.itemLink = string
|
|
.itemQuality = number
|
|
.itemId = number
|
|
.itemName = string
|
|
.enchantId = number
|
|
.gemId = number
|
|
.isTier = boolean
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
UNIT INFORMATION
|
|
local allUnitsInfo = openRaidLib.GetAllUnitsInfo()
|
|
allUnitsInfo = {
|
|
["unitName1"] = unitInfo,
|
|
["unitName2"] = unitInfo,
|
|
["unitName3"] = unitInfo,
|
|
}
|
|
|
|
local unitInfo = openRaidLib.GetUnitInfo(unitId)
|
|
unitInfo = {
|
|
.specId = number
|
|
.specName = string
|
|
.role = string
|
|
.heroTalentId = number
|
|
.talents = dragonflight talent string, e.g: "CkGAvcQZXENQPQXqed372Hg2KuxMzssYmZmZWegZZYGjFGLjZAAAAAAAAAAAAsBDzwYGNzAmxYmxgplZGAAAAAwAAAgltxGmmZWGCAABsgZmBA"
|
|
.pvpTalents = {talentId, talentId, talentId}
|
|
.class = string class eng name 'ROGUE'
|
|
.classId = number
|
|
.className = string class localized name 'Rogue'
|
|
.name = string name without realm
|
|
.nameFull = string name with realm 'unitName-ServerName'
|
|
}
|
|
|
|
|
|
KEYSTONE
|
|
--send and receive mythic+ keystone information and works only in retail
|
|
--the event "KeystoneUpdate" is triggered on receive keystone info from another player
|
|
|
|
local allKeystoneInfo = openRaidLib.GetAllKeystonesInfo()
|
|
allKeystoneInfo = {
|
|
["unitName1"] = keystoneInfo,
|
|
["unitName2"] = keystoneInfo,
|
|
["unitName3"] = keystoneInfo,
|
|
}
|
|
|
|
--@mapID and @challengeMapID are the instanceMapID, also obtained with GetInstanceInfo(), can be used to retrive map name with GetRealZoneText(mapID)
|
|
--@mythicPlusMapID is used with C_ChallengeMode.GetMapUIInfo(mythicPlusMapID) to retrive the map name for the dungeon
|
|
--@classID: class id as number (1 to 12)
|
|
--@rating: mythic plus rating on the current season
|
|
local keystoneInfo = openRaidLib.GetKeystoneInfo(unitId)
|
|
keystoneInfo = {
|
|
.level = number,
|
|
.mapID = number,
|
|
.challengeMapID = number,
|
|
.classID = number,
|
|
.rating = number,
|
|
.mythicPlusMapID = number,
|
|
}
|
|
|
|
--request all online players in the guild to send their keystone information
|
|
--this call fails if the player isn't in a guild
|
|
local requestSent = openRaidLib.RequestKeystoneDataFromGuild()
|
|
|
|
--request to players in your party to send their keystone information
|
|
--this call fails if the player is in raid
|
|
local requestSent = openRaidLib.RequestKeystoneDataFromParty()
|
|
|
|
--request to players in your raid to send their keystone information
|
|
--this call fails if not in a raid group
|
|
local requestSent = openRaidLib.RequestKeystoneDataFromRaid()
|
|
|
|
|
|
FLASK and FOOD buffs
|
|
--@spellId: a regular spellId
|
|
local flaskInfo = openRaidLib.GetFlaskInfoBySpellId(spellId)
|
|
|
|
--@auraInfo: UnitAuraInfo -> https://wowpedia.fandom.com/wiki/Struct_UnitAuraInfo see C_UnitAuras.GetAuraDataBySlot()
|
|
local flaskTier = openRaidLib.GetFlaskTierFromAura(auraInfo)
|
|
|
|
--@spellId: a regular spellId
|
|
local foodInfo = openRaidLib.GetFoodInfoBySpellId(spellId)
|
|
|
|
--@auraInfo: UnitAuraInfo -> https://wowpedia.fandom.com/wiki/Struct_UnitAuraInfo see C_UnitAuras.GetAuraDataBySlot()
|
|
local foodTier = openRaidLib.GetFoodTierFromAura(auraInfo)
|
|
|
|
|
|
Callbacks:
|
|
|
|
===================================================================================================================================
|
|
"CooldownListUpdate": triggers when the lib received a list of cooldowns from another unit in the group.
|
|
@unitId: which unit got updated
|
|
@unitCooldows: list of cooldowns of the unit
|
|
@allUnitsCooldowns: a list of all players with their cooldowns
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnReceiveCooldownListUpdate(unitId, unitCooldows, allUnitsCooldowns)
|
|
--regular iteration among the group
|
|
for i = 1, GetNumGroupMembers() do
|
|
local unitId = "raid"..i
|
|
local thisUnitCooldowns = openRaidLib.GetUnitCooldowns(unitId, "defensive-raid, defensive-target")
|
|
end
|
|
|
|
--using the 'unitCooldows' table passed for the updated unit
|
|
for spellId, cooldownInfo in pairs(unitCooldows) do
|
|
--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
|
|
--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
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "CooldownListUpdate", "OnReceiveCooldownListUpdate")
|
|
|
|
===================================================================================================================================
|
|
"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 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.OnReceiveCooldownUpdate(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)
|
|
--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
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnCooldownListWipe(allUnitsCooldowns)
|
|
--print("is nil:", next(allUnitsCooldowns))
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "CooldownListWipe", "OnCooldownListWipe")
|
|
|
|
Note: right after the wipe, player cooldowns get an update, so a callback "CooldownListUpdate" is triggered right after this event (on the same tick).
|
|
|
|
|
|
|
|
===================================================================================================================================
|
|
"GearUpdate": when received an update from a player with all information about the gear
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnGearUpdate(unitId, unitGear, allUnitsGear)
|
|
local itemLevelNumber = unitGear.ilevel
|
|
local durabilityNumber = unitGear.durability
|
|
--hasWeaponEnchant is 1 have enchant or 0 is don't
|
|
local hasWeaponEnchantNumber = unitGear.weaponEnchant
|
|
local noEnchantTable = unitGear.noEnchants
|
|
local noGemsTable = unitGear.noGems
|
|
|
|
for index, slotIdWithoutEnchant in ipairs(noEnchantTable) do
|
|
end
|
|
|
|
for index, slotIdWithEmptyGemSocket in ipairs(noGemsTable) do
|
|
end
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "GearUpdate", "OnGearUpdate")
|
|
|
|
===================================================================================================================================
|
|
"GearDurabilityUpdate": when the gear durability of a player in the group changes
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnGearDurabilityUpdate(unitId, durability, unitGear, allUnitsGear)
|
|
--print(UnitName(unitId) .. " durability is now " .. durability)
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "GearDurabilityUpdate", "OnGearDurabilityUpdate")
|
|
|
|
===================================================================================================================================
|
|
"GearListWipe": when the list of gear get a wipe, usually when the player leave the group
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnGearListWiped(allUnitsGear)
|
|
--print("is nil:", next(allUnitsGear))
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "GearListWipe", "OnGearListWiped")
|
|
|
|
Note: right after the wipe, player gear information get an update, so a callback "GearUpdate" is triggered right after this event (on the same tick).
|
|
|
|
|
|
|
|
|
|
===================================================================================================================================
|
|
"UnitInfoUpdate": a unit in the group has been updated
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnUnitUpdate(unitId, unitInfo, allUnitsInfo)
|
|
for unitName, unitInfo in pairs(allUnitsInfo) do
|
|
local specId = unitInfo.specId
|
|
local specName = unitInfo.specName
|
|
local role = unitInfo.role
|
|
local heroTalentId = unitInfo.heroTalentId
|
|
local talents = unitInfo.talents
|
|
local pvpTalents = unitInfo.pvpTalents
|
|
local class = unitInfo.class = string class eng name 'ROGUE'
|
|
local classId = unitInfo.classId = number
|
|
local className = unitInfo.className
|
|
local unitName = unitInfo.name = string name without realm
|
|
local unitNameFull = unitInfo.nameFull = string name with realm 'unitName-ServerName'
|
|
end
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "UnitInfoUpdate", "OnUnitUpdate")
|
|
|
|
===================================================================================================================================
|
|
"UnitInfoWipe": when the unit info got wipped, usually when the player leave the group
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnUnitInfoWipe()
|
|
--all unit info got wiped
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "UnitInfoWipe", "OnUnitInfoWipe")
|
|
|
|
Note: a "UnitUpdate" callback is triggered right after this event to notify the player info is updated.
|
|
|
|
===================================================================================================================================
|
|
"TalentUpdate": when a unit changed a talent | DEPRECATRED | Use: OnUnitUpdate
|
|
===================================================================================================================================
|
|
|
|
===================================================================================================================================
|
|
"PvPTalentUpdate": when an unit changed a pvp talent | DEPRECATRED | Use: OnUnitUpdate
|
|
===================================================================================================================================
|
|
|
|
===================================================================================================================================
|
|
"UnitDeath": when an unit died
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnUnitDeath(unitId)
|
|
print(UnitName(unitId) .. " died.")
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "UnitDeath", "OnUnitDeath")
|
|
|
|
===================================================================================================================================
|
|
"UnitAlive": when an unit revives
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnUnitRess(unitId)
|
|
print(UnitName(unitId) .. " is alive.")
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "UnitAlive", "OnUnitRess")
|
|
|
|
===================================================================================================================================
|
|
"KeystoneUpdate": triggered when the list of keystones got an update
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnKeystoneUpdate(unitName, keystoneInfo, allKeystoneInfo)
|
|
local mapName = C_ChallengeMode.GetMapUIInfo(keystoneInfo.mythicPlusMapID)
|
|
print(unitName .. " has a " .. keystoneInfo.level .. " keystone for map " .. mapName .. ".")
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "KeystoneUpdate", "OnKeystoneUpdate")
|
|
|
|
===================================================================================================================================
|
|
"KeystoneWipe": triggered after the call openRaidLib.WipeKeystoneData()
|
|
===================================================================================================================================
|
|
|
|
function MyAddonObject.OnKeystoneUpdate(allKeystoneInfo)
|
|
print("no keystone data:", next(allKeystoneInfo) == nil)
|
|
end
|
|
|
|
--registering the callback:
|
|
openRaidLib.RegisterCallback(MyAddonObject, "KeystoneWipe", "OnKeystoneWipe")
|