Mercurial > wow > skeletonkey
view Import.lua @ 93:f9df7cd7bfd6 tip
revert pet spell subText collation
remove an empty script handler
author | Nenue |
---|---|
date | Tue, 04 Sep 2018 23:00:21 -0400 |
parents | 131d9190db6b |
children |
line wrap: on
line source
-- KrakTool -- Import.lua -- Created: 7/10/2016 6:20 AM -- %file-revision% -- Tools for first-time setup and migration from other addons. local kb = LibStub("LibKraken").register(KeyBinder, 'Import') local print = DEVIAN_WORKSPACE and function(...) print('kbi', ...) end or function() end local SUMMON_RANDOM_FAVORITE_MOUNT_SPELL = 150544 local SUMMON_RANDOM_FAVORITE_MOUNT_SPELLNAME = "Summon Random Favorite Mount" local results = {} local importSet = setmetatable({}, {__tostring = function() return 'Global Bindings' end}) kb.importTypes = {} local lineNumber = 0 local usedBinds, usedKeys = {}, {} local profileName = '' local specProfile local msg = function(...) return KeyBinderImportLog:AddMessage(...) end --- Core interfaces kb.ImportScan = function() -- hang onto this SUMMON_RANDOM_FAVORITE_MOUNT_SPELLNAME = GetSpellInfo(SUMMON_RANDOM_FAVORITE_MOUNT_SPELL) local hasAnyData = false for addon, module in pairs(kb.importTypes) do if IsAddOnLoaded(addon) then local hasData = module.GetChanges(importSet) if hasData then kb:print("|cFFFFFF00"..addon.." is currently enabled.") end hasAnyData = (hasData or hasAnyData) end end if hasAnyData then kb:print("You can use /skb import |cFF00FF00<AddOn Name>|r to attempt to copy settings related to this character. This will also disable that AddOn.") end kb.ui() --KeyBinderImportLog:Show() return importSet end kb.ImportCommmit = function(self, text) kb.db.buttons = importSet.buttons kb.db.bound = importSet.bound kb.db.commands = importSet.commands kb.db.bindings = importSet.bindings kb.db.macros = importSet.macros kb.db[profileName] = importSet[profileName] kb.profile(profileName) kb:ApplyAllBindings() kb.ui() kb:print('Imported settings applied! Note that you will need to change active specializations and run the command again to create their respective Char+Spec profiles.') end --- Key Scan kb.importTypes.KeyBinder = {} kb.importTypes.BindPad = {} local kbi = kb.importTypes.KeyBinder local bp = kb.importTypes.BindPad --- BindPad import process -- because bindpad doesn't store class info, it is not possible to discern the identity of primary/secondary local GetBindPadSlot = function(profile, slot, data) local actionType = data.type:lower() local command = data.action:gsub('CLICK BindPadKey:%s*', '') local clickAction = command:match('BindPadMacro:%s*(.+)%s*$') local macroName, macroText if clickAction then local clickType = 'spell' if clickAction == SUMMON_RANDOM_FAVORITE_MOUNT_SPELLNAME then clickType = 'mount' clickAction = 0 else clickType = 'spell' end macroName, macroText, command = kb.RegisterAction(nil, clickType, clickAction) profile.macros[macroName] = {macroText, command} end print('[|cFF00FF00'.. data.type .. '|r] |cFFFF00FF' .. data.action .. '|r :: "' .. tostring(clickAction) .. '"') results[actionType] = (results[actionType] or 0) + 1 profile.buttons[slot] = { command, command:gsub(data.type, ''), data.texture } profile.commands[command] = slot if usedBinds[data.action] then local key1, key2 = unpack(usedBinds[data.action]) print('adding keybind |cFF00FFFF' .. command .. ' |cFF00FF00' .. (key1) .. ' |cFF00FF00' .. (key2 or '')) profile.bindings[key1] = command if key2 then profile.bindings[key2] = command end usedBinds[data.action] = nil msg('|cFF00FFFF'..tostring(profile)..'|r '..slot..': ' .. '|cFF00FFFF' .. command .. '|r |cFF00FF00' .. (key1 or '') .. (key2 and ('|r, |cFF00FF00key2') or '') ) else print('|cFFFF4400no binding|r ' .. command) end end local GetBindPadProfile = function(profile, bp) local bpnames = {'CharacterSpecificTab1', 'CharacterSpecificTab2', 'CharacterSpecificTab3'} -- won't need this ever again, let it fall into gc -- resolve spec ID local specID = GetSpecialization() local globalID = GetSpecializationInfo(GetSpecialization()) local activeProfile -- setup string coercions for debugging setmetatable(profile,{__tostring = function(t) return 'Character' end}) if GetNumSpecGroups() > 1 then local activeGroup = GetActiveSpecGroup() activeProfile = bp.profileForTalentGroup[activeGroup] profile[specID] = kb.InitProfile(profile[specID] or {}) specProfile = profile[specID] setmetatable(specProfile,{__tostring = function(t) return 'Spec #'..specID end}) end print('-') results.spell = 0 results.macro = 0 results.click = 0 results.item = 0 table.wipe(usedBinds) -- [action] = {key1, key2} table.wipe(usedKeys) -- [key] = "action" for id, bpProfile in ipairs(bp) do local slots = 0 if bpProfile.AllKeyBindings then for binding, command in pairs(bpProfile.AllKeyBindings) do -- each binding value if not usedKeys[binding] then usedKeys[binding] = command end usedBinds[command] = usedBinds[command] or {} tinsert(usedBinds[command], binding) end end for i, name in ipairs(bpnames) do -- each tab if bpProfile[name] then for slot, data in pairs(bpProfile[name]) do if type(data) == 'table' then slots = slots + 1 local profile = (id == activeProfile) and specProfile or profile lineNumber = lineNumber + 1 GetBindPadSlot(profile, slot, data) else --print(type(data), slot, data) end end end end end end bp.GetChanges = function(importSet) -- ensure that subtables are there kb.InitProfile(importSet) if BindPadVars then local globalSlots = 0 for k,v in pairs(BindPadVars) do --print(k, type(k)) if type(k) == 'string' then local realm, name = k:match("^PROFILE_([%S]+)_(%S+)$") if realm == kb.playerRealm and name == kb.playerName then profileName = realm .. '_' .. name msg('Found character profile: |cFFFFFF00'.. tostring(realm) .. '|r-|cFF00FFFF'..tostring(name)..'|r') importSet[profileName] = kb.InitProfile({}) importSet[profileName].imported = true GetBindPadProfile(importSet[profileName], v) end elseif type(k) == 'number' and type(v) == 'table' then globalSlots = globalSlots + 1 GetBindPadSlot(importSet, globalSlots, v) end end end return results end