comparison amr-constants.lua @ 17:e77e01abce98

Warlords of Draenor pre-patch
author Adam tegen <adam.tegen@gmail.com>
date Mon, 13 Oct 2014 21:28:32 -0500
parents
children eca0f3b6d141
comparison
equal deleted inserted replaced
16:9793e8b683d2 17:e77e01abce98
1 local _, AskMrRobot = ...
2 local L = AskMrRobot.L;
3
4 -- item link format: |cffa335ee|Hitem:itemID:enchant:gem1:gem2:gem3:gem4:suffixID:uniqueID:level:upgradeId:instanceDifficultyID:numBonusIDs:bonusID1:bonusID2...|h[item name]|h|r
5
6 -- get an object with all of the parts fo the item link format that we care about
7 function AskMrRobot.parseItemLink(itemLink)
8 if not itemLink then return nil end
9
10 local str = string.match(itemLink, "|Hitem:([\-%d:]+)|")
11 if not str then return nil end
12
13 local parts = { strsplit(":", str) }
14
15 local item = {}
16 item.id = tonumber(parts[1])
17 item.enchantId = tonumber(parts[2])
18 item.gemIds = { tonumber(parts[3]), tonumber(parts[4]), tonumber(parts[5]), tonumber(parts[6]) }
19 item.suffixId = math.abs(tonumber(parts[7])) -- convert suffix to positive number, that's what we use in our code
20 --item.uniqueId = tonumber(parts[8])
21 --item.level = tonumber(parts[9])
22 item.upgradeId = tonumber(parts[10])
23 --item.difficultyId = tonumber(parts[11])
24
25 local numBonuses = tonumber(parts[12])
26 if numBonuses > 0 then
27 item.bonusIds = {}
28 for i = 13, 12 + numBonuses do
29 table.insert(item.bonusIds, tonumber(parts[i]))
30 end
31 end
32
33 return item
34 end
35
36 -- convenience to get just the item id (or 0 if not a valid link) from an item link
37 function AskMrRobot.getItemIdFromLink(itemLink)
38 if not itemLink then return 0 end
39 local parts = { strsplit(":", itemLink) }
40 local id = tonumber(parts[2])
41 return (id and id ~= 0 and id or 0)
42 end
43
44 function AskMrRobot.getItemUniqueId(item, noUpgrade)
45 if item == nil then return "" end
46 local ret = item.id .. ""
47 if item.bonusIds then
48 for i = 1, #item.bonusIds do
49 ret = ret .. "b" .. item.bonusIds[i]
50 end
51 end
52 if item.suffixId ~= 0 then
53 ret = ret .. "s" .. item.suffixId
54 end
55 if not noUpgrade and item.upgradeId ~= 0 then
56 ret = ret .. "u" .. item.upgradeId
57 end
58 return ret
59 end
60
61 AskMrRobot.instanceIds = {
62 HeartOfFear = 1009,
63 MogushanVaults = 1008,
64 SiegeOfOrgrimmar = 1136,
65 TerraceOfEndlessSpring = 996,
66 ThroneOfThunder = 1098
67 }
68
69 -- instances that we currently support logging for
70 AskMrRobot.supportedInstanceIds = {
71 [1136] = true
72 }
73
74 -- returns true if currently in a supported instance
75 function AskMrRobot.IsSupportedInstance()
76
77 local zone, _, difficultyIndex, _, _, _, _, instanceMapID = GetInstanceInfo()
78 if AskMrRobot.supportedInstanceIds[tonumber(instanceMapID)] then
79 return true
80 else
81 return false
82 end
83 end
84
85 AskMrRobot.classIds = {
86 ["NONE"] = 0,
87 ["DEATHKNIGHT"] = 1,
88 ["DRUID"] = 2,
89 ["HUNTER"] = 3,
90 ["MAGE"] = 4,
91 ["MONK"] = 5,
92 ["PALADIN"] = 6,
93 ["PRIEST"] = 7,
94 ["ROGUE"] = 8,
95 ["SHAMAN"] = 9,
96 ["WARLOCK"] = 10,
97 ["WARRIOR"] = 11,
98 }
99
100 AskMrRobot.professionIds = {
101 ["None"] = 0,
102 ["Mining"] = 1,
103 ["Skinning"] = 2,
104 ["Herbalism"] = 3,
105 ["Enchanting"] = 4,
106 ["Jewelcrafting"] = 5,
107 ["Engineering"] = 6,
108 ["Blacksmithing"] = 7,
109 ["Leatherworking"] = 8,
110 ["Inscription"] = 9,
111 ["Tailoring"] = 10,
112 ["Alchemy"] = 11,
113 ["Fishing"] = 12,
114 ["Cooking"] = 13,
115 ["First Aid"] = 14,
116 ["Archaeology"] = 15
117 }
118
119 AskMrRobot.raceIds = {
120 ["None"] = 0,
121 ["BloodElf"] = 1,
122 ["Draenei"] = 2,
123 ["Dwarf"] = 3,
124 ["Gnome"] = 4,
125 ["Human"] = 5,
126 ["NightElf"] = 6,
127 ["Orc"] = 7,
128 ["Tauren"] = 8,
129 ["Troll"] = 9,
130 ["Scourge"] = 10,
131 ["Undead"] = 10,
132 ["Goblin"] = 11,
133 ["Worgen"] = 12,
134 ["Pandaren"] = 13
135 }
136
137 AskMrRobot.factionIds = {
138 ["None"] = 0,
139 ["Alliance"] = 1,
140 ["Horde"] = 2
141 }
142
143 AskMrRobot.specIds = {
144 [250] = 1, -- DeathKnightBlood
145 [251] = 2, -- DeathKnightFrost
146 [252] = 3, -- DeathKnightUnholy
147 [102] = 4, -- DruidBalance
148 [103] = 5, -- DruidFeral
149 [104] = 6, -- DruidGuardian
150 [105] = 7, -- DruidRestoration
151 [253] = 8, -- HunterBeastMastery
152 [254] = 9, -- HunterMarksmanship
153 [255] = 10, -- HunterSurvival
154 [62] = 11, -- MageArcane
155 [63] = 12, -- MageFire
156 [64] = 13, -- MageFrost
157 [268] = 14, -- MonkBrewmaster
158 [269] = 15, -- MonkMistweaver
159 [270] = 16, -- MonkWindwalker
160 [65] = 17, -- PaladinHoly
161 [66] = 18, -- PaladinProtection
162 [70] = 19, -- PaladinRetribution
163 [256] = 20, -- PriestDiscipline
164 [257] = 21, -- PriestHoly
165 [258] = 22, -- PriestShadow
166 [259] = 23, -- RogueAssassination
167 [260] = 24, -- RogueCombat
168 [261] = 25, -- RogueSubtlety
169 [262] = 26, -- ShamanElemental
170 [263] = 27, -- ShamanEnhancement
171 [264] = 28, -- ShamanRestoration
172 [265] = 29, -- WarlockAffliction
173 [266] = 30, -- WarlockDemonology
174 [267] = 31, -- WarlockDestruction
175 [71] = 32, -- WarriorArms
176 [72] = 33, -- WarriorFury
177 [73] = 34 -- WarriorProtection
178 }
179
180 -- reverse map of our spec ID to the game's spec ID
181 AskMrRobot.gameSpecIds = {}
182 for k,v in pairs(AskMrRobot.specIds) do
183 AskMrRobot.gameSpecIds[v] = k
184 end
185
186 -- lookup from our socket color ID to string
187 AskMrRobot.socketColorIds = {
188 [0] = "Prismatic",
189 [1] = "Red",
190 [2] = "Yellow",
191 [3] = "Blue",
192 [4] = "Meta",
193 [5] = "Cogwheel",
194 [6] = "ShaTouched"
195 }
196
197 -- map of game slot names to slot IDs (same both in our code and in-game)
198 AskMrRobot.slotNameToId = {
199 ["HeadSlot"] = 1,
200 ["NeckSlot"] = 2,
201 ["ShoulderSlot"] = 3,
202 ["ChestSlot"] = 5,
203 ["WaistSlot"] = 6,
204 ["LegsSlot"] = 7,
205 ["FeetSlot"] = 8,
206 ["WristSlot"] = 9,
207 ["HandsSlot"] = 10,
208 ["Finger0Slot"] = 11,
209 ["Finger1Slot"] = 12,
210 ["Trinket0Slot"] = 13,
211 ["Trinket1Slot"] = 14,
212 ["BackSlot"] = 15,
213 ["MainHandSlot"] = 16,
214 ["SecondaryHandSlot"] = 17
215 }
216
217 -- map of slot ID to display text
218 AskMrRobot.slotDisplayText = {
219 [1] = _G["HEADSLOT"],
220 [2] = _G["NECKSLOT"],
221 [3] = _G["SHOULDERSLOT"],
222 [5] = _G["CHESTSLOT"],
223 [6] = _G["WAISTSLOT"],
224 [7] = _G["LEGSSLOT"],
225 [8] = _G["FEETSLOT"],
226 [9] = _G["WROSTSLOT"],
227 [10] = _G["HANDSSLOT"],
228 [11] = _G["FINGER0SLOT"],
229 [12] = _G["FINGER1SLOT"],
230 [13] = _G["TRINKET0SLOT"],
231 [14] = _G["TRINKET1SLOT"],
232 [15] = _G["BACKSLOT"],
233 [16] = _G["MAINHANDSLOT"],
234 [17] = _G["SECONDARYHANDSLOT"]
235 }
236
237 -- all slot IDs that we care about, ordered in our standard display order
238 AskMrRobot.slotIds = { 16, 17, 1, 2, 3, 15, 5, 9, 10, 6, 7, 8, 11, 12, 13, 14 }
239
240 -- cache slot orders to make slot sorting easier
241 local _slotIdToOrder = {}
242 for i = 1, #AskMrRobot.slotIds do
243 _slotIdToOrder[AskMrRobot.slotIds[i]] = i
244 end
245
246 -- given a table where the keys are slot IDs, sort in the standard slot order
247 function AskMrRobot.sortSlots(t)
248 return AskMrRobot.spairs(t, function(x, a, b)
249 if a == nil and b == nil then return 0 end
250 return _slotIdToOrder[a] < _slotIdToOrder[b]
251 end)
252 end