madcatzinc@13
|
1 --~ Warcraft Plugin for Cyborg MMO7
|
madcatzinc@0
|
2 --~ Filename: CyborgMMO7.lua
|
madcatzinc@0
|
3 --~ Description: Plugin entry point, String tables and other generic crap that I could not think to put anywhere else.
|
madcatzinc@0
|
4 --~ Copyright (C) 2012 Mad Catz Inc.
|
madcatzinc@0
|
5 --~ Author: Christopher Hooks
|
madcatzinc@0
|
6
|
madcatzinc@0
|
7 --~ This program is free software; you can redistribute it and/or
|
madcatzinc@0
|
8 --~ modify it under the terms of the GNU General Public License
|
madcatzinc@0
|
9 --~ as published by the Free Software Foundation; either version 2
|
madcatzinc@0
|
10 --~ of the License, or (at your option) any later version.
|
madcatzinc@0
|
11
|
madcatzinc@0
|
12 --~ This program is distributed in the hope that it will be useful,
|
madcatzinc@0
|
13 --~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
madcatzinc@0
|
14 --~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
madcatzinc@0
|
15 --~ GNU General Public License for more details.
|
madcatzinc@0
|
16
|
madcatzinc@0
|
17 --~ You should have received a copy of the GNU General Public License
|
madcatzinc@0
|
18 --~ along with this program; if not, write to the Free Software
|
madcatzinc@0
|
19 --~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
madcatzinc@0
|
20
|
madcatzinc@36
|
21 local RAT7 = {
|
madcatzinc@36
|
22 BUTTONS = 13,
|
madcatzinc@36
|
23 MODES = 3,
|
madcatzinc@36
|
24 SHIFT = 0,
|
madcatzinc@36
|
25 }
|
madcatzinc@36
|
26
|
madcatzinc@54
|
27 local function toboolean(value)
|
madcatzinc@54
|
28 if value then
|
madcatzinc@54
|
29 return true
|
madcatzinc@54
|
30 else
|
madcatzinc@54
|
31 return false
|
madcatzinc@54
|
32 end
|
madcatzinc@54
|
33 end
|
madcatzinc@54
|
34
|
madcatzinc@4
|
35 function CyborgMMO_LoadStrings(self)
|
madcatzinc@15
|
36 -- CyborgMMO_DPrint("LoadStrings("..self:GetName()..") = "..CyborgMMO_StringTable[self:GetName()])
|
madcatzinc@13
|
37 self:SetText(CyborgMMO_StringTable[self:GetName()])
|
madcatzinc@0
|
38 end
|
madcatzinc@0
|
39
|
madcatzinc@20
|
40 local VarsLoaded = false
|
madcatzinc@40
|
41 local AsyncDataLoaded = false
|
madcatzinc@20
|
42 local EnteredWorld = false
|
madcatzinc@20
|
43 local BindingsLoaded = false
|
madcatzinc@21
|
44 local SettingsLoaded = false
|
madcatzinc@20
|
45 local SaveName = GetRealmName().."_"..UnitName("player")
|
madcatzinc@21
|
46 local Settings = nil
|
madcatzinc@60
|
47 local AutoClosed = false
|
madcatzinc@59
|
48 CyborgMMO_ModeDetected = false
|
madcatzinc@0
|
49
|
madcatzinc@0
|
50
|
madcatzinc@45
|
51 function CyborgMMO_MiniMapButtonReposition(angle)
|
madcatzinc@45
|
52 local r = 80
|
madcatzinc@45
|
53 local dx = r * math.cos(angle)
|
madcatzinc@45
|
54 local dy = r * math.sin(angle)
|
madcatzinc@46
|
55 CyborgMMO_MiniMapButton:ClearAllPoints()
|
madcatzinc@46
|
56 CyborgMMO_MiniMapButton:SetPoint("CENTER", "Minimap", "CENTER", dx, dy)
|
madcatzinc@48
|
57 if SettingsLoaded then
|
madcatzinc@48
|
58 Settings.MiniMapButtonAngle = angle
|
madcatzinc@48
|
59 end
|
madcatzinc@0
|
60 end
|
madcatzinc@0
|
61
|
madcatzinc@0
|
62
|
madcatzinc@4
|
63 function CyborgMMO_MiniMapButtonOnUpdate()
|
madcatzinc@45
|
64 local xpos,ypos = GetCursorPosition()
|
madcatzinc@45
|
65 local xmap,ymap = Minimap:GetCenter()
|
madcatzinc@0
|
66
|
madcatzinc@45
|
67 xpos = xpos / UIParent:GetScale() - xmap
|
madcatzinc@45
|
68 ypos = ypos / UIParent:GetScale() - ymap
|
madcatzinc@0
|
69
|
madcatzinc@45
|
70 local angle = math.atan2(ypos, xpos)
|
madcatzinc@45
|
71 CyborgMMO_MiniMapButtonReposition(angle)
|
madcatzinc@0
|
72 end
|
madcatzinc@0
|
73
|
madcatzinc@4
|
74 function CyborgMMO_MouseModeChange(mode)
|
madcatzinc@46
|
75 local MiniMapTexture = CyborgMMO_MiniMapButtonIcon
|
madcatzinc@46
|
76 local MiniMapGlowTexture = CyborgMMO_MiniMapButtonIconGlow
|
madcatzinc@57
|
77 local OpenButtonTexture = CyborgMMO_OpenButtonPageOpenMainForm:GetNormalTexture()
|
madcatzinc@57
|
78 local OpenButtonGlowTexture = CyborgMMO_OpenButtonPageOpenMainForm:GetHighlightTexture()
|
madcatzinc@13
|
79 if mode == 1 then
|
madcatzinc@0
|
80 MiniMapTexture:SetVertexColor(1,0,0,1)
|
madcatzinc@31
|
81 MiniMapGlowTexture:SetVertexColor(1,0.26,0.26,.75)
|
madcatzinc@13
|
82 OpenButtonTexture:SetVertexColor(1,0,0,0.75)
|
madcatzinc@31
|
83 OpenButtonGlowTexture:SetVertexColor(1,0.26,0.26,0.50)
|
madcatzinc@13
|
84 elseif mode == 2 then
|
madcatzinc@0
|
85 MiniMapTexture:SetVertexColor(0.07,0.22,1,1)
|
madcatzinc@13
|
86 MiniMapGlowTexture:SetVertexColor(0.13,0.56,1,.75)
|
madcatzinc@13
|
87 OpenButtonTexture:SetVertexColor(0.07,0.22,1,0.75)
|
madcatzinc@13
|
88 OpenButtonGlowTexture:SetVertexColor(0.13,0.56,1,0.5)
|
madcatzinc@13
|
89 elseif mode == 3 then
|
madcatzinc@0
|
90 MiniMapTexture:SetVertexColor(0.52,0.08,0.89,1)
|
madcatzinc@13
|
91 MiniMapGlowTexture:SetVertexColor(0.67,0.31,0.85,.75)
|
madcatzinc@13
|
92 OpenButtonTexture:SetVertexColor(0.52,0.08,0.89,0.75)
|
madcatzinc@13
|
93 OpenButtonGlowTexture:SetVertexColor(0.67,0.31,0.85,0.5)
|
madcatzinc@0
|
94 end
|
madcatzinc@0
|
95 end
|
madcatzinc@0
|
96
|
madcatzinc@4
|
97 function CyborgMMO_GetSaveData()
|
madcatzinc@32
|
98 assert(VarsLoaded)
|
madcatzinc@32
|
99 if not CyborgMMO7SaveData then
|
madcatzinc@32
|
100 CyborgMMO7SaveData = {}
|
madcatzinc@0
|
101 end
|
madcatzinc@34
|
102 return CyborgMMO7SaveData
|
madcatzinc@0
|
103 end
|
madcatzinc@0
|
104
|
madcatzinc@51
|
105 function CyborgMMO_SetRatSaveData(objects)
|
madcatzinc@32
|
106 assert(VarsLoaded)
|
madcatzinc@54
|
107 local specIndex
|
madcatzinc@54
|
108 if Settings.PerSpecBindings then
|
madcatzinc@54
|
109 specIndex = GetActiveSpecGroup()
|
madcatzinc@54
|
110 else
|
madcatzinc@54
|
111 specIndex = 1
|
madcatzinc@54
|
112 end
|
madcatzinc@54
|
113 local ratData = {}
|
madcatzinc@36
|
114 for mode=1,RAT7.MODES do
|
madcatzinc@54
|
115 ratData[mode] = {}
|
madcatzinc@36
|
116 for button=1,RAT7.BUTTONS do
|
madcatzinc@51
|
117 if objects[mode][button] then
|
madcatzinc@54
|
118 ratData[mode][button] = objects[mode][button]:SaveData()
|
madcatzinc@34
|
119 end
|
madcatzinc@34
|
120 end
|
madcatzinc@34
|
121 end
|
madcatzinc@54
|
122 local saveData = CyborgMMO_GetSaveData()
|
madcatzinc@54
|
123 if not saveData.Rat then saveData.Rat = {} end
|
madcatzinc@54
|
124 saveData.Rat[specIndex] = ratData
|
madcatzinc@51
|
125 end
|
madcatzinc@51
|
126
|
madcatzinc@51
|
127 function CyborgMMO_GetRatSaveData()
|
madcatzinc@54
|
128 local specIndex
|
madcatzinc@54
|
129 if Settings.PerSpecBindings then
|
madcatzinc@54
|
130 specIndex = GetActiveSpecGroup()
|
madcatzinc@54
|
131 else
|
madcatzinc@54
|
132 specIndex = 1
|
madcatzinc@54
|
133 end
|
madcatzinc@54
|
134 CyborgMMO_DPrint("returning rat data for spec:", specIndex, GetActiveSpecGroup())
|
madcatzinc@54
|
135 local saveData = CyborgMMO_GetSaveData()
|
madcatzinc@54
|
136 return saveData.Rat and saveData.Rat[specIndex]
|
madcatzinc@0
|
137 end
|
madcatzinc@0
|
138
|
madcatzinc@35
|
139 local function GetSpellID(name)
|
madcatzinc@35
|
140 local link = GetSpellLink(name)
|
madcatzinc@35
|
141 if link then
|
madcatzinc@35
|
142 local id = link:match('spell:(%d+)|')
|
madcatzinc@35
|
143 if id then
|
madcatzinc@35
|
144 return tonumber(id)
|
madcatzinc@35
|
145 end
|
madcatzinc@35
|
146 end
|
madcatzinc@35
|
147 end
|
madcatzinc@35
|
148
|
madcatzinc@40
|
149 local KnownOldObjectTypes = {
|
madcatzinc@40
|
150 item = true,
|
madcatzinc@40
|
151 macro = true,
|
madcatzinc@40
|
152 spell = true,
|
madcatzinc@40
|
153 petaction = true,
|
madcatzinc@40
|
154 merchant = true,
|
madcatzinc@40
|
155 companion = true,
|
madcatzinc@40
|
156 equipmentset = true,
|
madcatzinc@40
|
157 callback = true,
|
madcatzinc@40
|
158 }
|
madcatzinc@40
|
159
|
madcatzinc@35
|
160 local function ConvertOldRatData(oldData)
|
madcatzinc@35
|
161 local newData = {}
|
madcatzinc@35
|
162 for mode,modeData in ipairs(oldData) do
|
madcatzinc@35
|
163 newData[mode] = {}
|
madcatzinc@35
|
164 for button,buttonData in ipairs(modeData) do
|
madcatzinc@35
|
165 CyborgMMO_DPrint("converting mode:", mode, "button:", button)
|
madcatzinc@35
|
166 local type = buttonData.Type
|
madcatzinc@35
|
167 if type=='item' then
|
madcatzinc@35
|
168 -- not possible, the WowObject 'Type' field was overwritten by the item type
|
madcatzinc@35
|
169 elseif type=='macro' then
|
madcatzinc@35
|
170 local name = buttonData.Name
|
madcatzinc@35
|
171 newData[mode][button] = {
|
madcatzinc@35
|
172 type = type,
|
madcatzinc@35
|
173 detail = name,
|
madcatzinc@35
|
174 }
|
madcatzinc@35
|
175 elseif type=='spell' then
|
madcatzinc@35
|
176 local id = GetSpellID(buttonData.Name)
|
madcatzinc@35
|
177 CyborgMMO_DPrint("converting spell:", buttonData.Name, id)
|
madcatzinc@35
|
178 if id then
|
madcatzinc@35
|
179 newData[mode][button] = {
|
madcatzinc@35
|
180 type = type,
|
madcatzinc@35
|
181 detail = id,
|
madcatzinc@35
|
182 }
|
madcatzinc@35
|
183 end
|
madcatzinc@35
|
184 elseif type=='petaction' then
|
madcatzinc@35
|
185 -- no longer supported
|
madcatzinc@35
|
186 elseif type=='merchant' then
|
madcatzinc@35
|
187 -- no longer supported
|
madcatzinc@35
|
188 elseif type=='companion' then
|
madcatzinc@35
|
189 local id = GetSpellID(buttonData.Name)
|
madcatzinc@35
|
190 CyborgMMO_DPrint("converting companion:", buttonData.Name, id)
|
madcatzinc@35
|
191 if id then
|
madcatzinc@35
|
192 newData[mode][button] = {
|
madcatzinc@35
|
193 type = type,
|
madcatzinc@35
|
194 detail = buttonData.Subdetail,
|
madcatzinc@35
|
195 subdetail = id,
|
madcatzinc@35
|
196 }
|
madcatzinc@35
|
197 end
|
madcatzinc@35
|
198 elseif type=='equipmentset' then
|
madcatzinc@35
|
199 CyborgMMO_DPrint("converting equipment set:", buttonData.Detail)
|
madcatzinc@35
|
200 newData[mode][button] = {
|
madcatzinc@35
|
201 type = type,
|
madcatzinc@35
|
202 detail = buttonData.Detail,
|
madcatzinc@35
|
203 }
|
madcatzinc@35
|
204 elseif type=='callback' then
|
madcatzinc@35
|
205 CyborgMMO_DPrint("converting callback:", buttonData.Detail)
|
madcatzinc@35
|
206 newData[mode][button] = {
|
madcatzinc@35
|
207 type = type,
|
madcatzinc@35
|
208 detail = buttonData.Detail,
|
madcatzinc@35
|
209 }
|
madcatzinc@40
|
210 elseif not KnownOldObjectTypes[type] then
|
madcatzinc@35
|
211 -- maybe it's an item type
|
madcatzinc@35
|
212 local id = buttonData.Detail
|
madcatzinc@35
|
213 local class = select(6, GetItemInfo(id)) -- :NOTE: this may fail if the item is not yet in the cache
|
madcatzinc@35
|
214 if class == type then
|
madcatzinc@35
|
215 CyborgMMO_DPrint("converting item:", id, type, class)
|
madcatzinc@35
|
216 newData[mode][button] = {
|
madcatzinc@35
|
217 type = "item",
|
madcatzinc@35
|
218 detail = id,
|
madcatzinc@35
|
219 }
|
madcatzinc@35
|
220 end
|
madcatzinc@35
|
221 else
|
madcatzinc@35
|
222 CyborgMMO_DPrint("cannot convert:", type)
|
madcatzinc@35
|
223 end
|
madcatzinc@35
|
224 end
|
madcatzinc@35
|
225 end
|
madcatzinc@35
|
226 return newData
|
madcatzinc@35
|
227 end
|
madcatzinc@35
|
228
|
madcatzinc@40
|
229 ------------------------------------------------------------------------------
|
madcatzinc@40
|
230
|
madcatzinc@40
|
231 local PreloadFrame
|
madcatzinc@40
|
232 local step_timeout = 1
|
madcatzinc@40
|
233 local total_timeout = 15
|
madcatzinc@40
|
234
|
madcatzinc@40
|
235 local function PreloadFrameUpdate(self, dt)
|
madcatzinc@40
|
236 self.step_timeout = self.step_timeout - dt
|
madcatzinc@40
|
237 self.total_timeout = self.total_timeout - dt
|
madcatzinc@40
|
238 if self.step_timeout < 0 then
|
madcatzinc@40
|
239 local items,pets = 0,0
|
madcatzinc@40
|
240 -- check items
|
madcatzinc@40
|
241 for itemID in pairs(self.itemIDs) do
|
madcatzinc@40
|
242 if GetItemInfo(itemID) then
|
madcatzinc@40
|
243 self.itemIDs[itemID] = nil
|
madcatzinc@40
|
244 else
|
madcatzinc@40
|
245 items = items + 1
|
madcatzinc@40
|
246 end
|
madcatzinc@40
|
247 end
|
madcatzinc@40
|
248 -- check pets
|
madcatzinc@40
|
249 for petID in pairs(self.petIDs) do
|
madcatzinc@40
|
250 if C_PetJournal.GetPetInfoByPetID(petID) then
|
madcatzinc@40
|
251 self.petIDs[petID] = nil
|
madcatzinc@40
|
252 else
|
madcatzinc@40
|
253 pets = pets + 1
|
madcatzinc@40
|
254 end
|
madcatzinc@40
|
255 end
|
madcatzinc@40
|
256 CyborgMMO_DPrint("PreloadFrameUpdate step", self.total_timeout, "items:", items, "pets:", pets)
|
madcatzinc@40
|
257 if self.total_timeout < 0 or next(self.itemIDs)==nil and next(self.petIDs)==nil then
|
madcatzinc@40
|
258 -- when done destroy the frame and throw an event for further loading
|
madcatzinc@40
|
259 self:Hide()
|
madcatzinc@40
|
260 self:SetParent(nil)
|
madcatzinc@40
|
261 PreloadFrame = nil
|
madcatzinc@41
|
262 CyborgMMO_Event("CYBORGMMO_ASYNC_DATA_LOADED")
|
madcatzinc@40
|
263 else
|
madcatzinc@40
|
264 self.step_timeout = step_timeout
|
madcatzinc@40
|
265 end
|
madcatzinc@40
|
266 end
|
madcatzinc@40
|
267 end
|
madcatzinc@40
|
268
|
madcatzinc@42
|
269 local function PreLoad(data)
|
madcatzinc@40
|
270 -- create ID sets to sync
|
madcatzinc@40
|
271 local itemIDs = {}
|
madcatzinc@40
|
272 local petIDs = {}
|
madcatzinc@58
|
273
|
madcatzinc@40
|
274 -- gather all needed IDs (and trigger sync while doing so)
|
madcatzinc@40
|
275 if data.Rat then
|
madcatzinc@54
|
276 for spec,specData in pairs(data.Rat) do
|
madcatzinc@54
|
277 for mode=1,RAT7.MODES do
|
madcatzinc@54
|
278 for button=1,RAT7.BUTTONS do
|
madcatzinc@54
|
279 local buttonData = specData[mode] and specData[mode][button]
|
madcatzinc@54
|
280 if buttonData then
|
madcatzinc@54
|
281 if buttonData.type=='item' then
|
madcatzinc@54
|
282 local itemID = buttonData.detail
|
madcatzinc@54
|
283 if not GetItemInfo(itemID) then
|
madcatzinc@54
|
284 itemIDs[itemID] = true
|
madcatzinc@54
|
285 end
|
madcatzinc@54
|
286 elseif buttonData.type=='battlepet' then
|
madcatzinc@54
|
287 local petID = buttonData.detail
|
madcatzinc@54
|
288 if not C_PetJournal.GetPetInfoByPetID(petID) then
|
madcatzinc@54
|
289 petIDs[petID] = true
|
madcatzinc@54
|
290 end
|
madcatzinc@40
|
291 end
|
madcatzinc@40
|
292 end
|
madcatzinc@40
|
293 end
|
madcatzinc@40
|
294 end
|
madcatzinc@40
|
295 end
|
madcatzinc@40
|
296 end
|
madcatzinc@40
|
297 -- gather IDs from old unconverted data (in case we need to convert it)
|
madcatzinc@40
|
298 if data[SaveName] and data[SaveName].Rat then
|
madcatzinc@40
|
299 for mode=1,RAT7.MODES do
|
madcatzinc@40
|
300 for button=1,RAT7.BUTTONS do
|
madcatzinc@40
|
301 local data = data[SaveName].Rat[mode][button]
|
madcatzinc@40
|
302 if data then
|
madcatzinc@40
|
303 -- items actually had their class overwrite the Type field
|
madcatzinc@40
|
304 if not KnownOldObjectTypes[data.Type] and type(data.Detail)=='number' then
|
madcatzinc@40
|
305 local itemID = data.Detail
|
madcatzinc@40
|
306 if not GetItemInfo(itemID) then
|
madcatzinc@40
|
307 itemIDs[itemID] = true
|
madcatzinc@40
|
308 end
|
madcatzinc@40
|
309 end
|
madcatzinc@40
|
310 end
|
madcatzinc@40
|
311 end
|
madcatzinc@40
|
312 end
|
madcatzinc@40
|
313 end
|
madcatzinc@58
|
314
|
madcatzinc@40
|
315 -- create frame for regular updates
|
madcatzinc@40
|
316 PreloadFrame = CreateFrame("Frame")
|
madcatzinc@40
|
317 PreloadFrame.itemIDs = itemIDs
|
madcatzinc@40
|
318 PreloadFrame.petIDs = petIDs
|
madcatzinc@40
|
319 PreloadFrame.total_timeout = total_timeout
|
madcatzinc@40
|
320 PreloadFrame.step_timeout = step_timeout
|
madcatzinc@40
|
321 PreloadFrame:SetScript("OnUpdate", PreloadFrameUpdate)
|
madcatzinc@40
|
322 PreloadFrame:Show()
|
madcatzinc@40
|
323 end
|
madcatzinc@40
|
324
|
madcatzinc@40
|
325 ------------------------------------------------------------------------------
|
madcatzinc@40
|
326
|
madcatzinc@41
|
327 function CyborgMMO_Event(event, ...)
|
madcatzinc@13
|
328 if event == "VARIABLES_LOADED" then
|
madcatzinc@20
|
329 VarsLoaded = true
|
madcatzinc@37
|
330 -- create root table if necessary
|
madcatzinc@37
|
331 if not CyborgMMO7SaveData then
|
madcatzinc@37
|
332 CyborgMMO7SaveData = {}
|
madcatzinc@37
|
333 end
|
jerome@65
|
334 -- cleanup the local mount cache
|
jerome@65
|
335 for mount in pairs(CyborgMMO_MountMap) do
|
jerome@65
|
336 CyborgMMO_LocalMountMap[mount] = nil
|
jerome@65
|
337 end
|
madcatzinc@40
|
338 PreLoad(CyborgMMO7SaveData)
|
madcatzinc@40
|
339 elseif event == "CYBORGMMO_ASYNC_DATA_LOADED" then
|
madcatzinc@40
|
340 AsyncDataLoaded = true
|
madcatzinc@35
|
341 -- convert old profile
|
madcatzinc@35
|
342 if CyborgMMO7SaveData[SaveName] and not CyborgMMO7SaveData.Settings then
|
madcatzinc@35
|
343 local oldData = CyborgMMO7SaveData[SaveName]
|
madcatzinc@35
|
344 CyborgMMO7SaveData = {}
|
madcatzinc@35
|
345 CyborgMMO7SaveData.Settings = oldData.Settings
|
madcatzinc@54
|
346 -- Rat is an array, with one child per talent spec/group
|
madcatzinc@54
|
347 CyborgMMO7SaveData.Rat = {}
|
madcatzinc@54
|
348 CyborgMMO7SaveData.Rat[1] = ConvertOldRatData(oldData.Rat)
|
madcatzinc@35
|
349 CyborgMMO7SaveData[SaveName] = oldData -- for now keep the data, we may have missed something in the conversion
|
madcatzinc@35
|
350 end
|
madcatzinc@13
|
351 elseif event == "PLAYER_ENTERING_WORLD" then
|
madcatzinc@20
|
352 EnteredWorld = true
|
madcatzinc@19
|
353 elseif event == "PLAYER_REGEN_DISABLED" then
|
madcatzinc@60
|
354 if CyborgMMO_IsOpen() then
|
madcatzinc@60
|
355 AutoClosed = true
|
madcatzinc@60
|
356 CyborgMMO_Close()
|
madcatzinc@60
|
357 end
|
madcatzinc@60
|
358 elseif event == "PLAYER_REGEN_ENABLED" then
|
madcatzinc@60
|
359 if AutoClosed then
|
madcatzinc@60
|
360 AutoClosed = false
|
madcatzinc@60
|
361 CyborgMMO_Open()
|
madcatzinc@60
|
362 end
|
madcatzinc@54
|
363 elseif event == "ACTIVE_TALENT_GROUP_CHANGED" then
|
madcatzinc@54
|
364 -- force a re-loading of bindings
|
madcatzinc@54
|
365 BindingsLoaded = false
|
madcatzinc@0
|
366 else
|
madcatzinc@15
|
367 CyborgMMO_DPrint("Event is "..tostring(event))
|
madcatzinc@13
|
368 end
|
madcatzinc@0
|
369
|
madcatzinc@0
|
370 -- Fire Loading if and only if the player is in the world and vars are loaded
|
madcatzinc@54
|
371 if not SettingsLoaded and VarsLoaded and AsyncDataLoaded and EnteredWorld then
|
madcatzinc@20
|
372 local data = CyborgMMO_GetSaveData()
|
madcatzinc@0
|
373
|
madcatzinc@21
|
374 Settings = data.Settings
|
madcatzinc@21
|
375 if not Settings then
|
madcatzinc@21
|
376 Settings = {}
|
madcatzinc@54
|
377 data.Settings = Settings
|
madcatzinc@54
|
378 end
|
madcatzinc@54
|
379 if Settings.MiniMapButton == nil then
|
madcatzinc@21
|
380 Settings.MiniMapButton = true
|
madcatzinc@54
|
381 end
|
madcatzinc@54
|
382 if Settings.CyborgButton == nil then
|
madcatzinc@21
|
383 Settings.CyborgButton = true
|
madcatzinc@54
|
384 end
|
madcatzinc@54
|
385 if Settings.PerSpecBindings == nil then
|
madcatzinc@54
|
386 Settings.PerSpecBindings = false
|
madcatzinc@21
|
387 end
|
madcatzinc@48
|
388 if not Settings.Cyborg then
|
madcatzinc@48
|
389 Settings.Cyborg = 0.75
|
madcatzinc@48
|
390 end
|
madcatzinc@48
|
391 if not Settings.Plugin then
|
madcatzinc@48
|
392 Settings.Plugin = 0.75
|
madcatzinc@48
|
393 end
|
madcatzinc@48
|
394 if not Settings.MiniMapButtonAngle then
|
madcatzinc@48
|
395 Settings.MiniMapButtonAngle = math.rad(150)
|
madcatzinc@48
|
396 end
|
madcatzinc@0
|
397
|
madcatzinc@21
|
398 -- Reload Slider values:
|
madcatzinc@21
|
399 CyborgMMO_SetOpenButtonSize(Settings.Cyborg)
|
madcatzinc@21
|
400 CyborgMMO_SetMainPageSize(Settings.Plugin)
|
madcatzinc@0
|
401
|
madcatzinc@21
|
402 CyborgMMO_SetMiniMapButton(Settings.MiniMapButton)
|
madcatzinc@48
|
403 CyborgMMO_MiniMapButtonReposition(Settings.MiniMapButtonAngle)
|
madcatzinc@21
|
404 CyborgMMO_SetCyborgHeadButton(Settings.CyborgButton)
|
madcatzinc@54
|
405 CyborgMMO_SetPerSpecBindings(Settings.PerSpecBindings)
|
madcatzinc@0
|
406
|
madcatzinc@59
|
407 -- assume we start with mode 1, it's the most likely
|
madcatzinc@59
|
408 CyborgMMO_MouseModeChange(1)
|
madcatzinc@59
|
409
|
madcatzinc@48
|
410 SettingsLoaded = true
|
madcatzinc@0
|
411 end
|
madcatzinc@54
|
412
|
madcatzinc@54
|
413 -- load data AFTER the settings, because PerSpecBindings may affect what's loaded
|
madcatzinc@54
|
414 if not BindingsLoaded and VarsLoaded and AsyncDataLoaded and EnteredWorld then
|
madcatzinc@54
|
415 CyborgMMO_RatPageModel:LoadData()
|
madcatzinc@54
|
416
|
madcatzinc@54
|
417 CyborgMMO_SetupModeCallbacks(1)
|
madcatzinc@54
|
418 CyborgMMO_SetupModeCallbacks(2)
|
madcatzinc@54
|
419 CyborgMMO_SetupModeCallbacks(3)
|
madcatzinc@54
|
420
|
madcatzinc@54
|
421 BindingsLoaded = true
|
madcatzinc@54
|
422 end
|
madcatzinc@0
|
423 end
|
madcatzinc@0
|
424
|
madcatzinc@4
|
425 function CyborgMMO_SetDefaultSettings()
|
madcatzinc@13
|
426 CyborgMMO_OpenButtonPageOpenMainForm:ClearAllPoints()
|
madcatzinc@13
|
427 CyborgMMO_MainPage:ClearAllPoints()
|
madcatzinc@13
|
428 CyborgMMO_OpenButtonPageOpenMainForm:SetPoint("LEFT", UIParent, "LEFT", 0, 0)
|
madcatzinc@13
|
429 CyborgMMO_MainPage:SetPoint("LEFT", UIParent, "LEFT", 0, 0)
|
madcatzinc@0
|
430
|
madcatzinc@13
|
431 CyborgMMO_SetOpenButtonSize(0.75)
|
madcatzinc@13
|
432 CyborgMMO_SetMainPageSize(0.75)
|
madcatzinc@13
|
433 CyborgMMO_SetMiniMapButton(true)
|
madcatzinc@13
|
434 CyborgMMO_SetCyborgHeadButton(true)
|
madcatzinc@0
|
435 end
|
madcatzinc@0
|
436
|
madcatzinc@61
|
437 function CyborgMMO_SetDefaultKeyBindings()
|
madcatzinc@61
|
438 for mode=1,RAT7.MODES do
|
madcatzinc@61
|
439 for button=1,RAT7.BUTTONS do
|
madcatzinc@61
|
440 local k = (mode - 1) * RAT7.BUTTONS + button
|
madcatzinc@61
|
441 CyborgMMO_ProfileKeyBindings[k] = CyborgMMO_DefaultKeyBindings[k]
|
madcatzinc@61
|
442 CyborgMMO_SetBindingButtonText(string.format("CyborgMMO_OptionPageRebindMouseRow%XMode%d", button, mode))
|
madcatzinc@61
|
443 end
|
madcatzinc@61
|
444 end
|
madcatzinc@61
|
445 end
|
madcatzinc@0
|
446
|
madcatzinc@4
|
447 function CyborgMMO_SetupModeCallbacks(modeNum)
|
madcatzinc@23
|
448 local fn = function()
|
madcatzinc@59
|
449 CyborgMMO_ModeDetected = true
|
madcatzinc@13
|
450 CyborgMMO_MouseModeChange(modeNum)
|
madcatzinc@18
|
451 CyborgMMO_RatPageModel:SetMode(modeNum)
|
madcatzinc@0
|
452 end
|
madcatzinc@0
|
453
|
madcatzinc@23
|
454 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(fn)
|
madcatzinc@16
|
455 SetOverrideBindingClick(parentFrame, true, CyborgMMO_Mode[modeNum], name, "LeftButton")
|
madcatzinc@0
|
456 end
|
madcatzinc@0
|
457
|
madcatzinc@4
|
458 function CyborgMMO_Loaded()
|
madcatzinc@13
|
459 CyborgMMO_MainPage:RegisterEvent("VARIABLES_LOADED")
|
madcatzinc@13
|
460 CyborgMMO_MainPage:RegisterEvent("PLAYER_ENTERING_WORLD")
|
madcatzinc@19
|
461 CyborgMMO_MainPage:RegisterEvent("PLAYER_REGEN_DISABLED")
|
madcatzinc@60
|
462 CyborgMMO_MainPage:RegisterEvent("PLAYER_REGEN_ENABLED")
|
madcatzinc@54
|
463 CyborgMMO_MainPage:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED")
|
madcatzinc@0
|
464 end
|
madcatzinc@0
|
465
|
madcatzinc@4
|
466 function CyborgMMO_Close()
|
madcatzinc@13
|
467 CyborgMMO_MainPage:Hide()
|
madcatzinc@0
|
468 end
|
madcatzinc@0
|
469
|
madcatzinc@4
|
470 function CyborgMMO_Open()
|
madcatzinc@13
|
471 CyborgMMO_MainPage:Show()
|
madcatzinc@13
|
472 CyborgMMO_RatQuickPage:Hide()
|
madcatzinc@0
|
473 end
|
madcatzinc@0
|
474
|
madcatzinc@4
|
475 function CyborgMMO_IsOpen()
|
jerome@66
|
476 return CyborgMMO_MainPage:IsVisible()
|
madcatzinc@0
|
477 end
|
madcatzinc@0
|
478
|
madcatzinc@4
|
479 function CyborgMMO_Toggle()
|
madcatzinc@13
|
480 if CyborgMMO_IsOpen() then
|
madcatzinc@13
|
481 CyborgMMO_Close()
|
madcatzinc@0
|
482 else
|
madcatzinc@13
|
483 CyborgMMO_Open()
|
madcatzinc@0
|
484 end
|
madcatzinc@0
|
485 end
|
madcatzinc@0
|
486
|
madcatzinc@15
|
487 function CyborgMMO_GetDebugFrame()
|
madcatzinc@15
|
488 for i=1,NUM_CHAT_WINDOWS do
|
madcatzinc@15
|
489 local windowName = GetChatWindowInfo(i);
|
madcatzinc@15
|
490 if windowName == "Debug" then
|
madcatzinc@15
|
491 return getglobal("ChatFrame" .. i)
|
madcatzinc@15
|
492 end
|
madcatzinc@15
|
493 end
|
madcatzinc@15
|
494 end
|
madcatzinc@15
|
495
|
madcatzinc@15
|
496 local log_prefix = "|cffff6666".."CyborgMMO".."|r:"
|
madcatzinc@15
|
497
|
madcatzinc@15
|
498 function CyborgMMO_DPrint(...)
|
madcatzinc@15
|
499 local debugframe = CyborgMMO_GetDebugFrame()
|
madcatzinc@15
|
500 if debugframe then
|
madcatzinc@15
|
501 local t = {log_prefix, ...}
|
madcatzinc@15
|
502 for i=1,select('#', ...)+1 do
|
madcatzinc@15
|
503 t[i] = tostring(t[i])
|
madcatzinc@15
|
504 end
|
madcatzinc@15
|
505 debugframe:AddMessage(table.concat(t, ' '))
|
madcatzinc@15
|
506 end
|
madcatzinc@0
|
507 end
|
madcatzinc@0
|
508
|
madcatzinc@4
|
509 function CyborgMMO_SetMainPageSize(percent)
|
madcatzinc@21
|
510 CyborgMMO_MainPage:SetScale(percent)
|
madcatzinc@21
|
511 CyborgMMO_OptionPagePluginSizeSlider:SetValue(percent)
|
madcatzinc@48
|
512 if SettingsLoaded then
|
madcatzinc@21
|
513 Settings.Plugin = percent
|
madcatzinc@0
|
514 end
|
madcatzinc@0
|
515 end
|
madcatzinc@0
|
516
|
madcatzinc@4
|
517 function CyborgMMO_SetOpenButtonSize(percent)
|
madcatzinc@21
|
518 CyborgMMO_OpenButtonPage:SetScale(percent)
|
madcatzinc@21
|
519 CyborgMMO_OptionPageCyborgSizeSlider:SetValue(percent)
|
madcatzinc@21
|
520 if SettingsLoaded then
|
madcatzinc@21
|
521 Settings.Cyborg = percent
|
madcatzinc@0
|
522 end
|
madcatzinc@0
|
523 end
|
madcatzinc@0
|
524
|
madcatzinc@21
|
525 function CyborgMMO_SetCyborgHeadButton(visible)
|
madcatzinc@21
|
526 if visible then
|
madcatzinc@21
|
527 CyborgMMO_OpenButtonPage:Show()
|
madcatzinc@0
|
528 else
|
madcatzinc@13
|
529 CyborgMMO_OpenButtonPage:Hide()
|
madcatzinc@0
|
530 end
|
madcatzinc@21
|
531 CyborgMMO_OptionPageCyborgButton:SetChecked(visible)
|
madcatzinc@21
|
532 if SettingsLoaded then
|
madcatzinc@54
|
533 Settings.CyborgButton = toboolean(visible)
|
madcatzinc@21
|
534 end
|
madcatzinc@0
|
535 end
|
madcatzinc@0
|
536
|
madcatzinc@21
|
537 function CyborgMMO_SetMiniMapButton(visible)
|
madcatzinc@21
|
538 if visible then
|
madcatzinc@46
|
539 CyborgMMO_MiniMapButton:Show()
|
madcatzinc@0
|
540 else
|
madcatzinc@46
|
541 CyborgMMO_MiniMapButton:Hide()
|
madcatzinc@0
|
542 end
|
madcatzinc@21
|
543 CyborgMMO_OptionPageMiniMapButton:SetChecked(visible)
|
madcatzinc@21
|
544 if SettingsLoaded then
|
madcatzinc@54
|
545 Settings.MiniMapButton = toboolean(visible)
|
madcatzinc@21
|
546 end
|
madcatzinc@0
|
547 end
|
madcatzinc@0
|
548
|
madcatzinc@54
|
549 function CyborgMMO_SetPerSpecBindings(perSpec)
|
madcatzinc@54
|
550 CyborgMMO_OptionPagePerSpecBindings:SetChecked(perSpec)
|
madcatzinc@54
|
551 if SettingsLoaded then
|
madcatzinc@54
|
552 Settings.PerSpecBindings = toboolean(perSpec)
|
madcatzinc@54
|
553 end
|
madcatzinc@54
|
554 -- reload bindings if necessary (AFTER altering the setting)
|
madcatzinc@54
|
555 if BindingsLoaded then
|
madcatzinc@54
|
556 CyborgMMO_RatPageModel:LoadData()
|
madcatzinc@54
|
557 end
|
madcatzinc@54
|
558 end
|
madcatzinc@54
|
559
|