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.
475 lines
15 KiB
475 lines
15 KiB
--- @type string, Private
|
|
local AddonName, Private = ...
|
|
WeakAuras = {}
|
|
WeakAuras.L = {}
|
|
Private.frames = {}
|
|
|
|
--- @alias uid string
|
|
--- @alias auraId string
|
|
|
|
--- @class state
|
|
--- @field id auraId
|
|
--- @field cloneId string?
|
|
|
|
--- @alias non_transmissable_field table<string, non_transmissable_field|boolean>
|
|
|
|
--- @class multiUnitUnits
|
|
--- @field nameplate table<string, boolean>
|
|
--- @field boss table<string, boolean>
|
|
--- @field arena table<string, boolean>
|
|
--- @field group table<string, boolean>
|
|
--- @field party table<string, boolean>
|
|
--- @field raid table<string, boolean>
|
|
|
|
--- @alias traverseFunction fun(): auraData
|
|
|
|
--- @class Private
|
|
--- @field ActivateAuraEnvironment fun(id: auraId?, cloneId: string?, state: state?, states: state[]?, config: boolean?)
|
|
--- @field ActivateAuraEnvironmentForRegion fun(region: table, onlyConfig: boolean?)
|
|
--- @field AddToWatchedTriggerDelay fun(id: auraId, triggerNum: number)
|
|
--- @field anchor_frame_types table<anchorFrameTypes, string>
|
|
--- @field anchor_frame_types_group table<anchorFrameTypes, string>
|
|
--- @field AuraWarnings AuraWarnings
|
|
--- @field AuraEnvironmentWrappedSystem AuraEnvironmentWrappedSystem
|
|
--- @field callbacks callbacks
|
|
--- @field CanHaveTooltip fun(data: auraData): boolean
|
|
--- @field ContainsCustomPlaceHolder fun(input: string): boolean
|
|
--- @field ContainsAnyPlaceHolders fun(input: string): boolean
|
|
--- @field ContainsPlaceHolders fun(input: string, placeholders: string): boolean
|
|
--- @field clones table<auraId, table<string, table>>
|
|
--- @field customActionsFunctions table<auraId, table<string, function?>>
|
|
--- @field DebugLog debugLog
|
|
--- @field EnsureRegion fun(id: auraId, cloneId: string?): Frame
|
|
--- @field ExecEnv table
|
|
--- @field FixGroupChildrenOrderForGroup fun(data: auraData)
|
|
--- @field frames table<string, table>
|
|
--- @field GetDataByUID fun(uid: uid): auraData
|
|
--- @field GetErrorHandlerId fun(id: auraId, context: string): function
|
|
--- @field GetErrorHandlerUid fun(uid: uid, context: string): function
|
|
--- @field GetRegionByUID fun(uid: uid, cloneId: string): Region
|
|
--- @field glow_types table<string, string>
|
|
--- @field inverse_point_types table<string, string>
|
|
--- @field IsCLEUSubevent fun(subevent: string): boolean
|
|
--- @field IsDragonriding fun(): boolean
|
|
--- @field item_slot_types string[]
|
|
--- @field LibSpecWrapper LibSpecWrapper
|
|
--- @field linked table<auraId, number>
|
|
--- @field LoadFunction fun(input: string): function
|
|
--- @field LoadOptions fun(msg: string?): boolean
|
|
--- @field multiUnitUnits multiUnitUnits
|
|
--- @field non_transmissable_fields table<string, non_transmissable_field>
|
|
--- @field non_transmissable_fields_v2000 table<string, non_transmissable_field>
|
|
--- @field orientation_types table<string, string>
|
|
--- @field orientation_with_circle_types table<string, string>
|
|
--- @field point_types table<string, string>
|
|
--- @field PreShowModels fun()
|
|
--- @field QuotedString fun(input: string): string
|
|
--- @field regions table<auraId, table>
|
|
--- @field reset_ranged_swing_spells table<number, boolean>
|
|
--- @field reset_swing_spells table<number, boolean>
|
|
--- @field noreset_swing_spells table<number, boolean>
|
|
--- @field RunCustomTextFunc fun(region: table, f: function): string?
|
|
--- @field spark_rotation_types table<string, string>
|
|
--- @field spec_types string[]
|
|
--- @field spec_types_3 string[]
|
|
--- @field spec_types_2 string[]
|
|
--- @field StartProfileAura fun(id: auraId)
|
|
--- @field StartProfileSystem fun(system: string)
|
|
--- @field StopProfileAura fun(id: auraId)
|
|
--- @field StopProfileSystem fun(system: string)
|
|
--- @field tick_placement_modes table<string, string>
|
|
--- @field TraverseAll fun(data: auraData): traverseFunction, auraData
|
|
--- @field TraverseAllChildren fun(data: auraData): traverseFunction, auraData
|
|
--- @field TraverseGroups fun(data: auraData): traverseFunction, auraData
|
|
--- @field TraverseLeafs fun(data: auraData): traverseFunction, auraData
|
|
--- @field TraverseLeafsOrAura fun(data: auraData): traverseFunction, auraData
|
|
--- @field TraverseParents fun(data: auraData): traverseFunction, auraData
|
|
--- @field TraverseSubGroups fun(data: auraData): traverseFunction, auraData
|
|
--- @field UIDtoID fun(uid: uid): auraId
|
|
--- @field UnitEventList table<string, boolean>
|
|
--- @field UnitPlayerControlledFixed fun(unit: string): boolean
|
|
--- @field UpdatedTriggerState fun(id: auraId)
|
|
--- @field watched_trigger_events table<auraId, table<integer, table<integer, boolean>>>
|
|
|
|
--- @alias triggerTypes
|
|
--- | "aura"
|
|
--- | "aura2"
|
|
--- | "custom"
|
|
|
|
--- @alias anchorFrameTypes
|
|
--- | "SCREEN"
|
|
--- | "PRD"
|
|
--- | "MOUSE"
|
|
--- | "SELECTFRAME"
|
|
--- | "NAMEPLATE"
|
|
--- | "UNITFRAME"
|
|
--- | "CUSTOM"
|
|
|
|
--- @class triggerData
|
|
--- @field buffShowOn string
|
|
--- @field event string|nil
|
|
--- @field itemTypeName table|nil
|
|
--- @field instance_size table|nil
|
|
--- @field type triggerTypes
|
|
--- @field use_showOn boolean|nil
|
|
--- @field use_alwaystrue boolean|nil
|
|
|
|
|
|
--- @class triggerUntriggerData
|
|
--- @field trigger triggerData
|
|
--- @field untrigger triggerData
|
|
|
|
--- @class conditionCheck
|
|
--- @field variable string
|
|
--- @field trigger number
|
|
--- @field checks conditionCheck[]|nil
|
|
|
|
--- @class conditionChanges
|
|
--- @field property string
|
|
|
|
--- @class conditionData
|
|
--- @field check conditionCheck
|
|
--- @field changes conditionChanges
|
|
|
|
--- @class subRegionData
|
|
|
|
--- @class actionData
|
|
--- @field do_glow boolean
|
|
--- @field do_message boolean
|
|
--- @field message string
|
|
--- @field message_type string
|
|
|
|
|
|
--- @class actions
|
|
--- @field start actionData
|
|
--- @field finish actionData
|
|
|
|
--- @class load
|
|
--- @field use_realm boolean
|
|
--- @field itemtypeequipped table
|
|
--- @field size table
|
|
|
|
--- @alias regionTypes
|
|
--- | "aurabar"
|
|
--- | "dynamicgroup"
|
|
--- | "fallback"
|
|
--- | "group"
|
|
--- | "icon"
|
|
--- | "model"
|
|
--- | "progresstexture"
|
|
--- | "stopmotion"
|
|
--- | "text"
|
|
--- | "texture"
|
|
|
|
--- @class information
|
|
--- @field forceEvents boolean|nil
|
|
--- @field ignoreOptionsEventErrors boolean|nil
|
|
--- @field groupOffset boolean|nil
|
|
|
|
--- @alias dynamicGroupCenterType
|
|
--- | "LR"
|
|
--- | "RL"
|
|
--- | "CLR"
|
|
--- | "CRL"
|
|
|
|
--- @alias dynamicGroupGridType
|
|
--- | "RU"
|
|
--- | "UR"
|
|
--- | "LU"
|
|
--- | "UL"
|
|
--- | "RD"
|
|
--- | "DR"
|
|
--- | "LD"
|
|
--- | "DL"
|
|
--- | "HD"
|
|
--- | "HU"
|
|
--- | "VR"
|
|
--- | "VL"
|
|
--- | "DH"
|
|
--- | "UH"
|
|
--- | "LV"
|
|
--- | "RV"
|
|
--- | "HV"
|
|
--- | "VH"
|
|
|
|
--- @alias dynamicGroupCircularTypes
|
|
--- | "RADIUS"
|
|
--- | "SPACING"
|
|
|
|
--- @alias ColorArray {[1]: number, [2]: number, [3]: number, [4]: number }
|
|
|
|
--- @class auraData
|
|
--- @field anchorFrameType anchorFrameTypes?
|
|
--- @field animate boolean?
|
|
--- @field arcLength number?
|
|
--- @field actions actions?
|
|
--- @field border boolean?
|
|
--- @field borderBackdrop string?
|
|
--- @field borderColor ColorArray?
|
|
--- @field borderEdge string?
|
|
--- @field borderOffset number?
|
|
--- @field borderInset number?
|
|
--- @field borderSize number?
|
|
--- @field centerType dynamicGroupCenterType?
|
|
--- @field conditions conditionData[]?
|
|
--- @field constantFactor dynamicGroupCircularTypes
|
|
--- @field controlledChildren auraId[]?
|
|
--- @field displayText string?
|
|
--- @field frameStrata number?
|
|
--- @field fullCircle boolean?
|
|
--- @field gridType dynamicGroupGridType?
|
|
--- @field gridWidth number?
|
|
--- @field rowSpace number?
|
|
--- @field columnSpace number?
|
|
--- @field grow string?
|
|
--- @field id auraId
|
|
--- @field internalVersion number
|
|
--- @field information information
|
|
--- @field load load
|
|
--- @field limit number?
|
|
--- @field orientation string?
|
|
--- @field parent auraId?
|
|
--- @field radius number?
|
|
--- @field rotation number?
|
|
--- @field regionType regionTypes
|
|
--- @field scale number?
|
|
--- @field selfPoint AnchorPoint
|
|
--- @field subRegions subRegionData?
|
|
--- @field triggers triggerUntriggerData[]
|
|
--- @field url string?
|
|
--- @field useLimit boolean?
|
|
--- @field xOffset number?
|
|
--- @field yOffset number?
|
|
|
|
--- @class LibCustomGlow-1.0
|
|
--- @field ButtonGlow_Start fun(frame: Frame)
|
|
--- @field ButtonGlow_Stop fun(frame: Frame)
|
|
--- @field AutoCastGlow_Start fun(frame: Frame)
|
|
--- @field AutoCastGlow_Stop fun(frame: Frame)
|
|
--- @field PixelGlow_Start fun(frame: Frame)
|
|
--- @field PixelGlow_Stop fun(frame: Frame)
|
|
|
|
--- @class LibGetFrame-1.0
|
|
--- @field GetUnitFrame fun(unit: string)
|
|
--- @field GetUnitNameplate fun(unit: string)
|
|
--- @field StartProfile fun()
|
|
--- @field StopProfile fun()
|
|
--- @field GetProfileData fun(): table
|
|
|
|
--- @class LibSerialize
|
|
--- @field SerializeEx fun(self: LibSerialize,options: table, input: any)
|
|
--- @field Deserialize fun(self: LibSerialize, input: string): table
|
|
|
|
--- @class LibClassicDurations
|
|
--- @field RegisterFrame fun(self: LibClassicDurations, frame: string)
|
|
--- @field Register fun(self: LibClassicDurations, frame: string)
|
|
--- @field GetAuraDurationByUnit fun(self: LibClassicDurations, unit: string, spellId: number, source: string?, name: string?)
|
|
|
|
--- @class LibDeflate
|
|
--- @field CompressDeflate fun(self: LibDeflate, input: string, options: table): string
|
|
--- @field EncodeForPrint fun(self: LibDeflate, input: string): string)
|
|
--- @field EncodeForWoWAddonChannel fun(self: LibDeflate, input: string): string
|
|
--- @field DecodeForPrint fun(self: LibDeflate, input: string): string
|
|
--- @field DecodeForWoWAddonChannel fun(self: LibDeflate, input: string): string
|
|
--- @field DecompressDeflate fun(self: LibDeflate, input: string): string
|
|
|
|
--- @class LibDBIcon-1.0
|
|
--- @field Hide fun(self: LibDBIcon-1.0, name: string)
|
|
--- @field Register fun(self: LibDBIcon-1.0, name: string, broker: table, options: table)
|
|
--- @field Show fun(self: LibDBIcon-1.0, name: string)
|
|
|
|
--- @class LibSharedMedia-3.0
|
|
--- @field Fetch fun(self: LibSharedMedia-3.0, mediaType: string, name: string)
|
|
--- @field HashTable fun(self: LibSharedMedia-3.0, mediaType: string): table<string, string>
|
|
--- @field Register fun(self: LibSharedMedia-3.0, mediaType: string, name: string, path: string|number, flags: number?)
|
|
--- @field RegisterCallback fun(self: LibSharedMedia-3.0, callbackType: string, callback: fun(_: any, mediaType: string, key: string))
|
|
--- @field LOCALE_BIT_western number
|
|
--- @field LOCALE_BIT_ruRU number
|
|
|
|
--- @class LibCompress
|
|
--- @field Decompress fun(self: LibCompress, input: string): string
|
|
|
|
--- @class AceTimer-3.0
|
|
--- @field Embed fun(self: AceTimer-3.0, t: table)
|
|
|
|
WeakAuras.normalWidth = 1.3
|
|
WeakAuras.halfWidth = WeakAuras.normalWidth / 2
|
|
WeakAuras.doubleWidth = WeakAuras.normalWidth * 2
|
|
|
|
local versionStringFromToc = GetAddOnMetadata("WeakAuras", "Version")
|
|
local versionString = "5.3.3"
|
|
local buildTime = "20221210164722"
|
|
|
|
local flavorFromToc = GetAddOnMetadata("WeakAuras", "X-Flavor")
|
|
local flavorFromTocToNumber = {
|
|
Vanilla = 1,
|
|
TBC = 2,
|
|
Wrath = 3,
|
|
Mainline = 10
|
|
}
|
|
local flavor = flavorFromTocToNumber[flavorFromToc]
|
|
|
|
--[==[@debug@
|
|
if versionStringFromToc == "5.3.3" then
|
|
versionStringFromToc = "Dev"
|
|
buildTime = "Dev"
|
|
end
|
|
--@end-debug@]==]
|
|
|
|
WeakAuras.versionString = versionStringFromToc
|
|
WeakAuras.buildTime = buildTime
|
|
WeakAuras.newFeatureString = "|TInterface\\OptionsFrame\\UI-OptionsFrame-NewFeatureIcon:0|t"
|
|
WeakAuras.BuildInfo = select(4, GetBuildInfo())
|
|
|
|
function WeakAuras.IsClassic()
|
|
return flavor == 1
|
|
end
|
|
|
|
function WeakAuras.IsBCC()
|
|
return flavor == 2
|
|
end
|
|
|
|
function WeakAuras.IsWrathClassic()
|
|
return flavor == 3
|
|
end
|
|
|
|
function WeakAuras.IsRetail()
|
|
return flavor == 10
|
|
end
|
|
|
|
function WeakAuras.IsClassicOrBCC()
|
|
return WeakAuras.IsClassic() or WeakAuras.IsBCC()
|
|
end
|
|
|
|
function WeakAuras.IsClassicOrBCCOrWrath()
|
|
return WeakAuras.IsClassic() or WeakAuras.IsBCC() or WeakAuras.IsWrathClassic()
|
|
end
|
|
|
|
function WeakAuras.IsBCCOrWrath()
|
|
return WeakAuras.IsBCC() or WeakAuras.IsWrathClassic()
|
|
end
|
|
|
|
function WeakAuras.IsBCCOrWrathOrRetail()
|
|
return WeakAuras.IsBCC() or WeakAuras.IsWrathClassic() or WeakAuras.IsRetail()
|
|
end
|
|
|
|
function WeakAuras.IsWrathOrRetail()
|
|
return WeakAuras.IsRetail() or WeakAuras.IsWrathClassic()
|
|
end
|
|
|
|
|
|
WeakAuras.prettyPrint = function(...)
|
|
print("|cff9900ffWeakAuras:|r ", ...)
|
|
end
|
|
|
|
-- Force enable WeakAurasCompanion and Archive because some addon managers interfere with it
|
|
EnableAddOn("WeakAurasCompanion")
|
|
EnableAddOn("WeakAurasArchive")
|
|
|
|
local libsAreOk = true
|
|
do
|
|
local StandAloneLibs = {
|
|
"Archivist",
|
|
"LibStub"
|
|
}
|
|
local LibStubLibs = {
|
|
"CallbackHandler-1.0",
|
|
"AceConfig-3.0",
|
|
"AceConsole-3.0",
|
|
"AceGUI-3.0",
|
|
"AceEvent-3.0",
|
|
"AceGUISharedMediaWidgets-1.0",
|
|
"AceTimer-3.0",
|
|
"AceSerializer-3.0",
|
|
"AceComm-3.0",
|
|
"LibSharedMedia-3.0",
|
|
"LibDataBroker-1.1",
|
|
"LibCompress",
|
|
"SpellRange-1.0",
|
|
"LibCustomGlow-1.0",
|
|
"LibDBIcon-1.0",
|
|
"LibGetFrame-1.0",
|
|
"LibSerialize",
|
|
"LibUIDropDownMenu-4.0"
|
|
}
|
|
if WeakAuras.IsClassic() then
|
|
tinsert(LibStubLibs, "LibClassicSpellActionCount-1.0")
|
|
tinsert(LibStubLibs, "LibClassicCasterino")
|
|
tinsert(LibStubLibs, "LibClassicDurations")
|
|
end
|
|
if WeakAuras.IsRetail() then
|
|
tinsert(LibStubLibs, "LibSpecialization")
|
|
end
|
|
for _, lib in ipairs(StandAloneLibs) do
|
|
if not lib then
|
|
libsAreOk = false
|
|
WeakAuras.prettyPrint("Missing library:", lib)
|
|
end
|
|
end
|
|
if LibStub then
|
|
for _, lib in ipairs(LibStubLibs) do
|
|
if not LibStub:GetLibrary(lib, true) then
|
|
libsAreOk = false
|
|
WeakAuras.prettyPrint("Missing library:", lib)
|
|
end
|
|
end
|
|
else
|
|
libsAreOk = false
|
|
end
|
|
end
|
|
|
|
function WeakAuras.IsLibsOK()
|
|
return libsAreOk
|
|
end
|
|
|
|
if not WeakAuras.IsLibsOK() then
|
|
C_Timer.After(1, function()
|
|
WeakAuras.prettyPrint("WeakAuras is missing necessary libraries. Please reinstall a proper package.")
|
|
end)
|
|
end
|
|
|
|
-- These function stubs are defined here to reduce the number of errors that occur if WeakAuras.lua fails to compile
|
|
--- @type fun(regionType: string, createFunction: function, modifyFunction: function, defaults: table, properties: table|function|nil, validate: function?))
|
|
function WeakAuras.RegisterRegionType(_, _, _ ,_)
|
|
end
|
|
|
|
--- @type fun(regionType: string, createOptions: function, icon: string|function, displayName: string, createThumbnail: function?, modifyThumbnail: function?, description: string?, templates: table?, getAnchors: function?)
|
|
function WeakAuras.RegisterRegionOptions(_, _ , _ ,_ )
|
|
end
|
|
|
|
function Private.StartProfileSystem(_)
|
|
end
|
|
|
|
function Private.StartProfileAura(_)
|
|
end
|
|
|
|
function Private.StopProfileSystem(_)
|
|
end
|
|
|
|
function Private.StopProfileAura(_)
|
|
end
|
|
|
|
function Private.StartProfileUID()
|
|
end
|
|
|
|
function Private.StopProfileUID()
|
|
end
|
|
|
|
Private.ExecEnv = {}
|
|
|
|
-- If WeakAuras shuts down due to being installed on the wrong target, keep the bindings from erroring
|
|
--- @type fun(type: string)
|
|
function WeakAuras.StartProfile(_)
|
|
end
|
|
|
|
function WeakAuras.StopProfile()
|
|
end
|
|
|
|
function WeakAuras.PrintProfile()
|
|
end
|
|
|
|
function WeakAuras.CountWagoUpdates()
|
|
-- XXX this is to work around the Companion app trying to use our stuff!
|
|
return 0
|
|
end
|
|
|
|
|