comparison Constants.lua @ 57:01b63b8ed811 v21

total rewrite to version 21
author yellowfive
date Fri, 05 Jun 2015 11:05:15 -0700
parents
children ee701ce45354
comparison
equal deleted inserted replaced
56:75431c084aa0 57:01b63b8ed811
1 local Amr = LibStub("AceAddon-3.0"):GetAddon("AskMrRobot")
2 local L = LibStub("AceLocale-3.0"):GetLocale("AskMrRobot", true)
3
4 -- min import version that we will read from the website
5 Amr.MIN_IMPORT_VERSION = 20
6
7 -- min addon version that we will support for inter-addon communication for e.g. the team optimizer
8 Amr.MIN_ADDON_VERSION = 23
9
10 -- import some constants from the serializer for convenience
11 Amr.ChatPrefix = Amr.Serializer.ChatPrefix
12 Amr.RegionNames = Amr.Serializer.RegionNames
13 Amr.SlotIds = Amr.Serializer.SlotIds
14 Amr.SpecIds = Amr.Serializer.SpecIds
15 Amr.ClassIds = Amr.Serializer.ClassIds
16 Amr.ProfessionIds = Amr.Serializer.ProfessionIds
17 Amr.RaceIds = Amr.Serializer.RaceIds
18 Amr.FactionIds = Amr.Serializer.FactionIds
19 Amr.InstanceIds = Amr.Serializer.InstanceIds
20 Amr.SupportedInstanceIds = Amr.Serializer.SupportedInstanceIds
21 Amr.ParseItemLink = Amr.Serializer.ParseItemLink
22 Amr.IsSupportedInstanceId = Amr.Serializer.IsSupportedInstanceId
23 Amr.IsSupportedInstance = Amr.Serializer.IsSupportedInstance
24 Amr.SetTokenIds = Amr.Serializer.SetTokenIds
25
26 -- map of slot ID to display text
27 Amr.SlotDisplayText = {
28 [1] = _G["HEADSLOT"],
29 [2] = _G["NECKSLOT"],
30 [3] = _G["SHOULDERSLOT"],
31 [5] = _G["CHESTSLOT"],
32 [6] = _G["WAISTSLOT"],
33 [7] = _G["LEGSSLOT"],
34 [8] = _G["FEETSLOT"],
35 [9] = _G["WRISTSLOT"],
36 [10] = _G["HANDSSLOT"],
37 [11] = _G["FINGER0SLOT"] .. " 1",
38 [12] = _G["FINGER1SLOT"] .. " 2",
39 [13] = _G["TRINKET0SLOT"] .. " 1",
40 [14] = _G["TRINKET1SLOT"] .. " 2",
41 [15] = _G["BACKSLOT"],
42 [16] = _G["MAINHANDSLOT"],
43 [17] = _G["SECONDARYHANDSLOT"]
44 }
45
46 Amr.SlotEnumDisplayText = {
47 Head = _G["HEADSLOT"],
48 Neck = _G["NECKSLOT"],
49 Shoulder = _G["SHOULDERSLOT"],
50 Chest = _G["CHESTSLOT"],
51 Waist = _G["WAISTSLOT"],
52 Legs = _G["LEGSSLOT"],
53 Feet = _G["FEETSLOT"],
54 Wrist = _G["WRISTSLOT"],
55 Hands = _G["HANDSSLOT"],
56 Finger1 = _G["FINGER0SLOT"],
57 Finger2 = _G["FINGER0SLOT"],
58 Trinket1 = _G["TRINKET0SLOT"],
59 Trinket2 = _G["TRINKET0SLOT"],
60 Back = _G["BACKSLOT"],
61 MainHand = _G["MAINHANDSLOT"],
62 OffHand = _G["SECONDARYHANDSLOT"]
63 }
64
65 Amr.SpecIcons = {
66 [1] = "spell_deathknight_bloodpresence", -- DeathKnightBlood
67 [2] = "spell_deathknight_frostpresence", -- DeathKnightFrost
68 [3] = "spell_deathknight_unholypresence", -- DeathKnightUnholy
69 [4] = "spell_nature_starfall", -- DruidBalance
70 [5] = "ability_druid_catform", -- DruidFeral
71 [6] = "ability_racial_bearform", -- DruidGuardian
72 [7] = "spell_nature_healingtouch", -- DruidRestoration
73 [8] = "ability_hunter_bestialdiscipline", -- HunterBeastMastery
74 [9] = "ability_hunter_focusedaim", -- HunterMarksmanship
75 [10] = "ability_hunter_camouflage", -- HunterSurvival
76 [11] = "spell_holy_magicalsentry", -- MageArcane
77 [12] = "spell_fire_firebolt02", -- MageFire
78 [13] = "spell_frost_frostbolt02", -- MageFrost
79 [14] = "spell_monk_brewmaster_spec", -- MonkBrewmaster
80 [15] = "spell_monk_mistweaver_spec", -- MonkMistweaver
81 [16] = "spell_monk_windwalker_spec", -- MonkWindwalker
82 [17] = "spell_holy_holybolt", -- PaladinHoly
83 [18] = "ability_paladin_shieldofthetemplar", -- PaladinProtection
84 [19] = "spell_holy_auraoflight", -- PaladinRetribution
85 [20] = "spell_holy_powerwordshield", -- PriestDiscipline
86 [21] = "spell_holy_guardianspirit", -- PriestHoly
87 [22] = "spell_shadow_shadowwordpain", -- PriestShadow
88 [23] = "ability_rogue_eviscerate", -- RogueAssassination
89 [24] = "ability_backstab", -- RogueCombat
90 [25] = "ability_stealth", -- RogueSubtlety
91 [26] = "spell_nature_lightning", -- ShamanElemental
92 [27] = "spell_nature_lightningshield", -- ShamanEnhancement
93 [28] = "spell_nature_magicimmunity", -- ShamanRestoration
94 [29] = "spell_shadow_deathcoil", -- WarlockAffliction
95 [30] = "spell_shadow_metamorphosis", -- WarlockDemonology
96 [31] = "spell_shadow_rainoffire", -- WarlockDestruction
97 [32] = "ability_warrior_savageblow", -- WarriorArms
98 [33] = "ability_warrior_innerrage", -- WarriorFury
99 [34] = "ability_warrior_defensivestance", -- WarriorProtection
100 [38] = "ability_warrior_defensivestance", -- WarriorProtection, used for special subspec handling
101 [39] = "spell_warrior_gladiatorstance" -- WarriorProtectionGlad, used for special subspec handling
102 }
103
104 -- instance IDs ordered in preferred display order
105 Amr.InstanceIdsOrdered = { 1205, 1228 }
106
107 Amr.Difficulties = {
108 Lfr = 17,
109 Normal = 14,
110 Heroic = 15,
111 Mythic = 16
112 }
113
114 -- get the game's spec id from the AMR spec id
115 function Amr.GetGameSpecId(specId)
116 for k, v in pairs(Amr.SpecIds) do
117 if v == specId then return k end
118 end
119 return nil
120 end
121
122
123 ------------------------------------------------------------------------------------------
124 -- Item Methods
125 ------------------------------------------------------------------------------------------
126
127 -- item link format: |cffa335ee|Hitem:itemID:enchant:gem1:gem2:gem3:gem4:suffixID:uniqueID:level:upgradeId:instanceDifficultyID:numBonusIDs:bonusID1:bonusID2...|h[item name]|h|r
128
129 function Amr.CreateItemLink(itemObj)
130
131 if itemObj == nil or itemObj.id == nil or itemObj.id == 0 then return nil end
132
133 local parts = {}
134 table.insert(parts, "item")
135 table.insert(parts, itemObj.id)
136 table.insert(parts, itemObj.enchantId)
137 table.insert(parts, itemObj.gemIds[1])
138 table.insert(parts, itemObj.gemIds[2])
139 table.insert(parts, itemObj.gemIds[3])
140 table.insert(parts, itemObj.gemIds[4])
141
142 if itemObj.suffixId == 0 then
143 table.insert(parts, 0)
144 else
145 table.insert(parts, -math.abs(itemObj.suffixId))
146 end
147
148 table.insert(parts, 0)
149 table.insert(parts, UnitLevel("player"))
150 table.insert(parts, itemObj.upgradeId)
151 table.insert(parts, 0)
152
153 if itemObj.bonusIds then
154 table.insert(parts, #itemObj.bonusIds)
155 for i,v in ipairs(itemObj.bonusIds) do
156 table.insert(parts, v)
157 end
158 end
159
160 return table.concat(parts, ":")
161 end
162
163 -- a unique ID useful for determining if a player has an item equipped or not
164 function Amr.GetItemUniqueId(item, noUpgrade)
165 if item == nil then return "" end
166 local ret = item.id .. ""
167 if item.bonusIds then
168 for i = 1, #item.bonusIds do
169 ret = ret .. "b" .. item.bonusIds[i]
170 end
171 end
172 if item.suffixId ~= 0 then
173 ret = ret .. "s" .. item.suffixId
174 end
175 if not noUpgrade and item.upgradeId ~= 0 then
176 ret = ret .. "u" .. item.upgradeId
177 end
178 return ret
179 end
180
181 -- the server event for getting item info does not specify which item it just fetched... have to track manually
182 local _pendingItemIds = {}
183
184 -- helper for getting item information, which is not always guaranteed to be loaded into memory
185 function Amr.GetItemInfo(itemIdOrLinkOrName, callback, customArg)
186 if not itemIdOrLinkOrName then
187 callback(customArg)
188 return
189 end
190
191 -- see if we can get the information immediately
192 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemIdOrLinkOrName)
193 if name then
194 callback(customArg, name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice)
195 return
196 end
197
198 -- get the list of registered callbacks for this particular item
199 local list = _pendingItemIds[itemIdOrLinkOrName]
200 -- if there was a list, then just add the callback to the list
201 if list then
202 table.insert(list, { Callback = callback, Arg = customArg })
203 else
204 -- there wasn't a list, so make a new one with this callback
205 _pendingItemIds[itemIdOrLinkOrName] = { { Callback = callback, Arg = customArg } }
206 end
207 end
208
209 Amr:AddEventHandler("GET_ITEM_INFO_RECEIVED", function()
210 -- go through all unresolved items since we don't know which one was just resolved
211 for itemId, callbacks in pairs(_pendingItemIds) do
212 -- attempt to get the item info again, remove from pending list if we find it
213 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemId)
214 if name then
215 _pendingItemIds[itemId] = nil
216
217 -- call each callback
218 for i = 1, #callbacks do
219 callbacks[i].Callback(callbacks[i].Arg, name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice)
220 end
221 end
222 end
223 end)