Mercurial > wow > skeletonkey
comparison ActionTemplates.lua @ 71:ca3118127e5e
- Talent change detection
- Use stored assignments for inactive talent slots
| author | Nenue |
|---|---|
| date | Fri, 06 Jan 2017 16:21:49 -0500 |
| parents | 131d9190db6b |
| children | c48913c5924c |
comparison
equal
deleted
inserted
replaced
| 70:131d9190db6b | 71:ca3118127e5e |
|---|---|
| 154 local specialButtonType | 154 local specialButtonType |
| 155 if actionType == 'spell' then | 155 if actionType == 'spell' then |
| 156 if not GetSpellInfo(actionID) then | 156 if not GetSpellInfo(actionID) then |
| 157 isAvailable = nil | 157 isAvailable = nil |
| 158 end | 158 end |
| 159 local dynamicInfo = kb.TalentCache[name] or kb.ProfessionCache[name] | 159 local dynamicInfo = kb.DynamicSpells[name] |
| 160 if dynamicInfo then | 160 if dynamicInfo then |
| 161 cprint('|cFF00FFFFDynamicInfo:|r', name) | 161 configTable.assignedKeys = configTable.assignedKeys or {GetBindingKey(configTable.command)} |
| 162 cprint('|cFF00FFFFDynamicInfo:|r', dynamicInfo.dynamicType, table.concat(configTable.assignedKeys or {}, ',')) | |
| 162 for k, v in pairs(dynamicInfo) do | 163 for k, v in pairs(dynamicInfo) do |
| 163 cprint(' --', k, v) | 164 --cprint(' --', k, v) |
| 164 configTable[k] = v | 165 configTable[k] = v |
| 165 end | 166 end |
| 166 end | 167 end |
| 168 | |
| 169 | |
| 167 else | 170 else |
| 168 if actionType ~= 'macro' then | 171 if actionType ~= 'macro' then |
| 169 actionPrefix = '*macrotext-' | 172 actionPrefix = '*macrotext-' |
| 170 end | 173 end |
| 171 | 174 |
| 173 end | 176 end |
| 174 | 177 |
| 175 local attributeSuffix, attributeValue, command, target, button = kb.RegisterAction(actionType, actionID, name) | 178 local attributeSuffix, attributeValue, command, target, button = kb.RegisterAction(actionType, actionID, name) |
| 176 local actionKey = actionPrefix .. attributeSuffix | 179 local actionKey = actionPrefix .. attributeSuffix |
| 177 cprint('|cFF00FF88LoadBinding()|r', button:GetName(), "*type-"..attributeSuffix, actionType, '|cFFFFFF00'..actionKey, attributeValue) | 180 cprint('|cFF00FF88LoadBinding()|r', button:GetName(), "*type-"..attributeSuffix, actionType, '|cFFFFFF00'..actionKey, attributeValue) |
| 181 | |
| 178 | 182 |
| 179 | 183 |
| 180 | 184 |
| 181 if isAvailable then | 185 if isAvailable then |
| 182 kb.SecureAttribute(button, "*type-"..attributeSuffix, specialButtonType or actionType) | 186 kb.SecureAttribute(button, "*type-"..attributeSuffix, specialButtonType or actionType) |
| 187 else | 191 else |
| 188 return nil | 192 return nil |
| 189 end | 193 end |
| 190 end | 194 end |
| 191 | 195 |
| 196 | |
| 192 local usedSlots = {} | 197 local usedSlots = {} |
| 193 kb.ApplyBindings = function (profile) | 198 kb.UpgradeProfile = function(profile) |
| 194 cprint('|cFF0088FFApplyBindings()') | |
| 195 --cprint('binding profile', profile) | |
| 196 | |
| 197 wipe(usedSlots) | 199 wipe(usedSlots) |
| 198 for slot, configTable in pairs(profile.buttons) do | 200 for slot, configTable in pairs(profile.buttons) do |
| 199 | 201 |
| 200 | 202 -- convert old style table |
| 201 if #configTable >= 1 then | 203 if #configTable >= 1 then |
| 202 local command, name, icon, actionType, actionID, macroName, macroText, spellbookSlot, spellbookType = unpack(configTable) | 204 local command, name, icon, actionType, actionID, macroName, macroText, spellbookSlot, spellbookType = unpack(configTable) |
| 203 | 205 |
| 204 cprint('|CFFFF4400Fixing pad entry', slot, command, name) | 206 cprint('|CFFFF4400Fixing pad entry', slot, command, name) |
| 205 local assignedKeys = {GetBindingKey(command)} | 207 local assignedKeys = {GetBindingKey(command)} |
| 219 iconPath = icon, | 221 iconPath = icon, |
| 220 spellbookSlot = spellbookSlot, | 222 spellbookSlot = spellbookSlot, |
| 221 spellbookType = spellbookType, | 223 spellbookType = spellbookType, |
| 222 assignedKeys = assignedKeys | 224 assignedKeys = assignedKeys |
| 223 } | 225 } |
| 226 | |
| 227 local dynamic = kb.DynamicSpells[name] | |
| 228 if dynamic then | |
| 229 configTable.dynamicType = dynamic.dynamicType | |
| 230 configTable.dynamicIndex = dynamic.dynamicIndex | |
| 231 configTable.dynamicSubIndex = dynamic.dynamicSubIndex | |
| 232 configTable.dynamicID = dynamic.dynamicID | |
| 233 if configTable.dynamicType == 'talent' then | |
| 234 profile.talents[name] = configTable | |
| 235 end | |
| 236 end | |
| 237 | |
| 238 | |
| 224 kb.currentProfile.buttons[slot] = configTable | 239 kb.currentProfile.buttons[slot] = configTable |
| 225 end | 240 end |
| 226 if not configTable.actionID then | 241 if not configTable.actionID then |
| 227 configTable.actionID = configTable.actionName | 242 configTable.actionID = configTable.actionName |
| 228 end | 243 end |
| 231 configTable.iconPath = GetSpellTexture(configTable.actionName) | 246 configTable.iconPath = GetSpellTexture(configTable.actionName) |
| 232 end | 247 end |
| 233 | 248 |
| 234 usedSlots[configTable.actionName or configTable.actionID] = true | 249 usedSlots[configTable.actionName or configTable.actionID] = true |
| 235 usedSlots[configTable.command] = true | 250 usedSlots[configTable.command] = true |
| 236 | 251 end |
| 237 if kb.LoadBinding(configTable) then | 252 |
| 238 configTable.isAvailable = true | 253 |
| 239 end | 254 -- clean up legacy data |
| 240 end | 255 for spellName, talentInfo in pairs(profile.talents) do |
| 241 | 256 if not usedSlots[spellName] then |
| 257 cprint('|cFFFF4400Unslotted talent', spellName) | |
| 258 profile.talents[spellName] = nil | |
| 259 end | |
| 260 end | |
| 261 for command in pairs(profile.bound) do | |
| 262 if not usedSlots[command] then | |
| 263 cprint('|cFFFF4400Unslotted bound entry', command) | |
| 264 profile.bound[command] = nil | |
| 265 profile.commands[command] = nil | |
| 266 end | |
| 267 end | |
| 268 for command in pairs(profile.commands) do | |
| 269 if not usedSlots[command] then | |
| 270 cprint('|cFFFF4400Unslotted command entry', command) | |
| 271 profile.commands[command] = nil | |
| 272 end | |
| 273 end | |
| 274 end | |
| 275 | |
| 276 kb.ApplyBindings = function (profile) | |
| 277 cprint('|cFF0088FFApplyBindings()') | |
| 278 --cprint('binding profile', profile) | |
| 279 | |
| 280 local version = profile.versionID or 0 | |
| 281 if version < 310 then | |
| 282 kb.UpgradeProfile(profile) | |
| 283 end | |
| 284 | |
| 285 -- do flat bindings to start | |
| 242 for key, command in pairs(profile.bindings) do | 286 for key, command in pairs(profile.bindings) do |
| 243 command = command:gsub('KeyBinder', 'SkeletonKey') | 287 command = command:gsub('KeyBinder', 'SkeletonKey') |
| 244 profile.bindings[key] = command | 288 profile.bindings[key] = command |
| 245 cprint('|cFF00FFFF'.. key .. '|r to|cFF00FF00', command) | 289 cprint('|cFF00FFFF'.. key .. '|r to|cFF00FF00', command) |
| 246 SetBinding(key, command) | 290 SetBinding(key, command) |
| 247 | |
| 248 if commandActions[command] and not tContains(commandActions[command], key) then | 291 if commandActions[command] and not tContains(commandActions[command], key) then |
| 249 tinsert(commandActions[command], key) | 292 tinsert(commandActions[command], key) |
| 250 end | 293 end |
| 251 end | 294 end |
| 252 | 295 |
| 253 for spellName, talentInfo in pairs(profile.talents) do | 296 -- then buttons |
| 254 if not usedSlots[spellName] then | 297 for slot, configTable in pairs(profile.buttons) do |
| 255 cprint('|cFFFF4400Unslotted talent', spellName) | 298 -- convert old style table |
| 256 profile.talents[spellName] = nil | 299 if kb.LoadBinding(configTable) then |
| 257 end | 300 local talent = profile.talents[configTable.actionName] |
| 258 end | 301 if talent then |
| 259 for command in pairs(profile.bound) do | 302 configTable.assignedKeys = talent.assignedKeys |
| 260 if not usedSlots[command] then | 303 end |
| 261 cprint('|cFFFF4400Unslotted bound entry', command) | 304 if not configTable.assignedKeys then |
| 262 profile.bound[command] = nil | 305 configTable.assignedKeys = {GetBindingKey(configTable.command) } |
| 263 profile.commands[command] = nil | 306 end |
| 264 end | 307 configTable.isAvailable = true |
| 265 end | 308 if configTable.dynamicType then |
| 266 for command in pairs(profile.commands) do | 309 kb:print(table.concat(configTable.assignedKeys, ', ') .. ' bound to '.. configTable.actionName) |
| 267 if not usedSlots[command] then | 310 end |
| 268 cprint('|cFFFF4400Unslotted command entry', command) | 311 |
| 269 profile.commands[command] = nil | 312 end |
| 270 end | 313 end |
| 271 end | |
| 272 | |
| 273 end | 314 end |
| 274 | 315 |
| 275 kb.ApplyAllBindings =function () | 316 kb.ApplyAllBindings =function () |
| 276 cprint('|cFF0088FFApplyAllBindings()') | 317 cprint('|cFF0088FFApplyAllBindings()') |
| 277 wipe(kb.TalentBindings) | 318 wipe(kb.TalentBindings) |
| 330 talentInfo.dynamicID = talentID | 371 talentInfo.dynamicID = talentID |
| 331 talentInfo.dynamicIndex = row | 372 talentInfo.dynamicIndex = row |
| 332 talentInfo.dynamicSubIndex = col | 373 talentInfo.dynamicSubIndex = col |
| 333 talentInfo.actionID = spellID | 374 talentInfo.actionID = spellID |
| 334 talentInfo.isAvailable = selected | 375 talentInfo.isAvailable = selected |
| 335 kb.TalentCache[spellID] = talentInfo | |
| 336 kb.TalentCache[talentName] = talentInfo | |
| 337 kb.DynamicSpells[spellID] = talentInfo | 376 kb.DynamicSpells[spellID] = talentInfo |
| 338 kb.DynamicSpells[talentName] = talentInfo | 377 kb.DynamicSpells[talentName] = talentInfo |
| 339 end | 378 end |
| 340 | 379 |
| 341 --print('Talent ', row, col, spellID, talentName) | 380 --print('Talent ', row, col, spellID, talentName) |
| 351 talentInfo.actionName = name | 390 talentInfo.actionName = name |
| 352 talentInfo.dynamicType = 'talent' | 391 talentInfo.dynamicType = 'talent' |
| 353 talentInfo.dynamicID = id | 392 talentInfo.dynamicID = id |
| 354 talentInfo.actionID = spellID | 393 talentInfo.actionID = spellID |
| 355 talentInfo.isAvailable = selected | 394 talentInfo.isAvailable = selected |
| 356 kb.TalentCache[spellID] = talentInfo | |
| 357 kb.TalentCache[name] = talentInfo | |
| 358 kb.DynamicSpells[spellID] = talentInfo | 395 kb.DynamicSpells[spellID] = talentInfo |
| 359 kb.DynamicSpells[name] = talentInfo | 396 kb.DynamicSpells[name] = talentInfo |
| 360 end | 397 end |
| 361 end | 398 end |
| 362 end | 399 end |
