Mercurial > wow > skeletonkey
comparison SkeletonKey/ActionTypes.lua @ 21:564015ef0317
- use pet spellbook subtext to categorize dynamic buttons
author | Nenue |
---|---|
date | Sat, 30 Jul 2016 20:28:15 -0400 |
parents | 67db6b712bf3 |
children | f6dd297cb812 |
comparison
equal
deleted
inserted
replaced
20:5250877895ae | 21:564015ef0317 |
---|---|
1 -- SkeletonKey | 1 -- SkeletonKey |
2 -- ActionTypes.lua | 2 -- ActionTypes.lua |
3 -- Created: 7/29/2016 9:14 PM | 3 -- Created: 7/29/2016 9:14 PM |
4 -- %file-revision% | 4 -- %file-revision% |
5 -- | 5 -- |
6 local kb, print, wrap = LibStub('LibKraken').register(KeyBinder) | 6 local tostring, tonumber, pairs, ipairs = tostring, tonumber, pairs, ipairs |
7 local unpack, SetBinding = unpack, SetBinding | |
8 local tinsert, tContains, select, wipe = tinsert, tContains, select, table.wipe | |
9 local GetSpellBookItemInfo, GetSpellBookItemName, GetSpellInfo = GetSpellBookItemInfo, GetSpellBookItemName, GetSpellInfo | |
10 local GetSpecialization, GetSpecializationInfo, IsPassiveSpell, IsTalentSpell = GetSpecialization, GetSpecializationInfo, IsPassiveSpell, IsTalentSpell | |
11 local PetHasSpellbook, PetHasActionBar, GetPetActionInfo, HasPetSpells = PetHasSpellbook, PetHasActionBar, GetPetActionInfo, HasPetSpells | |
12 local GetProfessions, GetProfessionInfo, GetTalentInfo = GetProfessions, GetProfessionInfo, GetTalentInfo | |
13 local GetNumBindings, GetBinding = GetNumBindings, GetBinding | |
14 | |
15 local kb, print, wrap = LibStub('LibKraken').register(KeyBinder, 'Info') | |
7 local cprint = DEVIAN_WORKSPACE and function(...) _G.print('Cfg', ...) end or function() end | 16 local cprint = DEVIAN_WORKSPACE and function(...) _G.print('Cfg', ...) end or function() end |
8 | 17 |
9 local SUMMON_RANDOM_FAVORITE_MOUNT_SPELL = 150544 | |
10 local CLICK_KEYBINDER_MACRO = "CLICK KeyBinderMacro:" | 18 local CLICK_KEYBINDER_MACRO = "CLICK KeyBinderMacro:" |
11 local CLICK_KEYBINDER_KEY = "CLICK KeyBinderKey:" | 19 local CLICK_KEYBINDER_KEY = "CLICK KeyBinderKey:" |
12 | 20 local PET_BASIC_SUBTEXT = 'Basic Attack' |
21 local PET_SPECIAL_SUBTEXT = 'Special Ability' | |
13 local PETACTION_SCRIPT = { | 22 local PETACTION_SCRIPT = { |
14 [PET_ACTION_MOVE_TO] = {SLASH_PET_MOVE_TO1, 'pet_move_to'}, | 23 [PET_ACTION_MOVE_TO] = {SLASH_PET_MOVE_TO1, 'pet_move_to'}, |
15 [PET_ACTION_ATTACK] = {SLASH_PET_ATTACK1, 'pet_attack'}, | 24 [PET_ACTION_ATTACK] = {SLASH_PET_ATTACK1, 'pet_attack'}, |
16 [PET_ACTION_FOLLOW] = {SLASH_PET_FOLLOW1, 'pet_follow'}, | 25 [PET_ACTION_FOLLOW] = {SLASH_PET_FOLLOW1, 'pet_follow'}, |
17 [PET_ACTION_WAIT] = {SLASH_PET_STAY1, 'pet_stay'}, | 26 [PET_ACTION_WAIT] = {SLASH_PET_STAY1, 'pet_stay'}, |
18 [PET_MODE_AGGRESSIVE] = {SLASH_PET_AGGRESSIVE1, 'pet_aggressive'}, | 27 [PET_MODE_AGGRESSIVE] = {SLASH_PET_AGGRESSIVE1, 'pet_aggressive'}, |
19 [PET_MODE_DEFENSIVE] = {SLASH_PET_DEFENSIVE1, 'pet_defensive'}, | 28 [PET_MODE_DEFENSIVE] = {SLASH_PET_DEFENSIVE1, 'pet_defensive'}, |
20 [PET_MODE_PASSIVE] = {SLASH_PET_PASSIVE1, 'pet_passive'}, | 29 [PET_MODE_PASSIVE] = {SLASH_PET_PASSIVE1, 'pet_passive'}, |
21 [PET_MODE_ASSIST] = {SLASH_PET_ASSIST1, 'pet_assist'}, | 30 [PET_MODE_ASSIST] = {SLASH_PET_ASSIST1, 'pet_assist'}, |
22 } | 31 } |
32 local SECONDARY_PROFESSIONS = { | |
33 [5] = 3, | |
34 [7] = 4, | |
35 [9] = 5, | |
36 [10] = 6 | |
37 } | |
38 local SUMMON_RANDOM_FAVORITE_MOUNT_SPELL = 150544 | |
23 | 39 |
24 kb.ActionTypes = {} | 40 kb.ActionTypes = {} |
25 kb.PetCache = {} | 41 kb.PetCache = { |
42 spell = {}, | |
43 spellslot = {}, | |
44 action = {}, | |
45 special = {}, | |
46 subtext = {} | |
47 } | |
26 kb.TalentCache = {} | 48 kb.TalentCache = {} |
27 kb.ProfessionCache = {} | 49 kb.ProfessionCache = {} |
28 | 50 |
29 local atype = kb.ActionTypes | 51 local atype = kb.ActionTypes |
30 | 52 |
57 -- ID doesn't exist for basic commands, even though they can be picked up | 79 -- ID doesn't exist for basic commands, even though they can be picked up |
58 local attributeName, attributeValue = "petaction_" .. tostring(name), "/cast "..tostring(name) | 80 local attributeName, attributeValue = "petaction_" .. tostring(name), "/cast "..tostring(name) |
59 if PETACTION_SCRIPT[name] then | 81 if PETACTION_SCRIPT[name] then |
60 attributeValue, attributeName = unpack(PETACTION_SCRIPT[name]) | 82 attributeValue, attributeName = unpack(PETACTION_SCRIPT[name]) |
61 elseif kb.PetCache.special[name] then | 83 elseif kb.PetCache.special[name] then |
62 attributeName = "petaction_special" .. tonumber(kb.PetCache.special[name][2]) | 84 attributeName = "petaction_"..kb.PetCache.special[name][3].."_" .. tonumber(kb.PetCache.special[name][6]) |
63 end | 85 end |
64 return CLICK_KEYBINDER_MACRO, attributeName, attributeValue | 86 return CLICK_KEYBINDER_MACRO, attributeName, attributeValue |
65 end | 87 end |
66 | 88 |
67 atype['battlepet'] = function(id, name) | 89 atype['battlepet'] = function(id, name) |
84 while (kb.macros[attributeName] and kb.macros[attributeName][1] ~= attributeValue) do | 106 while (kb.macros[attributeName] and kb.macros[attributeName][1] ~= attributeValue) do |
85 print(' * cannot use|cFF00FF00', attributeName, '|r"'.. tostring(kb.macros[attributeName][1]) .. '"') | 107 print(' * cannot use|cFF00FF00', attributeName, '|r"'.. tostring(kb.macros[attributeName][1]) .. '"') |
86 attributeName = baseName .. '_' .. iterative | 108 attributeName = baseName .. '_' .. iterative |
87 iterative = iterative + 1 | 109 iterative = iterative + 1 |
88 end | 110 end |
89 if macroName ~= baseName then | 111 if attributeName ~= baseName then |
90 print(' * Creating|cFF00FF00', macroName) | 112 print(' * Creating|cFF00FF00', attributeName) |
91 else | 113 else |
92 print(' * Re-using|cFF00FF00', macroName) | 114 print(' * Re-using|cFF00FF00', attributeName) |
93 end | 115 end |
94 kb.macros[attributeName] = {attributeValue, command} | 116 kb.macros[attributeName] = {attributeValue, command} |
95 | 117 |
96 | 118 |
97 print('RegisterAction', actionType, id, '->', attributeName, attributeValue, target .. attributeName) | 119 print('RegisterAction', actionType, id, '->', attributeName, attributeValue, target .. attributeName) |
177 end | 199 end |
178 | 200 |
179 end | 201 end |
180 | 202 |
181 kb.ApplyAllBindings =function () | 203 kb.ApplyAllBindings =function () |
182 table.wipe(kb.TalentBindings) | 204 wipe(kb.TalentBindings) |
183 | 205 |
184 | 206 |
185 -- reflect action key settings | 207 -- reflect action key settings |
186 if GetCVarBool("ActionButtonUseKeyDown") then | 208 if GetCVarBool("ActionButtonUseKeyDown") then |
187 KeyBinderMacro:RegisterForClicks("AnyDown") | 209 KeyBinderMacro:RegisterForClicks("AnyDown") |
201 SaveBindings(GetCurrentBindingSet()) | 223 SaveBindings(GetCurrentBindingSet()) |
202 end | 224 end |
203 end | 225 end |
204 | 226 |
205 | 227 |
206 local PET_SPECIAL_SUBTEXT = 'Special Ability' | |
207 local SECONDARY_PROFESSIONS = { | |
208 [5] = 3, | |
209 [7] = 4, | |
210 [9] = 5, | |
211 [10] = 6 | |
212 } | |
213 | |
214 kb.TalentCache = {} | |
215 kb.ProfessionCache = {} | |
216 kb.PetCache = {} | |
217 kb.specInfo = {} | 228 kb.specInfo = {} |
218 kb.UpdateSpecInfo = function() | 229 kb.UpdateSpecInfo = function() |
219 kb.specInfo.id = GetSpecialization() | 230 kb.specInfo.id = GetSpecialization() |
220 kb.specInfo.globalID, kb.specInfo.name, kb.specInfo.desc, kb.specInfo.texture = GetSpecializationInfo(kb.specInfo.id) | 231 kb.specInfo.globalID, kb.specInfo.name, kb.specInfo.desc, kb.specInfo.texture = GetSpecializationInfo(kb.specInfo.id) |
221 print('|cFF00FF00current spec:|r', kb.specInfo.id, 'of', GetNumSpecializations()) | |
222 end | 232 end |
223 | 233 |
224 kb.UpdateTalentInfo = function() | 234 kb.UpdateTalentInfo = function() |
225 if kb.talentsPushed then | 235 if kb.talentsPushed then |
226 return | 236 return |
227 end | 237 end |
228 table.wipe(kb.TalentCache) | 238 wipe(kb.TalentCache) |
229 for row =1, MAX_TALENT_TIERS do | 239 for row =1, MAX_TALENT_TIERS do |
230 for col = 1, NUM_TALENT_COLUMNS do | 240 for col = 1, NUM_TALENT_COLUMNS do |
231 local talentID, talentName, icon, selected, available, spellID = GetTalentInfo(row, col, 1) | 241 local talentID, talentName, icon, selected, available, spellID = GetTalentInfo(row, col, 1) |
232 local talentInfo = kb.TalentCache[spellID] or {} | 242 local talentInfo = kb.TalentCache[spellID] or {} |
233 talentInfo.row = 1 | 243 talentInfo.row = 1 |
246 | 256 |
247 kb.UpdateDynamicButtons('talent') | 257 kb.UpdateDynamicButtons('talent') |
248 end | 258 end |
249 | 259 |
250 kb.UpdateProfessionInfo = function() | 260 kb.UpdateProfessionInfo = function() |
251 table.wipe(kb.ProfessionCache) | 261 wipe(kb.ProfessionCache) |
252 local profs = {GetProfessions() } | 262 local profs = {GetProfessions() } |
253 local primaryNum = 0 | 263 local primaryNum = 0 |
254 for i, index in ipairs(profs) do | 264 for i, index in ipairs(profs) do |
255 local profName, texture, rank, maxRank, numSpells, spellOffset = GetProfessionInfo(index) | 265 local profName, texture, rank, maxRank, numSpells, spellOffset = GetProfessionInfo(index) |
256 print(i, index, profName, numSpells, spellOffset) | 266 print(i, index, profName, numSpells, spellOffset) |
289 end | 299 end |
290 | 300 |
291 | 301 |
292 | 302 |
293 kb.UpdatePetInfo = function() | 303 kb.UpdatePetInfo = function() |
294 kb.PetCache.spell = kb.PetCache.spell or {} | |
295 kb.PetCache.spellslot = kb.PetCache.spellslot or {} | |
296 kb.PetCache.action = kb.PetCache.action or {} | |
297 kb.PetCache.special = kb.PetCache.action or {} | |
298 local hasPetSpells, petType = HasPetSpells() | 304 local hasPetSpells, petType = HasPetSpells() |
299 if PetHasSpellbook() then | 305 if PetHasSpellbook() then |
300 print('PET SPELLBOOK') | 306 print('PET SPELLBOOK') |
301 local i = 1 | 307 local i = 1 |
302 local specialNum = 0 | 308 local specialNum = {} |
303 repeat | 309 repeat |
304 | 310 |
305 local spellType, spellID = GetSpellBookItemInfo(i, BOOKTYPE_PET) | 311 local spellType, spellID = GetSpellBookItemInfo(i, BOOKTYPE_PET) |
306 local spellName, subText = GetSpellBookItemName(i, BOOKTYPE_PET) | 312 local spellName, subText = GetSpellBookItemName(i, BOOKTYPE_PET) |
313 local texture = GetSpellBookItemTexture(i, BOOKTYPE_PET) | |
307 local isPassive = IsPassiveSpell(i, BOOKTYPE_PET) | 314 local isPassive = IsPassiveSpell(i, BOOKTYPE_PET) |
308 if not isPassive then | 315 if not isPassive then |
309 if spellName then | 316 if spellName then |
310 kb.PetCache.spellslot[spellName] = {i, spellName, subText} | 317 kb.PetCache.spellslot[spellName] = {i, spellName, subText, spellID, texture} |
311 print('|cFF00FF88spellslot['..spellName..']|r', '=>', i, subText) | 318 print('|cFF00FF88spellslot['..spellName..']|r', '=>', i, subText) |
312 | 319 |
313 if subText == PET_SPECIAL_SUBTEXT then | 320 if subText then |
314 specialNum = specialNum + 1 | 321 kb.PetCache.subtext[subText] = kb.PetCache.subtext[subText] or {} |
315 kb.PetCache.special[spellName] = {i, specialNum, spellID, subText } | 322 specialNum[subText] = (specialNum[subText] or 0) + 1 |
316 print('|cFF00FFFFspecial['..spellName..']|r', '=>', i, specialNum, spellID, subText) | 323 |
317 KeyBinderMacro:SetAttribute("*macrotext-pet_special_"..specialNum, "/cast "..spellName) | 324 local entry = {i, spellName, subText, spellID, texture, specialNum[subText]} |
325 | |
326 kb.PetCache.special[spellName] = entry | |
327 kb.PetCache.subtext[subText][specialNum[subText]] = entry | |
328 KeyBinderMacro:SetAttribute("*macrotext-petaction_"..subText.."_"..specialNum[subText], "/cast "..spellName) | |
329 | |
330 print('|cFF00FFFFspecial['..spellName..']|r', '\n','|cFF00FFFFsubtext['..subText..']['..specialNum[subText]..']|r', '=>', i, spellName, subText, spellID, texture, specialNum[subText]) | |
318 end | 331 end |
319 | 332 |
320 if spellID then | 333 if spellID then |
321 kb.PetCache.spell[i] = {spellID, spellName, subText} | 334 kb.PetCache.spell[i] = {spellID, spellName, subText} |
322 print('|cFF0088FFspell['..i..']|r', '=>', spellID, spellName, subText) | 335 print('|cFF0088FFspell['..i..']|r', '=>', spellID, spellName, subText) |
328 | 341 |
329 i = i + 1 | 342 i = i + 1 |
330 until spellType == nil | 343 until spellType == nil |
331 else | 344 else |
332 print('NO PET SPELLBOOK') | 345 print('NO PET SPELLBOOK') |
333 table.wipe(kb.PetCache.spell) | 346 wipe(kb.PetCache.spell) |
334 table.wipe(kb.PetCache.spellslot) | 347 wipe(kb.PetCache.spellslot) |
335 end | 348 end |
336 | 349 |
337 if PetHasActionBar() then | 350 if PetHasActionBar() then |
338 print('PET ACTION BAR') | 351 print('PET ACTION BAR') |
339 for i = 1, 10 do | 352 for i = 1, 10 do |
347 end | 360 end |
348 print('|cFFFFFF00action['..i..']|r', name, subtext, texture) | 361 print('|cFFFFFF00action['..i..']|r', name, subtext, texture) |
349 end | 362 end |
350 else | 363 else |
351 print('NO PET ACTION BAR') | 364 print('NO PET ACTION BAR') |
352 table.wipe(kb.PetCache.action) | 365 wipe(kb.PetCache.action) |
353 end | 366 end |
354 | 367 |
355 kb.UpdateDynamicButtons('petaction') | 368 kb.UpdateDynamicButtons('petaction') |
356 | 369 |
357 end | 370 end |
358 | 371 |
359 kb.UpdateSystemBinds = function() | 372 kb.UpdateSystemBinds = function() |
360 table.wipe(kb.SystemBindings) | 373 wipe(kb.SystemBindings) |
361 local n = GetNumBindings() | 374 local n = GetNumBindings() |
362 for i=1, n do | 375 for i=1, n do |
363 local command, key1, key2 = GetBinding(i) | 376 local command, key1, key2 = GetBinding(i) |
364 if key1 then | 377 if key1 then |
365 kb.SystemBindings[key1] = command | 378 kb.SystemBindings[key1] = command |