annotate Constants.lua @ 81:0515882856f1 v38

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