Mercurial > wow > askmrrobot
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/amr-constants.lua Mon Oct 13 21:28:32 2014 -0500 @@ -0,0 +1,252 @@ +local _, AskMrRobot = ... +local L = AskMrRobot.L; + +-- item link format: |cffa335ee|Hitem:itemID:enchant:gem1:gem2:gem3:gem4:suffixID:uniqueID:level:upgradeId:instanceDifficultyID:numBonusIDs:bonusID1:bonusID2...|h[item name]|h|r + +-- get an object with all of the parts fo the item link format that we care about +function AskMrRobot.parseItemLink(itemLink) + if not itemLink then return nil end + + local str = string.match(itemLink, "|Hitem:([\-%d:]+)|") + if not str then return nil end + + local parts = { strsplit(":", str) } + + local item = {} + item.id = tonumber(parts[1]) + item.enchantId = tonumber(parts[2]) + item.gemIds = { tonumber(parts[3]), tonumber(parts[4]), tonumber(parts[5]), tonumber(parts[6]) } + item.suffixId = math.abs(tonumber(parts[7])) -- convert suffix to positive number, that's what we use in our code + --item.uniqueId = tonumber(parts[8]) + --item.level = tonumber(parts[9]) + item.upgradeId = tonumber(parts[10]) + --item.difficultyId = tonumber(parts[11]) + + local numBonuses = tonumber(parts[12]) + if numBonuses > 0 then + item.bonusIds = {} + for i = 13, 12 + numBonuses do + table.insert(item.bonusIds, tonumber(parts[i])) + end + end + + return item +end + +-- convenience to get just the item id (or 0 if not a valid link) from an item link +function AskMrRobot.getItemIdFromLink(itemLink) + if not itemLink then return 0 end + local parts = { strsplit(":", itemLink) } + local id = tonumber(parts[2]) + return (id and id ~= 0 and id or 0) +end + +function AskMrRobot.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 + +AskMrRobot.instanceIds = { + HeartOfFear = 1009, + MogushanVaults = 1008, + SiegeOfOrgrimmar = 1136, + TerraceOfEndlessSpring = 996, + ThroneOfThunder = 1098 +} + +-- instances that we currently support logging for +AskMrRobot.supportedInstanceIds = { + [1136] = true +} + +-- returns true if currently in a supported instance +function AskMrRobot.IsSupportedInstance() + + local zone, _, difficultyIndex, _, _, _, _, instanceMapID = GetInstanceInfo() + if AskMrRobot.supportedInstanceIds[tonumber(instanceMapID)] then + return true + else + return false + end +end + +AskMrRobot.classIds = { + ["NONE"] = 0, + ["DEATHKNIGHT"] = 1, + ["DRUID"] = 2, + ["HUNTER"] = 3, + ["MAGE"] = 4, + ["MONK"] = 5, + ["PALADIN"] = 6, + ["PRIEST"] = 7, + ["ROGUE"] = 8, + ["SHAMAN"] = 9, + ["WARLOCK"] = 10, + ["WARRIOR"] = 11, +} + +AskMrRobot.professionIds = { + ["None"] = 0, + ["Mining"] = 1, + ["Skinning"] = 2, + ["Herbalism"] = 3, + ["Enchanting"] = 4, + ["Jewelcrafting"] = 5, + ["Engineering"] = 6, + ["Blacksmithing"] = 7, + ["Leatherworking"] = 8, + ["Inscription"] = 9, + ["Tailoring"] = 10, + ["Alchemy"] = 11, + ["Fishing"] = 12, + ["Cooking"] = 13, + ["First Aid"] = 14, + ["Archaeology"] = 15 +} + +AskMrRobot.raceIds = { + ["None"] = 0, + ["BloodElf"] = 1, + ["Draenei"] = 2, + ["Dwarf"] = 3, + ["Gnome"] = 4, + ["Human"] = 5, + ["NightElf"] = 6, + ["Orc"] = 7, + ["Tauren"] = 8, + ["Troll"] = 9, + ["Scourge"] = 10, + ["Undead"] = 10, + ["Goblin"] = 11, + ["Worgen"] = 12, + ["Pandaren"] = 13 +} + +AskMrRobot.factionIds = { + ["None"] = 0, + ["Alliance"] = 1, + ["Horde"] = 2 +} + +AskMrRobot.specIds = { + [250] = 1, -- DeathKnightBlood + [251] = 2, -- DeathKnightFrost + [252] = 3, -- DeathKnightUnholy + [102] = 4, -- DruidBalance + [103] = 5, -- DruidFeral + [104] = 6, -- DruidGuardian + [105] = 7, -- DruidRestoration + [253] = 8, -- HunterBeastMastery + [254] = 9, -- HunterMarksmanship + [255] = 10, -- HunterSurvival + [62] = 11, -- MageArcane + [63] = 12, -- MageFire + [64] = 13, -- MageFrost + [268] = 14, -- MonkBrewmaster + [269] = 15, -- MonkMistweaver + [270] = 16, -- MonkWindwalker + [65] = 17, -- PaladinHoly + [66] = 18, -- PaladinProtection + [70] = 19, -- PaladinRetribution + [256] = 20, -- PriestDiscipline + [257] = 21, -- PriestHoly + [258] = 22, -- PriestShadow + [259] = 23, -- RogueAssassination + [260] = 24, -- RogueCombat + [261] = 25, -- RogueSubtlety + [262] = 26, -- ShamanElemental + [263] = 27, -- ShamanEnhancement + [264] = 28, -- ShamanRestoration + [265] = 29, -- WarlockAffliction + [266] = 30, -- WarlockDemonology + [267] = 31, -- WarlockDestruction + [71] = 32, -- WarriorArms + [72] = 33, -- WarriorFury + [73] = 34 -- WarriorProtection +} + +-- reverse map of our spec ID to the game's spec ID +AskMrRobot.gameSpecIds = {} +for k,v in pairs(AskMrRobot.specIds) do + AskMrRobot.gameSpecIds[v] = k +end + +-- lookup from our socket color ID to string +AskMrRobot.socketColorIds = { + [0] = "Prismatic", + [1] = "Red", + [2] = "Yellow", + [3] = "Blue", + [4] = "Meta", + [5] = "Cogwheel", + [6] = "ShaTouched" +} + +-- map of game slot names to slot IDs (same both in our code and in-game) +AskMrRobot.slotNameToId = { + ["HeadSlot"] = 1, + ["NeckSlot"] = 2, + ["ShoulderSlot"] = 3, + ["ChestSlot"] = 5, + ["WaistSlot"] = 6, + ["LegsSlot"] = 7, + ["FeetSlot"] = 8, + ["WristSlot"] = 9, + ["HandsSlot"] = 10, + ["Finger0Slot"] = 11, + ["Finger1Slot"] = 12, + ["Trinket0Slot"] = 13, + ["Trinket1Slot"] = 14, + ["BackSlot"] = 15, + ["MainHandSlot"] = 16, + ["SecondaryHandSlot"] = 17 +} + +-- map of slot ID to display text +AskMrRobot.slotDisplayText = { + [1] = _G["HEADSLOT"], + [2] = _G["NECKSLOT"], + [3] = _G["SHOULDERSLOT"], + [5] = _G["CHESTSLOT"], + [6] = _G["WAISTSLOT"], + [7] = _G["LEGSSLOT"], + [8] = _G["FEETSLOT"], + [9] = _G["WROSTSLOT"], + [10] = _G["HANDSSLOT"], + [11] = _G["FINGER0SLOT"], + [12] = _G["FINGER1SLOT"], + [13] = _G["TRINKET0SLOT"], + [14] = _G["TRINKET1SLOT"], + [15] = _G["BACKSLOT"], + [16] = _G["MAINHANDSLOT"], + [17] = _G["SECONDARYHANDSLOT"] +} + +-- all slot IDs that we care about, ordered in our standard display order +AskMrRobot.slotIds = { 16, 17, 1, 2, 3, 15, 5, 9, 10, 6, 7, 8, 11, 12, 13, 14 } + +-- cache slot orders to make slot sorting easier +local _slotIdToOrder = {} +for i = 1, #AskMrRobot.slotIds do + _slotIdToOrder[AskMrRobot.slotIds[i]] = i +end + +-- given a table where the keys are slot IDs, sort in the standard slot order +function AskMrRobot.sortSlots(t) + return AskMrRobot.spairs(t, function(x, a, b) + if a == nil and b == nil then return 0 end + return _slotIdToOrder[a] < _slotIdToOrder[b] + end) +end