annotate Constants.lua @ 133:a0894ffebd15 v62

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