Mercurial > wow > askmrrobot
diff Constants.lua @ 57:01b63b8ed811 v21
total rewrite to version 21
author | yellowfive |
---|---|
date | Fri, 05 Jun 2015 11:05:15 -0700 |
parents | |
children | ee701ce45354 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Constants.lua Fri Jun 05 11:05:15 2015 -0700 @@ -0,0 +1,223 @@ +local Amr = LibStub("AceAddon-3.0"):GetAddon("AskMrRobot") +local L = LibStub("AceLocale-3.0"):GetLocale("AskMrRobot", true) + +-- min import version that we will read from the website +Amr.MIN_IMPORT_VERSION = 20 + +-- min addon version that we will support for inter-addon communication for e.g. the team optimizer +Amr.MIN_ADDON_VERSION = 23 + +-- import some constants from the serializer for convenience +Amr.ChatPrefix = Amr.Serializer.ChatPrefix +Amr.RegionNames = Amr.Serializer.RegionNames +Amr.SlotIds = Amr.Serializer.SlotIds +Amr.SpecIds = Amr.Serializer.SpecIds +Amr.ClassIds = Amr.Serializer.ClassIds +Amr.ProfessionIds = Amr.Serializer.ProfessionIds +Amr.RaceIds = Amr.Serializer.RaceIds +Amr.FactionIds = Amr.Serializer.FactionIds +Amr.InstanceIds = Amr.Serializer.InstanceIds +Amr.SupportedInstanceIds = Amr.Serializer.SupportedInstanceIds +Amr.ParseItemLink = Amr.Serializer.ParseItemLink +Amr.IsSupportedInstanceId = Amr.Serializer.IsSupportedInstanceId +Amr.IsSupportedInstance = Amr.Serializer.IsSupportedInstance +Amr.SetTokenIds = Amr.Serializer.SetTokenIds + +-- map of slot ID to display text +Amr.SlotDisplayText = { + [1] = _G["HEADSLOT"], + [2] = _G["NECKSLOT"], + [3] = _G["SHOULDERSLOT"], + [5] = _G["CHESTSLOT"], + [6] = _G["WAISTSLOT"], + [7] = _G["LEGSSLOT"], + [8] = _G["FEETSLOT"], + [9] = _G["WRISTSLOT"], + [10] = _G["HANDSSLOT"], + [11] = _G["FINGER0SLOT"] .. " 1", + [12] = _G["FINGER1SLOT"] .. " 2", + [13] = _G["TRINKET0SLOT"] .. " 1", + [14] = _G["TRINKET1SLOT"] .. " 2", + [15] = _G["BACKSLOT"], + [16] = _G["MAINHANDSLOT"], + [17] = _G["SECONDARYHANDSLOT"] +} + +Amr.SlotEnumDisplayText = { + Head = _G["HEADSLOT"], + Neck = _G["NECKSLOT"], + Shoulder = _G["SHOULDERSLOT"], + Chest = _G["CHESTSLOT"], + Waist = _G["WAISTSLOT"], + Legs = _G["LEGSSLOT"], + Feet = _G["FEETSLOT"], + Wrist = _G["WRISTSLOT"], + Hands = _G["HANDSSLOT"], + Finger1 = _G["FINGER0SLOT"], + Finger2 = _G["FINGER0SLOT"], + Trinket1 = _G["TRINKET0SLOT"], + Trinket2 = _G["TRINKET0SLOT"], + Back = _G["BACKSLOT"], + MainHand = _G["MAINHANDSLOT"], + OffHand = _G["SECONDARYHANDSLOT"] +} + +Amr.SpecIcons = { + [1] = "spell_deathknight_bloodpresence", -- DeathKnightBlood + [2] = "spell_deathknight_frostpresence", -- DeathKnightFrost + [3] = "spell_deathknight_unholypresence", -- DeathKnightUnholy + [4] = "spell_nature_starfall", -- DruidBalance + [5] = "ability_druid_catform", -- DruidFeral + [6] = "ability_racial_bearform", -- DruidGuardian + [7] = "spell_nature_healingtouch", -- DruidRestoration + [8] = "ability_hunter_bestialdiscipline", -- HunterBeastMastery + [9] = "ability_hunter_focusedaim", -- HunterMarksmanship + [10] = "ability_hunter_camouflage", -- HunterSurvival + [11] = "spell_holy_magicalsentry", -- MageArcane + [12] = "spell_fire_firebolt02", -- MageFire + [13] = "spell_frost_frostbolt02", -- MageFrost + [14] = "spell_monk_brewmaster_spec", -- MonkBrewmaster + [15] = "spell_monk_mistweaver_spec", -- MonkMistweaver + [16] = "spell_monk_windwalker_spec", -- MonkWindwalker + [17] = "spell_holy_holybolt", -- PaladinHoly + [18] = "ability_paladin_shieldofthetemplar", -- PaladinProtection + [19] = "spell_holy_auraoflight", -- PaladinRetribution + [20] = "spell_holy_powerwordshield", -- PriestDiscipline + [21] = "spell_holy_guardianspirit", -- PriestHoly + [22] = "spell_shadow_shadowwordpain", -- PriestShadow + [23] = "ability_rogue_eviscerate", -- RogueAssassination + [24] = "ability_backstab", -- RogueCombat + [25] = "ability_stealth", -- RogueSubtlety + [26] = "spell_nature_lightning", -- ShamanElemental + [27] = "spell_nature_lightningshield", -- ShamanEnhancement + [28] = "spell_nature_magicimmunity", -- ShamanRestoration + [29] = "spell_shadow_deathcoil", -- WarlockAffliction + [30] = "spell_shadow_metamorphosis", -- WarlockDemonology + [31] = "spell_shadow_rainoffire", -- WarlockDestruction + [32] = "ability_warrior_savageblow", -- WarriorArms + [33] = "ability_warrior_innerrage", -- WarriorFury + [34] = "ability_warrior_defensivestance", -- WarriorProtection + [38] = "ability_warrior_defensivestance", -- WarriorProtection, used for special subspec handling + [39] = "spell_warrior_gladiatorstance" -- WarriorProtectionGlad, used for special subspec handling +} + +-- instance IDs ordered in preferred display order +Amr.InstanceIdsOrdered = { 1205, 1228 } + +Amr.Difficulties = { + Lfr = 17, + Normal = 14, + Heroic = 15, + Mythic = 16 +} + +-- get the game's spec id from the AMR spec id +function Amr.GetGameSpecId(specId) + for k, v in pairs(Amr.SpecIds) do + if v == specId then return k end + end + return nil +end + + +------------------------------------------------------------------------------------------ +-- Item Methods +------------------------------------------------------------------------------------------ + +-- item link format: |cffa335ee|Hitem:itemID:enchant:gem1:gem2:gem3:gem4:suffixID:uniqueID:level:upgradeId:instanceDifficultyID:numBonusIDs:bonusID1:bonusID2...|h[item name]|h|r + +function Amr.CreateItemLink(itemObj) + + if itemObj == nil or itemObj.id == nil or itemObj.id == 0 then return nil end + + local parts = {} + table.insert(parts, "item") + table.insert(parts, itemObj.id) + table.insert(parts, itemObj.enchantId) + table.insert(parts, itemObj.gemIds[1]) + table.insert(parts, itemObj.gemIds[2]) + table.insert(parts, itemObj.gemIds[3]) + table.insert(parts, itemObj.gemIds[4]) + + if itemObj.suffixId == 0 then + table.insert(parts, 0) + else + table.insert(parts, -math.abs(itemObj.suffixId)) + end + + table.insert(parts, 0) + table.insert(parts, UnitLevel("player")) + table.insert(parts, itemObj.upgradeId) + table.insert(parts, 0) + + if itemObj.bonusIds then + table.insert(parts, #itemObj.bonusIds) + for i,v in ipairs(itemObj.bonusIds) do + table.insert(parts, v) + end + end + + return table.concat(parts, ":") +end + +-- a unique ID useful for determining if a player has an item equipped or not +function Amr.GetItemUniqueId(item, noUpgrade) + if item == nil then return "" end + local ret = item.id .. "" + if item.bonusIds then + for i = 1, #item.bonusIds do + ret = ret .. "b" .. item.bonusIds[i] + end + end + if item.suffixId ~= 0 then + ret = ret .. "s" .. item.suffixId + end + if not noUpgrade and item.upgradeId ~= 0 then + ret = ret .. "u" .. item.upgradeId + end + return ret +end + +-- the server event for getting item info does not specify which item it just fetched... have to track manually +local _pendingItemIds = {} + +-- helper for getting item information, which is not always guaranteed to be loaded into memory +function Amr.GetItemInfo(itemIdOrLinkOrName, callback, customArg) + if not itemIdOrLinkOrName then + callback(customArg) + return + end + + -- see if we can get the information immediately + local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemIdOrLinkOrName) + if name then + callback(customArg, name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice) + return + end + + -- get the list of registered callbacks for this particular item + local list = _pendingItemIds[itemIdOrLinkOrName] + -- if there was a list, then just add the callback to the list + if list then + table.insert(list, { Callback = callback, Arg = customArg }) + else + -- there wasn't a list, so make a new one with this callback + _pendingItemIds[itemIdOrLinkOrName] = { { Callback = callback, Arg = customArg } } + end +end + +Amr:AddEventHandler("GET_ITEM_INFO_RECEIVED", function() + -- go through all unresolved items since we don't know which one was just resolved + for itemId, callbacks in pairs(_pendingItemIds) do + -- attempt to get the item info again, remove from pending list if we find it + local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemId) + if name then + _pendingItemIds[itemId] = nil + + -- call each callback + for i = 1, #callbacks do + callbacks[i].Callback(callbacks[i].Arg, name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice) + end + end + end +end)