madcatzinc@13: --~ Warcraft Plugin for Cyborg MMO7 madcatzinc@0: --~ Filename: CyborgMMO7.lua madcatzinc@0: --~ Description: Plugin entry point, String tables and other generic crap that I could not think to put anywhere else. madcatzinc@0: --~ Copyright (C) 2012 Mad Catz Inc. madcatzinc@0: --~ Author: Christopher Hooks madcatzinc@0: madcatzinc@0: --~ This program is free software; you can redistribute it and/or madcatzinc@0: --~ modify it under the terms of the GNU General Public License madcatzinc@0: --~ as published by the Free Software Foundation; either version 2 madcatzinc@0: --~ of the License, or (at your option) any later version. madcatzinc@0: madcatzinc@0: --~ This program is distributed in the hope that it will be useful, madcatzinc@0: --~ but WITHOUT ANY WARRANTY; without even the implied warranty of madcatzinc@0: --~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the madcatzinc@0: --~ GNU General Public License for more details. madcatzinc@0: madcatzinc@0: --~ You should have received a copy of the GNU General Public License madcatzinc@0: --~ along with this program; if not, write to the Free Software madcatzinc@0: --~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. madcatzinc@0: madcatzinc@36: local RAT7 = { madcatzinc@36: BUTTONS = 13, madcatzinc@36: MODES = 3, madcatzinc@36: SHIFT = 0, madcatzinc@36: } madcatzinc@36: madcatzinc@54: local function toboolean(value) madcatzinc@54: if value then madcatzinc@54: return true madcatzinc@54: else madcatzinc@54: return false madcatzinc@54: end madcatzinc@54: end madcatzinc@54: madcatzinc@4: function CyborgMMO_LoadStrings(self) madcatzinc@15: -- CyborgMMO_DPrint("LoadStrings("..self:GetName()..") = "..CyborgMMO_StringTable[self:GetName()]) madcatzinc@13: self:SetText(CyborgMMO_StringTable[self:GetName()]) madcatzinc@0: end madcatzinc@0: madcatzinc@20: local VarsLoaded = false madcatzinc@40: local AsyncDataLoaded = false madcatzinc@20: local EnteredWorld = false madcatzinc@20: local BindingsLoaded = false madcatzinc@21: local SettingsLoaded = false madcatzinc@20: local SaveName = GetRealmName().."_"..UnitName("player") madcatzinc@21: local Settings = nil madcatzinc@60: local AutoClosed = false madcatzinc@59: CyborgMMO_ModeDetected = false madcatzinc@0: madcatzinc@0: madcatzinc@45: function CyborgMMO_MiniMapButtonReposition(angle) madcatzinc@45: local r = 80 madcatzinc@45: local dx = r * math.cos(angle) madcatzinc@45: local dy = r * math.sin(angle) madcatzinc@46: CyborgMMO_MiniMapButton:ClearAllPoints() madcatzinc@46: CyborgMMO_MiniMapButton:SetPoint("CENTER", "Minimap", "CENTER", dx, dy) madcatzinc@48: if SettingsLoaded then madcatzinc@48: Settings.MiniMapButtonAngle = angle madcatzinc@48: end madcatzinc@0: end madcatzinc@0: madcatzinc@0: madcatzinc@4: function CyborgMMO_MiniMapButtonOnUpdate() madcatzinc@45: local xpos,ypos = GetCursorPosition() madcatzinc@45: local xmap,ymap = Minimap:GetCenter() madcatzinc@0: madcatzinc@45: xpos = xpos / UIParent:GetScale() - xmap madcatzinc@45: ypos = ypos / UIParent:GetScale() - ymap madcatzinc@0: madcatzinc@45: local angle = math.atan2(ypos, xpos) madcatzinc@45: CyborgMMO_MiniMapButtonReposition(angle) madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_MouseModeChange(mode) madcatzinc@46: local MiniMapTexture = CyborgMMO_MiniMapButtonIcon madcatzinc@46: local MiniMapGlowTexture = CyborgMMO_MiniMapButtonIconGlow madcatzinc@57: local OpenButtonTexture = CyborgMMO_OpenButtonPageOpenMainForm:GetNormalTexture() madcatzinc@57: local OpenButtonGlowTexture = CyborgMMO_OpenButtonPageOpenMainForm:GetHighlightTexture() madcatzinc@13: if mode == 1 then madcatzinc@0: MiniMapTexture:SetVertexColor(1,0,0,1) madcatzinc@31: MiniMapGlowTexture:SetVertexColor(1,0.26,0.26,.75) madcatzinc@13: OpenButtonTexture:SetVertexColor(1,0,0,0.75) madcatzinc@31: OpenButtonGlowTexture:SetVertexColor(1,0.26,0.26,0.50) madcatzinc@13: elseif mode == 2 then madcatzinc@0: MiniMapTexture:SetVertexColor(0.07,0.22,1,1) madcatzinc@13: MiniMapGlowTexture:SetVertexColor(0.13,0.56,1,.75) madcatzinc@13: OpenButtonTexture:SetVertexColor(0.07,0.22,1,0.75) madcatzinc@13: OpenButtonGlowTexture:SetVertexColor(0.13,0.56,1,0.5) madcatzinc@13: elseif mode == 3 then madcatzinc@0: MiniMapTexture:SetVertexColor(0.52,0.08,0.89,1) madcatzinc@13: MiniMapGlowTexture:SetVertexColor(0.67,0.31,0.85,.75) madcatzinc@13: OpenButtonTexture:SetVertexColor(0.52,0.08,0.89,0.75) madcatzinc@13: OpenButtonGlowTexture:SetVertexColor(0.67,0.31,0.85,0.5) madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_GetSaveData() madcatzinc@32: assert(VarsLoaded) madcatzinc@32: if not CyborgMMO7SaveData then madcatzinc@32: CyborgMMO7SaveData = {} madcatzinc@0: end madcatzinc@34: return CyborgMMO7SaveData madcatzinc@0: end madcatzinc@0: madcatzinc@51: function CyborgMMO_SetRatSaveData(objects) madcatzinc@32: assert(VarsLoaded) madcatzinc@54: local specIndex madcatzinc@54: if Settings.PerSpecBindings then madcatzinc@54: specIndex = GetActiveSpecGroup() madcatzinc@54: else madcatzinc@54: specIndex = 1 madcatzinc@54: end madcatzinc@54: local ratData = {} madcatzinc@36: for mode=1,RAT7.MODES do madcatzinc@54: ratData[mode] = {} madcatzinc@36: for button=1,RAT7.BUTTONS do madcatzinc@51: if objects[mode][button] then madcatzinc@54: ratData[mode][button] = objects[mode][button]:SaveData() madcatzinc@34: end madcatzinc@34: end madcatzinc@34: end madcatzinc@54: local saveData = CyborgMMO_GetSaveData() madcatzinc@54: if not saveData.Rat then saveData.Rat = {} end madcatzinc@54: saveData.Rat[specIndex] = ratData madcatzinc@51: end madcatzinc@51: madcatzinc@51: function CyborgMMO_GetRatSaveData() madcatzinc@54: local specIndex madcatzinc@54: if Settings.PerSpecBindings then madcatzinc@54: specIndex = GetActiveSpecGroup() madcatzinc@54: else madcatzinc@54: specIndex = 1 madcatzinc@54: end madcatzinc@54: CyborgMMO_DPrint("returning rat data for spec:", specIndex, GetActiveSpecGroup()) madcatzinc@54: local saveData = CyborgMMO_GetSaveData() madcatzinc@54: return saveData.Rat and saveData.Rat[specIndex] madcatzinc@0: end madcatzinc@0: madcatzinc@35: local function GetSpellID(name) madcatzinc@35: local link = GetSpellLink(name) madcatzinc@35: if link then madcatzinc@35: local id = link:match('spell:(%d+)|') madcatzinc@35: if id then madcatzinc@35: return tonumber(id) madcatzinc@35: end madcatzinc@35: end madcatzinc@35: end madcatzinc@35: madcatzinc@40: local KnownOldObjectTypes = { madcatzinc@40: item = true, madcatzinc@40: macro = true, madcatzinc@40: spell = true, madcatzinc@40: petaction = true, madcatzinc@40: merchant = true, madcatzinc@40: companion = true, madcatzinc@40: equipmentset = true, madcatzinc@40: callback = true, madcatzinc@40: } madcatzinc@40: madcatzinc@35: local function ConvertOldRatData(oldData) madcatzinc@35: local newData = {} madcatzinc@35: for mode,modeData in ipairs(oldData) do madcatzinc@35: newData[mode] = {} madcatzinc@35: for button,buttonData in ipairs(modeData) do madcatzinc@35: CyborgMMO_DPrint("converting mode:", mode, "button:", button) madcatzinc@35: local type = buttonData.Type madcatzinc@35: if type=='item' then madcatzinc@35: -- not possible, the WowObject 'Type' field was overwritten by the item type madcatzinc@35: elseif type=='macro' then madcatzinc@35: local name = buttonData.Name madcatzinc@35: newData[mode][button] = { madcatzinc@35: type = type, madcatzinc@35: detail = name, madcatzinc@35: } madcatzinc@35: elseif type=='spell' then madcatzinc@35: local id = GetSpellID(buttonData.Name) madcatzinc@35: CyborgMMO_DPrint("converting spell:", buttonData.Name, id) madcatzinc@35: if id then madcatzinc@35: newData[mode][button] = { madcatzinc@35: type = type, madcatzinc@35: detail = id, madcatzinc@35: } madcatzinc@35: end madcatzinc@35: elseif type=='petaction' then madcatzinc@35: -- no longer supported madcatzinc@35: elseif type=='merchant' then madcatzinc@35: -- no longer supported madcatzinc@35: elseif type=='companion' then madcatzinc@35: local id = GetSpellID(buttonData.Name) madcatzinc@35: CyborgMMO_DPrint("converting companion:", buttonData.Name, id) madcatzinc@35: if id then madcatzinc@35: newData[mode][button] = { madcatzinc@35: type = type, madcatzinc@35: detail = buttonData.Subdetail, madcatzinc@35: subdetail = id, madcatzinc@35: } madcatzinc@35: end madcatzinc@35: elseif type=='equipmentset' then madcatzinc@35: CyborgMMO_DPrint("converting equipment set:", buttonData.Detail) madcatzinc@35: newData[mode][button] = { madcatzinc@35: type = type, madcatzinc@35: detail = buttonData.Detail, madcatzinc@35: } madcatzinc@35: elseif type=='callback' then madcatzinc@35: CyborgMMO_DPrint("converting callback:", buttonData.Detail) madcatzinc@35: newData[mode][button] = { madcatzinc@35: type = type, madcatzinc@35: detail = buttonData.Detail, madcatzinc@35: } madcatzinc@40: elseif not KnownOldObjectTypes[type] then madcatzinc@35: -- maybe it's an item type madcatzinc@35: local id = buttonData.Detail madcatzinc@35: local class = select(6, GetItemInfo(id)) -- :NOTE: this may fail if the item is not yet in the cache madcatzinc@35: if class == type then madcatzinc@35: CyborgMMO_DPrint("converting item:", id, type, class) madcatzinc@35: newData[mode][button] = { madcatzinc@35: type = "item", madcatzinc@35: detail = id, madcatzinc@35: } madcatzinc@35: end madcatzinc@35: else madcatzinc@35: CyborgMMO_DPrint("cannot convert:", type) madcatzinc@35: end madcatzinc@35: end madcatzinc@35: end madcatzinc@35: return newData madcatzinc@35: end madcatzinc@35: madcatzinc@40: ------------------------------------------------------------------------------ madcatzinc@40: madcatzinc@40: local PreloadFrame madcatzinc@40: local step_timeout = 1 madcatzinc@40: local total_timeout = 15 madcatzinc@40: madcatzinc@40: local function PreloadFrameUpdate(self, dt) madcatzinc@40: self.step_timeout = self.step_timeout - dt madcatzinc@40: self.total_timeout = self.total_timeout - dt madcatzinc@40: if self.step_timeout < 0 then madcatzinc@40: local items,pets = 0,0 madcatzinc@40: -- check items madcatzinc@40: for itemID in pairs(self.itemIDs) do madcatzinc@40: if GetItemInfo(itemID) then madcatzinc@40: self.itemIDs[itemID] = nil madcatzinc@40: else madcatzinc@40: items = items + 1 madcatzinc@40: end madcatzinc@40: end madcatzinc@40: -- check pets madcatzinc@40: for petID in pairs(self.petIDs) do madcatzinc@40: if C_PetJournal.GetPetInfoByPetID(petID) then madcatzinc@40: self.petIDs[petID] = nil madcatzinc@40: else madcatzinc@40: pets = pets + 1 madcatzinc@40: end madcatzinc@40: end madcatzinc@40: CyborgMMO_DPrint("PreloadFrameUpdate step", self.total_timeout, "items:", items, "pets:", pets) madcatzinc@40: if self.total_timeout < 0 or next(self.itemIDs)==nil and next(self.petIDs)==nil then madcatzinc@40: -- when done destroy the frame and throw an event for further loading madcatzinc@40: self:Hide() madcatzinc@40: self:SetParent(nil) madcatzinc@40: PreloadFrame = nil madcatzinc@41: CyborgMMO_Event("CYBORGMMO_ASYNC_DATA_LOADED") madcatzinc@40: else madcatzinc@40: self.step_timeout = step_timeout madcatzinc@40: end madcatzinc@40: end madcatzinc@40: end madcatzinc@40: madcatzinc@42: local function PreLoad(data) madcatzinc@40: -- create ID sets to sync madcatzinc@40: local itemIDs = {} madcatzinc@40: local petIDs = {} madcatzinc@58: madcatzinc@40: -- gather all needed IDs (and trigger sync while doing so) madcatzinc@40: if data.Rat then madcatzinc@54: for spec,specData in pairs(data.Rat) do madcatzinc@54: for mode=1,RAT7.MODES do madcatzinc@54: for button=1,RAT7.BUTTONS do madcatzinc@54: local buttonData = specData[mode] and specData[mode][button] madcatzinc@54: if buttonData then madcatzinc@54: if buttonData.type=='item' then madcatzinc@54: local itemID = buttonData.detail madcatzinc@54: if not GetItemInfo(itemID) then madcatzinc@54: itemIDs[itemID] = true madcatzinc@54: end madcatzinc@54: elseif buttonData.type=='battlepet' then madcatzinc@54: local petID = buttonData.detail madcatzinc@54: if not C_PetJournal.GetPetInfoByPetID(petID) then madcatzinc@54: petIDs[petID] = true madcatzinc@54: end madcatzinc@40: end madcatzinc@40: end madcatzinc@40: end madcatzinc@40: end madcatzinc@40: end madcatzinc@40: end madcatzinc@40: -- gather IDs from old unconverted data (in case we need to convert it) madcatzinc@40: if data[SaveName] and data[SaveName].Rat then madcatzinc@40: for mode=1,RAT7.MODES do madcatzinc@40: for button=1,RAT7.BUTTONS do madcatzinc@40: local data = data[SaveName].Rat[mode][button] madcatzinc@40: if data then madcatzinc@40: -- items actually had their class overwrite the Type field madcatzinc@40: if not KnownOldObjectTypes[data.Type] and type(data.Detail)=='number' then madcatzinc@40: local itemID = data.Detail madcatzinc@40: if not GetItemInfo(itemID) then madcatzinc@40: itemIDs[itemID] = true madcatzinc@40: end madcatzinc@40: end madcatzinc@40: end madcatzinc@40: end madcatzinc@40: end madcatzinc@40: end madcatzinc@58: madcatzinc@40: -- create frame for regular updates madcatzinc@40: PreloadFrame = CreateFrame("Frame") madcatzinc@40: PreloadFrame.itemIDs = itemIDs madcatzinc@40: PreloadFrame.petIDs = petIDs madcatzinc@40: PreloadFrame.total_timeout = total_timeout madcatzinc@40: PreloadFrame.step_timeout = step_timeout madcatzinc@40: PreloadFrame:SetScript("OnUpdate", PreloadFrameUpdate) madcatzinc@40: PreloadFrame:Show() madcatzinc@40: end madcatzinc@40: madcatzinc@40: ------------------------------------------------------------------------------ madcatzinc@40: madcatzinc@41: function CyborgMMO_Event(event, ...) madcatzinc@13: if event == "VARIABLES_LOADED" then madcatzinc@20: VarsLoaded = true madcatzinc@37: -- create root table if necessary madcatzinc@37: if not CyborgMMO7SaveData then madcatzinc@37: CyborgMMO7SaveData = {} madcatzinc@37: end madcatzinc@40: PreLoad(CyborgMMO7SaveData) madcatzinc@40: elseif event == "CYBORGMMO_ASYNC_DATA_LOADED" then madcatzinc@40: AsyncDataLoaded = true madcatzinc@35: -- convert old profile madcatzinc@35: if CyborgMMO7SaveData[SaveName] and not CyborgMMO7SaveData.Settings then madcatzinc@35: local oldData = CyborgMMO7SaveData[SaveName] madcatzinc@35: CyborgMMO7SaveData = {} madcatzinc@35: CyborgMMO7SaveData.Settings = oldData.Settings madcatzinc@54: -- Rat is an array, with one child per talent spec/group madcatzinc@54: CyborgMMO7SaveData.Rat = {} madcatzinc@54: CyborgMMO7SaveData.Rat[1] = ConvertOldRatData(oldData.Rat) madcatzinc@35: CyborgMMO7SaveData[SaveName] = oldData -- for now keep the data, we may have missed something in the conversion madcatzinc@35: end madcatzinc@13: elseif event == "PLAYER_ENTERING_WORLD" then madcatzinc@20: EnteredWorld = true madcatzinc@19: elseif event == "PLAYER_REGEN_DISABLED" then madcatzinc@60: if CyborgMMO_IsOpen() then madcatzinc@60: AutoClosed = true madcatzinc@60: CyborgMMO_Close() madcatzinc@60: end madcatzinc@60: elseif event == "PLAYER_REGEN_ENABLED" then madcatzinc@60: if AutoClosed then madcatzinc@60: AutoClosed = false madcatzinc@60: CyborgMMO_Open() madcatzinc@60: end madcatzinc@54: elseif event == "ACTIVE_TALENT_GROUP_CHANGED" then madcatzinc@54: -- force a re-loading of bindings madcatzinc@54: BindingsLoaded = false madcatzinc@0: else madcatzinc@15: CyborgMMO_DPrint("Event is "..tostring(event)) madcatzinc@13: end madcatzinc@0: madcatzinc@0: -- Fire Loading if and only if the player is in the world and vars are loaded madcatzinc@54: if not SettingsLoaded and VarsLoaded and AsyncDataLoaded and EnteredWorld then madcatzinc@20: local data = CyborgMMO_GetSaveData() madcatzinc@0: madcatzinc@21: Settings = data.Settings madcatzinc@21: if not Settings then madcatzinc@21: Settings = {} madcatzinc@54: data.Settings = Settings madcatzinc@54: end madcatzinc@54: if Settings.MiniMapButton == nil then madcatzinc@21: Settings.MiniMapButton = true madcatzinc@54: end madcatzinc@54: if Settings.CyborgButton == nil then madcatzinc@21: Settings.CyborgButton = true madcatzinc@54: end madcatzinc@54: if Settings.PerSpecBindings == nil then madcatzinc@54: Settings.PerSpecBindings = false madcatzinc@21: end madcatzinc@48: if not Settings.Cyborg then madcatzinc@48: Settings.Cyborg = 0.75 madcatzinc@48: end madcatzinc@48: if not Settings.Plugin then madcatzinc@48: Settings.Plugin = 0.75 madcatzinc@48: end madcatzinc@48: if not Settings.MiniMapButtonAngle then madcatzinc@48: Settings.MiniMapButtonAngle = math.rad(150) madcatzinc@48: end madcatzinc@0: madcatzinc@21: -- Reload Slider values: madcatzinc@21: CyborgMMO_SetOpenButtonSize(Settings.Cyborg) madcatzinc@21: CyborgMMO_SetMainPageSize(Settings.Plugin) madcatzinc@0: madcatzinc@21: CyborgMMO_SetMiniMapButton(Settings.MiniMapButton) madcatzinc@48: CyborgMMO_MiniMapButtonReposition(Settings.MiniMapButtonAngle) madcatzinc@21: CyborgMMO_SetCyborgHeadButton(Settings.CyborgButton) madcatzinc@54: CyborgMMO_SetPerSpecBindings(Settings.PerSpecBindings) madcatzinc@0: madcatzinc@59: -- assume we start with mode 1, it's the most likely madcatzinc@59: CyborgMMO_MouseModeChange(1) madcatzinc@59: madcatzinc@48: SettingsLoaded = true madcatzinc@0: end madcatzinc@54: madcatzinc@54: -- load data AFTER the settings, because PerSpecBindings may affect what's loaded madcatzinc@54: if not BindingsLoaded and VarsLoaded and AsyncDataLoaded and EnteredWorld then madcatzinc@54: CyborgMMO_RatPageModel:LoadData() madcatzinc@54: madcatzinc@54: CyborgMMO_SetupModeCallbacks(1) madcatzinc@54: CyborgMMO_SetupModeCallbacks(2) madcatzinc@54: CyborgMMO_SetupModeCallbacks(3) madcatzinc@54: madcatzinc@54: BindingsLoaded = true madcatzinc@54: end madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_SetDefaultSettings() madcatzinc@13: CyborgMMO_OpenButtonPageOpenMainForm:ClearAllPoints() madcatzinc@13: CyborgMMO_MainPage:ClearAllPoints() madcatzinc@13: CyborgMMO_OpenButtonPageOpenMainForm:SetPoint("LEFT", UIParent, "LEFT", 0, 0) madcatzinc@13: CyborgMMO_MainPage:SetPoint("LEFT", UIParent, "LEFT", 0, 0) madcatzinc@0: madcatzinc@13: CyborgMMO_SetOpenButtonSize(0.75) madcatzinc@13: CyborgMMO_SetMainPageSize(0.75) madcatzinc@13: CyborgMMO_SetMiniMapButton(true) madcatzinc@13: CyborgMMO_SetCyborgHeadButton(true) madcatzinc@0: end madcatzinc@0: madcatzinc@61: function CyborgMMO_SetDefaultKeyBindings() madcatzinc@61: for mode=1,RAT7.MODES do madcatzinc@61: for button=1,RAT7.BUTTONS do madcatzinc@61: local k = (mode - 1) * RAT7.BUTTONS + button madcatzinc@61: CyborgMMO_ProfileKeyBindings[k] = CyborgMMO_DefaultKeyBindings[k] madcatzinc@61: CyborgMMO_SetBindingButtonText(string.format("CyborgMMO_OptionPageRebindMouseRow%XMode%d", button, mode)) madcatzinc@61: end madcatzinc@61: end madcatzinc@61: end madcatzinc@0: madcatzinc@4: function CyborgMMO_SetupModeCallbacks(modeNum) madcatzinc@23: local fn = function() madcatzinc@59: CyborgMMO_ModeDetected = true madcatzinc@13: CyborgMMO_MouseModeChange(modeNum) madcatzinc@18: CyborgMMO_RatPageModel:SetMode(modeNum) madcatzinc@0: end madcatzinc@0: madcatzinc@23: local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(fn) madcatzinc@16: SetOverrideBindingClick(parentFrame, true, CyborgMMO_Mode[modeNum], name, "LeftButton") madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_Loaded() madcatzinc@13: CyborgMMO_MainPage:RegisterEvent("VARIABLES_LOADED") madcatzinc@13: CyborgMMO_MainPage:RegisterEvent("PLAYER_ENTERING_WORLD") madcatzinc@19: CyborgMMO_MainPage:RegisterEvent("PLAYER_REGEN_DISABLED") madcatzinc@60: CyborgMMO_MainPage:RegisterEvent("PLAYER_REGEN_ENABLED") madcatzinc@54: CyborgMMO_MainPage:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED") madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_Close() madcatzinc@13: CyborgMMO_MainPage:Hide() madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_Open() madcatzinc@13: CyborgMMO_MainPage:Show() madcatzinc@13: CyborgMMO_RatQuickPage:Hide() madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_IsOpen() madcatzinc@13: if CyborgMMO_MainPage:IsVisible() == 1 then madcatzinc@13: return true madcatzinc@0: else madcatzinc@13: return false madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_Toggle() madcatzinc@13: if CyborgMMO_IsOpen() then madcatzinc@13: CyborgMMO_Close() madcatzinc@0: else madcatzinc@13: CyborgMMO_Open() madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@15: function CyborgMMO_GetDebugFrame() madcatzinc@15: for i=1,NUM_CHAT_WINDOWS do madcatzinc@15: local windowName = GetChatWindowInfo(i); madcatzinc@15: if windowName == "Debug" then madcatzinc@15: return getglobal("ChatFrame" .. i) madcatzinc@15: end madcatzinc@15: end madcatzinc@15: end madcatzinc@15: madcatzinc@15: local log_prefix = "|cffff6666".."CyborgMMO".."|r:" madcatzinc@15: madcatzinc@15: function CyborgMMO_DPrint(...) madcatzinc@15: local debugframe = CyborgMMO_GetDebugFrame() madcatzinc@15: if debugframe then madcatzinc@15: local t = {log_prefix, ...} madcatzinc@15: for i=1,select('#', ...)+1 do madcatzinc@15: t[i] = tostring(t[i]) madcatzinc@15: end madcatzinc@15: debugframe:AddMessage(table.concat(t, ' ')) madcatzinc@15: end madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_SetMainPageSize(percent) madcatzinc@21: CyborgMMO_MainPage:SetScale(percent) madcatzinc@21: CyborgMMO_OptionPagePluginSizeSlider:SetValue(percent) madcatzinc@48: if SettingsLoaded then madcatzinc@21: Settings.Plugin = percent madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@4: function CyborgMMO_SetOpenButtonSize(percent) madcatzinc@21: CyborgMMO_OpenButtonPage:SetScale(percent) madcatzinc@21: CyborgMMO_OptionPageCyborgSizeSlider:SetValue(percent) madcatzinc@21: if SettingsLoaded then madcatzinc@21: Settings.Cyborg = percent madcatzinc@0: end madcatzinc@0: end madcatzinc@0: madcatzinc@21: function CyborgMMO_SetCyborgHeadButton(visible) madcatzinc@21: if visible then madcatzinc@21: CyborgMMO_OpenButtonPage:Show() madcatzinc@0: else madcatzinc@13: CyborgMMO_OpenButtonPage:Hide() madcatzinc@0: end madcatzinc@21: CyborgMMO_OptionPageCyborgButton:SetChecked(visible) madcatzinc@21: if SettingsLoaded then madcatzinc@54: Settings.CyborgButton = toboolean(visible) madcatzinc@21: end madcatzinc@0: end madcatzinc@0: madcatzinc@21: function CyborgMMO_SetMiniMapButton(visible) madcatzinc@21: if visible then madcatzinc@46: CyborgMMO_MiniMapButton:Show() madcatzinc@0: else madcatzinc@46: CyborgMMO_MiniMapButton:Hide() madcatzinc@0: end madcatzinc@21: CyborgMMO_OptionPageMiniMapButton:SetChecked(visible) madcatzinc@21: if SettingsLoaded then madcatzinc@54: Settings.MiniMapButton = toboolean(visible) madcatzinc@21: end madcatzinc@0: end madcatzinc@0: madcatzinc@54: function CyborgMMO_SetPerSpecBindings(perSpec) madcatzinc@54: CyborgMMO_OptionPagePerSpecBindings:SetChecked(perSpec) madcatzinc@54: if SettingsLoaded then madcatzinc@54: Settings.PerSpecBindings = toboolean(perSpec) madcatzinc@54: end madcatzinc@54: -- reload bindings if necessary (AFTER altering the setting) madcatzinc@54: if BindingsLoaded then madcatzinc@54: CyborgMMO_RatPageModel:LoadData() madcatzinc@54: end madcatzinc@54: end madcatzinc@54: