-
Notifications
You must be signed in to change notification settings - Fork 0
/
LibTalentInfoClassic-1.0.lua
108 lines (85 loc) · 3.32 KB
/
LibTalentInfoClassic-1.0.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
local VERSION_MAJOR = "LibTalentInfoClassic-1.0"
local VERSION_MINOR = 1
if LibStub == nil then
error(VERSION_MAJOR .. " requires LibStub")
end
--- @class LibTalentInfoClassic-1.0
local LibTalentInfoClassic = LibStub:NewLibrary(VERSION_MAJOR, VERSION_MINOR)
--- @class TalentProvider
--- @field public version integer
--- @field public classes string[]?
--- @field public talents table<string,integer[]>
if LibTalentInfoClassic == nil then
return
end
--- @type TalentProvider
local talentProvider
--- @param provider TalentProvider
function LibTalentInfoClassic:RegisterTalentProvider(provider)
assert(type(provider) == "table", "bad argument #1: expected table, got " .. type(provider))
if talentProvider ~= nil and provider.version <= talentProvider.version then
return
end
talentProvider = provider
end
--- @return integer
function LibTalentInfoClassic:GetTalentProviderVersion()
if talentProvider == nil then
return -1
end
return talentProvider.version
end
function LibTalentInfoClassic:GetNumTalentsForTab(class, tabIndex)
assert(type(class) == "string", "bad argument #1: expected string, got " .. type(class))
assert(type(tabIndex) == "number", "bad argument #2: expected number, got " .. type(tabIndex))
if talentProvider == nil then
error("No talent provider registered, register one first using 'RegisterTalentProvider'.")
end
if talentProvider.talents[class] == nil then
return 0
end
if tabIndex <= 0 or tabIndex > MAX_TALENT_TABS then
error("Talent tab is out of range: " .. tabIndex .. ". Must be an integer between 1 and " .. MAX_TALENT_TABS)
end
local talents = talentProvider.talents[class][tabIndex] or {}
return #talents
end
--- Get the info for a talent of the specified class.
---
--- @param class string The class file name obtained by `UnitClass`.
--- @param tabIndex integer An integer value between 1 and `MAX_TALENT_TABS`.
--- @param talentIndex integer An integer value between 1 and `MAX_NUM_TALENTS`.
--- @return integer? talentID
--- @return string? name
--- @return integer? texture
--- @return boolean? selected
--- @return boolean? available
--- @return integer? spellID
--- @return nil
--- @return integer? row
--- @return integer? column
--- @return boolean? known
--- @return boolean? grantedByAura
function LibTalentInfoClassic:GetTalentInfo(class, tabIndex, talentIndex)
assert(type(class) == "string", "bad argument #1: expected string, got " .. type(class))
assert(type(tabIndex) == "number", "bad argument #2: expected number, got " .. type(tabIndex))
assert(type(talentIndex) == "number", "bad argument #3: expected number, got " .. type(talentIndex))
if talentProvider == nil then
error("No talent provider registered, register one first using 'RegisterTalentProvider'.")
end
if talentProvider.talents[class] == nil then
return nil
end
if tabIndex <= 0 or tabIndex > MAX_TALENT_TABS then
error("Talent tab is out of range: " .. tabIndex .. ". Must be an integer between 1 and " .. MAX_TALENT_TABS)
end
if talentIndex <= 0 or talentIndex > MAX_NUM_TALENTS then
error("Talent index is out of range: " .. talentIndex .. ". Must be an integer between 1 and " .. MAX_NUM_TALENTS)
end
local talents = talentProvider.talents[class][tabIndex] or {}
if talentIndex > #talents then
return nil
end
local talentID = talents[talentIndex]
return talentID, GetTalentInfo(tabIndex, talentIndex)
end