Compare commits

...

57 Commits

Author SHA1 Message Date
8d7646c83a Update TOC 2025-04-26 16:41:39 -05:00
4265d57599 Update TOCs 2025-04-02 07:25:05 -05:00
e970a958ac Update TOCs 2025-02-23 14:03:31 -06:00
bde510f09c Update TOCs 2024-12-20 22:18:37 -06:00
0c66028b9d Update TOCs 2024-11-13 08:56:33 -06:00
7a2e432488 fix: https://github.com/ascott18/TellMeWhen/issues/2088 UnitName can rarely return nil on a valid unit 2024-09-07 20:37:43 -07:00
fc9ba7ac27 Fix reported TooltipScanning error from reputation (#16)
I'm not sure why an index that's within range of GetNumFactions would
return nil data from GetFactionDataByIndex, so we probably need to
figure out what's up with that. Maybe the value returned by
GetNumFactions is only a valid input in some other GetFactionDataBy
variant?

Ref:
* https://www.wowace.com/projects/ice-hud/issues/366
* https://www.curseforge.com/projects/5394?comment=7333
2024-08-25 22:44:14 -05:00
7cf02c9037 Add UnitAura function shim
Fixes error with Aura-based tags such as NumAura, RaidStacks, Druid forms, and any tag checking for the existence of specific buffs/debuffs.

Fixes #15
2024-08-14 17:38:43 -05:00
712fef34ae Update TOC 2024-08-14 10:17:15 -05:00
4c4262904d Update TOC for Classic-era 2024-07-25 22:39:07 -05:00
380bd0f06a Update TOC 2024-07-24 09:26:33 -05:00
e03b5c50cc Update to current versions of actions 2024-07-21 13:48:33 -05:00
aa2817b5db Fix TooltipUtil.SurfaceArgs going away back in 10.1.0
It was a no-op then, it's removed in TWW beta.
2024-07-21 12:43:16 -05:00
0217b0ba80 fix: GetSpellInfo removed in TWW 2024-06-22 09:33:08 -07:00
2641d29079 Basic TWW support. Don't crash on login. 2024-06-18 23:07:05 -07:00
b2442ff568 Update TOC 2024-05-09 00:02:47 -05:00
1c161b436d Support Cataclysm Classic 2024-04-30 23:21:10 -05:00
9a939cca8b Name tooltip frame
Fixes #14
2024-04-27 08:26:37 -05:00
7f9d5db1e5 Update TOCs 2024-04-15 17:03:26 -05:00
32583d92e0 Update LibRangeCheck supported version
The 2.0 version seems to be causing taint somewhere.

ref: https://www.wowace.com/projects/ice-hud/issues/353
2024-04-04 08:12:01 -05:00
05afef899d Update TOC 2024-01-16 17:23:11 -06:00
1ebf467ef4 Update classic-era TOC 2023-12-10 18:54:10 -06:00
3576a67d39 Update TOC 2023-11-07 16:38:50 -06:00
18a36c0cfc Update classic-era TOC 2023-09-08 10:29:01 -05:00
9e00585ce1 Update TOC 2023-09-08 10:27:08 -05:00
dd28e38868 Update TOC 2023-07-11 16:51:12 -05:00
5266af87c8 Update TOC for Wrath Classic 2023-07-04 10:21:55 -05:00
122f129942 Update TOC 2023-05-03 18:19:03 -05:00
79b632e7f4 Update TOC 2023-04-01 14:59:11 -05:00
93696c41b6 Update TOCs 2023-01-25 13:38:01 -06:00
95ad2adeeb Merge pull request #13 from parnic/ascott/12
#12 - Add workaround to prevent guild roster from resetting scroll
2023-01-05 14:20:04 -08:00
4f86740c25 #12 - Add workaround to prevent guild roster from resetting scroll every 20 seconds. 2023-01-05 11:06:31 -08:00
c862c495f7 Fix typo 2022-11-25 22:05:45 -06:00
0097e66d66 Fix FigureNPCGuild on Classic
This logic was bad when TooltipInfo didn't exist.
2022-11-25 22:05:36 -06:00
e53fd70d70 Fix Guild, Faction, and Zone edge cases
This is all done via tooltip scanning, so when an NPC doesn't even have a second line on their tooltip, several of these tags would error out assuming there was at least a second line or sometimes third line of text.

Fixes #11
2022-11-25 21:56:26 -06:00
2f07b4d995 Fix quest title showing as NPC guild
When an NPC is part of a quest, tooltip line 2 might be the quest name or something else non-Guild-related. Fortunately each line has a type associated with it, so if it's not type None (0), don't treat it like a guild. I could check for types like QuestTitle (17) but since the tooltip lines can contain any arbitrary information, it's best to make sure it's what we want instead of making sure it's not something specific that we don't want.
2022-11-25 21:54:09 -06:00
07d6c46c18 Add ability to specify MP type (#10)
* Add ability to specify MP type

This enables asking for MP(type="energy") while in Bear form as a Druid, for example, without having to add Energy-specific tags.

This should probably turn the Druid and Monk specific tags into aliases, but I don't want to change their behavior since they specifically return nil if you aren't the appropriate class.

* Address PR feedback
2022-11-19 13:15:23 -06:00
39f70e711c Increase TOC for 10.0.2 2022-11-15 00:27:05 -06:00
4884525113 Add support for 10.0.2 tooltip APIs (#9)
Functions like tooltip:SetUnit no longer exist, so this uses the new TooltipInfo APIs to extract the same information.
2022-11-12 18:59:05 -06:00
06bb8d0b18 Update TOCs 2022-10-25 21:53:34 -05:00
eff831b6ec Work around crash in Wrath Classic client
This should be reverted when the game client is fixed.

Fixes #8
2022-10-04 22:29:46 -05:00
5deee22437 Update TOCs, package for Wrath 2022-09-04 14:07:06 -05:00
4c5550b244 Update TOCs 2022-03-22 08:21:55 -05:00
d7e407e965 Update TOCs 2021-11-11 12:57:19 -06:00
a2b3c73085 Fix https://github.com/ascott18/TellMeWhen/issues/1907 - We can't use feature detection for combo points because GetComboPoints is still defined on retail for some reason.
Partially reverts f845e20c05
2021-08-24 19:58:43 -07:00
ca58775bc8 Remove version check in favor of just a feature check 2021-06-29 08:09:45 -05:00
2602e23927 Prep for WoW 9.1 2021-06-28 12:59:08 -05:00
55f27d5496 Fix Class tag in Classic-Era
Fixes #7
2021-06-27 20:57:36 -05:00
78aa2ec948 Update with latest community packager changes for BC-Classic 2021-05-14 21:36:50 -05:00
690bad04bf Merge pull request #6 from parnic/ascott/tbc 2021-04-24 13:15:06 -07:00
cb84320fed Fix cast logic 2021-04-24 12:41:02 -07:00
f845e20c05 Updates for TBC classic. Switched as many versions checks as I could to feature detection rather than hardcoded version number checks. 2021-04-24 12:08:40 -07:00
3f2505245c Update to use project-date-integer 2021-03-23 13:47:55 -05:00
f85d5eb088 Update TOC for Classic 2021-03-23 12:17:43 -05:00
ccea4b3bfb Update TOC 2021-03-22 21:39:32 -05:00
86d49d9e5d Update outdated tags (#5) 2021-03-22 10:46:00 -05:00
9c59ab23a3 Change to use manual iteration
It seems like FireEvent() can potentially invalidate the unit entries in
normalUnitsWackyDependents, so extract the next key before calling it.

Fixes #4
2021-03-22 07:58:59 -05:00
26 changed files with 437 additions and 197 deletions

View File

@ -31,15 +31,31 @@ jobs:
# we first have to clone the AddOn project, this is a required step
- name: Clone project
uses: actions/checkout@v1
uses: actions/checkout@v4
# once cloned, we just run the GitHub Action for the packager project
- name: Package and release
uses: BigWigsMods/packager@master
uses: BigWigsMods/packager@v2
# another example where we supply additional arguments, this example is specifically to release
# for the Classic version of the game
- name: Package and release for Classic
uses: BigWigsMods/packager@master
uses: BigWigsMods/packager@v2
with:
args: -g 1.13.5 -w 0
args: -g classic -w 0
- name: Package and release for TBC
uses: BigWigsMods/packager@v2
with:
args: -g bcc -w 0
- name: Package and release for Wrath
uses: BigWigsMods/packager@v2
with:
args: -g wrath -w 0
- name: Package and release for Cataclysm
uses: BigWigsMods/packager@v2
with:
args: -g cata -w 0

View File

@ -1,13 +1,27 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
end
local select, pairs, rawget, GetTime, setmetatable = select, pairs, rawget, GetTime, setmetatable
local GetSpellInfo, UnitAura, UnitIsFriend, UnitClass, UnitPowerType =
GetSpellInfo, UnitAura, UnitIsFriend, UnitClass, UnitPowerType
local UnitAura, UnitIsFriend, UnitClass, UnitPowerType =
UnitAura, UnitIsFriend, UnitClass, UnitPowerType
if not UnitAura and C_UnitAuras and C_UnitAuras.GetAuraDataByIndex then
UnitAura = function(unitToken, index, filter)
local auraData = C_UnitAuras.GetAuraDataByIndex(unitToken, index, filter)
if not auraData then
return nil
end
return AuraUtil.UnpackAuraData(auraData)
end
end
-- GetSpellInfo removed in WoW 11.0
local GetSpellName = C_Spell and C_Spell.GetSpellName or GetSpellInfo
DogTag_Unit_funcs[#DogTag_Unit_funcs+1] = function(DogTag_Unit, DogTag)
@ -18,7 +32,6 @@ local newList, del = DogTag.newList, DogTag.del
local currentAuras, currentDebuffTypes, currentAuraTimes, currentNumDebuffs
local wow_700 = select(4, GetBuildInfo()) >= 70000
local wow_800 = select(4, GetBuildInfo()) >= 80000
local mt = {__index=function(self, unit)
@ -301,12 +314,12 @@ DogTag:AddTag("Unit", "RaidStacks", {
category = L["Auras"]
})
local MOONKIN_FORM = GetSpellInfo(24858)
local AQUATIC_FORM = GetSpellInfo(1066)
local FLIGHT_FORM = GetSpellInfo(33943)
local SWIFT_FLIGHT_FORM = GetSpellInfo(40120)
local TRAVEL_FORM = GetSpellInfo(783)
local TREE_OF_LIFE = GetSpellInfo(33891)
local MOONKIN_FORM = GetSpellName(24858)
local AQUATIC_FORM = GetSpellName(1066)
local FLIGHT_FORM = GetSpellName(33943)
local SWIFT_FLIGHT_FORM = GetSpellName(40120)
local TRAVEL_FORM = GetSpellName(783)
local TREE_OF_LIFE = GetSpellName(33891)
local function DruidForm(unit)
local _, c = UnitClass(unit)
@ -404,8 +417,8 @@ DogTag:AddTag("Unit", "AuraDuration", {
category = L["Auras"],
})
local SHADOWFORM = GetSpellInfo(15473)
if not wow_700 then
local SHADOWFORM = GetSpellName(15473) or GetSpellName(232698)
if SHADOWFORM then
DogTag:AddTag("Unit", "IsShadowform", {
alias = ("HasAura(aura=%q, unit=unit)"):format(SHADOWFORM),
arg = {
@ -417,9 +430,13 @@ DogTag:AddTag("Unit", "IsShadowform", {
})
end
local STEALTH = GetSpellInfo(1784)
local SHADOWMELD = GetSpellInfo(58984) or GetSpellInfo(743) -- 58984 is the ID in BFA, 743 is the ID in Classic.
local PROWL = GetSpellInfo(5215)
local STEALTH = GetSpellName(1784)
local SHADOWMELD =
GetSpellName(58984) -- BFA
or GetSpellName(20580) -- Classic TBC
or GetSpellName(743) -- Classic Vanilla
local PROWL = GetSpellName(5215)
DogTag:AddTag("Unit", "IsStealthed", {
alias = ("HasAura(aura=%q, unit=unit) or HasAura(aura=%q, unit=unit) or HasAura(aura=%q, unit=unit)"):format(STEALTH, SHADOWMELD, PROWL),
arg = {
@ -430,7 +447,7 @@ DogTag:AddTag("Unit", "IsStealthed", {
category = L["Auras"]
})
local SHIELD_WALL = GetSpellInfo(871)
local SHIELD_WALL = GetSpellName(871)
DogTag:AddTag("Unit", "HasShieldWall", {
alias = ("HasAura(aura=%q, unit=unit)"):format(SHIELD_WALL),
arg = {
@ -441,7 +458,7 @@ DogTag:AddTag("Unit", "HasShieldWall", {
category = L["Auras"]
})
local LAST_STAND = GetSpellInfo(12975)
local LAST_STAND = GetSpellName(12975)
DogTag:AddTag("Unit", "HasLastStand", {
alias = ("HasAura(aura=%q, unit=unit)"):format(LAST_STAND),
arg = {
@ -452,7 +469,7 @@ DogTag:AddTag("Unit", "HasLastStand", {
category = L["Auras"]
})
local SOULSTONE_RESURRECTION = GetSpellInfo(20707)
local SOULSTONE_RESURRECTION = GetSpellName(20707)
DogTag:AddTag("Unit", "HasSoulstone", {
alias = ("HasAura(aura=%q, unit=unit)"):format(SOULSTONE_RESURRECTION),
arg = {
@ -463,7 +480,7 @@ DogTag:AddTag("Unit", "HasSoulstone", {
category = L["Auras"]
})
local MISDIRECTION = GetSpellInfo(34477)
local MISDIRECTION = GetSpellName(34477)
if MISDIRECTION then -- WoW Classic compat
DogTag:AddTag("Unit", "HasMisdirection", {
alias = ("HasAura(aura=%q, unit=unit)"):format(MISDIRECTION),
@ -476,7 +493,7 @@ if MISDIRECTION then -- WoW Classic compat
})
end
local ICE_BLOCK = GetSpellInfo(27619)
local ICE_BLOCK = GetSpellName(27619)
DogTag:AddTag("Unit", "HasIceBlock", {
alias = ("HasAura(aura=%q, unit=unit)"):format(ICE_BLOCK),
arg = {
@ -487,7 +504,7 @@ DogTag:AddTag("Unit", "HasIceBlock", {
category = L["Auras"]
})
local INVISIBILITY = GetSpellInfo(66)
local INVISIBILITY = GetSpellName(66)
DogTag:AddTag("Unit", "HasInvisibility", {
alias = ("HasAura(aura=%q, unit=unit)"):format(INVISIBILITY),
arg = {
@ -499,7 +516,7 @@ DogTag:AddTag("Unit", "HasInvisibility", {
})
-- Parnic: DI removed in Cataclysm
local DIVINE_INTERVENTION = GetSpellInfo(19752)
local DIVINE_INTERVENTION = GetSpellName(19752)
if DIVINE_INTERVENTION then
DogTag:AddTag("Unit", "HasDivineIntervention", {
alias = ("HasAura(aura=%q, unit=unit)"):format(DIVINE_INTERVENTION),

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -20,8 +20,7 @@ local UnitGUID = UnitGUID
local IsNormalUnit = DogTag_Unit.IsNormalUnit
local wow_ver = select(4, GetBuildInfo())
local wow_classic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
local wow_800 = wow_ver >= 80000
local cast_api_has_ranks = wow_ver < 80000 and WOW_PROJECT_ID == WOW_PROJECT_MAINLINE
local playerGuid = nil
DogTag:AddEventHandler("Unit", "PLAYER_LOGIN", function()
@ -47,14 +46,22 @@ DogTag:AddEventHandler("Unit", "EventRequested", function(_, event)
local spell, rank, displayName, icon, startTime, endTime
local channeling = false
if wow_800 then
spell, displayName, icon, startTime, endTime = UnitCastingInfo(unit)
rank = nil
if not spell then
spell, displayName, icon, startTime, endTime = UnitChannelInfo(unit)
channeling = true
if UnitCastingInfo then
if cast_api_has_ranks then
spell, rank, displayName, icon, startTime, endTime = UnitCastingInfo(unit)
if not spell then
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(unit)
channeling = true
end
else
spell, displayName, icon, startTime, endTime = UnitCastingInfo(unit)
rank = nil
if not spell then
spell, displayName, icon, startTime, endTime = UnitChannelInfo(unit)
channeling = true
end
end
elseif wow_classic then
elseif CastingInfo then
-- Classic only has an API for player spellcasts. No API for arbitrary units.
if unit == "player" then
spell, displayName, icon, startTime, endTime = CastingInfo()
@ -64,12 +71,6 @@ DogTag:AddEventHandler("Unit", "EventRequested", function(_, event)
channeling = true
end
end
else
spell, rank, displayName, icon, startTime, endTime = UnitCastingInfo(unit)
if not spell then
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(unit)
channeling = true
end
end
if spell then
@ -196,7 +197,7 @@ DogTag:AddEventHandler("Unit", "EventRequested", function(_, event)
-- The purpose of this event is to predict the next spell target.
-- This seems to be removed in at least wow_800
if unit == "player" and not wow_800 then
if unit == "player" and cast_api_has_ranks then
nextSpell = spell
nextRank = rank and tonumber(rank:match("%d+"))
nextTarget = target ~= "" and target or nil

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -17,17 +17,12 @@ DogTag_Unit_funcs[#DogTag_Unit_funcs+1] = function(DogTag_Unit, DogTag)
local L = DogTag_Unit.L
-- Pre 3.2.0 compatability support
local wow_320 = select(4, GetBuildInfo()) >= 30200
local wow_700 = select(4, GetBuildInfo()) >= 70000
local wow_800 = select(4, GetBuildInfo()) >= 80000
local wow_classic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
local GetQuestDifficultyColor
if not wow_320 and not wow_classic then
GetQuestDifficultyColor = _G.GetDifficultyColor
else
GetQuestDifficultyColor = _G.GetQuestDifficultyColor
end
local wow_build = select(4, GetBuildInfo())
local wow_800 = wow_build >= 80000
-- The mere presence of WOW_PROJECT_ID tells us how "modern" the client is.
local WOW_PROJECT_ID = _G.WOW_PROJECT_ID
local GetQuestDifficultyColor = GetQuestDifficultyColor or GetDifficultyColor
DogTag:AddTag("Unit", "IsFriend", {
code = function(unit)
@ -108,7 +103,7 @@ DogTag:AddTag("Unit", "SimpleName", {
arg = {
'unit', 'string;undef', 'player'
},
ret = "string",
ret = "string;nil",
events = "UNIT_NAME_UPDATE#$unit",
doc = L["Return the name of unit"],
example = ('[SimpleName] => %q'):format(UnitName("player")),
@ -172,13 +167,14 @@ DogTag:AddTag("Unit", "Level", {
category = L["Characteristics"]
})
local maxLevel = GetMaxPlayerLevel and GetMaxPlayerLevel() or _G.MAX_PLAYER_LEVEL
DogTag:AddTag("Unit", "IsMaxLevel", {
alias = ("Boolean(Level(unit=unit) >= %d)"):format(_G.MAX_PLAYER_LEVEL),
alias = ("Boolean(Level(unit=unit) >= %d)"):format(maxLevel),
arg = {
'unit', 'string;undef', 'player'
},
doc = L["Return True if the level of unit is %d"]:format(_G.MAX_PLAYER_LEVEL),
example = ('[IsMaxLevel] => %q'):format(UnitLevel("player") >= _G.MAX_PLAYER_LEVEL and L["True"] or ""),
doc = L["Return True if the level of unit is %d"]:format(maxLevel),
example = ('[IsMaxLevel] => %q'):format(UnitLevel("player") >= maxLevel and L["True"] or ""),
category = L["Characteristics"],
})
@ -186,11 +182,17 @@ local function Class(unit)
if UnitIsPlayer(unit) then
return UnitClass(unit) or UNKNOWN
else
if wow_800 then
local classbase, classindex = UnitClassBase(unit)
local classbase, classindex = UnitClassBase(unit)
if GetClassInfo then
return classbase and GetClassInfo(classindex) or UNKNOWN
elseif LOCALIZED_CLASS_NAMES_MALE and LOCALIZED_CLASS_NAMES_FEMALE then
if UnitSex and UnitSex(unit) == 3 then
return LOCALIZED_CLASS_NAMES_FEMALE[classbase] or UNKNOWN
else
return LOCALIZED_CLASS_NAMES_MALE[classbase] or UNKNOWN
end
else
return UnitClassBase(unit) or UNKNOWN
return classbase or UNKNOWN
end
end
end
@ -552,7 +554,11 @@ DogTag:AddTag("Unit", "HostileColor", {
-- either enemy or friend, no violence
r, g, b = unpack(DogTag.__colors.civilian)
end
elseif (not wow_700 and not wow_classic and UnitIsTapped(unit) and not UnitIsTappedByPlayer(unit)) or ((wow_700 or wow_classic) and UnitIsTapDenied(unit)) or UnitIsDead(unit) then
elseif
(UnitIsTapDenied and UnitIsTapDenied(unit)) or
(UnitIsTapped and UnitIsTapped(unit) and not UnitIsTappedByPlayer(unit)) or
UnitIsDead(unit)
then
r, g, b = unpack(DogTag.__colors.tapped)
else
local reaction = UnitReaction(unit, "player")

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -69,7 +69,11 @@ end)
DogTag:AddTimerHandler("Unit", function(num, currentTime)
if currentTime > nextGuildRosterUpdate then
if IsInGuild() then
if IsInGuild()
-- CommunitiesFrame check workaround for
-- https://github.com/parnic/LibDogTag-Unit-3.0/issues/12
and (not CommunitiesFrame or not CommunitiesFrame:IsVisible())
then
GuildRoster()
end
nextGuildRosterUpdate = currentTime + 20

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -9,8 +9,6 @@ local _G, unpack = _G, unpack
local UnitHealth, UnitHealthMax, UnitIsGhost, UnitGetTotalAbsorbs =
UnitHealth, UnitHealthMax, UnitIsGhost, UnitGetTotalAbsorbs
-- Support for new UnitGetTotalAbsorbs functionality
local wow_502 = select(4, GetBuildInfo()) >= 50200
DogTag_Unit_funcs[#DogTag_Unit_funcs+1] = function(DogTag_Unit, DogTag)
@ -94,7 +92,7 @@ DogTag:AddTag("Unit", "IsMaxHP", {
category = L["Health"]
})
if wow_502 then
if UnitGetTotalAbsorbs then
DogTag:AddTag("Unit", "TotalAbsorb", {
code = UnitGetTotalAbsorbs,
arg = {

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -37,7 +37,7 @@ DogTag:AddTag("Unit", "Combos", {
'target', 'string;undef', '@undef'
},
ret = "number",
events = wow_700 and "UNIT_POWER_FREQUENT#$unit" or "UNIT_COMBO_POINTS",
events = (wow_700 or WOW_PROJECT_ID) and "UNIT_POWER_FREQUENT#$unit" or "UNIT_COMBO_POINTS",
doc = L["Return the number of combo points you have"],
example = '[Combos] => "5"; [Combos("pet"))] => "5"; [Combos("vehicle", "target"))] => "5"',
category = L["Miscellaneous"]

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + tonumber(("$Revision: 225 $"):match("%d+")) or 0
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -13,81 +13,146 @@ local SPELL_POWER_MANA, SPELL_POWER_RUNES, SPELL_POWER_CHI, SPELL_POWER_ECLIPSE,
SPELL_POWER_MANA, SPELL_POWER_RUNES, SPELL_POWER_CHI, SPELL_POWER_ECLIPSE, SPELL_POWER_SOUL_SHARDS, SPELL_POWER_ARCANE_CHARGES
local SPELL_POWER_BURNING_EMBERS, SPELL_POWER_HOLY_POWER, SPELL_POWER_LIGHT_FORCE, SPELL_POWER_SHADOW_ORBS =
SPELL_POWER_BURNING_EMBERS, SPELL_POWER_HOLY_POWER, SPELL_POWER_LIGHT_FORCE, SPELL_POWER_SHADOW_ORBS
local SPELL_POWER_RAGE, SPELL_POWER_FOCUS, SPELL_POWER_ENERGY, SPELL_POWER_COMBO_POINTS, SPELL_POWER_RUNIC_POWER, SPELL_POWER_LUNAR_POWER =
SPELL_POWER_RAGE, SPELL_POWER_FOCUS, SPELL_POWER_ENERGY, SPELL_POWER_COMBO_POINTS, SPELL_POWER_RUNIC_POWER, SPELL_POWER_LUNAR_POWER
local SPELL_POWER_MAELSTROM, SPELL_POWER_INSANITY, SPELL_POWER_FURY, SPELL_POWER_PAIN =
SPELL_POWER_MAELSTROM, SPELL_POWER_INSANITY, SPELL_POWER_FURY, SPELL_POWER_PAIN
DogTag_Unit_funcs[#DogTag_Unit_funcs+1] = function(DogTag_Unit, DogTag)
local L = DogTag_Unit.L
local wow_700 = select(4, GetBuildInfo()) >= 70000
local wow_800 = select(4, GetBuildInfo()) >= 80000
local mpEvents = "UNIT_POWER_FREQUENT#$unit;UNIT_MAXPOWER#$unit;UNIT_DISPLAYPOWER#$unit"
if wow_800 then
if Enum and Enum.PowerType then
SPELL_POWER_MANA, SPELL_POWER_RUNES, SPELL_POWER_CHI, SPELL_POWER_ECLIPSE, SPELL_POWER_SOUL_SHARDS, SPELL_POWER_ARCANE_CHARGES =
Enum.PowerType.Mana, Enum.PowerType.Runes, Enum.PowerType.Chi, Enum.PowerType.LunarPower, Enum.PowerType.SoulShards, Enum.PowerType.ArcaneCharges
SPELL_POWER_BURNING_EMBERS, SPELL_POWER_HOLY_POWER, SPELL_POWER_LIGHT_FORCE, SPELL_POWER_SHADOW_ORBS =
Enum.PowerType.Obsolete, Enum.PowerType.HolyPower, Enum.PowerType.Obsolete, Enum.PowerType.Obsolete
SPELL_POWER_RAGE, SPELL_POWER_FOCUS, SPELL_POWER_ENERGY, SPELL_POWER_COMBO_POINTS, SPELL_POWER_RUNIC_POWER, SPELL_POWER_LUNAR_POWER =
Enum.PowerType.Rage, Enum.PowerType.Focus, Enum.PowerType.Energy, Enum.PowerType.ComboPoints, Enum.PowerType.RunicPower, Enum.PowerType.LunarPower
SPELL_POWER_MAELSTROM, SPELL_POWER_INSANITY, SPELL_POWER_FURY, SPELL_POWER_PAIN =
Enum.PowerType.Maelstrom, Enum.PowerType.Insanity, Enum.PowerType.Fury, Enum.PowerType.Pain
end
-- copied from Blizzard_CombatText, which isn't exposed anywhere else
local powerEnumFromStringLookup =
{
[MANA:lower()] = SPELL_POWER_MANA,
[RAGE:lower()] = SPELL_POWER_RAGE,
[FOCUS:lower()] = SPELL_POWER_FOCUS,
[ENERGY:lower()] = SPELL_POWER_ENERGY,
[COMBO_POINTS:lower()] = SPELL_POWER_COMBO_POINTS,
}
if RUNES then
powerEnumFromStringLookup[RUNES:lower()] = SPELL_POWER_RUNES
end
if RUNIC_POWER then
powerEnumFromStringLookup[RUNIC_POWER:lower()] = SPELL_POWER_RUNIC_POWER
end
if SOUL_SHARDS then
powerEnumFromStringLookup[SOUL_SHARDS:lower()] = SPELL_POWER_SOUL_SHARDS
end
if LUNAR_POWER then
powerEnumFromStringLookup[LUNAR_POWER:lower()] = SPELL_POWER_LUNAR_POWER
end
if HOLY_POWER then
powerEnumFromStringLookup[HOLY_POWER:lower()] = SPELL_POWER_HOLY_POWER
end
if MAELSTROM then
powerEnumFromStringLookup[MAELSTROM:lower()] = SPELL_POWER_MAELSTROM
end
if CHI then
powerEnumFromStringLookup[CHI:lower()] = SPELL_POWER_CHI
end
if INSANITY then
powerEnumFromStringLookup[INSANITY:lower()] = SPELL_POWER_INSANITY
end
if ARCANE_CHARGES then
powerEnumFromStringLookup[ARCANE_CHARGES:lower()] = SPELL_POWER_ARCANE_CHARGES
end
if FURY then
powerEnumFromStringLookup[FURY:lower()] = SPELL_POWER_FURY
end
if PAIN then
powerEnumFromStringLookup[PAIN:lower()] = SPELL_POWER_PAIN
end
DogTag:AddTag("Unit", "MP", {
code = UnitPower,
code = function(unit, type)
local enum
if type then
enum = powerEnumFromStringLookup[type:lower()]
end
return UnitPower(unit, enum)
end,
arg = {
'unit', 'string;undef', 'player'
'unit', 'string;undef', 'player',
'type', 'string;undef', '@undef',
},
ret = "number",
events = "UNIT_POWER_FREQUENT#$unit;UNIT_DISPLAYPOWER#$unit",
doc = L["Return the current mana/rage/energy of unit"],
example = ('[MP] => "%d"'):format(UnitPowerMax("player")*.632),
example = ('[MP] => "%d"; [MP("player", "Energy")] => "65"'):format(UnitPowerMax("player")*.632),
category = L["Power"]
})
DogTag:AddTag("Unit", "MaxMP", {
code = UnitPowerMax,
code = function(unit, type)
local enum
if type then
enum = powerEnumFromStringLookup[type:lower()]
end
return UnitPowerMax(unit, enum)
end,
arg = {
'unit', 'string;undef', 'player'
'unit', 'string;undef', 'player',
'type', 'string;undef', '@undef',
},
ret = "number",
events = "UNIT_MAXPOWER#$unit",
doc = L["Return the maximum mana/rage/energy of unit"],
example = ('[MaxMP] => "%d"'):format(UnitPowerMax("player")),
example = ('[MaxMP] => "%d"; [MaxMP("player", "Energy")] => "100"'):format(UnitPowerMax("player")),
category = L["Power"]
})
DogTag:AddTag("Unit", "PercentMP", {
alias = "[MP(unit=unit) / MaxMP(unit=unit) * 100]:Round(1)",
alias = "[MP(unit=unit, type=type) / MaxMP(unit=unit, type=type) * 100]:Round(1)",
arg = {
'unit', 'string;undef', 'player'
'unit', 'string;undef', 'player',
'type', 'string;undef', '@undef',
},
doc = L["Return the percentage mana/rage/energy of unit"],
example = '[PercentMP] => "63.2"; [PercentMP:Percent] => "63.2%"',
example = '[PercentMP] => "63.2"; [PercentMP:Percent] => "63.2%"; [PercentMP("player", "Energy")] => "65"',
category = L["Power"]
})
DogTag:AddTag("Unit", "MissingMP", {
alias = "MaxMP(unit=unit) - MP(unit=unit)",
alias = "MaxMP(unit=unit, type=type) - MP(unit=unit, type=type)",
arg = {
'unit', 'string;undef', 'player'
'unit', 'string;undef', 'player',
'type', 'string;undef', '@undef',
},
doc = L["Return the missing mana/rage/energy of unit"],
example = ('[MissingMP] => "%d"'):format(UnitPowerMax("player")*.368),
example = ('[MissingMP] => "%d"; [MissingMP("player", "Energy")] => "35"'):format(UnitPowerMax("player")*.368),
category = L["Power"]
})
DogTag:AddTag("Unit", "FractionalMP", {
alias = "Concatenate(MP(unit=unit), '/', MaxMP(unit=unit))",
alias = "Concatenate(MP(unit=unit, type=type), '/', MaxMP(unit=unit, type=type))",
arg = {
'unit', 'string;undef', 'player'
'unit', 'string;undef', 'player',
'type', 'string;undef', '@undef',
},
doc = L["Return the current and maximum mana/rage/energy of unit"],
example = ('[FractionalMP] => "%d/%d"'):format(UnitPowerMax("player")*.632, UnitPowerMax("player")),
example = ('[FractionalMP] => "%d/%d"; [FractionalMP("player", "Energy")] => "65/100"'):format(UnitPowerMax("player")*.632, UnitPowerMax("player")),
category = L["Power"]
})
DogTag:AddTag("Unit", "Mana", {
code = function(unit)
return UnitPower(unit, SPELL_POWER_MANA)
end,
alias = ("MP(unit=unit, type=%q)"):format(MANA:lower()),
arg = {
'unit', 'string;undef', 'player'
},
@ -99,9 +164,7 @@ DogTag:AddTag("Unit", "Mana", {
})
DogTag:AddTag("Unit", "MaxMana", {
code = function(unit)
return UnitPowerMax(unit, SPELL_POWER_MANA)
end,
alias = ("MaxMP(unit=unit, type=%q)"):format(MANA:lower()),
arg = {
'unit', 'string;undef', 'player'
},
@ -325,7 +388,8 @@ if RUNIC_POWER then
})
end
if wow_700 then
if GetRuneCooldown then
local GetRuneCooldown = GetRuneCooldown
DogTag:AddTag("Unit", "RunesAvailable", {
code = function(unit)
local numAvailable = 0
@ -349,9 +413,10 @@ if wow_700 then
end
DogTag:AddTag("Unit", "IsMaxMP", {
alias = "Boolean(MP(unit=unit) = MaxMP(unit=unit))",
alias = "Boolean(MP(unit=unit, type=type) = MaxMP(unit=unit, type=type))",
arg = {
'unit', 'string;undef', 'player'
'unit', 'string;undef', 'player',
'type', 'string;undef', '@undef',
},
doc = L["Return True if unit is at full rage/mana/energy"],
example = ('[IsMaxMP] => %q; [IsMaxMP] => ""'):format(L["True"]),
@ -359,9 +424,10 @@ DogTag:AddTag("Unit", "IsMaxMP", {
})
DogTag:AddTag("Unit", "HasMP", {
alias = "Boolean(MaxMP(unit=unit) > 0)",
alias = "Boolean(MaxMP(unit=unit, type=type) > 0)",
arg = {
'unit', 'string;undef', 'player'
'unit', 'string;undef', 'player',
'type', 'string;undef', '@undef',
},
doc = L["Return True if unit has any power type at all"],
example = ('[HasMP] => %q; [HasMP] => ""'):format(L["True"]),
@ -423,7 +489,6 @@ DogTag:AddTag("Unit", "PowerColor", {
})
local wow_501 = select(4, GetBuildInfo()) >= 50100
local specialPowers = {
{
class = "WARLOCK",
@ -448,7 +513,7 @@ local specialPowers = {
class = "MONK",
tag = "Chi",
arg2 = SPELL_POWER_CHI or SPELL_POWER_LIGHT_FORCE,
eventPowerIdentifier = wow_501 and "CHI" or "LIGHT_FORCE",
eventPowerIdentifier = SPELL_POWER_CHI and "CHI" or "LIGHT_FORCE",
},
}
if not wow_700 then -- Parnic: shadow orbs are no more in 7.0

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -25,7 +25,7 @@ local function formatMinMax(min, max)
end
local found = false
DogTag:AddAddonFinder("Unit", "LibStub", "LibRangeCheck-2.0", function(RangeCheckLib)
DogTag:AddAddonFinder("Unit", "LibStub", "LibRangeCheck-3.0", function(RangeCheckLib)
found = true
function MinRange_func(unit)
return (RangeCheckLib:getRange(unit))

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -7,15 +7,61 @@ end
local _G, coroutine = _G, coroutine
local wrap, yield = coroutine.wrap, coroutine.yield
local GetWatchedFactionInfo, GetNumFactions, GetFactionInfo, ExpandFactionHeader, CollapseFactionHeader =
GetWatchedFactionInfo, GetNumFactions, GetFactionInfo, ExpandFactionHeader, CollapseFactionHeader
local GetWatchedFactionInfo = C_Reputation and C_Reputation.GetWatchedFactionData and function()
local data = C_Reputation.GetWatchedFactionData()
return data.name, data.reaction, data.currentReactionThreshold, data.nextReactionThreshold, data.currentStanding
end or _G.GetWatchedFactionInfo
DogTag_Unit_funcs[#DogTag_Unit_funcs+1] = function(DogTag_Unit, DogTag)
local L = DogTag_Unit.L
local IterateFactions, TerminateIterateFactions
do
if C_Reputation and C_Reputation.GetNumFactions then
local GetNumFactions = C_Reputation.GetNumFactions
local GetFactionDataByIndex = C_Reputation.GetFactionDataByIndex
local ExpandFactionHeader = C_Reputation.ExpandFactionHeader
local CollapseFactionHeader = C_Reputation.CollapseFactionHeader
local currentOpenHeader
local function iter()
for i = 1, GetNumFactions() do
local data = GetFactionDataByIndex(i)
if data then
if data.isHeader == 1 then
if data.isCollapsed == 1 then
local NumFactions = GetNumFactions()
ExpandFactionHeader(i)
currentOpenHeader = i
NumFactions = GetNumFactions() - NumFactions
for j = i+1, i+NumFactions do
yield(GetFactionInfo(j))
end
CollapseFactionHeader(i)
currentOpenHeader = nil
end
else
yield(data.name, data.description, data.reaction, data.currentReactionThreshold, data.nextReactionThreshold, data.currentStanding)
end
end
end
end
function TerminateIterateFactions()
if currentOpenHeader then
CollapseFactionHeader(currentOpenHeader)
currentOpenHeader = nil
end
end
function IterateFactions()
currentOpenHeader = nil
return wrap(iter)
end
else
local GetNumFactions, GetFactionInfo, ExpandFactionHeader, CollapseFactionHeader =
GetNumFactions, GetFactionInfo, ExpandFactionHeader, CollapseFactionHeader
local currentOpenHeader
local function iter()
for i = 1, GetNumFactions() do

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -12,6 +12,8 @@ local UnitExists, UnitGUID, UnitAffectingCombat, UnitIsAFK, UnitIsDeadOrGhost, U
UnitExists, UnitGUID, UnitAffectingCombat, UnitIsAFK, UnitIsDeadOrGhost, UnitIsGhost, UnitIsDead, UnitIsDND, UnitIsPVP, UnitIsPVPFreeForAll
local GetNumRaidMembers, GetNumPartyMembers, GetPetHappiness, GetRaidTargetIndex, UnitIsTapped, GetBindingText, GetBindingKey, GetRaidRosterInfo =
GetNumRaidMembers, GetNumPartyMembers, GetPetHappiness, GetRaidTargetIndex, UnitIsTapped, GetBindingText, GetBindingKey, GetRaidRosterInfo
local UnitIsGroupLeader, GetNumGroupMembers =
UnitIsGroupLeader, GetNumGroupMembers
local UnitName, UnitInRaid, UnitFactionGroup, GetPVPTimer, IsPVPTimerRunning, GetSpellInfo, IsResting =
UnitName, UnitInRaid, UnitFactionGroup, GetPVPTimer, IsPVPTimerRunning, GetSpellInfo, IsResting
@ -24,29 +26,15 @@ local offlineTimes = {}
local afkTimes = {}
local deadTimes = {}
-- Parnic: support for cataclysm; Divine Intervention was removed
local wow_ver = select(4, GetBuildInfo())
local wow_classic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
local wow_400 = wow_ver >= 40000
local wow_500 = wow_ver >= 50000
local wow_600 = wow_ver >= 60000
local wow_700 = wow_ver >= 70000
local petHappinessEvent = "UNIT_POWER_UPDATE"
local partyChangedEvent = "PARTY_MEMBERS_CHANGED"
if wow_500 or wow_classic then
if UnitIsGroupLeader then
UnitIsPartyLeader = UnitIsGroupLeader
partyChangedEvent = "GROUP_ROSTER_UPDATE"
end
-- Parnic: pet happiness removed in 4.1
local wow_401 = wow_ver >= 40100
-- ...and back in Classic
if wow_classic then
petHappinessEvent = "UNIT_HAPPINESS"
end
-- Parnic: GetNumRaidMembers/GetNumPartyMembers removed in 6.0
if wow_600 or wow_classic then
if GetNumGroupMembers then
GetNumRaidMembers = GetNumGroupMembers
GetNumPartyMembers = GetNumGroupMembers
end
@ -63,14 +51,14 @@ _G.iterateGroupMembers = iterateGroupMembers
local tmp = {}
local function PARTY_MEMBERS_CHANGED(event)
local prefix, min, max = "raid", 1, 0
if wow_500 then
if GetNumGroupMembers then
max = GetNumGroupMembers()
else
max = GetNumRaidMembers()
end
if wow_500 and max <= 5 or (not wow_500 and max == 0) then
if GetNumGroupMembers and max <= 5 or (not GetNumGroupMembers and max == 0) then
prefix, min = "party", 0
if not wow_500 then
if not GetNumGroupMembers then
max = GetNumPartyMembers()
end
end
@ -468,13 +456,13 @@ DogTag:AddTag("Unit", "IsFeignedDeath", {
})
-- Parnic: pet happiness removed in 4.1
if not wow_401 then
if GetPetHappiness then
DogTag:AddTag("Unit", "HappyNum", {
code = function()
return GetPetHappiness() or 0
end,
ret = "number",
events = petHappinessEvent,
events = "UNIT_HAPPINESS",
doc = L["Return the happiness number of your pet"],
example = '[HappyNum] => "3"',
category = L["Status"]
@ -485,7 +473,7 @@ DogTag:AddTag("Unit", "HappyText", {
return _G["PET_HAPPINESS" .. (GetPetHappiness() or 0)]
end,
ret = "string;nil",
events = petHappinessEvent,
events = "UNIT_HAPPINESS",
doc = L["Return a description of how happy your pet is"],
example = ('[HappyText] => %q'):format(_G.PET_HAPPINESS3),
category = L["Status"]
@ -508,7 +496,7 @@ DogTag:AddTag("Unit", "HappyIcon", {
'unhappy', 'string', 'B(',
},
ret = "string;nil",
events = petHappinessEvent,
events = "UNIT_HAPPINESS",
doc = L["Return an icon representative of how happy your pet is"],
example = ('[HappyIcon] => ":D"; [HappyIcon] => ":I"; [HappyIcon] => "B("'),
category = L["Status"]
@ -535,7 +523,7 @@ DogTag:AddTag("Unit", "RaidIcon", {
category = L["Status"]
})
if wow_700 or wow_classic then
if UnitIsTapDenied then
DogTag:AddTag("Unit", "IsNotTappableByMe", {
code = UnitIsTapDenied,
arg = {
@ -946,7 +934,7 @@ DogTag:AddTag("Unit", "StatusColor", {
})
-- Parnic: pet happiness removed in 4.1
if not wow_401 then
if GetPetHappiness then
DogTag:AddTag("Unit", "HappyColor", {
code = function(value)
local x = GetPetHappiness()
@ -972,7 +960,7 @@ DogTag:AddTag("Unit", "HappyColor", {
'value', 'string;undef', "@undef",
},
ret = "nil;string",
events = petHappinessEvent,
events = "UNIT_HAPPINESS",
doc = L["Return the color or wrap value with the color associated with your pet's happiness"],
example = '["Hello":HappyColor] => "|cff00ff00Hello|r"; [HappyColor "Hello"] => "|cff00ff00Hello"',
category = L["Status"]
@ -980,8 +968,8 @@ DogTag:AddTag("Unit", "HappyColor", {
end
-- Parnic: DI removed in Cataclysm
if not wow_400 then
local DIVINE_INTERVENTION = GetSpellInfo(19752)
local DIVINE_INTERVENTION = (GetSpellInfo or C_Spell.GetSpellName)(19752)
if DIVINE_INTERVENTION then
DogTag:AddTag("Unit", "Status", {
alias = ("Offline(unit=unit) or (HasDivineIntervention(unit=unit) ? %q) or (IsFeignedDeath(unit=unit) ? %q) or [if Dead(unit=unit) then ((HasSoulstone(unit=unit) ? %q) or Dead(unit=unit))]"):format(DIVINE_INTERVENTION, L["Feigned Death"], L["Soulstoned"]),
arg = {

View File

@ -1,21 +1,20 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
end
local wow_ver = select(4, GetBuildInfo())
local wow_500 = wow_ver >= 50000
local _G, table, setmetatable, rawget = _G, table, setmetatable, rawget
local UnitName, GetActiveTalentGroup, GetTalentTabInfo, UnitIsPlayer, GetNumTalentTabs =
UnitName, GetActiveTalentGroup, GetTalentTabInfo, UnitIsPlayer, GetNumTalentTabs
local UnitName, GetActiveTalentGroup, GetTalentTabInfo, UnitIsPlayer =
UnitName, GetActiveTalentGroup, GetTalentTabInfo, UnitIsPlayer
local GetSpecialization, GetSpecializationInfo
= GetSpecialization, GetSpecializationInfo
if wow_500 then
if GetActiveSpecGroup then
GetActiveTalentGroup = GetActiveSpecGroup
GetTalentTabInfo = GetSpecializationInfo
GetNumTalentTabs = GetNumSpecializations
end
DogTag_Unit_funcs[#DogTag_Unit_funcs+1] = function(DogTag_Unit, DogTag)
@ -53,7 +52,7 @@ DogTag:AddAddonFinder("Unit", "LibStub", "LibTalentQuery-1.0", function(LibTalen
LibTalentQuery.RegisterCallback(DogTag_Unit, "TalentQuery_Ready", function(event, name, realm, unitId)
local fullName = realm and name .. "-" .. realm or name
if wow_500 then
if GetInspectSpecialization then
local inspectSpec = GetInspectSpecialization(unitId)
local roleById = GetSpecializationInfoByID(inspectSpec)
if roleById ~= nil then
@ -80,7 +79,7 @@ DogTag:AddAddonFinder("Unit", "LibStub", "LibTalentQuery-1.0", function(LibTalen
local lastUnit
local function func(self, name)
if name == playerName then
if wow_500 then
if GetSpecialization then
talentSpecNames[playerName] = select(2, GetSpecializationInfo(GetSpecialization()))
return
end

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -11,30 +11,52 @@ local UnitName, UnitFactionGroup, UnitPlayerControlled, UnitIsPlayer, UnitIsVisi
local InCombatLockdown, GetNumFactions, GetFactionInfo, ExpandFactionHeader, CollapseFactionHeader, GetGuildInfo =
InCombatLockdown, GetNumFactions, GetFactionInfo, ExpandFactionHeader, CollapseFactionHeader, GetGuildInfo
local GetClassicExpansionLevel = GetClassicExpansionLevel
DogTag_Unit_funcs[#DogTag_Unit_funcs+1] = function(DogTag_Unit, DogTag)
local L = DogTag_Unit.L
local tt = CreateFrame("GameTooltip")
tt:SetOwner(UIParent, "ANCHOR_NONE")
tt.left = {}
tt.right = {}
for i = 1, 30 do
tt.left[i] = tt:CreateFontString()
tt.left[i]:SetFontObject(GameFontNormal)
tt.right[i] = tt:CreateFontString()
tt.right[i]:SetFontObject(GameFontNormal)
tt:AddFontStrings(tt.left[i], tt.right[i])
local tt
if not C_TooltipInfo then
tt = CreateFrame("GameTooltip", "LibDogTag-Unit-3.0-"..MAJOR_VERSION.."."..MINOR_VERSION)
tt:SetOwner(UIParent, "ANCHOR_NONE")
tt.left = {}
tt.right = {}
for i = 1, 30 do
tt.left[i] = tt:CreateFontString()
tt.left[i]:SetFontObject(GameFontNormal)
tt.right[i] = tt:CreateFontString()
tt.right[i]:SetFontObject(GameFontNormal)
tt:AddFontStrings(tt.left[i], tt.right[i])
end
end
local nextTime = 0
local lastName
local lastUnit
local function updateTT(unit)
if C_TooltipInfo then
local tooltipData = C_TooltipInfo.GetUnit(unit)
if TooltipUtil.SurfaceArgs then
TooltipUtil.SurfaceArgs(tooltipData)
for _, line in ipairs(tooltipData.lines) do
TooltipUtil.SurfaceArgs(line)
end
end
return tooltipData
end
local name = UnitName(unit)
local time = GetTime()
if lastUnit == unit and lastName == name and nextTime < time then
return
end
-- Parnic: temp: don't do any of this while Wrath Classic is crashing in these functions under certain conditions.
-- https://github.com/parnic/LibDogTag-Unit-3.0/issues/8
if InCombatLockdown() and GetClassicExpansionLevel and GetClassicExpansionLevel() == LE_EXPANSION_WRATH_OF_THE_LICH_KING then
return
end
lastUnit = unit
lastName = name
nextTime = time + 1
@ -45,13 +67,38 @@ local function updateTT(unit)
end
end
-- tooltips can contain any data, including quest info, so check for the type of the line before using it, if present
local function TooltipLineCouldBeGuild(line)
if not line then
return false
end
if not Enum or not Enum.TooltipDataLineType then
return false
end
return line.type == Enum.TooltipDataLineType.None
end
-- there's no special flag for factions vs guilds as of this writing, but if that gets added, this will make things easier
local function TooltipLineCouldBeFaction(line)
return TooltipLineCouldBeGuild(line)
end
local LEVEL_start = "^" .. (type(LEVEL) == "string" and LEVEL or "Level")
local function FigureNPCGuild(unit)
updateTT(unit)
local left_2 = tt.left[2]:GetText()
local info = updateTT(unit)
local left_2
if info then
left_2 = info.lines[2] and info.lines[2].leftText or nil
elseif tt then
left_2 = tt.left[2] and tt.left[2]:GetText() or nil
end
if not left_2 or left_2:find(LEVEL_start) then
return nil
end
if info and not TooltipLineCouldBeGuild(info.lines[2]) then
return nil
end
return left_2
end
@ -64,14 +111,27 @@ local function FigureFaction(unit)
return faction
end
updateTT(unit)
local left_2 = tt.left[2]:GetText()
local left_3 = tt.left[3]:GetText()
local info = updateTT(unit)
local left_2
local left_3
if info then
left_2 = info.lines[2] and info.lines[2].leftText or nil
left_3 = info.lines[3] and info.lines[3].leftText or nil
elseif tt then
left_2 = tt.left[2] and tt.left[2]:GetText() or nil
left_3 = tt.left[3] and tt.left[3]:GetText() or nil
end
if not left_2 or not left_3 then
return faction
end
local hasGuild = not left_2:find(LEVEL_start)
local factionText = not hasGuild and left_3 or tt.left[4]:GetText()
local left_4
if info and info.lines[4] then
left_4 = info.lines[4].leftText
elseif tt and tt.left[4] then
left_4 = tt.left[4]:GetText()
end
local factionText = not hasGuild and left_3 or left_4
if factionText == PVP then
return faction
end
@ -87,22 +147,45 @@ local function FigureZone(unit)
if not UnitIsConnected(unit) then
return nil
end
updateTT(unit)
local left_2 = tt.left[2]:GetText()
local left_3 = tt.left[3]:GetText()
local info = updateTT(unit)
local left_2
local left_3
local left_4
local left_5
if info then
left_2 = info.lines[2] and info.lines[2].leftText or nil
left_3 = info.lines[3] and info.lines[3].leftText or nil
left_4 = info.lines[4] and info.lines[4].leftText or nil
left_5 = info.lines[5] and info.lines[5].leftText or nil
elseif tt then
left_2 = tt.left[2] and tt.left[2]:GetText() or nil
left_3 = tt.left[3] and tt.left[3]:GetText() or nil
left_4 = tt.left[4] and tt.left[4]:GetText() or nil
left_5 = tt.left[5] and tt.left[5]:GetText() or nil
end
if not left_2 or not left_3 then
return nil
end
local hasGuild = not left_2:find(LEVEL_start)
local factionText = not hasGuild and left_3 or tt.left[4]:GetText()
if info and not TooltipLineCouldBeGuild(info.lines[2]) then
hasGuild = false
end
local factionText = not hasGuild and left_3 or left_4
if info then
if not hasGuild then
factionText = TooltipLineCouldBeFaction(info.lines[3]) and left_3 or nil
else
factionText = TooltipLineCouldBeFaction(info.lines[4]) and left_4 or nil
end
end
if factionText == PVP then
factionText = nil
end
local hasFaction = factionText and not UnitPlayerControlled(unit) and not UnitIsPlayer(unit) and (UnitFactionGroup(unit) or factionList[factionText])
if hasGuild and hasFaction then
return tt.left[5]:GetText()
return left_5
elseif hasGuild or hasFaction then
return tt.left[4]:GetText()
return left_4
else
return left_3
end

View File

@ -1,6 +1,6 @@
local DOGTAG_MAJOR_VERSION = "LibDogTag-3.0"
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,13 +1,12 @@
--[[
Name: LibDogTag-3.0
Revision: $Rev$
Author: Cameron Kenneth Knight (ckknight@gmail.com)
Website: http://www.wowace.com/
Description: A library to provide a markup syntax
Name: LibDogTag-Unit-3.0
Revision: @project-revision@
Website: https://www.wowace.com/projects/libdogtag-unit-3-0
Description: A library to provide a markup syntax - unit-specific tags
]]
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION
@ -23,10 +22,9 @@ local L = DogTag_Unit.L
local newList = DogTag.newList
local del = DogTag.del
local wow_ver = select(4, GetBuildInfo())
local wow_500 = wow_ver >= 50000
local PartyChangedEvent = "PARTY_MEMBERS_CHANGED"
if wow_500 then
if UnitIsGroupLeader then
-- Changed in wow 5.0
PartyChangedEvent = "GROUP_ROSTER_UPDATE"
end
@ -56,8 +54,11 @@ local normalUnitsWackyDependents = {}
local function fireEventForDependents(event, unit, ...)
local wackyDependents = normalUnitsWackyDependents[unit]
if wackyDependents then
for unit in pairs(wackyDependents) do
unit = next(wackyDependents, nil)
while unit ~= nil do
local nextUnit = next(wackyDependents, unit)
DogTag:FireEvent(event, unit, ...)
unit = nextUnit
end
end
end

View File

@ -1,15 +1,31 @@
## Interface: 90002
## Interface: 110105
## Interface-Retail: 110105
## Interface-Classic: 11507
## Interface-BCC: 20504
## Interface-Wrath: 30403
## Interface-Cata: 40402
## LoadOnDemand: 1
## Title: Lib: DogTag-Unit-3.0
## Notes: A library to provide unit-oriented tags to LibDogTag-3.0
## Author: ckknight
## eMail: ckknight@gmail.com
## Author: ckknight, Parnic, cybeloras
## eMail: ckknight@gmail.com, parnic@parnic.com
## Version: 1.0
## X-Category: Library
## X-Credits: Shefki, Parnic, Andrew Scott, cybeloras
## X-Compatible-With: 11305
## X-Credits: Shefki, Parnic, cybeloras
## X-Curse-Project-ID: 14282
## Dependencies: LibDogTag-3.0
## OptionalDeps: LibDruidMana-1.0, RangeCheck-1.0, LibTalentQuery-1.0
## Category-enUS: Libraries
## Category-deDE: Bibliotheken
## Category-esES: Bibliotecas
## Category-esMX: Bibliotecas
## Category-frFR: Bibliothèques
## Category-itIT:
## Category-koKR:
## Category-ptBR: Bibliotecas
## Category-ruRU: Библиотеки
## Category-zhCN: 函数库
## Category-zhTW: 函式庫
## Group: LibDogTag
lib.xml

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION

View File

@ -1,5 +1,5 @@
local MAJOR_VERSION = "LibDogTag-Unit-3.0"
local MINOR_VERSION = 90000 + (tonumber(("@file-date-integer@"):match("%d+")) or 33333333333333)
local MINOR_VERSION = tonumber(("@project-date-integer@"):match("%d+")) or 33333333333333
if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then
_G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION