madcatzinc@13
|
1 --~ Warcraft Plugin for Cyborg MMO7
|
madcatzinc@0
|
2 --~ Filename: WowObjects.lua
|
madcatzinc@0
|
3 --~ Description: Warcraft in game object models
|
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@4
|
21 CyborgMMO_WowObject = {
|
madcatzinc@0
|
22 new = function(type, detail, subdetail)
|
madcatzinc@13
|
23 local self = {}
|
madcatzinc@13
|
24 self.Texture = nil
|
madcatzinc@13
|
25 self.Name = "NoName"
|
madcatzinc@13
|
26 self.Type = type
|
madcatzinc@13
|
27 self.Detail = detail
|
madcatzinc@13
|
28 self.Subdetail = subdetail
|
madcatzinc@0
|
29
|
madcatzinc@0
|
30 -- Methods --
|
madcatzinc@0
|
31 self.DoAction = function()
|
madcatzinc@15
|
32 CyborgMMO_DPrint("Nothing To Do")
|
madcatzinc@0
|
33 end
|
madcatzinc@0
|
34
|
madcatzinc@0
|
35 self.Pickup = function()
|
madcatzinc@15
|
36 CyborgMMO_DPrint("Pick up Item")
|
madcatzinc@0
|
37 end
|
madcatzinc@0
|
38
|
madcatzinc@0
|
39 self.SetBinding = function(key)
|
madcatzinc@0
|
40 end
|
madcatzinc@0
|
41
|
madcatzinc@0
|
42 self.PlaySound = function()
|
madcatzinc@13
|
43 PlaySound("igAbilityIconDrop")
|
madcatzinc@0
|
44 end
|
madcatzinc@0
|
45
|
madcatzinc@13
|
46 return self
|
madcatzinc@0
|
47 end,
|
madcatzinc@0
|
48
|
madcatzinc@0
|
49 ClearBinding = function(key)
|
madcatzinc@24
|
50 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, nil)
|
madcatzinc@0
|
51 end,
|
madcatzinc@0
|
52
|
madcatzinc@0
|
53 -- Static Methods --
|
madcatzinc@0
|
54 Create = function(objectType, detail, subdetail)
|
madcatzinc@13
|
55 local object
|
madcatzinc@13
|
56 if objectType == "item" then
|
madcatzinc@13
|
57 object = CyborgMMO_WowItem.new(detail, subdetail)
|
madcatzinc@13
|
58 elseif objectType == "macro" then
|
madcatzinc@4
|
59 object = CyborgMMO_WowMacro.new(detail)
|
madcatzinc@13
|
60 elseif objectType == "spell" then
|
madcatzinc@13
|
61 object = CyborgMMO_WowSpell.new(objectType, detail, subdetail)
|
madcatzinc@13
|
62 elseif objectType == "petaction" then
|
madcatzinc@13
|
63 object = CyborgMMO_WowSpell.new(objectType, detail, subdetail)
|
madcatzinc@13
|
64 elseif objectType == "merchant" then
|
madcatzinc@13
|
65 object = CyborgMMO_SlotMerchant.new(detail, subdetail)
|
madcatzinc@13
|
66 elseif objectType == "companion" then
|
madcatzinc@13
|
67 object = CyborgMMO_WowCompanion.new(detail, subdetail)
|
madcatzinc@13
|
68 elseif objectType == "equipmentset" then
|
madcatzinc@13
|
69 object = CyborgMMO_WowEquipmentSet.new(objectType, detail, subdetail)
|
madcatzinc@13
|
70 elseif objectType == "callback" then
|
madcatzinc@13
|
71 object = CyborgMMO_WowCallback.new(detail)
|
madcatzinc@0
|
72 else
|
madcatzinc@13
|
73 object = CyborgMMO_WowObject.new(objectType, detail, subdetail)
|
madcatzinc@0
|
74 end
|
madcatzinc@0
|
75
|
madcatzinc@13
|
76 return object
|
madcatzinc@13
|
77 end,
|
madcatzinc@0
|
78 }
|
madcatzinc@0
|
79
|
madcatzinc@13
|
80 local CallbackCursor = nil
|
madcatzinc@0
|
81
|
madcatzinc@4
|
82 CyborgMMO_CallbackIcons = {
|
madcatzinc@0
|
83 new = function(self)
|
madcatzinc@13
|
84 self.point,
|
madcatzinc@13
|
85 self.relativeTo,
|
madcatzinc@13
|
86 self.relativePoint,
|
madcatzinc@13
|
87 self.xOfs,
|
madcatzinc@13
|
88 self.yOfs = self:GetPoint()
|
madcatzinc@13
|
89 -- self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs)
|
madcatzinc@13
|
90 self.strata = self:GetFrameStrata()
|
madcatzinc@4
|
91 self.wowObject = CyborgMMO_WowCallback.new(string.gsub(self:GetName(), self:GetParent():GetName(), "",1))
|
madcatzinc@13
|
92 self.wowObject.SetTextures(self)
|
madcatzinc@0
|
93 self:RegisterForDrag("LeftButton","RightButton")
|
madcatzinc@13
|
94 self:SetResizable(false)
|
madcatzinc@13
|
95
|
madcatzinc@0
|
96 self.OnClick = function()
|
madcatzinc@13
|
97 self.wowObject.DoAction()
|
madcatzinc@0
|
98 end
|
madcatzinc@13
|
99
|
madcatzinc@0
|
100 self.DragStart = function()
|
madcatzinc@13
|
101 self:SetMovable(true)
|
madcatzinc@13
|
102 self:StartMoving()
|
madcatzinc@13
|
103 self.isMoving = true
|
madcatzinc@0
|
104 self:SetFrameStrata("TOOLTIP")
|
madcatzinc@0
|
105 end
|
madcatzinc@13
|
106
|
madcatzinc@0
|
107 self.DragStop = function()
|
madcatzinc@13
|
108 self:SetFrameStrata(self.strata)
|
madcatzinc@13
|
109 self.isMoving = false
|
madcatzinc@13
|
110 self:SetMovable(false)
|
madcatzinc@13
|
111 self:StopMovingOrSizing()
|
madcatzinc@0
|
112
|
madcatzinc@13
|
113 self:ClearAllPoints()
|
madcatzinc@13
|
114 self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs)
|
madcatzinc@13
|
115 local x,y = GetCursorPosition()
|
madcatzinc@18
|
116 CyborgMMO_RatPageController:CallbackDropped(self)
|
madcatzinc@0
|
117 end
|
madcatzinc@13
|
118
|
madcatzinc@13
|
119 return self
|
madcatzinc@13
|
120 end,
|
madcatzinc@0
|
121 }
|
madcatzinc@0
|
122
|
madcatzinc@4
|
123 CyborgMMO_WowCallback = {
|
madcatzinc@0
|
124 new = function(callbackName)
|
madcatzinc@13
|
125 local self = CyborgMMO_WowObject.new("callback", callbackName, "")
|
madcatzinc@13
|
126 self.CallbackName = callbackName
|
madcatzinc@0
|
127 self.Texture = "Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga"
|
madcatzinc@13
|
128
|
madcatzinc@0
|
129 self.SetTextures = function(buttonFrame)
|
madcatzinc@15
|
130 CyborgMMO_DPrint("TextureName = "..self.CallbackName)
|
madcatzinc@0
|
131 buttonFrame:SetNormalTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga")
|
madcatzinc@0
|
132 buttonFrame:SetPushedTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Down.tga")
|
madcatzinc@0
|
133 buttonFrame:SetHighlightTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Over.tga")
|
madcatzinc@0
|
134 end
|
madcatzinc@13
|
135
|
madcatzinc@0
|
136 self.DoAction = function()
|
madcatzinc@23
|
137 local action = CyborgMMO_CallbackFactory:GetCallback(self.CallbackName)
|
madcatzinc@15
|
138 CyborgMMO_DPrint("calling callback:- "..self.CallbackName)
|
madcatzinc@13
|
139 action()
|
madcatzinc@0
|
140 end
|
madcatzinc@13
|
141
|
madcatzinc@0
|
142 self.PickupCallback = function()
|
madcatzinc@13
|
143 local slot = nil
|
madcatzinc@18
|
144 local observers = CyborgMMO_RatPageModel:GetAllObservers()
|
madcatzinc@13
|
145 for i=1,#observers do
|
madcatzinc@13
|
146 if MouseIsOver(observers[i]) then
|
madcatzinc@13
|
147 slot = observers[i]
|
madcatzinc@13
|
148 break
|
madcatzinc@0
|
149 end
|
madcatzinc@0
|
150 end
|
madcatzinc@0
|
151 slot:SetNormalTexture(slot.UnCheckedTexture)
|
madcatzinc@0
|
152 end
|
madcatzinc@0
|
153
|
madcatzinc@0
|
154 self.ClickHandler = function(self, button, down)
|
madcatzinc@15
|
155 CyborgMMO_DPrint("click handler")
|
madcatzinc@13
|
156 CallbackCursor:StopMoving()
|
madcatzinc@13
|
157 CallbackCursor:Hide()
|
madcatzinc@0
|
158 end
|
madcatzinc@13
|
159
|
madcatzinc@0
|
160 self.Pickup = function()
|
madcatzinc@0
|
161 self.PlaySound()
|
madcatzinc@13
|
162 ClearCursor()
|
madcatzinc@13
|
163 self.PickupCallback()
|
madcatzinc@13
|
164 end
|
madcatzinc@0
|
165
|
madcatzinc@0
|
166 self.SetBinding = function(key)
|
madcatzinc@23
|
167 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(self.DoAction)
|
madcatzinc@23
|
168 SetOverrideBindingClick(CyborgMMO_CallbackFactory.Frame, true, key, name, "LeftButton")
|
madcatzinc@0
|
169 end
|
madcatzinc@13
|
170
|
madcatzinc@13
|
171 return self
|
madcatzinc@13
|
172 end,
|
madcatzinc@0
|
173 }
|
madcatzinc@0
|
174
|
madcatzinc@0
|
175 -- WowItem Class --
|
madcatzinc@4
|
176 CyborgMMO_WowItem = {
|
madcatzinc@0
|
177 new = function(number, itemID)
|
madcatzinc@13
|
178 local self = CyborgMMO_WowObject.new("item", number, itemID) -- base class
|
madcatzinc@0
|
179 -- Set all the item info. --
|
madcatzinc@0
|
180 self.Name,
|
madcatzinc@0
|
181 self.Link,
|
madcatzinc@0
|
182 self.Rarity,
|
madcatzinc@0
|
183 self.Level,
|
madcatzinc@0
|
184 self.MinLevel,
|
madcatzinc@0
|
185 self.Type,
|
madcatzinc@0
|
186 self.SubType,
|
madcatzinc@0
|
187 self.StackCount,
|
madcatzinc@0
|
188 self.EquipLoc,
|
madcatzinc@0
|
189 self.Texture,
|
madcatzinc@13
|
190 self.SellPrice = GetItemInfo(itemID)
|
madcatzinc@0
|
191
|
madcatzinc@0
|
192 -- override method --
|
madcatzinc@0
|
193 self.DoAction = function()
|
madcatzinc@15
|
194 CyborgMMO_DPrint("Use Item")
|
madcatzinc@0
|
195 end
|
madcatzinc@0
|
196
|
madcatzinc@0
|
197 -- override method --
|
madcatzinc@0
|
198 self.Pickup = function()
|
madcatzinc@0
|
199 self.PlaySound()
|
madcatzinc@13
|
200 ClearCursor()
|
madcatzinc@13
|
201 -- SetCursor(self.Texture)
|
madcatzinc@13
|
202 return PickupItem(self.Link)
|
madcatzinc@0
|
203 end
|
madcatzinc@0
|
204
|
madcatzinc@0
|
205 self.SetBinding = function(key)
|
madcatzinc@23
|
206 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, "ITEM "..self.Name)
|
madcatzinc@0
|
207 end
|
madcatzinc@0
|
208
|
madcatzinc@13
|
209 return self
|
madcatzinc@0
|
210 end,
|
madcatzinc@0
|
211 }
|
madcatzinc@0
|
212
|
madcatzinc@0
|
213 -- WowSpell Class --
|
madcatzinc@4
|
214 CyborgMMO_WowSpell = {
|
madcatzinc@0
|
215 new = function(type, spellbookID, spellbook)
|
madcatzinc@4
|
216 local self = CyborgMMO_WowObject.new(type, spellbookID, spellbook) -- base class
|
madcatzinc@13
|
217 self.SpellbookID = spellbookID
|
madcatzinc@13
|
218 self.Spellbook = spellbook
|
madcatzinc@13
|
219 self.Name,self.Rank = GetSpellBookItemName(spellbookID, spellbook)
|
madcatzinc@13
|
220 self.Texture = GetSpellBookItemTexture(spellbookID, spellbook)
|
madcatzinc@13
|
221 self.Type = type
|
madcatzinc@0
|
222
|
madcatzinc@0
|
223
|
madcatzinc@0
|
224 -- override method --
|
madcatzinc@0
|
225 self.DoAction = function()
|
madcatzinc@15
|
226 CyborgMMO_DPrint("Cast Spell")
|
madcatzinc@0
|
227 end
|
madcatzinc@0
|
228
|
madcatzinc@0
|
229 -- override method --
|
madcatzinc@0
|
230 self.Pickup = function()
|
madcatzinc@0
|
231 self.PlaySound()
|
madcatzinc@13
|
232 ClearCursor()
|
madcatzinc@13
|
233 -- SetCursor(self.Texture)
|
madcatzinc@13
|
234 return PickupSpellBookItem(self.SpellbookID, self.Spellbook)
|
madcatzinc@0
|
235 end
|
madcatzinc@0
|
236
|
madcatzinc@0
|
237 self.SetBinding = function(key)
|
madcatzinc@15
|
238 CyborgMMO_DPrint("Binding to key "..key)
|
madcatzinc@0
|
239 self.Key = key
|
madcatzinc@23
|
240 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, self.Key, self.Type.." "..self.Name)
|
madcatzinc@0
|
241 end
|
madcatzinc@0
|
242
|
madcatzinc@13
|
243 return self
|
madcatzinc@0
|
244 end,
|
madcatzinc@0
|
245 }
|
madcatzinc@0
|
246
|
madcatzinc@0
|
247 -- WowMacro Class --
|
madcatzinc@4
|
248 CyborgMMO_WowMacro = {
|
madcatzinc@0
|
249 new = function(index)
|
madcatzinc@13
|
250 local self = CyborgMMO_WowObject.new("macro", index, nil) -- base class
|
madcatzinc@0
|
251 -- Set all the item info. --
|
madcatzinc@0
|
252 self.Name,
|
madcatzinc@0
|
253 self.Texture,
|
madcatzinc@0
|
254 self.Body,
|
madcatzinc@13
|
255 self.isLocal = GetMacroInfo(index)
|
madcatzinc@13
|
256 self.Index = index
|
madcatzinc@0
|
257
|
madcatzinc@0
|
258 -- override method --
|
madcatzinc@0
|
259 self.DoAction = function()
|
madcatzinc@15
|
260 CyborgMMO_DPrint("Use Item")
|
madcatzinc@0
|
261 end
|
madcatzinc@0
|
262
|
madcatzinc@0
|
263 -- override method --
|
madcatzinc@0
|
264 self.Pickup = function()
|
madcatzinc@0
|
265 self.PlaySound()
|
madcatzinc@13
|
266 ClearCursor()
|
madcatzinc@13
|
267 -- SetCursor(self.Texture)
|
madcatzinc@13
|
268 return PickupMacro(self.Index)
|
madcatzinc@0
|
269 end
|
madcatzinc@0
|
270
|
madcatzinc@0
|
271 self.SetBinding = function(key)
|
madcatzinc@13
|
272 self.Key = key
|
madcatzinc@23
|
273 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, "MACRO "..self.Index)
|
madcatzinc@0
|
274 end
|
madcatzinc@0
|
275
|
madcatzinc@13
|
276 return self
|
madcatzinc@13
|
277 end,
|
madcatzinc@0
|
278 }
|
madcatzinc@0
|
279
|
madcatzinc@0
|
280 -- WowCompanion Class --
|
madcatzinc@4
|
281 CyborgMMO_WowCompanion = {
|
madcatzinc@0
|
282 new = function(index, SubType)
|
madcatzinc@13
|
283 local self = CyborgMMO_WowObject.new("companion", index, SubType) -- base class
|
madcatzinc@0
|
284 -- Set all the item info. --
|
madcatzinc@13
|
285 self.Id,
|
madcatzinc@13
|
286 self.Name,
|
madcatzinc@13
|
287 self.SpellId,
|
madcatzinc@13
|
288 self.Texture,
|
madcatzinc@13
|
289 self.isSummoned = GetCompanionInfo(SubType, index)
|
madcatzinc@13
|
290 self.SubType = SubType
|
madcatzinc@13
|
291 self.index = index
|
madcatzinc@0
|
292 -- override method --
|
madcatzinc@0
|
293 self.DoAction = function()
|
madcatzinc@13
|
294 if self.SubType == "MOUNT" and IsMounted() then
|
madcatzinc@13
|
295 Dismount()
|
madcatzinc@0
|
296 else
|
madcatzinc@13
|
297 CallCompanion(self.SubType, self.index)
|
madcatzinc@0
|
298 end
|
madcatzinc@0
|
299 end
|
madcatzinc@0
|
300
|
madcatzinc@0
|
301 -- override method --
|
madcatzinc@0
|
302 self.Pickup = function()
|
madcatzinc@0
|
303 self.PlaySound()
|
madcatzinc@13
|
304 return PickupCompanion(self.SubType, self.index)
|
madcatzinc@0
|
305 end
|
madcatzinc@0
|
306
|
madcatzinc@0
|
307 self.SetBinding = function(key)
|
madcatzinc@0
|
308 self.Key = key
|
madcatzinc@23
|
309 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(self.DoAction)
|
madcatzinc@16
|
310 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
|
madcatzinc@13
|
311 -- SetOverrideBinding(hiddenModeChanger, true, key, "MACRO "..self.Index)
|
madcatzinc@0
|
312 end
|
madcatzinc@0
|
313
|
madcatzinc@13
|
314 return self
|
madcatzinc@0
|
315 end,
|
madcatzinc@0
|
316 }
|
madcatzinc@0
|
317
|
madcatzinc@0
|
318 -- WowMerchant Class --
|
madcatzinc@4
|
319 CyborgMMO_WowMerchant = {
|
madcatzinc@0
|
320 new = function(index)
|
madcatzinc@13
|
321 local self = CyborgMMO_WowObject.new("macro", index, nil) -- base class
|
madcatzinc@0
|
322 -- Set all the item info. --
|
madcatzinc@0
|
323 self.Name,
|
madcatzinc@0
|
324 self.Texture,
|
madcatzinc@0
|
325 self.Price,
|
madcatzinc@0
|
326 self.Quantity,
|
madcatzinc@0
|
327 self.NumAvailable,
|
madcatzinc@0
|
328 self.IsUsable,
|
madcatzinc@13
|
329 self.ExtendedCost = GetMerchantItemInfo(index)
|
madcatzinc@13
|
330 self.Index = index
|
madcatzinc@0
|
331
|
madcatzinc@0
|
332 -- override method --
|
madcatzinc@0
|
333 self.DoAction = function()
|
madcatzinc@15
|
334 CyborgMMO_DPrint("Use Item")
|
madcatzinc@0
|
335 end
|
madcatzinc@0
|
336
|
madcatzinc@0
|
337 -- override method --
|
madcatzinc@0
|
338 self.Pickup = function()
|
madcatzinc@0
|
339 self.PlaySound()
|
madcatzinc@13
|
340 ClearCursor()
|
madcatzinc@13
|
341 -- SetCursor(self.Texture)
|
madcatzinc@13
|
342 return PickupMerchantItem(self.Index)
|
madcatzinc@0
|
343 end
|
madcatzinc@0
|
344
|
madcatzinc@0
|
345 self.SetBinding = function(key)
|
madcatzinc@0
|
346 self.Key = key
|
madcatzinc@23
|
347 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, "MERCHANT "..self.Index)
|
madcatzinc@0
|
348 end
|
madcatzinc@0
|
349
|
madcatzinc@13
|
350 return self
|
madcatzinc@13
|
351 end,
|
madcatzinc@0
|
352 }
|
madcatzinc@0
|
353
|
madcatzinc@0
|
354 -- WowEquipmentSet Class --
|
madcatzinc@4
|
355 CyborgMMO_WowEquipmentSet = {
|
madcatzinc@0
|
356 new = function(objectType, name, index)
|
madcatzinc@13
|
357 local self = CyborgMMO_WowObject.new(objectType, name, index) -- base class
|
madcatzinc@0
|
358 -- Set all the item info. --
|
madcatzinc@14
|
359 local texture,lessIndex = GetEquipmentSetInfoByName(name)
|
madcatzinc@13
|
360 self.Texture = "Interface\\Icons\\"..texture
|
madcatzinc@0
|
361 self.Name = name
|
madcatzinc@13
|
362 self.Index = lessIndex + 1
|
madcatzinc@0
|
363
|
madcatzinc@0
|
364 -- override method --
|
madcatzinc@0
|
365 self.DoAction = function()
|
madcatzinc@13
|
366 UseEquipmentSet(self.Name)
|
madcatzinc@0
|
367 end
|
madcatzinc@0
|
368
|
madcatzinc@0
|
369 -- override method --
|
madcatzinc@0
|
370 self.Pickup = function()
|
madcatzinc@0
|
371 self.PlaySound()
|
madcatzinc@13
|
372 ClearCursor()
|
madcatzinc@13
|
373 -- SetCursor(self.Texture)
|
madcatzinc@13
|
374 return PickupEquipmentSetByName(self.Name)
|
madcatzinc@0
|
375 end
|
madcatzinc@0
|
376
|
madcatzinc@0
|
377 self.SetBinding = function(key)
|
madcatzinc@0
|
378 self.Key = key
|
madcatzinc@23
|
379 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(self.DoAction);
|
madcatzinc@16
|
380 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
|
madcatzinc@0
|
381 end
|
madcatzinc@0
|
382
|
madcatzinc@13
|
383 return self
|
madcatzinc@13
|
384 end,
|
madcatzinc@0
|
385 }
|
madcatzinc@0
|
386
|
madcatzinc@0
|
387 -- End Of WowObjects --
|