James D. Callahan III [04-03-10 - 01:12]
diff --git a/AckisRecipeList.toc b/AckisRecipeList.toc
index b70adc5..a73fcfb 100644
--- a/AckisRecipeList.toc
+++ b/AckisRecipeList.toc
@@ -67,7 +67,7 @@ ARL.lua
Config.lua
Waypoint.lua
Frame.lua
-Datamine.lua
+Scanner.lua
Player.lua
# Database files
diff --git a/Datamine.lua b/Datamine.lua
deleted file mode 100644
index 16452a4..0000000
--- a/Datamine.lua
+++ /dev/null
@@ -1,2505 +0,0 @@
---[[
-************************************************************************
-Datamine.lua
-In-game datamining functions for ARL
-************************************************************************
-File date: @file-date-iso@
-File revision: @file-revision@
-Project revision: @project-revision@
-Project version: @project-version@
-************************************************************************
-Please see http://www.wowace.com/addons/arl/ for more information.
-************************************************************************
-This source code is released under All Rights Reserved.
-************************************************************************
-]]--
-
--------------------------------------------------------------------------------
--- Upvalues globals.
--------------------------------------------------------------------------------
-local _G = getfenv(0)
-
-local table = _G.table
-local tconcat, tinsert, tsort, twipe = table.concat, table.insert, table.sort, table.wipe
-
-local string = _G.string
-
-local tonumber, tostring = _G.tonumber, _G.tostring
-
-local ipairs, pairs = _G.ipairs, _G.pairs
-
--------------------------------------------------------------------------------
--- Upvalued Blizzard API.
--------------------------------------------------------------------------------
-local UnitName = UnitName
-local UnitGUID = UnitGUID
-local UnitExists = UnitExists
-local UnitIsPlayer = UnitIsPlayer
-local UnitIsEnemy = UnitIsEnemy
-local GetNumTrainerServices = GetNumTrainerServices
-local GetTrainerServiceInfo = GetTrainerServiceInfo
-local IsTradeskillTrainer = IsTradeskillTrainer
-local SetTrainerServiceTypeFilter = SetTrainerServiceTypeFilter
-local GetTrainerServiceTypeFilter = GetTrainerServiceTypeFilter
-local GetTrainerServiceSkillReq = GetTrainerServiceSkillReq
-local GetMerchantNumItems = GetMerchantNumItems
-local GetMerchantItemLink = GetMerchantItemLink
-local GetMerchantItemInfo = GetMerchantItemInfo
-local GetSpellInfo = GetSpellInfo
-
--------------------------------------------------------------------------------
--- AddOn namespace.
--------------------------------------------------------------------------------
-local MODNAME = "Ackis Recipe List"
-local addon = LibStub("AceAddon-3.0"):GetAddon(MODNAME)
-
-local L = LibStub("AceLocale-3.0"):GetLocale(MODNAME)
-
--- Set up the private intra-file namespace.
-local private = select(2, ...)
-
--------------------------------------------------------------------------------
--- Constants
--------------------------------------------------------------------------------
-local F = private.filter_flags
-local A = private.acquire_types
-
-local PROFESSIONS = private.professions
-
--------------------------------------------------------------------------------
--- Mined via Data-tools
--- Table is Public Domain now
--- Look up table of Spell IDs to the recipe which trains them.
--------------------------------------------------------------------------------
-local SPELL_TO_RECIPE_MAP = {
- -------------------------------------------------------------------------------
- -- First Aid
- -------------------------------------------------------------------------------
- [7929] = 16112, [7935] = 6454, [10840] = 16113, [23787] = 19442,
- [27032] = 21992, [27033] = 21993, [45546] = 39152,
-
- -------------------------------------------------------------------------------
- -- Alchemy
- -------------------------------------------------------------------------------
- [2333] = 3396, [2335] = 2555, [3172] = 3393, [3174] = 3394,
- [3175] = 3395, [3188] = 6211, [3230] = 2553, [3449] = 6068,
- [3450] = 3830, [3451] = 3831, [3453] = 3832, [3454] = 14634,
- [4508] = 4597, [4942] = 4624, [6617] = 5640, [6618] = 5643,
- [6624] = 5642, [7255] = 6053, [7256] = 6054, [7257] = 6055,
- [7258] = 6056, [7259] = 6057, [8240] = 6663, [11453] = 9293,
- [11456] = 10644, [11458] = 9294, [11459] = 9303, [11464] = 9295,
- [11466] = 9296, [11468] = 9297, [11472] = 9298, [11473] = 9302,
- [11476] = 9301, [11477] = 9300, [11479] = 9304, [11480] = 9305,
- [17187] = 12958, [17552] = 13476, [17553] = 13477, [17554] = 13478,
- [17555] = 13479, [17556] = 13480, [17557] = 13481, [17559] = 13482,
- [17560] = 13483, [17561] = 13484, [17562] = 13485, [17563] = 13486,
- [17564] = 13487, [17565] = 13488, [17566] = 13489, [17570] = 13490,
- [17571] = 13491, [17572] = 13492, [17573] = 13493, [17574] = 13494,
- [17575] = 13495, [17576] = 13496, [17577] = 13497, [17578] = 13499,
- [17580] = 13501, [17632] = 13517, [17634] = 13518, [17635] = 31354,
- [17636] = 31356, [17637] = 31355, [17638] = 31357, [21923] = 17709,
- [22732] = 18257, [24365] = 20011, [24366] = 20012, [24367] = 20013,
- [24368] = 20014, [25146] = 20761, [26277] = 21547, [28543] = 22900,
- [28546] = 22901, [28549] = 22902, [28550] = 22903, [28552] = 22904,
- [28553] = 24001, [28554] = 22906, [28555] = 22907, [28556] = 22908,
- [28557] = 22909, [28558] = 22910, [28562] = 22911, [28563] = 22912,
- [28564] = 35295, [28565] = 22914, [28566] = 22915, [28567] = 22916,
- [28568] = 30443, [28569] = 22918, [28570] = 22919, [28571] = 22920,
- [28572] = 22921, [28573] = 22922, [28575] = 22923, [28576] = 22924,
- [28577] = 22925, [28578] = 35294, [28579] = 22927, [29688] = 23574,
- [32765] = 25869, [32766] = 29232, [38960] = 31680, [38961] = 31682,
- [38962] = 31681, [39637] = 32070, [39639] = 32071, [42736] = 33209,
- [47046] = 35752, [47048] = 35753, [47049] = 35754, [47050] = 35755,
- [53936] = 44564, [53937] = 44566, [53938] = 44568, [53939] = 44565,
- [53942] = 44567,
-
- -------------------------------------------------------------------------------
- -- Blacksmithing
- -------------------------------------------------------------------------------
- [2667] = 2881, [2673] = 5578, [3295] = 2883, [3297] = 3608,
- [3321] = 3609, [3325] = 3610, [3330] = 2882, [3334] = 3611,
- [3336] = 3612, [3492] = 12162, [3493] = 3866, [3494] = 10858,
- [3495] = 3867, [3496] = 12163, [3497] = 3868, [3498] = 12164,
- [3500] = 3869, [3503] = 6047, [3504] = 3870, [3505] = 3871,
- [3507] = 3872, [3511] = 3873, [3513] = 3874, [3515] = 3875,
- [6518] = 5543, [7221] = 6044, [7222] = 6045, [7224] = 6046,
- [8367] = 6735, [9811] = 7978, [9813] = 7979, [9814] = 7980,
- [9818] = 7981, [9820] = 7982, [9933] = 7975, [9937] = 7995,
- [9939] = 7976, [9945] = 7983, [9950] = 7984, [9952] = 7985,
- [9964] = 7989, [9966] = 7991, [9970] = 7990, [9995] = 7992,
- [9997] = 8029, [10005] = 7993, [10009] = 8028, [10013] = 8030,
- [11454] = 10713, [11643] = 9367, [12259] = 10424, [15292] = 11610,
- [15293] = 11614, [15294] = 11611, [15295] = 11615, [15296] = 11612,
- [15973] = 12261, [16642] = 12682, [16643] = 12683, [16644] = 12684,
- [16645] = 12685, [16646] = 12687, [16647] = 12688, [16648] = 12689,
- [16649] = 12690, [16650] = 12691, [16651] = 12692, [16652] = 12693,
- [16653] = 12694, [16654] = 12695, [16655] = 12699, [16656] = 12697,
- [16657] = 12700, [16658] = 12701, [16659] = 12702, [16660] = 12698,
- [16661] = 12703, [16662] = 12704, [16663] = 12705, [16664] = 12706,
- [16665] = 12707, [16667] = 12696, [16724] = 12711, [16725] = 12713,
- [16726] = 12714, [16728] = 12716, [16729] = 12717, [16730] = 12715,
- [16731] = 12718, [16732] = 12719, [16741] = 12720, [16742] = 12725,
- [16744] = 12726, [16745] = 12727, [16746] = 12728, [16969] = 12819,
- [16970] = 12821, [16971] = 12823, [16973] = 12824, [16978] = 12825,
- [16983] = 12827, [16984] = 12828, [16985] = 12830, [16988] = 12833,
- [16990] = 12834, [16991] = 12835, [16992] = 12836, [16993] = 12837,
- [16994] = 12838, [16995] = 12839, [20872] = 17049, [20873] = 17053,
- [20874] = 17051, [20876] = 17052, [20890] = 17059, [20897] = 17060,
- [21161] = 18592, [21913] = 17706, [22757] = 18264, [23628] = 19202,
- [23629] = 19204, [23632] = 19203, [23633] = 19205, [23636] = 19206,
- [23637] = 19207, [23638] = 19208, [23639] = 19209, [23650] = 19210,
- [23652] = 19211, [23653] = 19212, [24136] = 19776, [24137] = 19777,
- [24138] = 19778, [24139] = 19779, [24140] = 19780, [24141] = 19781,
- [24399] = 20040, [24912] = 20553, [24913] = 20555, [24914] = 20554,
- [27585] = 22209, [27586] = 22219, [27587] = 22222, [27588] = 22214,
- [27589] = 22220, [27590] = 22221, [27829] = 22388, [27830] = 22390,
- [27832] = 22389, [28461] = 22766, [28462] = 22767, [28463] = 22768,
- [29566] = 23590, [29568] = 23591, [29569] = 23592, [29571] = 23593,
- [29603] = 23594, [29605] = 23595, [29606] = 23596, [29608] = 23597,
- [29610] = 23599, [29611] = 23598, [29613] = 23600, [29614] = 23601,
- [29615] = 23602, [29616] = 23603, [29617] = 23604, [29619] = 23605,
- [29620] = 23606, [29621] = 23607, [29622] = 23621, [29628] = 23608,
- [29629] = 23609, [29630] = 23610, [29642] = 23611, [29643] = 23612,
- [29645] = 23613, [29648] = 23615, [29649] = 23617, [29656] = 23618,
- [29657] = 24002, [29658] = 23620, [29662] = 23622, [29663] = 23623,
- [29664] = 23624, [29668] = 23625, [29669] = 23626, [29671] = 23627,
- [29672] = 23628, [29692] = 23629, [29693] = 23630, [29694] = 23631,
- [29695] = 23632, [29696] = 23633, [29697] = 23634, [29698] = 23635,
- [29699] = 23636, [29700] = 23637, [29728] = 23638, [29729] = 23639,
- [32285] = 25526, [32656] = 25846, [32657] = 25847, [34608] = 28632,
- [36389] = 30321, [36390] = 30322, [36391] = 30323, [36392] = 30324,
- [38473] = 31390, [38475] = 31391, [38476] = 31392, [38477] = 31393,
- [38478] = 31394, [38479] = 31395, [40033] = 32441, [40034] = 32442,
- [40035] = 32443, [40036] = 32444, [41132] = 32736, [41133] = 32737,
- [41134] = 32738, [41135] = 32739, [42688] = 35296, [43549] = 33792,
- [43846] = 33954, [46140] = 35208, [46141] = 35209, [46142] = 35210,
- [46144] = 35211, [54978] = 41124, [54979] = 41123, [54980] = 41120,
- [54981] = 41122, [62202] = 44938, [63187] = 45088, [63188] = 45089,
- [63189] = 45090, [63190] = 45091, [63191] = 45092, [63192] = 45093,
- [67091] = 47622, [67130] = 47640, [67092] = 47623, [67131] = 47641,
- [67096] = 47627, [67135] = 47642, [67095] = 47626, [67134] = 47643,
- [67093] = 47624, [67132] = 47644, [67094] = 47625, [67133] = 47645,
- [70563] = 49970, [70567] = 49973, [70565] = 49971, [70566] = 49972,
- [70568] = 49974, [70562] = 49969,
-
- -------------------------------------------------------------------------------
- -- Cooking
- -------------------------------------------------------------------------------
- [2542] = 2697, [2543] = 728, [2545] = 2698, [2547] = 2699,
- [2548] = 2700, [2549] = 2701, [2795] = 2889, [3370] = 3678,
- [3371] = 3679, [3372] = 3680, [3373] = 3681, [3376] = 3682,
- [3377] = 3683, [3397] = 3734, [3398] = 3735, [3399] = 3736,
- [3400] = 3737, [4094] = 4609, [6412] = 5482, [6413] = 5483,
- [6414] = 5484, [6415] = 5485, [6416] = 5486, [6417] = 44977,
- [6418] = 5488, [6419] = 5489, [6501] = 5528, [7213] = 6039,
- [7751] = 6325, [7752] = 6326, [7753] = 6328, [7754] = 6329,
- [7755] = 6330, [7827] = 6368, [7828] = 6369, [8238] = 6661,
- [8607] = 6892, [9513] = 18160, [15853] = 12227, [15855] = 12228,
- [15856] = 12229, [15861] = 12231, [15863] = 12232, [15865] = 12233,
- [15906] = 12239, [15910] = 12240, [15915] = 16111, [15933] = 16110,
- [15935] = 12226, [18238] = 13939, [18239] = 13940, [18240] = 13942,
- [18241] = 13941, [18242] = 13943, [18243] = 13945, [18244] = 13946,
- [18245] = 13947, [18246] = 13948, [18247] = 13949, [20626] = 16767,
- [20916] = 17062, [21143] = 17200, [21144] = 17201, [22480] = 18046,
- [22761] = 18267, [24418] = 20075, [25659] = 21025, [25704] = 21099,
- [25954] = 21219, [28267] = 22647, [33276] = 27685, [33277] = 27686,
- [33278] = 27687, [33279] = 27684, [33284] = 27688, [33285] = 27689,
- [33286] = 27690, [33287] = 27691, [33288] = 27692, [33289] = 27693,
- [33290] = 27694, [33291] = 27695, [33292] = 27696, [33293] = 27697,
- [33294] = 27698, [33295] = 27699, [33296] = 27700, [36210] = 30156,
- [38867] = 31675, [38868] = 31674, [43707] = 33870, [43758] = 33871,
- [43761] = 33869, [43765] = 33873, [43772] = 33875, [43779] = 33925,
- [45022] = 34413, [45555] = 43018, [45556] = 43019, [45557] = 43020,
- [45558] = 43021, [45559] = 43022, [45567] = 43023, [45568] = 43024,
- [45570] = 43026, [45571] = 43025, [45695] = 34834, [46684] = 35564,
- [46688] = 35566, [53056] = 39644, [57423] = 43017, [57433] = 43027,
- [57434] = 43028, [57435] = 43029, [57436] = 43030, [57437] = 43031,
- [57438] = 43032, [57439] = 43033, [57440] = 43034, [57441] = 43035,
- [57442] = 43036, [57443] = 43037, [58512] = 43507, [58521] = 43508,
- [58523] = 43509, [58525] = 43510, [58527] = 43505, [58528] = 43506,
- [62350] = 44954,
-
- -------------------------------------------------------------------------------
- -- Enchanting
- -------------------------------------------------------------------------------
- [7443] = 6342, [7766] = 6344, [7776] = 6346, [7782] = 6347,
- [7786] = 6348, [7793] = 6349, [7859] = 6375, [7867] = 6377,
- [13380] = 11038, [13419] = 11039, [13464] = 11081, [13522] = 11098,
- [13536] = 11101, [13612] = 11150, [13617] = 11151, [13620] = 11152,
- [13646] = 11163, [13653] = 11164, [13655] = 11165, [13687] = 11167,
- [13689] = 11168, [13698] = 11166, [13817] = 11202, [13841] = 11203,
- [13846] = 11204, [13868] = 11205, [13882] = 11206, [13898] = 11207,
- [13915] = 11208, [13931] = 11223, [13933] = 11224, [13945] = 11225,
- [13947] = 11226, [15596] = 11813, [15596] = 45050, [20009] = 16218,
- [20010] = 16246, [20011] = 16251, [20012] = 16219, [20014] = 16216,
- [20015] = 16224, [20016] = 16222, [20017] = 16217, [20020] = 16215,
- [20023] = 16245, [20024] = 16220, [20025] = 16253, [20026] = 16221,
- [20028] = 16242, [20029] = 16223, [20030] = 16247, [20031] = 16250,
- [20032] = 16254, [20033] = 16248, [20034] = 16252, [20035] = 16255,
- [20036] = 16249, [20051] = 16243, [21931] = 17725, [22749] = 18259,
- [22750] = 18260, [23799] = 19444, [23800] = 19445, [23801] = 19446,
- [23802] = 19447, [23803] = 19448, [23804] = 19449, [25072] = 33153,
- [25072] = 20726, [25073] = 20727, [25074] = 20728, [25078] = 20729,
- [25079] = 20730, [25080] = 33152, [25080] = 20731, [25081] = 20732,
- [25082] = 20733, [25083] = 33149, [25083] = 20734, [25084] = 20735,
- [25084] = 33150, [25084] = 33151, [25086] = 20736, [25086] = 33148,
- [25124] = 20758, [25125] = 20752, [25126] = 20753, [25127] = 20754,
- [25128] = 20755, [25129] = 20756, [25130] = 20757, [27837] = 22392,
- [27906] = 22530, [27911] = 22531, [27911] = 24000, [27913] = 22532,
- [27914] = 22533, [27917] = 22534, [27920] = 22535, [27924] = 22536,
- [27926] = 22537, [27927] = 22538, [27945] = 22539, [27946] = 22540,
- [27947] = 22541, [27948] = 35298, [27948] = 22542, [27950] = 22543,
- [27951] = 22544, [27954] = 22545, [27960] = 24003, [27960] = 22547,
- [27962] = 22548, [27967] = 22552, [27968] = 22551, [27971] = 22554,
- [27972] = 22553, [27975] = 22555, [27977] = 22556, [27981] = 22560,
- [27982] = 22561, [27984] = 22559, [28003] = 22558, [28004] = 22557,
- [28016] = 22562, [28019] = 22563, [28022] = 22565, [32665] = 25848,
- [32667] = 25849, [33992] = 28270, [33994] = 28271, [33997] = 28272,
- [33999] = 28273, [34003] = 28274, [34005] = 28276, [34006] = 28277,
- [34007] = 35299, [34007] = 28279, [34008] = 35297, [34008] = 28280,
- [34009] = 28282, [34010] = 28281, [42620] = 33165, [42974] = 33307,
- [44483] = 37332, [44494] = 37333, [44524] = 37344, [44556] = 37331,
- [44575] = 44484, [44576] = 44494, [44588] = 37340, [44590] = 37334,
- [44591] = 37347, [44595] = 44473, [44596] = 37330, [44621] = 37339,
- [44625] = 44485, [44631] = 37349, [45765] = 34872, [46578] = 35498,
- [46594] = 35500, [47051] = 35756, [47672] = 44471, [47898] = 44472,
- [47899] = 44488, [47901] = 44491, [59619] = 44496, [59621] = 44492,
- [59625] = 44495, [60691] = 44483, [60692] = 44489, [60707] = 44486,
- [60714] = 44487, [60763] = 44490, [60767] = 44498, [62256] = 44944,
- [62257] = 44945, [62948] = 45059, [64441] = 46027, [64579] = 46348,
-
- -------------------------------------------------------------------------------
- --Engineering
- -------------------------------------------------------------------------------
- [3928] = 4408, [3933] = 4409, [3939] = 13309, [3940] = 4410,
- [3944] = 4411, [3952] = 14639, [3954] = 4412, [3957] = 13308,
- [3959] = 4413, [3960] = 4414, [3966] = 4415, [3968] = 4416,
- [3969] = 13311, [3971] = 7742, [3972] = 4417, [3979] = 13310,
- [8243] = 6672, [8339] = 6716, [9269] = 7560, [9273] = 7561,
- [12587] = 10601, [12597] = 10602, [12607] = 10603, [12614] = 10604,
- [12615] = 10605, [12616] = 10606, [12617] = 10607, [12620] = 10608,
- [12624] = 10609, [15628] = 11828, [15633] = 11827, [19790] = 16041,
- [19791] = 16042, [19792] = 16043, [19793] = 16044, [19794] = 16045,
- [19795] = 16047, [19796] = 16048, [19799] = 16049, [19800] = 16051,
- [19814] = 16046, [19815] = 16050, [19819] = 16052, [19825] = 16053,
- [19830] = 16054, [19831] = 16055, [19833] = 16056, [21940] = 17720,
- [22793] = 18290, [22795] = 18292, [22797] = 18291, [23066] = 18647,
- [23067] = 18649, [23068] = 18648, [23069] = 18650, [23071] = 18651,
- [23077] = 18652, [23078] = 18653, [23079] = 18655, [23080] = 18656,
- [23081] = 18657, [23082] = 18658, [23096] = 18654, [23129] = 18661,
- [23507] = 19027, [24356] = 20000, [24357] = 20001, [26416] = 21724,
- [26417] = 21725, [26418] = 21726, [26420] = 21727, [26421] = 21728,
- [26422] = 21729, [26423] = 21730, [26424] = 21731, [26425] = 21732,
- [26426] = 21733, [26427] = 21734, [26428] = 21735, [26442] = 44919,
- [26443] = 44918, [28327] = 22729, [30313] = 23799, [30314] = 23800,
- [30315] = 23802, [30316] = 23803, [30317] = 23804, [30318] = 23805,
- [30325] = 23806, [30329] = 23807, [30332] = 23808, [30334] = 23809,
- [30337] = 23810, [30341] = 23811, [30344] = 23814, [30347] = 23815,
- [30348] = 23816, [30349] = 23817, [30547] = 23874, [30548] = 23888,
- [30551] = 35310, [30552] = 35311, [30556] = 23887, [32814] = 25887,
- [39895] = 32381, [43676] = 33804, [44391] = 34114, [46106] = 35191,
- [46107] = 35187, [46108] = 35189, [46109] = 35190, [46110] = 35192,
- [46111] = 35186, [46112] = 35193, [46113] = 35194, [46114] = 35195,
- [46115] = 35196, [46116] = 35197, [46697] = 35582, [60866] = 44502,
- [60867] = 44503, [72952] = 52022, [72953] = 52023,
-
- -------------------------------------------------------------------------------
- --Inscription
- -------------------------------------------------------------------------------
- [71101] = 50166, [71102] = 50168, [71015] = 50167,
-
- -------------------------------------------------------------------------------
- --Jewelcrafting
- -------------------------------------------------------------------------------
- [25320] = 20856, [25323] = 20855, [25339] = 20854, [25610] = 20970,
- [25612] = 20971, [25617] = 20973, [25618] = 20974, [25619] = 20975,
- [25622] = 20976, [26873] = 21940, [26875] = 21941, [26878] = 21942,
- [26881] = 21943, [26882] = 21944, [26887] = 21945, [26896] = 21947,
- [26897] = 21948, [26900] = 21949, [26906] = 21952, [26909] = 21953,
- [26910] = 21954, [26912] = 21955, [26914] = 21956, [26915] = 21957,
- [28903] = 23130, [28905] = 23131, [28906] = 23133, [28907] = 23134,
- [28910] = 23135, [28912] = 23136, [28914] = 23137, [28915] = 23138,
- [28916] = 23140, [28917] = 23141, [28918] = 31359, [28924] = 23143,
- [28927] = 23145, [28933] = 23146, [28936] = 23147,
- [28938] = 23148, [28944] = 23149, [28947] = 23150, [28948] = 23151,
- [28950] = 23152, [28953] = 23153, [28955] = 23154, [28957] = 23155,
- [31053] = 24158, [31054] = 24159, [31055] = 24160, [31056] = 24161,
- [31057] = 24162, [31058] = 24163, [31060] = 24164, [31061] = 24165,
- [31062] = 24174, [31063] = 24175, [31064] = 24176, [31065] = 24177,
- [31066] = 24178, [31067] = 24166, [31068] = 24167, [31070] = 24168,
- [31071] = 24169, [31072] = 24170, [31076] = 24171, [31077] = 24172,
- [31078] = 24173, [31079] = 24179, [31080] = 31358, [31081] = 24181,
- [31082] = 24182, [31083] = 24183, [31084] = 24193, [31085] = 24194,
- [31087] = 24195, [31088] = 35305, [31089] = 35306, [31090] = 24197,
- [31091] = 24198, [31092] = 35304, [31094] = 24201, [31095] = 24202,
- [31096] = 24203, [31097] = 24204, [31098] = 35307, [31099] = 24206,
- [31100] = 24207, [31101] = 24208, [31102] = 24209, [31103] = 24210,
- [31104] = 24211, [31105] = 24212, [31106] = 24213, [31107] = 24214,
- [31108] = 24215, [31109] = 24216, [31110] = 24217, [31111] = 24218,
- [31112] = 24219, [31113] = 24220, [31149] = 24200, [32866] = 25902,
- [32867] = 25903, [32868] = 25905, [32869] = 25906, [32870] = 25904,
- [32871] = 25907, [32872] = 25909, [32873] = 25908, [32874] = 25910,
- [34069] = 28291, [34590] = 28596, [37855] = 30826, [38503] = 31401,
- [38504] = 31402, [39451] = 31870, [39452] = 31875, [39455] = 31871,
- [39458] = 31872, [39462] = 31877, [39463] = 31876, [39466] = 31873,
- [39467] = 31874, [39470] = 31878, [39471] = 31879, [39705] = 35244,
- [39706] = 35246, [39710] = 35250, [39711] = 35248, [39712] = 35245,
- [39713] = 35249, [39714] = 35247, [39715] = 35263, [39716] = 35264,
- [39717] = 35262, [39718] = 35265, [39719] = 35255, [39720] = 35260,
- [39721] = 35259, [39722] = 35256, [39723] = 35261, [39724] = 35258,
- [39725] = 35257, [39727] = 35243, [39728] = 35242, [39729] = 35238,
- [39730] = 35240, [39731] = 35239, [39732] = 35241, [39733] = 35267,
- [39734] = 35269, [39735] = 35268, [39736] = 35266, [39737] = 35270,
- [39738] = 35271, [39739] = 35252, [39740] = 35254, [39741] = 35251,
- [39742] = 35253, [39961] = 33622, [39963] = 32411, [42558] = 33305,
- [42588] = 33155, [42589] = 33156, [42590] = 33157, [42591] = 33158,
- [42592] = 33159, [42593] = 33160, [43493] = 33783, [44794] = 34689,
- [46122] = 35198, [46123] = 35538, [46124] = 35200, [46125] = 35201,
- [46126] = 35533, [46127] = 35203, [46403] = 35322, [46404] = 35323,
- [46405] = 35325, [46597] = 35502, [46601] = 35505, [46775] = 35695,
- [46776] = 35696, [46777] = 35697, [46778] = 35698, [46779] = 35699,
- [46803] = 35708, [47053] = 35769, [47054] = 35766, [47055] = 35767,
- [47056] = 35768, [48789] = 37504, [53830] = 41576, [53857] = 41559,
- [53865] = 41575, [53869] = 41574, [53875] = 41566, [53877] = 41562,
- [53879] = 41565, [53884] = 41563, [53885] = 41561, [53888] = 41564,
- [53917] = 41567, [53919] = 41572, [53921] = 41568, [53924] = 41571,
- [53929] = 41573, [53932] = 41570, [53933] = 41569, [53943] = 41560,
- [53945] = 41577, [53946] = 41718, [53948] = 41719, [53949] = 41578,
- [53950] = 41817, [53951] = 41790, [53952] = 42138, [53954] = 41581,
- [53955] = 41728, [53957] = 41720, [53958] = 41580, [53959] = 41791,
- [53960] = 41727, [53961] = 41579, [53962] = 41784, [53963] = 41747,
- [53964] = 41785, [53965] = 41725, [53966] = 41783, [53967] = 41701,
- [53968] = 41740, [53970] = 41796, [53971] = 41703, [53972] = 41820,
- [53973] = 41702, [53974] = 41726, [53975] = 41789, [53976] = 41777,
- [53977] = 41780, [53978] = 41734, [53979] = 41794, [53980] = 41582,
- [53981] = 41733, [53982] = 41792, [53983] = 41689, [53984] = 41686,
- [53985] = 41688, [53986] = 41730, [53987] = 41690, [53988] = 41721,
- [53990] = 41732, [53991] = 41687, [53992] = 41779, [53993] = 41722,
- [53994] = 41818, [53995] = 41795, [53996] = 41723, [53997] = 41698,
- [53998] = 41697, [54000] = 41738, [54001] = 41693, [54002] = 41699,
- [54003] = 41781, [54004] = 41782, [54005] = 41737, [54006] = 41694,
- [54008] = 41724, [54009] = 41696, [54010] = 41739, [54011] = 41692,
- [54012] = 41819, [54013] = 41736, [54014] = 41735, [54019] = 41793,
- [54023] = 41778, [55384] = 41705, [55387] = 41743, [55388] = 41744,
- [55389] = 41704, [55390] = 41786, [55392] = 41706, [55393] = 41742,
- [55395] = 41787, [55396] = 41708, [55397] = 41798, [55398] = 41799,
- [55400] = 41710, [55401] = 41797, [55403] = 41711, [55404] = 41709,
- [55405] = 41788, [55407] = 41707, [56049] = 42298, [56052] = 42301,
- [56053] = 42309, [56054] = 42299, [56055] = 42314, [56056] = 42302,
- [56074] = 42300, [56076] = 42303, [56077] = 42304, [56079] = 42305,
- [56081] = 42306, [56083] = 42307, [56084] = 42308, [56085] = 42310,
- [56086] = 42311, [56087] = 42312, [56088] = 42313, [56089] = 42315,
- [56496] = 42648, [56497] = 42649, [56498] = 42650, [56499] = 42651,
- [56500] = 42652, [56501] = 42653, [58147] = 43317, [58148] = 43318,
- [58149] = 43319, [58150] = 43320, [58492] = 43485, [58507] = 43497,
- [58954] = 43597, [66556] = 46937, [66447] = 46917, [66429] = 46899,
- [66557] = 46938, [66430] = 46900, [66432] = 46902, [66433] = 46903,
- [66497] = 46924, [66561] = 46942, [66434] = 46904, [66498] = 46925,
- [66499] = 46926, [66436] = 46906, [66500] = 46927, [66437] = 46907,
- [66501] = 46928, [66565] = 46946, [66438] = 46908, [66502] = 46929,
- [66566] = 46947, [66439] = 46909, [66503] = 46930, [66567] = 46948,
- [66440] = 46910, [66504] = 46931, [66441] = 46911, [66505] = 46932,
- [66569] = 46950, [66442] = 46912, [66506] = 46933, [66570] = 46951,
- [66443] = 46913, [66444] = 46914, [66572] = 46953, [66445] = 46915,
- [66573] = 46956, [66446] = 46916, [66574] = 47007, [66575] = 47008,
- [66448] = 46918, [66576] = 47010, [66449] = 46919, [66577] = 47011,
- [66450] = 46920, [66578] = 47012, [66451] = 46921, [66579] = 47015,
- [66452] = 46922, [66580] = 47016, [66453] = 46923, [66581] = 47017,
- [66582] = 47018, [66583] = 47019, [66584] = 47020, [66586] = 47022,
- [68253] = 49112, [66338] = 46897, [66571] = 46952, [66564] = 46945,
- [66562] = 46943, [66560] = 46941, [66558] = 46939, [66554] = 46935,
- [66559] = 46940, [66585] = 47021, [66555] = 46936, [66587] = 47023,
- [66431] = 46901, [66428] = 46898, [66435] = 46905, [66563] = 46944,
- [66553] = 46934, [66568] = 46949,
-
- -------------------------------------------------------------------------------
- --Leatherworking
- -------------------------------------------------------------------------------
- [2158] = 2406, [2163] = 2407, [2164] = 2408, [2169] = 2409,
- [3762] = 4293, [3765] = 7360, [3767] = 4294, [3769] = 4296,
- [3771] = 4297, [3772] = 7613, [3773] = 4299, [3775] = 4298,
- [3777] = 4300, [3778] = 14635, [3779] = 4301, [4096] = 13287,
- [4097] = 13288, [5244] = 5083, [6702] = 5786, [6703] = 5787,
- [6704] = 5788, [6705] = 5789, [7133] = 5972, [7149] = 5973,
- [7153] = 5974, [7953] = 6474, [7954] = 6475, [7955] = 6476,
- [8322] = 6710, [9064] = 7288, [9070] = 7289, [9072] = 7290,
- [9146] = 7361, [9147] = 7362, [9148] = 7363, [9149] = 7364,
- [9195] = 7449, [9197] = 7450, [9202] = 7451, [9207] = 7452,
- [9208] = 7453, [10490] = 8384, [10509] = 8385, [10516] = 8409,
- [10520] = 8386, [10525] = 8395, [10529] = 8403, [10531] = 8387,
- [10533] = 8397, [10542] = 8398, [10544] = 8404, [10546] = 8405,
- [10554] = 8399, [10560] = 8389, [10562] = 8390, [10564] = 8400,
- [10566] = 8406, [10568] = 8401, [10570] = 8402, [10572] = 8407,
- [10574] = 8408, [19048] = 15724, [19049] = 15725, [19050] = 15726,
- [19051] = 15727, [19052] = 15728, [19053] = 15729, [19054] = 15730,
- [19055] = 15731, [19059] = 15732, [19060] = 15733, [19061] = 15734,
- [19062] = 15735, [19063] = 15737, [19064] = 15738, [19065] = 15739,
- [19066] = 15740, [19067] = 15741, [19068] = 20253, [19070] = 15743,
- [19071] = 15744, [19072] = 15745, [19073] = 15746, [19074] = 15747,
- [19075] = 15748, [19076] = 15749, [19077] = 15751, [19078] = 15752,
- [19079] = 15753, [19080] = 20254, [19081] = 15755, [19082] = 15756,
- [19083] = 15757, [19084] = 15758, [19085] = 15759, [19086] = 15760,
- [19087] = 15761, [19088] = 15762, [19089] = 15763, [19090] = 15764,
- [19091] = 15765, [19092] = 15768, [19093] = 15769, [19094] = 15770,
- [19095] = 15771, [19097] = 15772, [19098] = 15773, [19100] = 15774,
- [19101] = 15775, [19102] = 15776, [19103] = 15777, [19104] = 15779,
- [19107] = 15781, [20853] = 17022, [20854] = 17023, [20855] = 17025,
- [21943] = 17722, [22711] = 18239, [22727] = 18252, [22921] = 18514,
- [22922] = 18515, [22923] = 18516, [22926] = 18517, [22927] = 18518,
- [22928] = 18519, [23190] = 18731, [23399] = 18949, [23703] = 19326,
- [23704] = 19327, [23705] = 19328, [23706] = 19329, [23707] = 19330,
- [23708] = 19331, [23709] = 19332, [23710] = 19333, [24121] = 19769,
- [24122] = 19770, [24123] = 19771, [24124] = 19772, [24125] = 19773,
- [24703] = 20382, [24846] = 20506, [24847] = 20507, [24848] = 20508,
- [24849] = 20509, [24850] = 20510, [24851] = 20511, [24940] = 20576,
- [26279] = 21548, [28472] = 22771, [28473] = 22770, [28474] = 22769,
- [32455] = 25720, [32457] = 25721, [32458] = 25722, [32461] = 25725,
- [32482] = 25726, [32485] = 25728, [32487] = 25729, [32488] = 25731,
- [32489] = 25730, [32490] = 25732, [32493] = 25733, [32494] = 25734,
- [32495] = 25735, [32496] = 25736, [32497] = 25737, [32498] = 29213,
- [32499] = 29214, [32500] = 29215, [32501] = 29217, [32502] = 29219,
- [32503] = 29218, [35520] = 29669, [35521] = 29672, [35522] = 29673,
- [35523] = 29674, [35524] = 29675, [35525] = 29677, [35526] = 29682,
- [35527] = 29684, [35528] = 29691, [35529] = 29689, [35530] = 30444,
- [35531] = 29693, [35532] = 29698, [35533] = 29700, [35534] = 29701,
- [35535] = 29702, [35536] = 29703, [35537] = 29704, [35538] = 29713,
- [35539] = 34175, [35543] = 29717, [35544] = 34173, [35549] = 31361,
- [35554] = 31362, [35555] = 29720, [35557] = 29721, [35558] = 29723,
- [35559] = 35302, [35560] = 29725, [35561] = 29726, [35562] = 35303,
- [35563] = 29728, [35564] = 29729, [35567] = 29730, [35568] = 35300,
- [35572] = 29732, [35573] = 35301, [35574] = 29734, [36349] = 30301,
- [36351] = 30302, [36352] = 30303, [36353] = 30304, [36355] = 30305,
- [36357] = 30306, [36358] = 30307, [36359] = 30308, [39997] = 32429,
- [40001] = 32431, [40002] = 32432, [40003] = 32433, [40004] = 32434,
- [40005] = 32435, [40006] = 32436, [41156] = 32744, [41157] = 35523,
- [41158] = 35527, [41160] = 35528, [41161] = 35517, [41162] = 35524,
- [41163] = 35520, [41164] = 35521, [42546] = 33124, [42731] = 33205,
- [44359] = 34200, [44768] = 34218, [44953] = 34262, [45117] = 34491,
- [46132] = 35546, [46133] = 35541, [46134] = 35214, [46135] = 35215,
- [46136] = 35216, [46137] = 35217, [46138] = 35218, [46139] = 35549,
- [50970] = 44509, [50971] = 44510, [52733] = 32430,
- [57692] = 44559, [57694] = 44560, [57696] = 44561, [57699] = 44562,
- [57701] = 44563, [60645] = 44511, [60647] = 44512, [60697] = 44513,
- [60702] = 44514, [60703] = 44515, [60704] = 44516, [60705] = 44517,
- [60706] = 44518, [60711] = 44519, [60712] = 44520, [60715] = 44521,
- [60716] = 44522, [60718] = 44523, [60720] = 44524, [60721] = 44525,
- [60723] = 44526, [60725] = 44527, [60727] = 44528, [60728] = 44530,
- [60729] = 44531, [60730] = 44532, [60731] = 44533, [60732] = 44534,
- [60734] = 44535, [60735] = 44536, [60737] = 44537, [60743] = 44538,
- [60746] = 44539, [60747] = 44540, [60748] = 44541, [60749] = 44542,
- [60750] = 44543, [60751] = 44544, [60752] = 44545, [60754] = 44546,
- [60755] = 44547, [60756] = 44548, [60757] = 44549, [60758] = 44550,
- [60759] = 44551, [60760] = 44552, [60761] = 44553, [60996] = 44584,
- [60997] = 44585, [60998] = 44586, [60999] = 44587, [61000] = 44588,
- [61002] = 44589, [62176] = 44932, [62177] = 44933, [63194] = 45094,
- [63195] = 45095, [63196] = 45096, [63197] = 45097, [63198] = 45098,
- [63199] = 45099, [63200] = 45100, [63201] = 45101, [70554] = 49957,
- [70555] = 49958, [70556] = 49959, [70557] = 49961, [70558] = 49962,
- [70559] = 49963, [70560] = 49965, [70561] = 49966, [67136] = 47650,
- [67137] = 47646, [67138] = 47649, [67139] = 47647, [67141] = 47653,
- [67142] = 47651, [67143] = 47648, [67140] = 47652,
-
- -------------------------------------------------------------------------------
- --Smelting
- -------------------------------------------------------------------------------
- [22967] = 44956, [46353] = 35273,
-
- -------------------------------------------------------------------------------
- --Tailoring
- -------------------------------------------------------------------------------
- [2389] = 2598, [2403] = 2601, [3758] = 4292, [3844] = 4346,
- [3847] = 4345, [3849] = 4347, [3851] = 4349, [3854] = 7114,
- [3856] = 4350, [3857] = 14630, [3858] = 4351, [3860] = 4352,
- [3862] = 4355, [3863] = 4353, [3864] = 4356, [3868] = 4348,
- [3869] = 14627, [3870] = 6401, [3872] = 4354, [3873] = 10728,
- [6686] = 5771, [6688] = 5772, [6692] = 5773, [6693] = 5774,
- [6695] = 5775, [7629] = 6271, [7630] = 6270, [7633] = 6272,
- [7639] = 6274, [7643] = 6275, [7892] = 6390, [7893] = 6391,
- [8780] = 7092, [8782] = 7091, [8784] = 7090, [8786] = 7089,
- [8789] = 7087, [8793] = 7084, [8795] = 7085, [8797] = 7086,
- [8802] = 7088, [12047] = 10316, [12056] = 10300, [12059] = 10301,
- [12060] = 10302, [12064] = 10311, [12066] = 10312, [12075] = 10314,
- [12078] = 10315, [12080] = 10317, [12081] = 10318, [12084] = 10320,
- [12085] = 10321, [12086] = 10463, [12089] = 10323, [12091] = 10325,
- [12093] = 10326, [18403] = 14466, [18404] = 14467, [18405] = 14468,
- [18406] = 14469, [18407] = 14470, [18408] = 14471, [18409] = 14472,
- [18410] = 14473, [18411] = 14474, [18412] = 14476, [18413] = 14477,
- [18414] = 14478, [18415] = 14479, [18416] = 14480, [18417] = 14481,
- [18418] = 14482, [18419] = 14483, [18420] = 14484, [18421] = 14485,
- [18422] = 14486, [18423] = 14488, [18424] = 14489, [18434] = 14490,
- [18436] = 14493, [18437] = 14492, [18438] = 14491, [18439] = 14494,
- [18440] = 14497, [18441] = 14495, [18442] = 14496, [18444] = 14498,
- [18445] = 14499, [18446] = 14500, [18447] = 14501, [18448] = 14507,
- [18449] = 14504, [18450] = 14505, [18451] = 14506, [18452] = 14509,
- [18453] = 14508, [18454] = 14511, [18455] = 14510, [18456] = 14512,
- [18457] = 14513, [18458] = 14514, [18560] = 14526, [20848] = 17017,
- [20849] = 17018, [21945] = 17724, [22759] = 18265, [22866] = 18414,
- [22867] = 18415, [22868] = 18416, [22869] = 18417, [22870] = 18418,
- [22902] = 18487, [23662] = 19215, [23663] = 19218, [23664] = 19216,
- [23665] = 19217, [23666] = 19219, [23667] = 19220, [24091] = 19764,
- [24092] = 19765, [24093] = 19766, [24901] = 20546, [24902] = 20548,
- [24903] = 20547, [26085] = 21358, [26087] = 21371, [26403] = 44916,
- [26407] = 44917, [26747] = 21892, [26749] = 21893, [26750] = 21894,
- [26751] = 21895, [26752] = 21908, [26753] = 21909, [26754] = 21910,
- [26755] = 21911, [26756] = 21912, [26757] = 21914, [26758] = 21913,
- [26759] = 21915, [26760] = 21916, [26761] = 21918, [26762] = 21917,
- [26763] = 21919, [26773] = 21896, [26774] = 21897, [26775] = 21898,
- [26776] = 21899, [26777] = 21900, [26778] = 21901, [26779] = 21902,
- [26780] = 21903, [26781] = 21904, [26782] = 21905, [26783] = 21906,
- [26784] = 21907, [27658] = 22307, [27659] = 22308, [27660] = 22309,
- [27724] = 22310, [27725] = 22312, [28210] = 22683, [28480] = 22774,
- [28481] = 22773, [28482] = 22772, [31373] = 24316, [31430] = 24292,
- [31431] = 24293, [31432] = 24294, [31433] = 24295, [31434] = 35308,
- [31435] = 24297, [31437] = 24298, [31438] = 24299, [31440] = 24300,
- [31441] = 24301, [31442] = 35309, [31443] = 24303, [31444] = 24304,
- [31448] = 24305, [31449] = 24306, [31450] = 24307, [31451] = 24308,
- [31452] = 24309, [31453] = 24310, [31454] = 24311, [31455] = 24312,
- [31456] = 24313, [31459] = 24314, [36315] = 30280, [36316] = 30281,
- [36317] = 30282, [36318] = 30283, [36686] = 30483, [37873] = 30833,
- [37882] = 30842, [37883] = 30843, [37884] = 30844, [40020] = 32437,
- [40021] = 32438, [40023] = 32439, [40024] = 32440, [40060] = 32447,
- [41205] = 32754, [41206] = 32755, [41207] = 32752, [41208] = 32753,
- [44950] = 34261, [44958] = 34319, [46128] = 35204, [46129] = 35205,
- [46130] = 35206, [46131] = 35207, [49677] = 37915, [50194] = 38229,
- [50644] = 38327, [50647] = 38328, [55993] = 42172, [55994] = 42173,
- [55996] = 42175, [55997] = 42177, [55998] = 42176, [55999] = 42178,
- [56004] = 42183, [56005] = 42184, [56006] = 42185, [56009] = 42187,
- [56011] = 42188, [63924] = 45774, [70550] = 49953, [70551] = 49954,
- [70552] = 49955, [70553] = 49956, [63203] = 45102, [63205] = 45104,
- [63206] = 45105, [67145] = 47639, [67146] = 47638, [63204] = 45103,
- [67144] = 47636, [67147] = 47637,
-}
-
-local RECIPE_TO_SPELL_MAP = {}
-
-do
- for spell_id, recipe_id in pairs(SPELL_TO_RECIPE_MAP) do
- RECIPE_TO_SPELL_MAP[recipe_id] = spell_id
- end
-end
-
--------------------------------------------------------------------------------
--- Look up table of spell IDs for recipes which do not have a player flag
--- BASICALLY A TEMPORARY STORAGE FOR IDS, SO WE CAN SEE CLEANER SCANS AND WHAT NOT,
--- WE'LL GO BACK HERE LATER DOWN THE ROAD.
--------------------------------------------------------------------------------
-local NO_ROLE_FLAG = {
-
- --------------------------------------------------------------------------------------------
- -----ASSORTED CRAP
- --------------------------------------------------------------------------------------------
- [30344] = true, [30341] = true, [32814] = true, [23066] = true,
- [26421] = true, [36955] = true, [19788] = true, [23129] = true,
- [26422] = true, [12715] = true, [12899] = true, [56459] = true,
- [30307] = true, [26423] = true, [3918] = true, [23067] = true,
- [30308] = true, [3953] = true, [15255] = true, [26424] = true,
- [30548] = true, [44157] = true, [56462] = true, [19567] = true,
- [30552] = true, [23068] = true, [44155] = true, [28327] = true,
- [26425] = true, [56461] = true, [68067] = true, [15633] = true,
- [23096] = true, [12589] = true, [26442] = true, [26426] = true,
- [67920] = true, [9273] = true, [3926] = true, [6458] = true,
- [19793] = true, [55252] = true, [9271] = true, [26427] = true,
- [26443] = true, [30551] = true, [23486] = true, [3922] = true,
- [3924] = true, [12590] = true, [3928] = true, [3942] = true,
- [26428] = true, [3952] = true, [22704] = true, [12902] = true,
- [30569] = true, [15628] = true, [12895] = true, [21940] = true,
- [56349] = true, [12584] = true, [56477] = true, [30348] = true,
- [26416] = true, [53281] = true, [23507] = true, [12075] = true,
- [12079] = true, [26746] = true, [56000] = true,
-
- -----------------------------------------------------------------------------------------
- ---JEWELCRAFTING
- -----------------------------------------------------------------------------------------
- [55401] = true, [53995] = true, [66432] = true, [25255] = true,
- [66497] = true, [53996] = true, [56074] = true, [56202] = true,
- [66434] = true, [32801] = true, [28948] = true, [53997] = true,
- [39963] = true, [32866] = true, [66501] = true, [39452] = true,
- [53934] = true, [66502] = true, [55405] = true, [58954] = true,
- [56205] = true, [37855] = true, [38175] = true, [25305] = true,
- [25321] = true, [66505] = true, [54000] = true, [39742] = true,
- [56206] = true, [66506] = true, [32869] = true, [54001] = true,
- [56079] = true, [32259] = true, [32870] = true, [56208] = true,
- [32807] = true, [32871] = true, [26873] = true, [31061] = true,
- [32872] = true, [42591] = true, [46779] = true, [56530] = true,
- [42592] = true, [31062] = true, [56083] = true, [32874] = true,
- [56531] = true, [31063] = true, [56085] = true, [38503] = true,
- [56086] = true, [28938] = true, [38504] = true, [31064] = true,
- [31096] = true, [55384] = true, [25278] = true, [68253] = true,
- [43493] = true, [26925] = true, [31065] = true, [46403] = true,
- [53852] = true, [53916] = true, [39722] = true, [25615] = true,
- [28924] = true, [26926] = true, [53853] = true, [36526] = true,
- [31098] = true, [55388] = true, [46405] = true, [53854] = true,
- [39724] = true, [55389] = true, [26927] = true, [31051] = true,
- [53919] = true, [39725] = true, [55390] = true, [53856] = true,
- [53920] = true, [53952] = true, [26880] = true, [53857] = true,
- [31052] = true, [34069] = true, [25490] = true, [55393] = true,
- [39451] = true, [53956] = true, [44794] = true, [36524] = true,
- [55395] = true, [38068] = true, [28944] = true, [53957] = true,
- [31066] = true, [31082] = true, [66428] = true, [26909] = true,
- [55396] = true, [31097] = true, [25284] = true, [56084] = true,
- [62941] = true, [66431] = true, [53894] = true, [53958] = true,
- [58146] = true, [31099] = true, [47053] = true, [31067] = true,
- [28917] = true, [26903] = true, [36525] = true, [66503] = true,
- [56197] = true, [47054] = true, [53961] = true, [39715] = true,
- [31092] = true, [53960] = true, [31077] = true, [31101] = true,
- [39719] = true, [55399] = true, [31113] = true, [32808] = true,
- [53917] = true, [63743] = true, [39720] = true, [39721] = true,
- [42590] = true, [58149] = true, [56199] = true, [47056] = true,
- [28950] = true, [47280] = true, [32809] = true, [31072] = true,
- [25318] = true, [66429] = true, [62242] = true,
- ---------------------------------------------------------------------------------------
-
- ---------------------------------------------------------------------------------------
- ---COOKING
- ---------------------------------------------------------------------------------------
- [62050]= true, [22761]= true, [62051]= true, [8607]= true,
- [18238]= true, [6413]= true, [6417]= true, [42296]= true,
- [45557]= true, [6501]= true, [45558]= true, [18239]= true,
- [7752]= true, [7828]= true, [45560]= true, [64358]= true,
- [57421]= true, [45561]= true, [13028]= true, [2543]= true,
- [2545]= true, [25659]= true, [58512]= true, [45565]= true,
- [42305]= true, [45566]= true, [62350]= true, [7753]= true,
- [45695]= true, [9513]= true, [18244]= true, [20626]= true,
- [45569]= true, [43779]= true, [18245]= true, [45571]= true,
- [18246]= true, [37836]= true, [57433]= true, [20916]= true,
- [58521]= true, [18247]= true, [57435]= true, [7754]= true,
- [53056]= true, [58523]= true, [57437]= true, [57438]= true,
- [58525]= true, [45570]= true, [2538]= true, [2540]= true,
- [2548]= true, [33290]= true, [45562]= true, [15906]= true,
- [18241]= true, [45559]= true, [45551]= true, [57443]= true,
- [58527]= true, [43758]= true, [58528]= true, [8238]= true,
- [7751]= true, [7755]= true, [43761]= true, [7827]= true,
- [45552]= true, [45553]= true, [66038] = true, [66034] = true,
- ---------------------------------------------------------------------------------------
-
- ---------------------------------------------------------------------------------------
- ---BLACKSMITHING
- ---------------------------------------------------------------------------------------
- [10015] = true, [55202] = true, [16726] = true, [24399] = true,
- [15293] = true, [32655] = true, [3320] = true, [40033] = true,
- [34545] = true, [61010] = true, [16639] = true, [3115] = true,
- [3116] = true, [3117] = true, [16648] = true, [40034] = true,
- [9920] = true, [9928] = true, [29558] = true, [55839] = true,
- [9964] = true, [7818] = true, [55732] = true, [29694] = true,
- [3326] = true, [9950] = true, [59405] = true, [12260] = true,
- [16983] = true, [16991] = true, [23650] = true, [16640] = true,
- [2741] = true, [3513] = true, [3497] = true, [8768] = true,
- [19666] = true, [2662] = true, [2663] = true, [20201] = true,
- [16664] = true, [15294] = true, [3496] = true, [16645] = true,
- [29569] = true, [2737] = true, [14380] = true, [16992] = true,
- [36125] = true, [19667] = true, [22757] = true, [16665] = true,
- [59406] = true, [2738] = true, [2739] = true, [2740] = true,
- [24913] = true, [9933] = true, [20873] = true, [36126] = true,
- [40035] = true, [8880] = true, [23636] = true, [3292] = true,
- [3293] = true, [21161] = true, [32656] = true, [19668] = true,
- [9921] = true, [7222] = true, [3319] = true, [15295] = true,
- [20874] = true, [20890] = true, [3337] = true, [34546] = true,
- [16970] = true, [16978] = true, [61008] = true, [7224] = true,
- [11454] = true, [19669] = true, [55656] = true, [16667] = true,
- [16731] = true, [61009] = true, [9926] = true, [16984] = true,
- [21913] = true, [40036] = true, [9974] = true, [32657] = true,
- [32285] = true, [23638] = true, [10011] = true, [36131] = true,
- [27830] = true, [32284] = true, [16732] = true, [15292] = true,
- [15296] = true, [38478] = true, [20876] = true, [38475] = true,
- [23653] = true, [3325] = true, [14379] = true, [29729] = true,
- [2661] = true, [29728] = true, [16655] = true, [16993] = true,
- [3491] = true, [3494] = true, [3501] = true, [9959] = true,
- [9983] = true, [36262] = true, [10003] = true, [10007] = true,
- ---------------------------------------------------------------------------------------
-
- ---------------------------------------------------------------------------------------
- ----INSCRIPTION
- ---------------------------------------------------------------------------------------
- [58315] = true, [58331] = true, [58347] = true, [56974] = true, [56990] = true,
- [64256] = true, [64304] = true, [57166] = true, [57709] = true, [57214] = true,
- [57230] = true, [50603] = true, [57262] = true, [59338] = true, [58332] = true,
- [56959] = true, [56975] = true, [56991] = true, [57007] = true, [57023] = true,
- [53462] = true, [64257] = true, [64273] = true, [64289] = true, [57151] = true,
- [57167] = true, [57183] = true, [57710] = true, [57215] = true, [57247] = true,
- [50620] = true, [58301] = true, [59339] = true, [58333] = true, [59387] = true,
- [52840] = true, [59499] = true, [56960] = true, [56976] = true, [57008] = true,
- [57024] = true, [64258] = true, [64274] = true, [57168] = true, [57184] = true,
- [61288] = true, [57216] = true, [57232] = true, [58286] = true, [58302] = true,
- [59340] = true, [48114] = true, [64051] = true, [59484] = true, [59500] = true,
- [56961] = true, [56977] = true, [57009] = true, [57025] = true, [61177] = true,
- [64259] = true, [57121] = true, [64291] = true, [57153] = true, [57169] = true,
- [57185] = true, [57712] = true, [57217] = true, [57233] = true, [58287] = true,
- [58303] = true, [58319] = true, [56946] = true, [56978] = true, [56994] = true,
- [57010] = true, [57026] = true, [64260] = true, [57122] = true, [57154] = true,
- [57170] = true, [57186] = true, [57713] = true, [57218] = true, [57234] = true,
- [57266] = true, [59326] = true, [58320] = true, [58336] = true, [59486] = true,
- [59502] = true, [56963] = true, [56995] = true, [57011] = true, [57027] = true,
- [64261] = true, [64277] = true, [57155] = true, [57187] = true, [57714] = true,
- [57219] = true, [57235] = true, [58289] = true, [58305] = true, [58321] = true,
- [58337] = true, [69385] = true, [57243] = true, [64314] = true, [64313] = true,
- [56958] = true, [59487] = true, [59503] = true, [58288] = true, [56980] = true,
- [56996] = true, [57012] = true, [57028] = true, [59501] = true, [56948] = true,
- [57264] = true, [64246] = true, [64262] = true, [57124] = true, [64294] = true,
- [57156] = true, [57172] = true, [57188] = true, [57715] = true, [57220] = true,
- [57236] = true, [57268] = true, [58306] = true, [58322] = true, [58338] = true,
- [48247] = true, [57133] = true, [57270] = true, [57131] = true, [57129] = true,
- [50604] = true, [59488] = true, [59504] = true, [56965] = true, [56981] = true,
- [56997] = true, [57013] = true, [57029] = true, [64280] = true, [57114] = true,
- [64286] = true, [58299] = true, [57125] = true, [64295] = true, [64311] = true,
- [57164] = true, [57189] = true, [57716] = true, [57221] = true, [57237] = true,
- [57269] = true, [58307] = true, [58323] = true, [58339] = true, [64307] = true,
- [57119] = true, [57246] = true, [68166] = true, [64282] = true, [57250] = true,
- [59489] = true, [56957] = true, [56982] = true, [56998] = true, [57014] = true,
- [57117] = true, [64305] = true, [61677] = true, [52843] = true, [57126] = true,
- [64296] = true, [57158] = true, [64310] = true, [57190] = true, [56956] = true,
- [57238] = true, [60336] = true, [58308] = true, [58324] = true, [58340] = true,
- [64315] = true, [56949] = true, [56950] = true, [64308] = true, [56955] = true,
- [59490] = true, [59315] = true, [56983] = true, [56999] = true, [64267] = true,
- [57031] = true, [56954] = true, [64276] = true, [57249] = true, [64249] = true,
- [56953] = true, [57127] = true, [64297] = true, [57159] = true, [64275] = true,
- [57191] = true, [57207] = true, [57223] = true, [57239] = true, [50612] = true,
- [60337] = true, [57208] = true, [58325] = true, [48121] = true, [56952] = true,
- [56947] = true, [56951] = true, [64268] = true, [57123] = true, [59475] = true,
- [59491] = true, [56968] = true, [56984] = true, [57000] = true, [48248] = true,
- [58565] = true, [58317] = true, [64266] = true, [57252] = true, [64250] = true,
- [57112] = true, [57128] = true, [64298] = true, [57160] = true, [58316] = true,
- [57703] = true, [57719] = true, [57224] = true, [57240] = true, [57272] = true,
- [58310] = true, [58326] = true, [58342] = true, [57201] = true, [56945] = true,
- [57200] = true, [56944] = true, [57711] = true, [56985] = true, [57001] = true,
- [57199] = true, [57033] = true, [56943] = true, [57198] = true, [64251] = true,
- [57113] = true, [64283] = true, [64299] = true, [57161] = true, [57197] = true,
- [57704] = true, [57209] = true, [57225] = true, [57241] = true, [50614] = true,
- [57273] = true, [58311] = true, [58327] = true, [58343] = true, [52738] = true,
- [57196] = true, [64278] = true, [57195] = true, [58318] = true, [64284] = true,
- [57006] = true, [64316] = true, [56986] = true, [57002] = true, [59560] = true,
- [57034] = true, [58341] = true, [57192] = true, [64252] = true, [67600] = true,
- [57130] = true, [64300] = true, [57162] = true, [57244] = true, [57194] = true,
- [57210] = true, [57226] = true, [50599] = true, [57258] = true, [58296] = true,
- [58312] = true, [58328] = true, [58344] = true, [52739] = true, [58298] = true,
- [57274] = true, [57265] = true, [57251] = true, [59478] = true, [56971] = true,
- [56987] = true, [57003] = true, [57019] = true, [57035] = true, [57259] = true,
- [57263] = true, [57271] = true, [64253] = true, [57115] = true, [64285] = true,
- [57242] = true, [57163] = true, [57120] = true, [57706] = true, [57211] = true,
- [57227] = true, [50600] = true, [50616] = true, [58297] = true, [58313] = true,
- [58329] = true, [58345] = true, [50602] = true, [57248] = true, [59559] = true,
- [57157] = true, [57257] = true, [64309] = true, [64317] = true, [56972] = true,
- [56988] = true, [57004] = true, [57020] = true, [57036] = true, [62162] = true,
- [57030] = true, [64254] = true, [57116] = true, [57132] = true, [64302] = true,
- [64318] = true, [64270] = true, [57707] = true, [57212] = true, [57228] = true,
- [50601] = true, [57260] = true, [57276] = true, [58314] = true, [58330] = true,
- [58346] = true, [45382] = true, [57267] = true, [57275] = true, [64312] = true,
- [64279] = true, [50598] = true, [59480] = true, [59496] = true, [56973] = true,
- [56989] = true, [57005] = true, [57021] = true, [50619] = true, [50618] = true,
- [65245] = true, [50617] = true, [64255] = true, [64271] = true, [64287] = true,
- [64303] = true, [57165] = true, [57181] = true, [57708] = true, [57213] = true,
- [57229] = true, [57245] = true, [57261] = true, [57277] = true, [57253] = true,
- [71015] = true, [71101] = true, [71102] = true,
- ---------------------------------------------------------------------------------------
-
- ---------------------------------------------------------------------------------------
- ----ENCHANTING
- ---------------------------------------------------------------------------------------
- [46578] = true, [25125] = true, [13612] = true, [13620] = true, [13628] = true,
- [13640] = true, [13644] = true, [13648] = true, [59625] = true, [13700] = true,
- [17181] = true, [27920] = true, [27960] = true, [28016] = true, [45765] = true,
- [14810] = true, [63746] = true, [13836] = true, [20008] = true, [20032] = true,
- [13868] = true, [13421] = true, [13948] = true, [27905] = true, [27945] = true,
- [13501] = true, [7786] = true, [7788] = true, [13529] = true, [32664] = true,
- [44506] = true, [25127] = true, [20025] = true, [20033] = true, [13617] = true,
- [64579] = true, [60619] = true, [13657] = true, [13693] = true, [27914] = true,
- [44555] = true, [27954] = true, [27962] = true, [14807] = true, [32665] = true,
- [7421] = true, [13817] = true, [25072] = true, [44492] = true, [44524] = true,
- [7443] = true, [44556] = true, [25128] = true, [20026] = true, [7457] = true,
- [13378] = true, [34001] = true, [13917] = true, [13933] = true, [13937] = true,
- [13941] = true, [44621] = true, [28003] = true, [28027] = true, [13522] = true,
- [13538] = true, [25081] = true, [44494] = true, [20011] = true, [25129] = true,
- [44590] = true, [47672] = true, [20051] = true, [13622] = true, [13626] = true,
- [69412] = true, [60623] = true, [44383] = true, [13698] = true, [13702] = true,
- [23804] = true, [44623] = true, [28004] = true, [28028] = true, [14293] = true,
- [32667] = true, [13822] = true, [25082] = true, [44576] = true, [20028] = true,
- [20036] = true, [13890] = true, [13898] = true, [60609] = true, [59619] = true,
- [47898] = true, [7745] = true, [27957] = true, [13503] = true, [34006] = true,
- [7793] = true, [7795] = true, [59636] = true, [25083] = true, [20029] = true,
- [13631] = true, [13655] = true, [7861] = true, [7863] = true, [62256] = true,
- [13695] = true, [13858] = true, [44483] = true, [27968] = true, [7857] = true,
- [27967] = true, [42615] = true, [27958] = true, [42613] = true, [25084] = true,
- [20017] = true, [33992] = true, [34008] = true, [13663] = true, [60653] = true,
- [44528] = true, [14809] = true, [27961] = true, [47901] = true, [7418] = true,
- [7420] = true, [44488] = true, [7426] = true, [44616] = true, [13841] = true,
- [44596] = true, [17180] = true, [7454] = true, [33993] = true, [34009] = true,
- [27950] = true, [20031] = true, [13915] = true, [47900] = true, [13943] = true,
- [13947] = true, [13945] = true, [13464] = true, [27927] = true, [7771] = true,
- [20014] = true, [20030] = true, [27947] = true, [33994] = true, [28022] = true,
- [60692] = true, [25130] = true, [34005] = true, [13794] = true, [7748] = true,
- [44588] = true, [15596] = true, [7776] = true, [44584] = true, [13607] = true,
- [13653] = true, [20020] = true, [70524] = true, [71692] = true,
- ---------------------------------------------------------------------------------------
-
- ---------------------------------------------------------------------------------------
- ---TAILORING
- ---------------------------------------------------------------------------------------
- [12055] = true, [12059] = true, [12071] = true, [46131] = true, [23664] = true,
- [31433] = true, [31441] = true, [7624] = true, [26403] = true, [24902] = true,
- [22866] = true, [56001] = true, [18411] = true, [18419] = true, [18451] = true,
- [28208] = true, [6686] = true, [8766] = true, [23665] = true, [8786] = true,
- [26747] = true, [56002] = true, [26763] = true, [26779] = true, [31434] = true,
- [31450] = true, [60969] = true, [28480] = true, [22867] = true, [56003] = true,
- [18404] = true, [18412] = true, [18420] = true, [12044] = true, [63924] = true,
- [12056] = true, [12064] = true, [12080] = true, [12084] = true, [23666] = true,
- [56004] = true, [26780] = true, [31459] = true, [7892] = true, [60971] = true,
- [28481] = true, [22868] = true, [20848] = true, [56005] = true, [18405] = true,
- [19435] = true, [26086] = true, [18437] = true, [18453] = true, [27659] = true,
- [28210] = true, [40021] = true, [23667] = true, [26773] = true, [26781] = true,
- [26759] = true, [8774] = true, [31460] = true, [24903] = true, [3755] = true,
- [37882] = true, [3757] = true, [3758] = true, [50194] = true, [18446] = true,
- [6692] = true, [28482] = true, [22869] = true, [18439] = true, [20849] = true,
- [18440] = true, [2389] = true, [56007] = true, [18455] = true, [6521] = true,
- [18445] = true, [18406] = true, [18414] = true, [18422] = true, [12045] = true,
- [36318] = true, [18454] = true, [27660] = true, [24091] = true, [12065] = true,
- [12069] = true, [12077] = true, [12081] = true, [12085] = true, [27724] = true,
- [12093] = true, [40060] = true, [26087] = true, [26749] = true, [31373] = true,
- [26750] = true, [26782] = true, [28205] = true, [28209] = true, [36686] = true,
- [3813] = true, [2394] = true, [7629] = true, [18438] = true, [7633] = true,
- [40023] = true, [49677] = true, [26407] = true, [18452] = true, [7643] = true,
- [22870] = true, [26755] = true, [22902] = true, [3869] = true, [55993] = true,
- [8789] = true, [3839] = true, [3841] = true, [3844] = true, [18407] = true,
- [18415] = true, [3847] = true, [3848] = true, [3851] = true, [3852] = true,
- [24092] = true, [3854] = true, [3856] = true, [3857] = true, [8760] = true,
- [27725] = true, [8776] = true, [8780] = true, [8784] = true, [3865] = true,
- [55994] = true, [3868] = true, [26783] = true, [3871] = true, [3872] = true,
- [3873] = true, [31438] = true, [22759] = true, [12091] = true, [8804] = true,
- [8772] = true, [18560] = true, [18447] = true, [44950] = true, [60993] = true,
- [55899] = true, [55898] = true, [55995] = true, [2385] = true, [21945] = true,
- [6688] = true, [12066] = true, [18416] = true, [8465] = true, [12046] = true,
- [18448] = true, [3915] = true, [24093] = true, [8489] = true, [2386] = true,
- [12078] = true, [12082] = true, [60994] = true, [55900] = true, [2392] = true,
- [2393] = true, [23662] = true, [2396] = true, [55996] = true, [2399] = true,
- [26784] = true, [2402] = true, [2403] = true, [2406] = true, [31431] = true,
- [3864] = true, [8782] = true, [37884] = true, [37883] = true, [26751] = true,
- [50647] = true, [8802] = true, [8467] = true, [7893] = true, [40020] = true,
- [41208] = true, [22813] = true, [41207] = true, [37873] = true, [2387] = true,
- [55997] = true, [26085] = true, [8799] = true, [27658] = true, [8483] = true,
- [3914] = true, [18401] = true, [56006] = true, [18441] = true, [18449] = true,
- [28207] = true, [55769] = true, [18413] = true, [18421] = true, [46129] = true,
- [2963] = true, [2964] = true, [12061] = true, [12086] = true, [23663] = true,
- [26745] = true, [55998] = true, [3863] = true, [8764] = true, [31440] = true,
- [31448] = true, [12089] = true, [6695] = true, [40024] = true, [60990] = true,
- [50644] = true, [8793] = true, [46130] = true, [24901] = true, [3870] = true,
- [31437] = true, [44958] = true, [55999] = true, [3845] = true, [6693] = true,
- [3866] = true, [18456] = true, [18410] = true, [18418] = true, [2397] = true,
- [18434] = true, [18450] = true,
- ---------------------------------------------------------------------------------------
-
- ---------------------------------------------------------------------------------------
- ----LEATHERWORKING
- ---------------------------------------------------------------------------------------
- [9198] = true, [23704] = true, [60996] = true, [35549] = true, [22921] = true,
- [50958] = true, [10509] = true, [10525] = true, [19053] = true, [19085] = true,
- [19101] = true, [2149] = true, [36349] = true, [2153] = true, [60997] = true,
- [2159] = true, [2163] = true, [2165] = true, [35582] = true, [50959] = true,
- [46132] = true, [23705] = true, [60998] = true, [22922] = true, [46133] = true,
- [24121] = true, [19054] = true, [19070] = true, [19086] = true, [19102] = true,
- [32465] = true, [32481] = true, [22331] = true, [35520] = true, [35584] = true,
- [9207] = true, [6661] = true, [46134] = true, [23706] = true, [61000] = true,
- [35521] = true, [35585] = true, [50962] = true, [10518] = true, [39997] = true,
- [24122] = true, [19055] = true, [19087] = true, [19103] = true, [32466] = true,
- [32482] = true, [36353] = true, [35522] = true, [35554] = true, [50963] = true,
- [44953] = true, [46136] = true, [23707] = true, [61002] = true, [35523] = true,
- [35555] = true, [35587] = true, [50964] = true, [46137] = true, [24123] = true,
- [19072] = true, [19104] = true, [9064] = true, [9072] = true, [69386] = true,
- [32499] = true, [36355] = true, [7133] = true, [35524] = true, [35588] = true,
- [7153] = true, [9208] = true, [46138] = true, [23708] = true, [69388] = true,
- [35525] = true, [35557] = true, [10487] = true, [10511] = true, [46139] = true,
- [24124] = true, [19073] = true, [19089] = true, [32468] = true, [32500] = true,
- [10647] = true, [28472] = true, [35526] = true, [35558] = true, [45117] = true,
- [60622] = true, [23709] = true, [35527] = true, [3774] = true, [3778] = true,
- [3780] = true, [40003] = true, [24125] = true, [19058] = true, [19074] = true,
- [32485] = true, [32501] = true, [36359] = true, [3816] = true, [3818] = true,
- [28473] = true, [35528] = true, [35560] = true, [9193] = true, [40004] = true,
- [23710] = true, [8322] = true, [35529] = true, [35561] = true, [50970] = true,
- [2881] = true, [10520] = true, [40005] = true, [10544] = true, [10552] = true,
- [10560] = true, [19091] = true, [19107] = true, [32454] = true, [32502] = true,
- [28474] = true, [35530] = true, [50971] = true, [62448] = true, [7953] = true,
- [41157] = true, [36074] = true, [24846] = true, [35531] = true, [22928] = true,
- [28219] = true, [41158] = true, [36075] = true, [32487] = true, [32503] = true,
- [7126] = true, [9146] = true, [35532] = true, [35564] = true, [9194] = true,
- [9202] = true, [24655] = true, [36076] = true, [24847] = true, [35533] = true,
- [5244] = true, [10529] = true, [28220] = true, [19093] = true, [32456] = true,
- [52733] = true, [2158] = true, [2160] = true, [2162] = true, [2166] = true,
- [24848] = true, [35535] = true, [35567] = true, [28221] = true, [19094] = true,
- [44359] = true, [57690] = true, [32457] = true, [32473] = true, [32489] = true,
- [9147] = true, [35536] = true, [35568] = true, [9195] = true, [41163] = true,
- [6703] = true, [24849] = true, [20853] = true, [10482] = true, [10490] = true,
- [28222] = true, [10546] = true, [10554] = true, [41164] = true, [10570] = true,
- [19095] = true, [57692] = true, [32458] = true, [10650] = true, [35538] = true,
- [42731] = true, [24850] = true, [20854] = true, [44970] = true, [28223] = true,
- [19048] = true, [19064] = true, [19080] = true, [57694] = true, [9148] = true,
- [35540] = true, [35572] = true, [24851] = true, [20855] = true, [45100] = true,
- [10531] = true, [28224] = true, [57696] = true, [10619] = true, [19081] = true,
- [22727] = true, [35539] = true, [19079] = true, [10566] = true, [19065] = true,
- [10574] = true, [19097] = true, [60647] = true, [3753] = true, [9065] = true,
- [44343] = true, [3763] = true, [3767] = true, [3773] = true, [3775] = true,
- [3777] = true, [3779] = true, [32455] = true, [24940] = true, [19050] = true,
- [19082] = true, [23190] = true, [32461] = true, [60999] = true, [3817] = true,
- [44344] = true, [9149] = true, [35544] = true, [9197] = true, [19077] = true,
- [9060] = true, [19076] = true, [35573] = true, [40001] = true, [19066] = true,
- [19090] = true, [19098] = true, [22711] = true, [57699] = true, [9059] = true,
- [32480] = true, [64661] = true, [10562] = true, [40002] = true, [50936] = true,
- [6705] = true, [9058] = true, [24703] = true, [22923] = true, [60645] = true,
- [35577] = true, [2152] = true, [10556] = true, [10572] = true, [44770] = true,
- [36077] = true, [19059] = true, [19075] = true, [35580] = true, [20648] = true,
- [2169] = true, [60643] = true, [19088] = true, [6702] = true, [6704] = true,
- [35543] = true, [7149] = true, [36078] = true, [36079] = true, [23703] = true,
- [35534] = true, [57701] = true, [46135] = true, [19047] = true, [20649] = true,
- [40006] = true, [3765] = true, [41156] = true, [3771] = true, [50956] = true,
- [19061] = true, [20650] = true, [32467] = true, [35537] = true, [22926] = true,
- [4096] = true, [19062] = true, [44768] = true, [35576] = true, [19063] = true,
- [9062] = true, [9070] = true, [32495] = true,
- ---------------------------------------------------------------------------------------
-
- ---------------------------------------------------------------------------------------
- -----ALCHEMY
- ---------------------------------------------------------------------------------------
- [53898] = true, [28579] = true, [17566] = true, [53771] = true, [7256] = true,
- [53899] = true, [11452] = true, [11460] = true, [11468] = true, [3170] = true,
- [3172] = true, [3174] = true, [3176] = true, [53836] = true, [53900] = true,
- [28564] = true, [28580] = true, [54220] = true, [17551] = true, [53773] = true,
- [53837] = true, [62213] = true, [54221] = true, [53774] = true, [53838] = true,
- [6617] = true, [53902] = true, [28581] = true, [2331] = true, [2335] = true,
- [2337] = true, [53775] = true, [53839] = true, [11453] = true, [7836] = true,
- [24266] = true, [41500] = true, [53904] = true, [53936] = true, [28566] = true,
- [28582] = true, [3452] = true, [3454] = true, [33732] = true, [17553] = true,
- [22732] = true, [53777] = true, [53905] = true, [53937] = true, [33733] = true,
- [62409] = true, [25146] = true, [41502] = true, [53938] = true, [28551] = true,
- [28567] = true, [28583] = true, [62410] = true, [7181] = true, [17570] = true,
- [17634] = true, [53779] = true, [7257] = true, [53939] = true, [11478] = true,
- [17187] = true, [53812] = true, [28552] = true, [28568] = true, [28584] = true,
- [60366] = true, [57425] = true, [17635] = true, [53781] = true, [60367] = true,
- [4508] = true, [53782] = true, [24365] = true, [6618] = true, [53942] = true,
- [28569] = true, [28585] = true, [29688] = true, [57427] = true, [17556] = true,
- [17572] = true, [17636] = true, [53783] = true, [11479] = true, [7837] = true,
- [7841] = true, [53784] = true, [24366] = true, [53848] = true, [28554] = true,
- [28570] = true, [28586] = true, [58868] = true, [33741] = true, [24367] = true,
- [28555] = true, [28571] = true, [17574] = true, [17638] = true, [7258] = true,
- [11448] = true, [11456] = true, [11464] = true, [11480] = true, [3171] = true,
- [3173] = true, [3175] = true, [24368] = true, [28572] = true, [28588] = true,
- [45061] = true, [66658] = true, [17559] = true, [17575] = true, [66659] = true,
- [66660] = true, [63732] = true, [28573] = true, [66662] = true, [17560] = true,
- [2330] = true, [2332] = true, [2334] = true, [66663] = true, [11457] = true,
- [11465] = true, [11473] = true, [66664] = true, [3449] = true, [3451] = true,
- [3453] = true, [17561] = true, [17577] = true, [28543] = true, [28575] = true,
- [7179] = true, [17562] = true, [17578] = true, [7255] = true, [7259] = true,
- [11458] = true, [11466] = true, [38962] = true, [53776] = true, [12609] = true,
- [53780] = true, [60893] = true, [58871] = true, [3448] = true, [3450] = true,
- [3447] = true, [4942] = true, [28576] = true, [15833] = true, [17576] = true,
- [41503] = true, [60350] = true, [41501] = true, [17563] = true, [42736] = true,
- [54213] = true, [41458] = true, [6624] = true, [39636] = true, [28577] = true,
- [32765] = true, [38070] = true, [17564] = true, [17580] = true, [53895] = true,
- [11451] = true, [39637] = true, [28546] = true, [28562] = true, [28578] = true,
- [60354] = true, [32766] = true, [17565] = true, [22808] = true, [39639] = true,
- [60355] = true, [56519] = true,
- ---------------------------------------------------------------------------------------
-
- ---------------------------------------------------------------------------------------
- ----ENGINEERING
- ---------------------------------------------------------------------------------------
- [23081] = true, [12586] = true, [12594] = true, [12622] = true, [30347] = true,
- [44391] = true, [30547] = true, [56464] = true, [12754] = true, [12758] = true,
- [23489] = true, [23082] = true, [8243] = true, [9269] = true, [30316] = true,
- [30332] = true, [12906] = true, [8339] = true, [26420] = true, [56514] = true,
- [39971] = true, [12599] = true, [12603] = true, [12607] = true, [43676] = true,
- [12619] = true, [54998] = true, [30349] = true, [56468] = true, [12755] = true,
- [12759] = true, [63750] = true, [39973] = true, [56465] = true, [56469] = true,
- [30318] = true, [30334] = true, [55016] = true, [12903] = true, [54793] = true,
- [19795] = true, [8895] = true, [19819] = true, [30558] = true, [39895] = true,
- [23069] = true, [23077] = true, [12596] = true, [30303] = true, [56471] = true,
- [12624] = true, [19796] = true, [56472] = true, [12760] = true, [63770] = true,
- [23070] = true, [23078] = true, [61471] = true, [30304] = true, [30312] = true,
- [12908] = true, [12597] = true, [3930] = true, [24356] = true, [67839] = true,
- [67326] = true, [56474] = true, [30560] = true, [30568] = true, [30314] = true,
- [3929] = true, [56475] = true, [19830] = true, [3946] = true, [54736] = true,
- [30563] = true, [24357] = true, [30337] = true, [12591] = true, [19814] = true,
- [60866] = true, [12716] = true, [23071] = true, [23079] = true, [12585] = true,
- [3923] = true, [3925] = true, [30305] = true, [12621] = true, [30329] = true,
- [3931] = true, [3932] = true, [3933] = true, [3936] = true, [3937] = true,
- [3938] = true, [3939] = true, [3941] = true, [56473] = true, [3944] = true,
- [3945] = true, [3947] = true, [54999] = true, [3949] = true, [3950] = true,
- [26417] = true, [12717] = true, [3954] = true, [3955] = true, [3957] = true,
- [3958] = true, [3961] = true, [3962] = true, [3963] = true, [3965] = true,
- [3966] = true, [3967] = true, [3968] = true, [3969] = true, [3971] = true,
- [3972] = true, [3973] = true, [7430] = true, [3977] = true, [3978] = true,
- [3979] = true, [19790] = true, [23080] = true, [12620] = true, [30309] = true,
- [30346] = true, [12905] = true, [41307] = true, [8334] = true, [56460] = true,
- [56476] = true, [12718] = true, [26418] = true, [19791] = true, [3960] = true,
- [19815] = true, [13240] = true, [19831] = true, [30570] = true, [19799] = true,
- [30306] = true, [30310] = true, [26011] = true, [36954] = true, [3919] = true,
- [3920] = true, [19800] = true, [12617] = true, [30311] = true, [56463] = true,
- [72952] = true, [72953] = true,
- ---------------------------------------------------------------------------------------
-}
-
-local function ItemLinkToID(link)
- if not link then
- return
- end
- local _, _, id_num = string.find(link,"item:(%d+):")
-
- if id_num then
- return tonumber(id_num)
- end
-end
-
-
-local function LoadRecipe()
- local recipe_list = private.recipe_list
-
- if addon.db.profile.autoloaddb then
- for idx, prof in pairs(PROFESSIONS) do
- addon:InitializeRecipe(prof)
- end
- end
- return recipe_list
-
-end
-
--------------------------------------------------------------------------------
--- Creates a reverse lookup for a recipe list
--------------------------------------------------------------------------------
-local GetReverseLookup
-do
- local reverse_lookup = {}
-
- function GetReverseLookup(recipe_list)
- if not recipe_list then
- addon:Print(L["DATAMINER_NODB_ERROR"])
- return
- end
- twipe(reverse_lookup)
-
- for i in pairs(recipe_list) do
- --if t[recipe_list[i].name] then addon:Print("Dupe: " .. i) end
- reverse_lookup[recipe_list[i].name] = i
- end
- return reverse_lookup
- end
-
-end
-
--------------------------------------------------------------------------------
--- Tooltip for data-mining.
--------------------------------------------------------------------------------
-local ARLDatamineTT = CreateFrame("GameTooltip", "ARLDatamineTT", UIParent, "GameTooltipTemplate")
-
-do
- -- Tables used in all the Scan functions within this do block. -Torhal
- local info, output = {}, {}
-
- --- Function to compare the skill levels of a trainers recipes with those in the ARL database.
- -- @name AckisRecipeList:ScanSkillLevelData
- -- @param autoscan True when autoscan is enabled in preferences, it will surpress output letting you know when a scan has occured.
- -- @return Does a comparison of the information in your internal ARL database, and those items which are available on the trainer. Compares the skill levels between the two.
- function addon:ScanSkillLevelData(autoscan)
- if not IsTradeskillTrainer() then
- if not autoscan then
- self:Print(L["DATAMINER_SKILLLEVEL_ERROR"])
- end
- return
- end
- local recipe_list = LoadRecipe() -- Get internal database
-
- if not recipe_list then
- self:Print(L["DATAMINER_NODB_ERROR"])
- return
- end
- -- Get the initial trainer filters
- local avail = GetTrainerServiceTypeFilter("available")
- local unavail = GetTrainerServiceTypeFilter("unavailable")
- local used = GetTrainerServiceTypeFilter("used")
-
- -- Clear the trainer filters
- SetTrainerServiceTypeFilter("available", 1)
- SetTrainerServiceTypeFilter("unavailable", 1)
- SetTrainerServiceTypeFilter("used", 1)
-
- twipe(info)
-
- -- Get the skill levels from the trainer
- for i = 1, GetNumTrainerServices(), 1 do
- local name = GetTrainerServiceInfo(i)
- local _, skilllevel = GetTrainerServiceSkillReq(i)
-
- if not skilllevel then
- skilllevel = 0
- end
- info[name] = skilllevel
- end
- local found = false
-
- twipe(output)
-
- for i in pairs(recipe_list) do
- local i_name = recipe_list[i].name
-
- if info[i_name] and info[i_name] ~= recipe_list[i].skill_level then
- found = true
- tinsert(output, L["DATAMINER_SKILLELVEL"]:format(i_name, recipe_list[i].skill_level, info[i_name]))
- end
- end
- tinsert(output, "Trainer Skill Level Scan Complete.")
-
- if found then
- self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
- end
- -- Reset the filters to what they were before
- SetTrainerServiceTypeFilter("available", avail or 0)
- SetTrainerServiceTypeFilter("unavailable", unavail or 0)
- SetTrainerServiceTypeFilter("used", used or 0)
- end
-
- local teach, noteach = {}, {}
-
- --- Function to compare which recipes are available from a trainer and compare with the internal ARL database.
- -- @name AckisRecipeList:ScanTrainerData
- -- @param autoscan True when autoscan is enabled in preferences, it will surpress output letting you know when a scan has occured.
- -- @return Does a comparison of the information in your internal ARL database, and those items which are available on the trainer.
- -- Compares the acquire information of the ARL database with what is available on the trainer.
- function addon:ScanTrainerData(autoscan)
- if not (UnitExists("target") and (not UnitIsPlayer("target")) and (not UnitIsEnemy("player", "target"))) then -- Make sure the target exists and is a NPC
- if not autoscan then
- self:Print(L["DATAMINER_TRAINER_NOTTARGETTED"])
- end
- return
- end
- local targetname = UnitName("target") -- Get its name
- local targetID = tonumber(string.sub(UnitGUID("target"), -12, -7), 16) -- Get the NPC ID
-
- if not IsTradeskillTrainer() then -- Are we at a trade skill trainer?
- if not autoscan then
- self:Print(L["DATAMINER_SKILLLEVEL_ERROR"])
- end
- return
- end
- local recipe_list = LoadRecipe() -- Get internal database
-
- if not recipe_list then
- self:Print(L["DATAMINER_NODB_ERROR"])
- return
- end
-
- -- Get the initial trainer filters
- local avail = GetTrainerServiceTypeFilter("available")
- local unavail = GetTrainerServiceTypeFilter("unavailable")
- local used = GetTrainerServiceTypeFilter("used")
-
- -- Clear the trainer filters
- SetTrainerServiceTypeFilter("available", 1)
- SetTrainerServiceTypeFilter("unavailable", 1)
- SetTrainerServiceTypeFilter("used", 1)
-
- if GetNumTrainerServices() == 0 then
- self:Print("Warning: Trainer is bugged, reporting 0 trainer items.")
- end
- twipe(info)
-
- -- Get all the names of recipes from the trainer
- for i = 1, GetNumTrainerServices(), 1 do
- local name = GetTrainerServiceInfo(i)
- info[name] = true
- end
- twipe(teach)
- twipe(noteach)
- twipe(output)
-
- -- Dump out trainer info
- tinsert(output, L["DATAMINER_TRAINER_INFO"]:format(targetname, targetID))
-
- local teachflag = false
- local noteachflag = false
-
- for i in pairs(recipe_list) do
- local recipe = recipe_list[i]
- local i_name = recipe.name
- local acquire = recipe["acquire_data"]
-
- local train_data = acquire[A.TRAINER]
-
- if info[i_name] then
- local found = false
-
- if train_data then
- for id_num in pairs(train_data) do
- if id_num == targetID then
- found = true
- break
- end
- end
- end
-
- if not found then
- tinsert(teach, i)
- teachflag = true
-
- if not recipe:IsFlagged("common1", "TRAINER") then
- tinsert(output, ": Trainer flag needs to be set.")
- end
- end
- -- Trainer does not teach this recipe
- else
- local found = false
-
- if train_data then
- for id_num in pairs(train_data) do
- if id_num == targetID then
- found = true
- break
- end
- end
- end
-
- if found then
- noteachflag = true
- tinsert(noteach, i)
- end
- end
- end
-
- if teachflag then
- tinsert(output, "Missing entries (need to be added):")
- tsort(teach)
-
- for i in ipairs(teach) do
- tinsert(output, L["DATAMINER_TRAINER_TEACH"]:format(teach[i], recipe_list[teach[i]].name))
- end
- end
-
- if noteachflag then
- tinsert(output, "Extra entries (need to be removed):")
- tsort(noteach)
-
- for i in ipairs(noteach) do
- tinsert(output, L["DATAMINER_TRAINER_NOTTEACH"]:format(noteach[i], recipe_list[noteach[i]].name))
- end
- end
- tinsert(output, "Trainer Acquire Scan Complete.")
- tinsert(output, "If you're doing an engineering scan, there may be some goggles listed as extra. These goggles ONLY show up for those classes who can make them, so they may be false positives.")
-
- if teachflag or noteachflag then
- self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
- end
- -- Reset the filters to what they were before
- SetTrainerServiceTypeFilter("available", avail or 0)
- SetTrainerServiceTypeFilter("unavailable", unavail or 0)
- SetTrainerServiceTypeFilter("used", used or 0)
- end
-end -- do
-
---- Generates tradeskill links for all professions so you can scan them for completeness.
--- @name AckisRecipeList:GenerateLinks
--- @return Generates tradeskill links with all recipes. Used for testing to see if a recipe is missing from the database or not.
-function addon:GenerateLinks()
- -- This code adopted from Gnomish Yellow Pages with permission
-
- local guid = UnitGUID("player")
- local playerGUID = string.gsub(guid, "0x0+", "")
-
- -- Listing of all tradeskill professions
- local tradelist = {51304, 51300, 51313, 51306, 45363, 51311, 51302, 51309, 51296, 45542}
-
---[[
- local encodingLength = floor((#recipeList+5) / 6)
-
- local encodedString = string.rep("/", encodingLength)
-]]--
- local bitmap = {}
- bitmap[45542] = "8bffAA" -- First Aid 100% 17/17 recipes
- bitmap[51296] = "2/6///7///9f///7//////////g///B" -- Cooking 98.2% 166/169 recipes
- --bitmap[51306] = "4/////////////3nFA+///9+/P7//f//n//9dgdJgHA87/3f/TolD" -- Engineering (53)
- bitmap[51306] = "4/////////////3nFA+///9+/P7//f//n//9dgdJgHA87/3f/Tol3B" -- Engineering
- bitmap[51302] = "e+//ff////d//u//v//n+vv7/+ujr7/9////bg/+////f344//dA4I8j/X//B4/vu5/////////////////nvA8/M8/D" -- Leatherworking 85.4% 451/528 recipes
- bitmap[51304] = "2//v//////f////3//v///////5//////////9/////v" -- Alchemy 100% 251/251 recipes
- bitmap[51300] = "2//////f7fM//f/f53/+//7///ze8c6q/f9///P2/////m4BAA2XIG+dFA8//PC////4//z//////////Pwvy//H" -- Blacksmithing 82.9% 413/498 recipes
- bitmap[51309] = "4//+/+5a79rv7/vx2/65t3nZ3f33N33LJq/z54Hx//mK7w1GQgFA+AQ4/////7//7//9//2wD" -- Tailoring 74.3% 303/408 recipes
- bitmap[51311] = "8//3////fzj//u//////v/7///9///33////////Pw////////////////////////3///////////////////////////D" -- Jewelcrafting 97.5% 540/554 recipes
- bitmap[45363] = "g////7////3///////////////////////////////////////////////////fHM+3dqhGYa0f" --Inscription 92.5% 407/440 recipes
- bitmap[51313] = "4//////////7///////////w//+//9/n7///////3f//////ZsD" -- Enchanting 94.3% 279/296 recipes
-
- for i in pairs(tradelist) do
-
- local tradeName = GetSpellInfo(tradelist[i])
- local tradelink = {}
- tradelink[1] = "|cffffd000|Htrade:"
- tradelink[2] = tradelist[i]
- tradelink[3] = ":450:450:"
- tradelink[4] = playerGUID
- tradelink[5] = ":"
- tradelink[6] = bitmap[tradelist[i]]
- tradelink[7] = "|h["
- tradelink[8] = tradeName
- tradelink[9] = "]|h|r"
-
- if (bitmap[tradelist[i]]) then
- self:Print(tconcat(tradelink, ""))
- else
- self:Print("There currently is not a generated tradeskill link for: " .. tradeName)
- end
- -- /script DEFAULT_CHAT_FRAME:AddMessage(string.gsub(GetTradeSkillListLink(), "\124", "\124\124"))
- end
-
-end
-
--------------------------------------------------------------------------------
---- Scans the items in the specified profession
--------------------------------------------------------------------------------
-do
- local ORDERED_PROFESSIONS = private.ordered_professions
-
- local recipe_list = {}
- local output = {}
-
- local function Sort_AscID(a, b)
- local reca, recb = private.recipe_list[a], private.recipe_list[b]
-
- return reca.spell_id < recb.spell_id
- end
-
- local function SortRecipeList()
- local sorted_recipes = addon.sorted_recipes
- twipe(sorted_recipes)
-
- for n, v in pairs(recipe_list) do
- tinsert(sorted_recipes, n)
- end
- table.sort(sorted_recipes, Sort_AscID)
- end
-
- local function ProfessionScan(prof_name)
- local master_list = LoadRecipe()
-
- if not master_list then
- addon:Print(L["DATAMINER_NODB_ERROR"])
- return
- end
- twipe(recipe_list)
-
- if prof_name == private.professions["Smelting"]:lower() then
- prof_name = private.mining_name:lower()
- end
-
- for i in pairs(master_list) do
- local prof = string.lower(master_list[i].profession)
-
- if prof and prof == prof_name then
- recipe_list[i] = master_list[i]
- end
- end
- SortRecipeList()
- twipe(output)
-
- -- Parse the entire recipe database
- for index, id in ipairs(addon.sorted_recipes) do
- local ttscantext = addon:TooltipScanRecipe(id, false, true)
-
- if ttscantext and ttscantext ~= "" then
- tinsert(output, ttscantext)
- end
- end
-
- if #output == 0 then
- addon:Debug("ProfessionScan(): output is empty.")
- end
- addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
- ARLDatamineTT:Hide()
- end
-
- --- Parses all recipes for a specified profession, scanning their tool tips.
- -- @name AckisRecipeList:ScanProfession
- -- @usage AckisRecipeList:ScanProfession("first aid")
- -- @param prof_name The profession name or the spell ID of it, which you wish to scan.
- -- @return Recipes in the given profession have their tooltips scanned.
- function addon:ScanProfession(prof_name)
- if type(prof_name) == "number" then
- prof_name = GetSpellInfo(prof_name)
- end
-
- local found = false
- prof_name = string.lower(prof_name)
-
- local scan_all = prof_name == "all"
-
- if not scan_all then
- for idx, name in ipairs(ORDERED_PROFESSIONS) do
- if prof_name == name:lower() then
- found = true
- break
- end
- end
-
- if not found then
- self:Print(L["DATAMINER_NODB_ERROR"])
- return
- end
-
- ProfessionScan(prof_name)
- else
- for idx, name in ipairs(ORDERED_PROFESSIONS) do
- ProfessionScan(name:lower())
- end
- end
- end
-
- local FILTER_STRINGS = private.filter_strings
- local ACQUIRE_STRINGS = private.acquire_strings
- local REP_LEVELS = private.rep_level_strings
- local FACTION_NAMES = private.faction_strings
- local Q = private.item_quality_names
- local V = private.game_version_names
-
- local NUM_FILTER_FLAGS = 128
-
- local FUNCTION_FORMATS = {
- [A.TRAINER] = "self:AddRecipeTrainer(%d, %s)",
- [A.VENDOR] = "self:AddRecipeVendor(%d, %s)",
- [A.MOB_DROP] = "self:AddRecipeMobDrop(%d, %s)",
- [A.WORLD_DROP] = "self:AddRecipeWorldDrop(%d, %s)",
- [A.QUEST] = "self:AddRecipeQuest(%d, %s)",
- }
-
- local function RecipeDump(id, single)
- local recipe = private.recipe_list[id or 1]
-
- if single and not recipe then
- addon:Print("Invalid recipe ID.")
- return
- end
- local flag_string
- local specialty = not recipe.specialty and "" or (", "..recipe.specialty)
-
- tinsert(output, string.format("-- %s -- %d", recipe.name, recipe.spell_id))
- tinsert(output, string.format("AddRecipe(%d, %d, %s, Q.%s, V.%s, %d, %d, %d, %d%s)",
- recipe.spell_id, recipe.skill_level, tostring(recipe.item_id), Q[recipe.quality], V[recipe.genesis],
- recipe.optimal_level, recipe.medium_level, recipe.easy_level, recipe.trivial_level, specialty))
-
- for table_index, bits in ipairs(private.bit_flags) do
- for flag_name, flag in pairs(bits) do
- local bitfield = recipe.flags[private.flag_members[table_index]]
-
- if bitfield and bit.band(bitfield, flag) == flag then
- if not flag_string then
- flag_string = "F."..FILTER_STRINGS[private.filter_flags[flag_name]]
- else
- flag_string = flag_string..", ".."F."..FILTER_STRINGS[private.filter_flags[flag_name]]
- end
- end
- end
- end
- tinsert(output, string.format("self:AddRecipeFlags(%d, %s)", recipe.spell_id, flag_string))
-
- flag_string = nil
-
- for acquire_type, acquire_info in pairs(recipe.acquire_data) do
- if acquire_type == A.REPUTATION then
- for rep_id, rep_info in pairs(acquire_info) do
- local faction_string = FACTION_NAMES[rep_id]
-
- if not faction_string then
- faction_string = rep_id
- addon:Printf("Recipe %d (%s) - no string for faction %d", recipe.spell_id, recipe.name, rep_id)
- else
- faction_string = "FAC."..faction_string
- end
-
- for rep_level, level_info in pairs(rep_info) do
- local rep_string = "REP."..REP_LEVELS[rep_level or 1]
- local values
-
- for vendor_id in pairs(level_info) do
- values = values and (values..", "..vendor_id) or vendor_id
- end
- tinsert(output, string.format("self:AddRecipeRepVendor(%d, %s, %s, %s)", recipe.spell_id, faction_string, rep_string, values))
- end
- end
- elseif FUNCTION_FORMATS[acquire_type] then
- local values
-
- for id_num in pairs(acquire_info) do
- local saved_id = (type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
- values = values and (values..", "..saved_id) or saved_id
- end
- tinsert(output, string.format(FUNCTION_FORMATS[acquire_type], recipe.spell_id, values))
- else
- for id_num in pairs(acquire_info) do
- if not flag_string then
- flag_string = "A."..ACQUIRE_STRINGS[acquire_type]..", "..(type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
- else
- flag_string = flag_string..", ".."A."..ACQUIRE_STRINGS[acquire_type]..", "..(type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
- end
- end
- end
- end
-
- if flag_string then
- tinsert(output, string.format("self:AddRecipeAcquire(%d, %s)", recipe.spell_id, flag_string))
- end
- tinsert(output, "")
- end
-
- local function ProfessionDump(prof_name)
- local master_list = LoadRecipe()
-
- if not master_list then
- addon:Print(L["DATAMINE_NODB_ERROR"])
- return
- end
- twipe(recipe_list)
-
- if prof_name == private.professions["Smelting"]:lower() then
- prof_name = private.mining_name:lower()
- end
- for i in pairs(master_list) do
- local prof = string.lower(master_list[i].profession)
-
- if prof and prof == prof_name then
- recipe_list[i] = master_list[i]
- end
- end
- SortRecipeList()
- twipe(output)
-
- for index, id in ipairs(addon.sorted_recipes) do
- RecipeDump(id, false)
- end
- addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
- end
-
- function addon:DumpRecipe(id_num)
- twipe(output)
- RecipeDump(id_num, true)
- addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
- end
-
- function addon:DumpProfession(prof_name)
- if type(prof_name) == "number" then
- prof_name = GetSpellInfo(prof_name)
- end
-
- local found = false
- prof_name = string.lower(prof_name)
-
- local scan_all = prof_name == "all"
-
- if not scan_all then
- for idx, name in ipairs(ORDERED_PROFESSIONS) do
- if prof_name == name:lower() then
- found = true
- break
- end
- end
-
- if not found then
- self:Print(L["DATAMINER_NODB_ERROR"])
- return
- end
- ProfessionDump(prof_name)
- else
- for idx, name in ipairs(ORDERED_PROFESSIONS) do
- ProfessionDump(name:lower())
- end
- end
- end
-end -- do
-
-local RECIPE_TYPES = {
- -- JC
- ["design: "] = true,
- -- LW or Tailoring
- ["pattern: "] = true,
- -- Alchemy or Cooking
- ["recipe: "] = true,
- -- BS
- ["plans: "] = true,
- -- Enchanting
- ["formula: "] = true,
- -- Engineering
- ["schematic: "] = true,
- -- First Aid
- ["manual: "] = true,
-
- ["alchemy: "] = true,
- ["blacksmithing: "] = true,
- ["cooking: "] = true,
- ["enchanting: "] = true,
- ["engineering: "] = true,
- ["first aid: "] = true,
- ["inscription: "] = true,
- ["jewelcrafting: "] = true,
- ["leatherworking: "] = true,
- ["tailoring: "] = true,
-}
-
---- Scans the items on a vendor, determining which recipes are available if any and compares it with the database entries
--- @name AckisRecipeList:ScanVendor
--- @usage AckisRecipeList:ScanVendor()
--- @return Obtains all the vendor information on tradeskill recipes and attempts to compare the current vendor with the internal database
-do
- local output = {}
-
- function addon:ScanVendor()
- if not (UnitExists("target") and (not UnitIsPlayer("target")) and (not UnitIsEnemy("player", "target"))) then -- Make sure the target exists and is a NPC
- self:Print(L["DATAMINER_VENDOR_NOTTARGETTED"])
- return
- end
- local recipe_list = LoadRecipe() -- Get internal database
-
- if not recipe_list then
- self:Print(L["DATAMINER_NODB_ERROR"])
- return
- end
- local targetname = UnitName("target") -- Get its name
- local targetID = tonumber(string.sub(UnitGUID("target"), -12, -7), 16) -- Get the NPC ID
- local added = false
-
- twipe(output)
-
- tinsert(output, "Vendor Name: "..targetname.." NPC ID: "..targetID)
- -- Parse all the items on the merchant
- for i = 1, GetMerchantNumItems(), 1 do
- local name, _, _, _, numAvailable = GetMerchantItemInfo(i)
-
- if name then
- -- Lets scan recipes only on vendors
- local matchtext = string.match(name, "%a+: ")
-
- -- Check to see if we're dealing with a recipe
- if matchtext and RECIPE_TYPES[string.lower(matchtext)] then
- local item_link = GetMerchantItemLink(i)
- local item_id = ItemLinkToID(item_link)
- local spell_id = RECIPE_TO_SPELL_MAP[item_id]
-
- if spell_id then
- local ttscantext = addon:TooltipScanRecipe(spell_id, true, true)
-
- if ttscantext and ttscantext ~= "" then
- added = true
- tinsert(output, ttscantext)
- end
-
- -- Check the database to see if the vendor is listed as an acquire method.
- local acquire = recipe_list[spell_id]["acquire_data"]
- local vendor_data = acquire[A.VENDOR]
- local rep_data = acquire[A.REPUTATION]
- local found = false
-
- if vendor_data then
- for id_num in pairs(vendor_data) do
- if id_num == targetID then
- found = true
- break
- end
- end
- elseif rep_data then
- for id_num in pairs(rep_data) do
- if id_num == targetID then
- found = true
- break
- end
- end
- end
-
- if not found then
- added = true
- tinsert(output, string.format("Vendor ID missing from \"%s\" %d.", recipe_list[spell_id].name, spell_id))
- end
- else
- --@debug@
- added = true
- tinsert(output, "Spell ID not found for: " .. name)
- --@end-debug@
- end
- end
- end
- end
-
- if added then
- self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
- end
- ARLDatamineTT:Hide()
- end
-end -- do
-
---- Parses all the recipes in the database, and scanning their tooltips.
--- @name AckisRecipeList:TooltipScanDatabase
--- @usage AckisRecipeList:TooltipScanDatabase()
--- @return Entire recipe database has its tooltips scanned.
-do
- local output = {}
-
- function addon:TooltipScanDatabase()
- -- Get internal database
- local recipe_list = LoadRecipe()
-
- if (not recipe_list) then
- self:Print(L["DATAMINER_NODB_ERROR"])
- return
- end
- twipe(output)
-
- -- Parse the entire recipe database
- for i in pairs(recipe_list) do
-
- local ttscantext = addon:TooltipScanRecipe(i, false, true)
- if (ttscantext) then
- tinsert(output, ttscantext)
- end
- end
- self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
- end
-end -- do
---- Parses a specific recipe in the database, and scanning its tooltip
--- @name AckisRecipeList:TooltipScanRecipe
--- @param spell_id The [[[http://www.wowwiki.com/SpellLink|Spell ID]]] of the recipe being added to the database
--- @param is_vendor Boolean to determine if we're viewing a vendor or not
--- @param is_largescan Boolean to determine if we're doing a large scan
--- @return Recipe has its tooltips scanned
-
-
--- Table to store scanned information. Wiped and re-used every scan.
-local scan_data = {}
-
-do
- ---------------------------------------------------------------------------------------------------------
- ----This table, DO_NOT_SCAN, contains itemid's that will not cache on the servers
- ---------------------------------------------------------------------------------------------------------
-
- local DO_NOT_SCAN = {
- -------------------------------------------------------------------------------
- --Leatherworking
- -------------------------------------------------------------------------------
- [35214] = true, [32434] = true, [15769] = true,
- [32431] = true, [32432] = true, [35215] = true, [35521] = true,
- [35520] = true, [35524] = true, [35517] = true, [35528] = true,
- [35527] = true, [35523] = true, [35549] = true, [35218] = true,
- [35217] = true, [35216] = true, [35546] = true, [35541] = true, [15756] = true,
- [15777] = true, [32433] = true, [29729] = true, [29732] = true, [32744] = true,
- [15773] = true, [30301] = true, [15745] = true, [35302] = true, [15774] = true,
-
- -------------------------------------------------------------------------------
- --Tailoring
- -------------------------------------------------------------------------------
- [14477] = true, [14485] = true, [30281] = true, [14478] = true, [14500] = true,
- [32439] = true, [14479] = true, [32447] = true, [14480] = true, [32437] = true,
- [14495] = true, [14505] = true, [35204] = true, [35205] = true, [35206] = true,
- [14473] = true, [14488] = true, [14481] = true,
- [35309] = true, [30280] = true, [14492] = true, [14491] = true,
-
- -------------------------------------------------------------------------------
- --Jewelcrafting
- -------------------------------------------------------------------------------
- [23130] = true, [23140] = true, [23137] = true, [23131] = true, [23148] = true,
- [35538] = true, [35201] = true, [35533] = true, [35200] = true, [23147] = true,
- [23135] = true, [35203] = true, [35198] = true, [23152] = true, [23151] = true,
- [23141] = true, [28596] = true, [28291] = true, [23153] = true,
-
- -------------------------------------------------------------------------------
- --Alchemy
- -------------------------------------------------------------------------------
- [22925] = true, [13480] = true, [13481] = true, [13493] = true, [35295] = true,
- [44568] = true,
-
- -------------------------------------------------------------------------------
- --Cooking
- -------------------------------------------------------------------------------
- [39644] = true,
-
- -------------------------------------------------------------------------------
- --Blacksmithing
- -------------------------------------------------------------------------------
- [32441] = true, [32443] = true, [12687] = true, [12714] = true, [12688 ] = true,
- [35211] = true, [35209] = true, [35210] = true, [12706] = true, [7982] = true,
- [12718] = true, [23621] = true, [35208] = true, [12716] = true, [23632] = true,
- [23633] = true, [30324] = true, [23637] = true, [31393] = true,[22221] = true,
- [12690] = true, [31394] = true,[31395] = true,[23630] = true,[23629] = true,[7978] = true,
- [41120] = true, [12717] = true,[22219] = true,[23627] = true,
-
- -------------------------------------------------------------------------------
- --Engineering
- -------------------------------------------------------------------------------
- [35196] = true, [21734] = true, [18292] = true, [21727] = true, [21735] = true, [16053] = true, [21729] = true,
- [16047] = true,[21730] = true,[21731] = true,[21732] = true,[4411] = true, [21733] = true, [21728] = true,
- [35186] = true, [18655] = true,
-
- -------------------------------------------------------------------------------
- --Enchanting
- -------------------------------------------------------------------------------
- [16222] = true, [20734] = true, [20729] = true, [20731] = true, [16246] = true,
- }
-
- local output = {}
-
- function addon:TooltipScanRecipe(spell_id, is_vendor, is_largescan)
- local recipe_list = LoadRecipe()
-
- if not recipe_list then
- self:Print(L["DATAMINER_NODB_ERROR"])
- return
- end
- local recipe = recipe_list[spell_id]
-
- if not recipe then
- self:Debug("Spell ID %d does not exist in the database.", tonumber(spell_id))
- return
- end
- local recipe_name = recipe.name
- local game_vers = recipe.genesis
-
- twipe(output)
-
- if not game_vers then
- tinsert(output, "No expansion information: " .. tostring(spell_id) .. " " .. recipe_name)
- elseif game_vers > private.game_versions.WOTLK then
- tinsert(output, "Expansion information too high: " .. tostring(spell_id) .. " " .. recipe_name)
- end
- local optimal = recipe.optimal_level
- local medium = recipe.medium_level
- local easy = recipe.easy_level
- local trivial = recipe.trivial_level
- local skill_level = recipe.skill_level
-
- if not optimal then
- tinsert(output, "No skill level information: " .. tostring(spell_id) .. " " .. recipe_name)
- else
- -- Highest level is greater than the skill of the recipe
- if optimal > skill_level then
- tinsert(output, "Skill Level Error (optimal_level > skill_level): " .. tostring(spell_id) .. " " .. recipe_name)
- elseif optimal < skill_level then
- tinsert(output, "Skill Level Error (optimal_level < skill_level): " .. tostring(spell_id) .. " " .. recipe_name)
- end
-
- -- Level info is messed up
- if optimal > medium or optimal > easy or optimal > trivial or medium > easy or medium > trivial or easy > trivial then
- tinsert(output, "Skill Level Error: " .. tostring(spell_id) .. " " .. recipe_name)
- end
- end
- local recipe_link = recipe.spell_link
-
- if not recipe_link then
- if recipe.profession ~= GetSpellInfo(53428) then -- Lets hide this output for runeforging.
- self:Printf("Missing spell_link for ID %d (%s).", spell_id, recipe_name)
- end
- return
- end
- ARLDatamineTT:SetOwner(WorldFrame, "ANCHOR_NONE")
- GameTooltip_SetDefaultAnchor(ARLDatamineTT, UIParent)
-
- ARLDatamineTT:SetHyperlink(recipe_link)
-
- -- Check to see if this is a recipe tooltip.
- local text = string.lower(_G["ARLDatamineTTTextLeft1"]:GetText())
- local match_text = string.match(text, "%a+: ")
-
- if not RECIPE_TYPES[match_text] and not (string.find(text, "smelt") or string.find(text, "sunder") or string.find(text, "shatter")) then
- ARLDatamineTT:Hide()
- return
- end
- local reverse_lookup = GetReverseLookup(recipe_list)
-
- local item_id = SPELL_TO_RECIPE_MAP[spell_id]
-
- wipe(scan_data)
-
- if item_id and not DO_NOT_SCAN[item_id] then
- local item_name, item_link, item_quality = GetItemInfo(item_id)
-
- if item_name then
- scan_data.quality = item_quality
-
- ARLDatamineTT:SetHyperlink(item_link)
- self:ScanToolTip(recipe_name, recipe_list, reverse_lookup, is_vendor)
- else
- local querier_string = _G.Querier and string.format(" To fix: /iq %d", item_id) or ""
-
- tinsert(output, string.format("%s: %d", recipe.name, spell_id))
- tinsert(output, string.format(" Recipe item not in cache.%s", querier_string))
- end
- elseif not item_id then
- -- We are dealing with a recipe that does not have an item to learn it from.
- -- Lets check the recipe flags to see if we have a data error and the item should exist
- if not recipe:IsFlagged("common1", "RETIRED")
- and (recipe:IsFlagged("common1", "VENDOR") or recipe:IsFlagged("common1", "INSTANCE") or recipe:IsFlagged("common1", "RAID")) then
- tinsert(output, string.format("%s: %d", recipe.name, spell_id))
- tinsert(output, " No match found in the SPELL_TO_RECIPE_MAP table.")
- end
- end
- ARLDatamineTT:Hide()
-
- -- Add the flag scan to the table if it's not nil
- local results = self:PrintScanResults()
-
- if results then
- tinsert(output, results)
- end
-
- if is_largescan then
- return tconcat(output, "\n")
- else
- self:Print(tconcat(output, "\n"))
- end
- end
-end -- do
-
--------------------------------------------------------------------------------
--- Tooltip-scanning code
--------------------------------------------------------------------------------
-do
- local SPECIALTY_TEXT = {
- ["requires spellfire tailoring"] = 26797,
- ["requires mooncloth tailoring"] = 26798,
- ["requires shadoweave tailoring"] = 26801,
- ["requires dragonscale leatherworking"] = 10657,
- ["requires elemental leatherworking"] = 10659,
- ["requires tribal leatherworking"] = 10661,
- ["requires gnomish engineer"] = 20219,
- ["requires goblin engineer"] = 20222,
- ["requires armorsmith"] = 9788,
- ["requires master axesmith"] = 17041,
- ["requires master hammersmith"] = 17040,
- ["requires master swordsmith"] = 17039,
- ["requires weaponsmith"] = 9787,
- }
-
- local FACTION_TEXT = {
- ["thorium brotherhood"] = 98,
- ["zandalar tribe"] = 100,
- ["argent dawn"] = 96,
- ["timbermaw hold"] = 99,
- ["cenarion circle"] = 97,
- ["the aldor"] = 101,
- ["the consortium"] = 105,
- ["the scryers"] = 110,
- ["the sha'tar"] = 111,
- ["the mag'har"] = 108,
- ["cenarion expedition"] = 103,
- ["honor hold"] = 104,
- ["thrallmar"] = 104,
- ["the violet eye"] = 114,
- ["sporeggar"] = 113,
- ["kurenai"] = 108,
- ["keepers of time"] = 106,
- ["the scale of the sands"] = 109,
- ["lower city"] = 107,
- ["ashtongue deathsworn"] = 102,
- ["alliance vanguard"] = 131,
- ["valiance expedition"] = 126,
- ["horde expedition"] = 130,
- ["the taunka"] = 128,
- ["the hand of vengeance"] = 127,
- ["explorers' league"] = 125,
- ["the kalu'ak"] = 120,
- ["shattered sun offensive"] = 112,
- ["warsong offensive"] = 129,
- ["kirin tor"] = 118,
- ["the wyrmrest accord"] = 122,
- ["knights of the ebon blade"] = 117,
- ["frenzyheart tribe"] = 116,
- ["the oracles"] = 121,
- ["argent crusade"] = 115,
- ["the sons of hodir"] = 119,
- }
-
- local FACTION_LEVELS = {
- ["neutral"] = 0,
- ["friendly"] = 1,
- ["honored"] = 2,
- ["revered"] = 3,
- ["exalted"] = 4,
- }
-
- local CLASS_TYPES = {
- ["Death Knight"] = 21, ["Druid"] = 22, ["Hunter"] = 23,
- ["Mage"] = 24, ["Paladin"] = 25, ["Priest"] = 26,
- ["Shaman"] = 27, ["Rogue"] = 28, ["Warlock"] = 29,
- ["Warrior"] = 30,
- }
-
- local ORDERED_CLASS_TYPES = {
- [1] = "Death Knight", [2] = "Druid", [3] = "Hunter",
- [4] = "Mage", [5] = "Paladin", [6] = "Priest",
- [7] = "Shaman", [8] = "Rogue", [9] = "Warlock",
- [10] = "Warrior",
- }
-
- local ROLE_TYPES = {
- ["dps"] = 51, ["tank"] = 52, ["healer"] = 53,
- ["caster"] = 54,
- }
-
- local ORDERED_ROLE_TYPES = {
- [1] = "dps", [2] = "tank", [3] = "healer",
- [4] = "caster",
- }
-
- local ENCHANT_TO_ITEM = {
- ["Cloak"] = "Back",
- ["Ring"] = "Finger",
- ["2H Weapon"] = "Two-Hand",
- }
-
- local ITEM_TYPES = {
- -- Armor types
- ["Cloth"] = 56, ["Leather"] = 57, ["Mail"] = 58,
- ["Plate"] = 59, ["Back"] = 60, ["Trinket"] = 61,
- ["Finger"] = 62, ["Neck"] = 63, ["Shield"] = 64,
-
- -- Weapon types
- ["One-Hand"] = 66, ["Two-Hand"] = 67, ["Axe"] = 68,
- ["Sword"] = 69, ["Mace"] = 70, ["Polearm"] = 71,
- ["Dagger"] = 72, ["Staff"] = 73, ["Wand"] = 74,
- ["Thrown"] = 75, ["Bow"] = 76, ["CrossBow"] = 77,
- ["Ammo"] = 78, ["Fist Weapon"] = 79, ["Gun"] = 80,
- }
-
- local ORDERED_ITEM_TYPES = {
- -- Armor types
- [1] = "Cloth", [2] = "Leather", [3] = "Mail",
- [4] = "Plate", [5] = "Back", [6] = "Trinket",
- [7] = "Finger", [8] = "Neck", [9] = "Shield",
-
- -- Weapon types
- [11] = "One-Hand", [12] = "Two-Hand", [13] = "Axe",
- [14] = "Sword", [15] = "Mace", [16] = "Polearm",
- [17] = "Dagger", [18] = "Staff", [19] = "Wand",
- [20] = "Thrown", [21] = "Bow", [22] = "CrossBow",
- [23] = "Ammo", [24] = "Fist Weapon", [25] = "Gun",
- }
-
- --- Parses the mining tooltip for certain keywords, comparing them with the database flags
- -- @name AckisRecipeList:ScanToolTip
- -- @param name The name of the recipe
- -- @param recipe_list Recipe database
- -- @param reverse_lookup Reverse lookup database
- -- @param is_vendor Boolean to indicate if we're scanning a vendor
- -- @return Scans a tooltip, and outputs the missing or extra filter flags
- function addon:ScanToolTip(name, recipe_list, reverse_lookup, is_vendor)
- scan_data.match_name = name
- scan_data.recipe_list = recipe_list
- scan_data.reverse_lookup = reverse_lookup
- scan_data.is_vendor = is_vendor
-
- -- Parse all the lines of the tooltip
- for i = 1, ARLDatamineTT:NumLines(), 1 do
- local text_l = _G["ARLDatamineTTTextLeft" .. i]:GetText()
- local text_r = _G["ARLDatamineTTTextRight" .. i]:GetText()
- local text
-
- if text_r then
- text = text_l .. " " .. text_r
- else
- text = text_l
- end
-
- local text = string.lower(text)
-
- -- Check for recipe/item binding
- -- The recipe binding is within the first few lines of the tooltip always
- if string.match(text, "binds when picked up") then
- if (i < 3) then
- scan_data.recipe_bop = true
- else
- scan_data.item_bop = true
- end
- end
-
- -- Recipe Specialities
- if SPECIALTY_TEXT[text] then
- scan_data.specialty = SPECIALTY_TEXT[text]
- end
-
- -- Recipe Reputations
- local rep, replevel = string.match(text_l, "Requires (.+) %- (.+)")
-
- if rep and replevel and FACTION_TEXT[rep] then
- scan_data.repid = FACTION_TEXT[rep]
- scan_data.repidlevel = FACTION_LEVELS[replevel]
- end
-
- -- Flag so that we don't bother checking for classes if we're sure of the class
- -- AKA +spell hit == caster DPS only no matter what other stats are on it
- -- Saves processing cycles and it won't cause the flags to be overwritten if a non-specific stat is found after
- scan_data.verifiedclass = false
-
- if not scan_data.verifiedclass then
- -- Certain stats can be considered for a specific role (aka spell hit == caster dps).
- if string.match(text, "strength") and not string.match(text, "strength of the clefthoof") and not string.match(text, "set:") then
- scan_data.dps = true
- elseif string.match(text, "agility") then
- scan_data.dps = true
- elseif string.match(text, "spirit") then
- scan_data.caster = true
- scan_data.healer = true
- elseif string.match(text, "spell power") then
- scan_data.caster = true
- scan_data.healer = true
- elseif string.match(text, "spell crit") then
- scan_data.caster = true
- scan_data.healer = true
- elseif string.match(text, "spell hit") then
- scan_data.caster = true
- scan_data.verifiedclass = true
- elseif string.match(text, "spell penetration") then
- scan_data.caster = true
- scan_data.verifiedclass = true
- elseif string.match(text, "mana per 5 sec.") or string.match(text, "mana every 5 seconds") then
- scan_data.caster = true
- scan_data.healer = true
- elseif string.match(text, "attack power") then
- scan_data.dps = true
- elseif string.match(text, "expertise") then
- scan_data.dps = true
- scan_data.tank = true
- elseif string.match(text, "melee crit") then
- scan_data.dps = true
- elseif string.match(text, "critical hit") then
- scan_data.dps = true
- elseif string.match(text, "weapon damage") then
- scan_data.dps = true
- elseif string.match(text, "ranged crit") then
- scan_data.dps = true
- scan_data.verifiedclass = true
- elseif string.match(text, "melee haste") then
- scan_data.dps = true
- elseif string.match(text, "ranged haste") then
- scan_data.dps = true
- scan_data.verifiedclass = true
- elseif string.match(text, "melee hit") then
- scan_data.dps = true
- elseif string.match(text, "ranged hit") then
- scan_data.dps = true
- scan_data.verifiedclass = true
- elseif string.match(text, "armor pen") then
- scan_data.dps = true
- elseif string.match(text, "feral attack power") then
- scan_data.tank = true
- scan_data.dps = true
- elseif string.match(text, "defense") and not string.match(text, "defenseless") then
- scan_data.tank = true
- scan_data.verifiedclass = true
- elseif string.match(text, "block") then
- scan_data.tank = true
- scan_data.verifiedclass = true
- elseif string.match(text, "parry") then
- scan_data.tank = true
- scan_data.verifiedclass = true
- elseif string.match(text, "dodge") and not string.match(text, "set:") then
- scan_data.tank = true
- scan_data.verifiedclass = true
- end
- end
-
- -- Classes
- local class_type = string.match(text_l, "Classes: (.+)")
-
- if class_type then
- for idx, class in ipairs(ORDERED_CLASS_TYPES) do
- if string.match(class_type, class) then
- scan_data[class] = true
- scan_data.found_class = true
- end
- end
- end
-
- -- Armor types
- if ITEM_TYPES[text_l] then
- scan_data[text_l] = true
- elseif text_l == "Held In Off-hand" or text_l == "Off Hand" or text_l == "Main Hand" then -- Special cases.
- scan_data["One-Hand"] = true
- elseif text_l == "Projectile" then
- scan_data["Ammo"] = true
- end
-
- if text_r and ITEM_TYPES[text_r] then
- scan_data[text_r] = true
- end
-
- -- Enchantment voodoo
- local ench_type, _ = string.match(text_l, "Enchant (.+) %- (.+)")
-
- if ench_type then
- if ITEM_TYPES[ench_type] then
- scan_data[ench_type] = true
- elseif ITEM_TYPES[ENCHANT_TO_ITEM[ench_type]] then
- scan_data[ENCHANT_TO_ITEM[ench_type]] = true
- elseif ench_type == "Weapon" then -- Special case.
- scan_data["One-Hand"] = true
- scan_data["Two-Hand"] = true
- end
- end
- end -- for
- end
-
- -- Flag data for printing. Wiped and re-used.
- local missing_flags = {}
- local extra_flags = {}
- local output = {}
-
- local ACQUIRE_TO_FILTER_MAP = {
- [A.MOB_DROP] = F.MOB_DROP,
- [A.QUEST] = F.QUEST,
- [A.SEASONAL] = F.SEASONAL,
- [A.WORLD_DROP] = F.WORLD_DROP,
- }
- local FILTER_TO_ACQUIRE_MAP
-
- --- Prints out the results of the tooltip scan.
- -- @name AckisRecipeList:PrintScanResults
- function addon:PrintScanResults()
- if not scan_data.match_name then
- return
- end
-
- -- Parse the recipe database until we get a match on the name
- local recipe_name = string.gsub(scan_data.match_name, "%a+%?: ", "")
- local spell_id = scan_data.reverse_lookup[recipe_name]
-
- if not spell_id then
- self:Print(recipe_name .. " has no reverse lookup")
- return
- end
- local recipe = scan_data.recipe_list[spell_id]
- local acquire_data = recipe["acquire_data"]
-
- local FS = private.filter_strings
- local flag_format = "F.%s"
-
- twipe(missing_flags)
- twipe(extra_flags)
- twipe(output)
-
- -- If we're a vendor scan, do some extra checks
- if scan_data.is_vendor then
- -- Check to see if the vendor flag is set
- if not recipe:IsFlagged("common1", "VENDOR") then
- tinsert(missing_flags, string.format(flag_format, FS[F.VENDOR]))
- end
-
- -- Check to see if we're in a PVP zone
- if (GetSubZoneText() == "Wintergrasp Fortress" or GetSubZoneText() == "Halaa") and not recipe:IsFlagged("common1", "PVP") then
- tinsert(missing_flags, string.format(flag_format, FS[F.PVP]))
- elseif recipe:IsFlagged("common1", "PVP") and not (GetSubZoneText() == "Wintergrasp Fortress" or GetSubZoneText() == "Halaa") then
- tinsert(extra_flags, string.format(flag_format, FS[F.PVP]))
- end
- end
-
- -- -- If we've picked up at least one class flag
- if scan_data.found_class then
- for k, v in ipairs(ORDERED_CLASS_TYPES) do
- if scan_data[v] and not recipe:IsFlagged("class1", FS[CLASS_TYPES[v]]) then
- tinsert(missing_flags, string.format(flag_format, FS[CLASS_TYPES[v]]))
- elseif not scan_data[v] and recipe:IsFlagged("class1", FS[CLASS_TYPES[v]]) then
- tinsert(extra_flags, string.format(flag_format, FS[CLASS_TYPES[v]]))
- end
- end
- end
-
- if scan_data.item_bop and not recipe:IsFlagged("common1", "IBOP") then
- tinsert(missing_flags, string.format(flag_format, FS[F.IBOP]))
-
- if recipe:IsFlagged("common1", "IBOE") then
- tinsert(extra_flags, string.format(flag_format, FS[F.IBOE]))
- end
-
- if recipe:IsFlagged("common1", "IBOA") then
- tinsert(extra_flags, string.format(flag_format, FS[F.IBOA]))
- end
- elseif not recipe:IsFlagged("common1", "IBOE") and not scan_data.item_bop then
- tinsert(missing_flags, string.format(flag_format, FS[F.IBOE]))
-
- if recipe:IsFlagged("common1", "IBOP") then
- tinsert(extra_flags, string.format(flag_format, FS[F.IBOP]))
- end
-
- if recipe:IsFlagged("common1", "IBOA") then
- tinsert(extra_flags, string.format(flag_format, FS[F.IBOA]))
- end
- end
-
- if scan_data.recipe_bop and not recipe:IsFlagged("common1", "RBOP") then
- tinsert(missing_flags, string.format(flag_format, FS[F.RBOP]))
-
- if recipe:IsFlagged("common1", "RBOE") then
- tinsert(extra_flags, string.format(flag_format, FS[F.RBOE]))
- end
-
- if recipe:IsFlagged("common1", "RBOA") then
- tinsert(extra_flags, string.format(flag_format, FS[F.RBOA]))
- end
-
- elseif not recipe:IsFlagged("common1", "TRAINER") and not recipe:IsFlagged("common1", "RBOE") and not scan_data.recipe_bop then
- tinsert(missing_flags, string.format(flag_format, FS[F.RBOE]))
-
- if recipe:IsFlagged("common1", "RBOP") then
- tinsert(extra_flags, string.format(flag_format, FS[F.RBOP]))
- end
-
- if recipe:IsFlagged("common1", "RBOA") then
- tinsert(extra_flags, string.format(flag_format, FS[F.RBOA]))
- end
- end
-
- for k, v in ipairs(ORDERED_ROLE_TYPES) do
- local role_string = FS[ROLE_TYPES[v]]
-
- if scan_data[v] and not recipe:IsFlagged("common1", role_string) then
- tinsert(missing_flags, string.format(flag_format, role_string))
- elseif not scan_data[v] and recipe:IsFlagged("common1", role_string) then
- tinsert(extra_flags, string.format(flag_format, role_string))
- end
- end
-
- for k, v in ipairs(ORDERED_ITEM_TYPES) do
- if scan_data[v] and not recipe:IsFlagged("item1", FS[ITEM_TYPES[v]]) then
- tinsert(missing_flags, string.format(flag_format, FS[ITEM_TYPES[v]]))
- elseif not scan_data[v] and recipe:IsFlagged("item1", FS[ITEM_TYPES[v]]) then
- tinsert(extra_flags, string.format(flag_format, FS[ITEM_TYPES[v]]))
- end
- end
-
- -- Reputations
- local repid = scan_data.repid
- local found_problem = false
-
- if repid and not recipe:IsFlagged("reputation1", FS[repid]) and not recipe:IsFlagged("reputation2", FS[repid]) then
- tinsert(missing_flags, repid)
-
- local rep_data = acquire_data[A.REPUTATION]
-
- if rep_data then
- for rep_id, rep_info in pairs(acquire_info) do
- for rep_level, level_info in pairs(rep_info) do
- if rep_level ~= scan_data.repidlevel then
- tinsert(output, " Wrong reputation level.")
- end
- end
- end
- end
- end
-
- -- Make sure the recipe's filter flags match with its acquire types.
- if not FILTER_TO_ACQUIRE_MAP then
- FILTER_TO_ACQUIRE_MAP = {}
-
- for k, v in pairs(ACQUIRE_TO_FILTER_MAP) do
- FILTER_TO_ACQUIRE_MAP[v] = k
- end
- end
-
- for acquire_type in pairs(acquire_data) do
- local flag = ACQUIRE_TO_FILTER_MAP[acquire_type]
-
- if flag and not recipe:IsFlagged("common1", FS[flag]) then
- tinsert(missing_flags, string.format(flag_format, FS[flag]))
- end
- end
-
- if (acquire_data[A.VENDOR] or acquire_data[A.REPUTATION]) and not recipe:IsFlagged("common1", "VENDOR") then
- tinsert(missing_flags, string.format(flag_format, FS[F.VENDOR]))
- end
-
- if recipe:IsFlagged("common1", "VENDOR") and not (acquire_data[A.VENDOR] or acquire_data[A.REPUTATION]) then
- tinsert(extra_flags, string.format(flag_format, FS[F.VENDOR]))
- end
-
- if acquire_data[A.TRAINER] and not recipe:IsFlagged("common1", "TRAINER") then
- tinsert(missing_flags, string.format(flag_format, FS[F.TRAINER]))
- end
-
- if recipe:IsFlagged("common1", "TRAINER") and not acquire_data[A.TRAINER] then
- if not acquire_data[A.CUSTOM] then
- tinsert(extra_flags, string.format(flag_format, FS[F.TRAINER]))
- end
- end
-
- for flag, acquire_type in pairs(FILTER_TO_ACQUIRE_MAP) do
- if recipe:IsFlagged("common1", FS[flag]) and not acquire_data[acquire_type] then
- tinsert(extra_flags, string.format(flag_format, FS[flag]))
- end
- end
-
- if #missing_flags > 0 or #extra_flags > 0 then
- found_problem = true
-
- -- Add a string of the missing flag numbers
- if #missing_flags > 0 then
- tinsert(output, " Missing flags: " .. tconcat(missing_flags, ", "))
- end
-
- -- Add a string of the extra flag numbers
- if #extra_flags > 0 then
- tinsert(output, " Extra flags: " .. tconcat(extra_flags, ", "))
- end
- local found_type = false
-
- for k, v in ipairs(ORDERED_ITEM_TYPES) do
- if scan_data[v] then
- found_type = true
- break
- end
- end
-
- if not found_type then
- tinsert(output, " Missing: item type flag")
- end
- end
-
- -- Check to see if we have a horde/alliance flag, all recipes must have one of these
- if not recipe:IsFlagged("common1", "ALLIANCE") and not recipe:IsFlagged("common1", "HORDE") then
- found_problem = true
- tinsert(output, " Horde or Alliance not selected.")
- end
-
- -- Check to see if we have an obtain method flag, all recipes must have at least one of these
- if (not recipe:IsFlagged("common1", "TRAINER") and not recipe:IsFlagged("common1", "VENDOR") and not recipe:IsFlagged("common1", "INSTANCE") and not recipe:IsFlagged("common1", "RAID")
- and not recipe:IsFlagged("common1", "SEASONAL") and not recipe:IsFlagged("common1", "QUEST") and not recipe:IsFlagged("common1", "PVP") and not recipe:IsFlagged("common1", "WORLD_DROP")
- and not recipe:IsFlagged("common1", "MOB_DROP") and not recipe:IsFlagged("common1", "DISC")) then
- found_problem = true
- tinsert(output, " No obtain flag.")
- end
-
- -- Check for recipe binding information, all recipes must have one of these
- if not recipe:IsFlagged("common1", "RBOE") and not recipe:IsFlagged("common1", "RBOP") and not recipe:IsFlagged("common1", "RBOA") then
- found_problem = true
- tinsert(output, " No recipe binding information.")
- end
-
- -- Check for item binding information, all recipes must have one of these
- if not recipe:IsFlagged("common1", "IBOE") and not recipe:IsFlagged("common1", "IBOP") and not recipe:IsFlagged("common1", "IBOA") then
- found_problem = true
- tinsert(output, " No item binding information.")
- end
-
- -- We need to code this better. Some items (aka bags) won't have a role at all.
- -- Check for player role flags
- if not scan_data.tank and not scan_data.healer and not scan_data.caster and not scan_data.dps and not NO_ROLE_FLAG[spell_id] then
- found_problem = true
- tinsert(output, " No player role flag.")
- end
-
- if scan_data.specialty then
- if not recipe.specialty then
- found_problem = true
- tinsert(output, string.format(" Missing Specialty: %s", scan_data.specialty))
- elseif recipe.specialty ~= scan_data.specialty then
- tinsert(output, string.format(" Wrong Specialty: %s - should be %s ", recipe.specialty, scan_data.specialty))
- end
- elseif recipe.specialty then
- found_problem = true
- tinsert(output, string.format(" Extra Specialty: %s", recipe.specialty))
- end
-
- if scan_data.quality ~= recipe.quality then
- local QS = private.item_quality_names
-
- found_problem = true
- tinsert(output, string.format(" Wrong quality: Q.%s - should be Q.%s.", QS[recipe.quality], QS[scan_data.quality]))
- end
- if found_problem then
- tinsert(output, 1, string.format("%s: <a href=\"http://www.wowhead.com/?spell=%d\">%d</a>", recipe_name, spell_id, spell_id))
- return tconcat(output, "\n")
- else
- return
- end
- end
-end
\ No newline at end of file
diff --git a/Scanner.lua b/Scanner.lua
new file mode 100644
index 0000000..bccb69b
--- /dev/null
+++ b/Scanner.lua
@@ -0,0 +1,2505 @@
+--[[
+************************************************************************
+Scanner.lua
+In-game tooltip-scanner for datamining.
+************************************************************************
+File date: @file-date-iso@
+File revision: @file-revision@
+Project revision: @project-revision@
+Project version: @project-version@
+************************************************************************
+Please see http://www.wowace.com/addons/arl/ for more information.
+************************************************************************
+This source code is released under All Rights Reserved.
+************************************************************************
+]]--
+
+-------------------------------------------------------------------------------
+-- Upvalues globals.
+-------------------------------------------------------------------------------
+local _G = getfenv(0)
+
+local table = _G.table
+local tconcat, tinsert, tsort, twipe = table.concat, table.insert, table.sort, table.wipe
+
+local string = _G.string
+
+local tonumber, tostring = _G.tonumber, _G.tostring
+
+local ipairs, pairs = _G.ipairs, _G.pairs
+
+-------------------------------------------------------------------------------
+-- Upvalued Blizzard API.
+-------------------------------------------------------------------------------
+local UnitName = UnitName
+local UnitGUID = UnitGUID
+local UnitExists = UnitExists
+local UnitIsPlayer = UnitIsPlayer
+local UnitIsEnemy = UnitIsEnemy
+local GetNumTrainerServices = GetNumTrainerServices
+local GetTrainerServiceInfo = GetTrainerServiceInfo
+local IsTradeskillTrainer = IsTradeskillTrainer
+local SetTrainerServiceTypeFilter = SetTrainerServiceTypeFilter
+local GetTrainerServiceTypeFilter = GetTrainerServiceTypeFilter
+local GetTrainerServiceSkillReq = GetTrainerServiceSkillReq
+local GetMerchantNumItems = GetMerchantNumItems
+local GetMerchantItemLink = GetMerchantItemLink
+local GetMerchantItemInfo = GetMerchantItemInfo
+local GetSpellInfo = GetSpellInfo
+
+-------------------------------------------------------------------------------
+-- AddOn namespace.
+-------------------------------------------------------------------------------
+local MODNAME = "Ackis Recipe List"
+local addon = LibStub("AceAddon-3.0"):GetAddon(MODNAME)
+
+local L = LibStub("AceLocale-3.0"):GetLocale(MODNAME)
+
+-- Set up the private intra-file namespace.
+local private = select(2, ...)
+
+-------------------------------------------------------------------------------
+-- Constants
+-------------------------------------------------------------------------------
+local F = private.filter_flags
+local A = private.acquire_types
+
+local PROFESSIONS = private.professions
+
+-------------------------------------------------------------------------------
+-- Mined via Data-tools
+-- Table is Public Domain now
+-- Look up table of Spell IDs to the recipe which trains them.
+-------------------------------------------------------------------------------
+local SPELL_TO_RECIPE_MAP = {
+ -------------------------------------------------------------------------------
+ -- First Aid
+ -------------------------------------------------------------------------------
+ [7929] = 16112, [7935] = 6454, [10840] = 16113, [23787] = 19442,
+ [27032] = 21992, [27033] = 21993, [45546] = 39152,
+
+ -------------------------------------------------------------------------------
+ -- Alchemy
+ -------------------------------------------------------------------------------
+ [2333] = 3396, [2335] = 2555, [3172] = 3393, [3174] = 3394,
+ [3175] = 3395, [3188] = 6211, [3230] = 2553, [3449] = 6068,
+ [3450] = 3830, [3451] = 3831, [3453] = 3832, [3454] = 14634,
+ [4508] = 4597, [4942] = 4624, [6617] = 5640, [6618] = 5643,
+ [6624] = 5642, [7255] = 6053, [7256] = 6054, [7257] = 6055,
+ [7258] = 6056, [7259] = 6057, [8240] = 6663, [11453] = 9293,
+ [11456] = 10644, [11458] = 9294, [11459] = 9303, [11464] = 9295,
+ [11466] = 9296, [11468] = 9297, [11472] = 9298, [11473] = 9302,
+ [11476] = 9301, [11477] = 9300, [11479] = 9304, [11480] = 9305,
+ [17187] = 12958, [17552] = 13476, [17553] = 13477, [17554] = 13478,
+ [17555] = 13479, [17556] = 13480, [17557] = 13481, [17559] = 13482,
+ [17560] = 13483, [17561] = 13484, [17562] = 13485, [17563] = 13486,
+ [17564] = 13487, [17565] = 13488, [17566] = 13489, [17570] = 13490,
+ [17571] = 13491, [17572] = 13492, [17573] = 13493, [17574] = 13494,
+ [17575] = 13495, [17576] = 13496, [17577] = 13497, [17578] = 13499,
+ [17580] = 13501, [17632] = 13517, [17634] = 13518, [17635] = 31354,
+ [17636] = 31356, [17637] = 31355, [17638] = 31357, [21923] = 17709,
+ [22732] = 18257, [24365] = 20011, [24366] = 20012, [24367] = 20013,
+ [24368] = 20014, [25146] = 20761, [26277] = 21547, [28543] = 22900,
+ [28546] = 22901, [28549] = 22902, [28550] = 22903, [28552] = 22904,
+ [28553] = 24001, [28554] = 22906, [28555] = 22907, [28556] = 22908,
+ [28557] = 22909, [28558] = 22910, [28562] = 22911, [28563] = 22912,
+ [28564] = 35295, [28565] = 22914, [28566] = 22915, [28567] = 22916,
+ [28568] = 30443, [28569] = 22918, [28570] = 22919, [28571] = 22920,
+ [28572] = 22921, [28573] = 22922, [28575] = 22923, [28576] = 22924,
+ [28577] = 22925, [28578] = 35294, [28579] = 22927, [29688] = 23574,
+ [32765] = 25869, [32766] = 29232, [38960] = 31680, [38961] = 31682,
+ [38962] = 31681, [39637] = 32070, [39639] = 32071, [42736] = 33209,
+ [47046] = 35752, [47048] = 35753, [47049] = 35754, [47050] = 35755,
+ [53936] = 44564, [53937] = 44566, [53938] = 44568, [53939] = 44565,
+ [53942] = 44567,
+
+ -------------------------------------------------------------------------------
+ -- Blacksmithing
+ -------------------------------------------------------------------------------
+ [2667] = 2881, [2673] = 5578, [3295] = 2883, [3297] = 3608,
+ [3321] = 3609, [3325] = 3610, [3330] = 2882, [3334] = 3611,
+ [3336] = 3612, [3492] = 12162, [3493] = 3866, [3494] = 10858,
+ [3495] = 3867, [3496] = 12163, [3497] = 3868, [3498] = 12164,
+ [3500] = 3869, [3503] = 6047, [3504] = 3870, [3505] = 3871,
+ [3507] = 3872, [3511] = 3873, [3513] = 3874, [3515] = 3875,
+ [6518] = 5543, [7221] = 6044, [7222] = 6045, [7224] = 6046,
+ [8367] = 6735, [9811] = 7978, [9813] = 7979, [9814] = 7980,
+ [9818] = 7981, [9820] = 7982, [9933] = 7975, [9937] = 7995,
+ [9939] = 7976, [9945] = 7983, [9950] = 7984, [9952] = 7985,
+ [9964] = 7989, [9966] = 7991, [9970] = 7990, [9995] = 7992,
+ [9997] = 8029, [10005] = 7993, [10009] = 8028, [10013] = 8030,
+ [11454] = 10713, [11643] = 9367, [12259] = 10424, [15292] = 11610,
+ [15293] = 11614, [15294] = 11611, [15295] = 11615, [15296] = 11612,
+ [15973] = 12261, [16642] = 12682, [16643] = 12683, [16644] = 12684,
+ [16645] = 12685, [16646] = 12687, [16647] = 12688, [16648] = 12689,
+ [16649] = 12690, [16650] = 12691, [16651] = 12692, [16652] = 12693,
+ [16653] = 12694, [16654] = 12695, [16655] = 12699, [16656] = 12697,
+ [16657] = 12700, [16658] = 12701, [16659] = 12702, [16660] = 12698,
+ [16661] = 12703, [16662] = 12704, [16663] = 12705, [16664] = 12706,
+ [16665] = 12707, [16667] = 12696, [16724] = 12711, [16725] = 12713,
+ [16726] = 12714, [16728] = 12716, [16729] = 12717, [16730] = 12715,
+ [16731] = 12718, [16732] = 12719, [16741] = 12720, [16742] = 12725,
+ [16744] = 12726, [16745] = 12727, [16746] = 12728, [16969] = 12819,
+ [16970] = 12821, [16971] = 12823, [16973] = 12824, [16978] = 12825,
+ [16983] = 12827, [16984] = 12828, [16985] = 12830, [16988] = 12833,
+ [16990] = 12834, [16991] = 12835, [16992] = 12836, [16993] = 12837,
+ [16994] = 12838, [16995] = 12839, [20872] = 17049, [20873] = 17053,
+ [20874] = 17051, [20876] = 17052, [20890] = 17059, [20897] = 17060,
+ [21161] = 18592, [21913] = 17706, [22757] = 18264, [23628] = 19202,
+ [23629] = 19204, [23632] = 19203, [23633] = 19205, [23636] = 19206,
+ [23637] = 19207, [23638] = 19208, [23639] = 19209, [23650] = 19210,
+ [23652] = 19211, [23653] = 19212, [24136] = 19776, [24137] = 19777,
+ [24138] = 19778, [24139] = 19779, [24140] = 19780, [24141] = 19781,
+ [24399] = 20040, [24912] = 20553, [24913] = 20555, [24914] = 20554,
+ [27585] = 22209, [27586] = 22219, [27587] = 22222, [27588] = 22214,
+ [27589] = 22220, [27590] = 22221, [27829] = 22388, [27830] = 22390,
+ [27832] = 22389, [28461] = 22766, [28462] = 22767, [28463] = 22768,
+ [29566] = 23590, [29568] = 23591, [29569] = 23592, [29571] = 23593,
+ [29603] = 23594, [29605] = 23595, [29606] = 23596, [29608] = 23597,
+ [29610] = 23599, [29611] = 23598, [29613] = 23600, [29614] = 23601,
+ [29615] = 23602, [29616] = 23603, [29617] = 23604, [29619] = 23605,
+ [29620] = 23606, [29621] = 23607, [29622] = 23621, [29628] = 23608,
+ [29629] = 23609, [29630] = 23610, [29642] = 23611, [29643] = 23612,
+ [29645] = 23613, [29648] = 23615, [29649] = 23617, [29656] = 23618,
+ [29657] = 24002, [29658] = 23620, [29662] = 23622, [29663] = 23623,
+ [29664] = 23624, [29668] = 23625, [29669] = 23626, [29671] = 23627,
+ [29672] = 23628, [29692] = 23629, [29693] = 23630, [29694] = 23631,
+ [29695] = 23632, [29696] = 23633, [29697] = 23634, [29698] = 23635,
+ [29699] = 23636, [29700] = 23637, [29728] = 23638, [29729] = 23639,
+ [32285] = 25526, [32656] = 25846, [32657] = 25847, [34608] = 28632,
+ [36389] = 30321, [36390] = 30322, [36391] = 30323, [36392] = 30324,
+ [38473] = 31390, [38475] = 31391, [38476] = 31392, [38477] = 31393,
+ [38478] = 31394, [38479] = 31395, [40033] = 32441, [40034] = 32442,
+ [40035] = 32443, [40036] = 32444, [41132] = 32736, [41133] = 32737,
+ [41134] = 32738, [41135] = 32739, [42688] = 35296, [43549] = 33792,
+ [43846] = 33954, [46140] = 35208, [46141] = 35209, [46142] = 35210,
+ [46144] = 35211, [54978] = 41124, [54979] = 41123, [54980] = 41120,
+ [54981] = 41122, [62202] = 44938, [63187] = 45088, [63188] = 45089,
+ [63189] = 45090, [63190] = 45091, [63191] = 45092, [63192] = 45093,
+ [67091] = 47622, [67130] = 47640, [67092] = 47623, [67131] = 47641,
+ [67096] = 47627, [67135] = 47642, [67095] = 47626, [67134] = 47643,
+ [67093] = 47624, [67132] = 47644, [67094] = 47625, [67133] = 47645,
+ [70563] = 49970, [70567] = 49973, [70565] = 49971, [70566] = 49972,
+ [70568] = 49974, [70562] = 49969,
+
+ -------------------------------------------------------------------------------
+ -- Cooking
+ -------------------------------------------------------------------------------
+ [2542] = 2697, [2543] = 728, [2545] = 2698, [2547] = 2699,
+ [2548] = 2700, [2549] = 2701, [2795] = 2889, [3370] = 3678,
+ [3371] = 3679, [3372] = 3680, [3373] = 3681, [3376] = 3682,
+ [3377] = 3683, [3397] = 3734, [3398] = 3735, [3399] = 3736,
+ [3400] = 3737, [4094] = 4609, [6412] = 5482, [6413] = 5483,
+ [6414] = 5484, [6415] = 5485, [6416] = 5486, [6417] = 44977,
+ [6418] = 5488, [6419] = 5489, [6501] = 5528, [7213] = 6039,
+ [7751] = 6325, [7752] = 6326, [7753] = 6328, [7754] = 6329,
+ [7755] = 6330, [7827] = 6368, [7828] = 6369, [8238] = 6661,
+ [8607] = 6892, [9513] = 18160, [15853] = 12227, [15855] = 12228,
+ [15856] = 12229, [15861] = 12231, [15863] = 12232, [15865] = 12233,
+ [15906] = 12239, [15910] = 12240, [15915] = 16111, [15933] = 16110,
+ [15935] = 12226, [18238] = 13939, [18239] = 13940, [18240] = 13942,
+ [18241] = 13941, [18242] = 13943, [18243] = 13945, [18244] = 13946,
+ [18245] = 13947, [18246] = 13948, [18247] = 13949, [20626] = 16767,
+ [20916] = 17062, [21143] = 17200, [21144] = 17201, [22480] = 18046,
+ [22761] = 18267, [24418] = 20075, [25659] = 21025, [25704] = 21099,
+ [25954] = 21219, [28267] = 22647, [33276] = 27685, [33277] = 27686,
+ [33278] = 27687, [33279] = 27684, [33284] = 27688, [33285] = 27689,
+ [33286] = 27690, [33287] = 27691, [33288] = 27692, [33289] = 27693,
+ [33290] = 27694, [33291] = 27695, [33292] = 27696, [33293] = 27697,
+ [33294] = 27698, [33295] = 27699, [33296] = 27700, [36210] = 30156,
+ [38867] = 31675, [38868] = 31674, [43707] = 33870, [43758] = 33871,
+ [43761] = 33869, [43765] = 33873, [43772] = 33875, [43779] = 33925,
+ [45022] = 34413, [45555] = 43018, [45556] = 43019, [45557] = 43020,
+ [45558] = 43021, [45559] = 43022, [45567] = 43023, [45568] = 43024,
+ [45570] = 43026, [45571] = 43025, [45695] = 34834, [46684] = 35564,
+ [46688] = 35566, [53056] = 39644, [57423] = 43017, [57433] = 43027,
+ [57434] = 43028, [57435] = 43029, [57436] = 43030, [57437] = 43031,
+ [57438] = 43032, [57439] = 43033, [57440] = 43034, [57441] = 43035,
+ [57442] = 43036, [57443] = 43037, [58512] = 43507, [58521] = 43508,
+ [58523] = 43509, [58525] = 43510, [58527] = 43505, [58528] = 43506,
+ [62350] = 44954,
+
+ -------------------------------------------------------------------------------
+ -- Enchanting
+ -------------------------------------------------------------------------------
+ [7443] = 6342, [7766] = 6344, [7776] = 6346, [7782] = 6347,
+ [7786] = 6348, [7793] = 6349, [7859] = 6375, [7867] = 6377,
+ [13380] = 11038, [13419] = 11039, [13464] = 11081, [13522] = 11098,
+ [13536] = 11101, [13612] = 11150, [13617] = 11151, [13620] = 11152,
+ [13646] = 11163, [13653] = 11164, [13655] = 11165, [13687] = 11167,
+ [13689] = 11168, [13698] = 11166, [13817] = 11202, [13841] = 11203,
+ [13846] = 11204, [13868] = 11205, [13882] = 11206, [13898] = 11207,
+ [13915] = 11208, [13931] = 11223, [13933] = 11224, [13945] = 11225,
+ [13947] = 11226, [15596] = 11813, [15596] = 45050, [20009] = 16218,
+ [20010] = 16246, [20011] = 16251, [20012] = 16219, [20014] = 16216,
+ [20015] = 16224, [20016] = 16222, [20017] = 16217, [20020] = 16215,
+ [20023] = 16245, [20024] = 16220, [20025] = 16253, [20026] = 16221,
+ [20028] = 16242, [20029] = 16223, [20030] = 16247, [20031] = 16250,
+ [20032] = 16254, [20033] = 16248, [20034] = 16252, [20035] = 16255,
+ [20036] = 16249, [20051] = 16243, [21931] = 17725, [22749] = 18259,
+ [22750] = 18260, [23799] = 19444, [23800] = 19445, [23801] = 19446,
+ [23802] = 19447, [23803] = 19448, [23804] = 19449, [25072] = 33153,
+ [25072] = 20726, [25073] = 20727, [25074] = 20728, [25078] = 20729,
+ [25079] = 20730, [25080] = 33152, [25080] = 20731, [25081] = 20732,
+ [25082] = 20733, [25083] = 33149, [25083] = 20734, [25084] = 20735,
+ [25084] = 33150, [25084] = 33151, [25086] = 20736, [25086] = 33148,
+ [25124] = 20758, [25125] = 20752, [25126] = 20753, [25127] = 20754,
+ [25128] = 20755, [25129] = 20756, [25130] = 20757, [27837] = 22392,
+ [27906] = 22530, [27911] = 22531, [27911] = 24000, [27913] = 22532,
+ [27914] = 22533, [27917] = 22534, [27920] = 22535, [27924] = 22536,
+ [27926] = 22537, [27927] = 22538, [27945] = 22539, [27946] = 22540,
+ [27947] = 22541, [27948] = 35298, [27948] = 22542, [27950] = 22543,
+ [27951] = 22544, [27954] = 22545, [27960] = 24003, [27960] = 22547,
+ [27962] = 22548, [27967] = 22552, [27968] = 22551, [27971] = 22554,
+ [27972] = 22553, [27975] = 22555, [27977] = 22556, [27981] = 22560,
+ [27982] = 22561, [27984] = 22559, [28003] = 22558, [28004] = 22557,
+ [28016] = 22562, [28019] = 22563, [28022] = 22565, [32665] = 25848,
+ [32667] = 25849, [33992] = 28270, [33994] = 28271, [33997] = 28272,
+ [33999] = 28273, [34003] = 28274, [34005] = 28276, [34006] = 28277,
+ [34007] = 35299, [34007] = 28279, [34008] = 35297, [34008] = 28280,
+ [34009] = 28282, [34010] = 28281, [42620] = 33165, [42974] = 33307,
+ [44483] = 37332, [44494] = 37333, [44524] = 37344, [44556] = 37331,
+ [44575] = 44484, [44576] = 44494, [44588] = 37340, [44590] = 37334,
+ [44591] = 37347, [44595] = 44473, [44596] = 37330, [44621] = 37339,
+ [44625] = 44485, [44631] = 37349, [45765] = 34872, [46578] = 35498,
+ [46594] = 35500, [47051] = 35756, [47672] = 44471, [47898] = 44472,
+ [47899] = 44488, [47901] = 44491, [59619] = 44496, [59621] = 44492,
+ [59625] = 44495, [60691] = 44483, [60692] = 44489, [60707] = 44486,
+ [60714] = 44487, [60763] = 44490, [60767] = 44498, [62256] = 44944,
+ [62257] = 44945, [62948] = 45059, [64441] = 46027, [64579] = 46348,
+
+ -------------------------------------------------------------------------------
+ --Engineering
+ -------------------------------------------------------------------------------
+ [3928] = 4408, [3933] = 4409, [3939] = 13309, [3940] = 4410,
+ [3944] = 4411, [3952] = 14639, [3954] = 4412, [3957] = 13308,
+ [3959] = 4413, [3960] = 4414, [3966] = 4415, [3968] = 4416,
+ [3969] = 13311, [3971] = 7742, [3972] = 4417, [3979] = 13310,
+ [8243] = 6672, [8339] = 6716, [9269] = 7560, [9273] = 7561,
+ [12587] = 10601, [12597] = 10602, [12607] = 10603, [12614] = 10604,
+ [12615] = 10605, [12616] = 10606, [12617] = 10607, [12620] = 10608,
+ [12624] = 10609, [15628] = 11828, [15633] = 11827, [19790] = 16041,
+ [19791] = 16042, [19792] = 16043, [19793] = 16044, [19794] = 16045,
+ [19795] = 16047, [19796] = 16048, [19799] = 16049, [19800] = 16051,
+ [19814] = 16046, [19815] = 16050, [19819] = 16052, [19825] = 16053,
+ [19830] = 16054, [19831] = 16055, [19833] = 16056, [21940] = 17720,
+ [22793] = 18290, [22795] = 18292, [22797] = 18291, [23066] = 18647,
+ [23067] = 18649, [23068] = 18648, [23069] = 18650, [23071] = 18651,
+ [23077] = 18652, [23078] = 18653, [23079] = 18655, [23080] = 18656,
+ [23081] = 18657, [23082] = 18658, [23096] = 18654, [23129] = 18661,
+ [23507] = 19027, [24356] = 20000, [24357] = 20001, [26416] = 21724,
+ [26417] = 21725, [26418] = 21726, [26420] = 21727, [26421] = 21728,
+ [26422] = 21729, [26423] = 21730, [26424] = 21731, [26425] = 21732,
+ [26426] = 21733, [26427] = 21734, [26428] = 21735, [26442] = 44919,
+ [26443] = 44918, [28327] = 22729, [30313] = 23799, [30314] = 23800,
+ [30315] = 23802, [30316] = 23803, [30317] = 23804, [30318] = 23805,
+ [30325] = 23806, [30329] = 23807, [30332] = 23808, [30334] = 23809,
+ [30337] = 23810, [30341] = 23811, [30344] = 23814, [30347] = 23815,
+ [30348] = 23816, [30349] = 23817, [30547] = 23874, [30548] = 23888,
+ [30551] = 35310, [30552] = 35311, [30556] = 23887, [32814] = 25887,
+ [39895] = 32381, [43676] = 33804, [44391] = 34114, [46106] = 35191,
+ [46107] = 35187, [46108] = 35189, [46109] = 35190, [46110] = 35192,
+ [46111] = 35186, [46112] = 35193, [46113] = 35194, [46114] = 35195,
+ [46115] = 35196, [46116] = 35197, [46697] = 35582, [60866] = 44502,
+ [60867] = 44503, [72952] = 52022, [72953] = 52023,
+
+ -------------------------------------------------------------------------------
+ --Inscription
+ -------------------------------------------------------------------------------
+ [71101] = 50166, [71102] = 50168, [71015] = 50167,
+
+ -------------------------------------------------------------------------------
+ --Jewelcrafting
+ -------------------------------------------------------------------------------
+ [25320] = 20856, [25323] = 20855, [25339] = 20854, [25610] = 20970,
+ [25612] = 20971, [25617] = 20973, [25618] = 20974, [25619] = 20975,
+ [25622] = 20976, [26873] = 21940, [26875] = 21941, [26878] = 21942,
+ [26881] = 21943, [26882] = 21944, [26887] = 21945, [26896] = 21947,
+ [26897] = 21948, [26900] = 21949, [26906] = 21952, [26909] = 21953,
+ [26910] = 21954, [26912] = 21955, [26914] = 21956, [26915] = 21957,
+ [28903] = 23130, [28905] = 23131, [28906] = 23133, [28907] = 23134,
+ [28910] = 23135, [28912] = 23136, [28914] = 23137, [28915] = 23138,
+ [28916] = 23140, [28917] = 23141, [28918] = 31359, [28924] = 23143,
+ [28927] = 23145, [28933] = 23146, [28936] = 23147,
+ [28938] = 23148, [28944] = 23149, [28947] = 23150, [28948] = 23151,
+ [28950] = 23152, [28953] = 23153, [28955] = 23154, [28957] = 23155,
+ [31053] = 24158, [31054] = 24159, [31055] = 24160, [31056] = 24161,
+ [31057] = 24162, [31058] = 24163, [31060] = 24164, [31061] = 24165,
+ [31062] = 24174, [31063] = 24175, [31064] = 24176, [31065] = 24177,
+ [31066] = 24178, [31067] = 24166, [31068] = 24167, [31070] = 24168,
+ [31071] = 24169, [31072] = 24170, [31076] = 24171, [31077] = 24172,
+ [31078] = 24173, [31079] = 24179, [31080] = 31358, [31081] = 24181,
+ [31082] = 24182, [31083] = 24183, [31084] = 24193, [31085] = 24194,
+ [31087] = 24195, [31088] = 35305, [31089] = 35306, [31090] = 24197,
+ [31091] = 24198, [31092] = 35304, [31094] = 24201, [31095] = 24202,
+ [31096] = 24203, [31097] = 24204, [31098] = 35307, [31099] = 24206,
+ [31100] = 24207, [31101] = 24208, [31102] = 24209, [31103] = 24210,
+ [31104] = 24211, [31105] = 24212, [31106] = 24213, [31107] = 24214,
+ [31108] = 24215, [31109] = 24216, [31110] = 24217, [31111] = 24218,
+ [31112] = 24219, [31113] = 24220, [31149] = 24200, [32866] = 25902,
+ [32867] = 25903, [32868] = 25905, [32869] = 25906, [32870] = 25904,
+ [32871] = 25907, [32872] = 25909, [32873] = 25908, [32874] = 25910,
+ [34069] = 28291, [34590] = 28596, [37855] = 30826, [38503] = 31401,
+ [38504] = 31402, [39451] = 31870, [39452] = 31875, [39455] = 31871,
+ [39458] = 31872, [39462] = 31877, [39463] = 31876, [39466] = 31873,
+ [39467] = 31874, [39470] = 31878, [39471] = 31879, [39705] = 35244,
+ [39706] = 35246, [39710] = 35250, [39711] = 35248, [39712] = 35245,
+ [39713] = 35249, [39714] = 35247, [39715] = 35263, [39716] = 35264,
+ [39717] = 35262, [39718] = 35265, [39719] = 35255, [39720] = 35260,
+ [39721] = 35259, [39722] = 35256, [39723] = 35261, [39724] = 35258,
+ [39725] = 35257, [39727] = 35243, [39728] = 35242, [39729] = 35238,
+ [39730] = 35240, [39731] = 35239, [39732] = 35241, [39733] = 35267,
+ [39734] = 35269, [39735] = 35268, [39736] = 35266, [39737] = 35270,
+ [39738] = 35271, [39739] = 35252, [39740] = 35254, [39741] = 35251,
+ [39742] = 35253, [39961] = 33622, [39963] = 32411, [42558] = 33305,
+ [42588] = 33155, [42589] = 33156, [42590] = 33157, [42591] = 33158,
+ [42592] = 33159, [42593] = 33160, [43493] = 33783, [44794] = 34689,
+ [46122] = 35198, [46123] = 35538, [46124] = 35200, [46125] = 35201,
+ [46126] = 35533, [46127] = 35203, [46403] = 35322, [46404] = 35323,
+ [46405] = 35325, [46597] = 35502, [46601] = 35505, [46775] = 35695,
+ [46776] = 35696, [46777] = 35697, [46778] = 35698, [46779] = 35699,
+ [46803] = 35708, [47053] = 35769, [47054] = 35766, [47055] = 35767,
+ [47056] = 35768, [48789] = 37504, [53830] = 41576, [53857] = 41559,
+ [53865] = 41575, [53869] = 41574, [53875] = 41566, [53877] = 41562,
+ [53879] = 41565, [53884] = 41563, [53885] = 41561, [53888] = 41564,
+ [53917] = 41567, [53919] = 41572, [53921] = 41568, [53924] = 41571,
+ [53929] = 41573, [53932] = 41570, [53933] = 41569, [53943] = 41560,
+ [53945] = 41577, [53946] = 41718, [53948] = 41719, [53949] = 41578,
+ [53950] = 41817, [53951] = 41790, [53952] = 42138, [53954] = 41581,
+ [53955] = 41728, [53957] = 41720, [53958] = 41580, [53959] = 41791,
+ [53960] = 41727, [53961] = 41579, [53962] = 41784, [53963] = 41747,
+ [53964] = 41785, [53965] = 41725, [53966] = 41783, [53967] = 41701,
+ [53968] = 41740, [53970] = 41796, [53971] = 41703, [53972] = 41820,
+ [53973] = 41702, [53974] = 41726, [53975] = 41789, [53976] = 41777,
+ [53977] = 41780, [53978] = 41734, [53979] = 41794, [53980] = 41582,
+ [53981] = 41733, [53982] = 41792, [53983] = 41689, [53984] = 41686,
+ [53985] = 41688, [53986] = 41730, [53987] = 41690, [53988] = 41721,
+ [53990] = 41732, [53991] = 41687, [53992] = 41779, [53993] = 41722,
+ [53994] = 41818, [53995] = 41795, [53996] = 41723, [53997] = 41698,
+ [53998] = 41697, [54000] = 41738, [54001] = 41693, [54002] = 41699,
+ [54003] = 41781, [54004] = 41782, [54005] = 41737, [54006] = 41694,
+ [54008] = 41724, [54009] = 41696, [54010] = 41739, [54011] = 41692,
+ [54012] = 41819, [54013] = 41736, [54014] = 41735, [54019] = 41793,
+ [54023] = 41778, [55384] = 41705, [55387] = 41743, [55388] = 41744,
+ [55389] = 41704, [55390] = 41786, [55392] = 41706, [55393] = 41742,
+ [55395] = 41787, [55396] = 41708, [55397] = 41798, [55398] = 41799,
+ [55400] = 41710, [55401] = 41797, [55403] = 41711, [55404] = 41709,
+ [55405] = 41788, [55407] = 41707, [56049] = 42298, [56052] = 42301,
+ [56053] = 42309, [56054] = 42299, [56055] = 42314, [56056] = 42302,
+ [56074] = 42300, [56076] = 42303, [56077] = 42304, [56079] = 42305,
+ [56081] = 42306, [56083] = 42307, [56084] = 42308, [56085] = 42310,
+ [56086] = 42311, [56087] = 42312, [56088] = 42313, [56089] = 42315,
+ [56496] = 42648, [56497] = 42649, [56498] = 42650, [56499] = 42651,
+ [56500] = 42652, [56501] = 42653, [58147] = 43317, [58148] = 43318,
+ [58149] = 43319, [58150] = 43320, [58492] = 43485, [58507] = 43497,
+ [58954] = 43597, [66556] = 46937, [66447] = 46917, [66429] = 46899,
+ [66557] = 46938, [66430] = 46900, [66432] = 46902, [66433] = 46903,
+ [66497] = 46924, [66561] = 46942, [66434] = 46904, [66498] = 46925,
+ [66499] = 46926, [66436] = 46906, [66500] = 46927, [66437] = 46907,
+ [66501] = 46928, [66565] = 46946, [66438] = 46908, [66502] = 46929,
+ [66566] = 46947, [66439] = 46909, [66503] = 46930, [66567] = 46948,
+ [66440] = 46910, [66504] = 46931, [66441] = 46911, [66505] = 46932,
+ [66569] = 46950, [66442] = 46912, [66506] = 46933, [66570] = 46951,
+ [66443] = 46913, [66444] = 46914, [66572] = 46953, [66445] = 46915,
+ [66573] = 46956, [66446] = 46916, [66574] = 47007, [66575] = 47008,
+ [66448] = 46918, [66576] = 47010, [66449] = 46919, [66577] = 47011,
+ [66450] = 46920, [66578] = 47012, [66451] = 46921, [66579] = 47015,
+ [66452] = 46922, [66580] = 47016, [66453] = 46923, [66581] = 47017,
+ [66582] = 47018, [66583] = 47019, [66584] = 47020, [66586] = 47022,
+ [68253] = 49112, [66338] = 46897, [66571] = 46952, [66564] = 46945,
+ [66562] = 46943, [66560] = 46941, [66558] = 46939, [66554] = 46935,
+ [66559] = 46940, [66585] = 47021, [66555] = 46936, [66587] = 47023,
+ [66431] = 46901, [66428] = 46898, [66435] = 46905, [66563] = 46944,
+ [66553] = 46934, [66568] = 46949,
+
+ -------------------------------------------------------------------------------
+ --Leatherworking
+ -------------------------------------------------------------------------------
+ [2158] = 2406, [2163] = 2407, [2164] = 2408, [2169] = 2409,
+ [3762] = 4293, [3765] = 7360, [3767] = 4294, [3769] = 4296,
+ [3771] = 4297, [3772] = 7613, [3773] = 4299, [3775] = 4298,
+ [3777] = 4300, [3778] = 14635, [3779] = 4301, [4096] = 13287,
+ [4097] = 13288, [5244] = 5083, [6702] = 5786, [6703] = 5787,
+ [6704] = 5788, [6705] = 5789, [7133] = 5972, [7149] = 5973,
+ [7153] = 5974, [7953] = 6474, [7954] = 6475, [7955] = 6476,
+ [8322] = 6710, [9064] = 7288, [9070] = 7289, [9072] = 7290,
+ [9146] = 7361, [9147] = 7362, [9148] = 7363, [9149] = 7364,
+ [9195] = 7449, [9197] = 7450, [9202] = 7451, [9207] = 7452,
+ [9208] = 7453, [10490] = 8384, [10509] = 8385, [10516] = 8409,
+ [10520] = 8386, [10525] = 8395, [10529] = 8403, [10531] = 8387,
+ [10533] = 8397, [10542] = 8398, [10544] = 8404, [10546] = 8405,
+ [10554] = 8399, [10560] = 8389, [10562] = 8390, [10564] = 8400,
+ [10566] = 8406, [10568] = 8401, [10570] = 8402, [10572] = 8407,
+ [10574] = 8408, [19048] = 15724, [19049] = 15725, [19050] = 15726,
+ [19051] = 15727, [19052] = 15728, [19053] = 15729, [19054] = 15730,
+ [19055] = 15731, [19059] = 15732, [19060] = 15733, [19061] = 15734,
+ [19062] = 15735, [19063] = 15737, [19064] = 15738, [19065] = 15739,
+ [19066] = 15740, [19067] = 15741, [19068] = 20253, [19070] = 15743,
+ [19071] = 15744, [19072] = 15745, [19073] = 15746, [19074] = 15747,
+ [19075] = 15748, [19076] = 15749, [19077] = 15751, [19078] = 15752,
+ [19079] = 15753, [19080] = 20254, [19081] = 15755, [19082] = 15756,
+ [19083] = 15757, [19084] = 15758, [19085] = 15759, [19086] = 15760,
+ [19087] = 15761, [19088] = 15762, [19089] = 15763, [19090] = 15764,
+ [19091] = 15765, [19092] = 15768, [19093] = 15769, [19094] = 15770,
+ [19095] = 15771, [19097] = 15772, [19098] = 15773, [19100] = 15774,
+ [19101] = 15775, [19102] = 15776, [19103] = 15777, [19104] = 15779,
+ [19107] = 15781, [20853] = 17022, [20854] = 17023, [20855] = 17025,
+ [21943] = 17722, [22711] = 18239, [22727] = 18252, [22921] = 18514,
+ [22922] = 18515, [22923] = 18516, [22926] = 18517, [22927] = 18518,
+ [22928] = 18519, [23190] = 18731, [23399] = 18949, [23703] = 19326,
+ [23704] = 19327, [23705] = 19328, [23706] = 19329, [23707] = 19330,
+ [23708] = 19331, [23709] = 19332, [23710] = 19333, [24121] = 19769,
+ [24122] = 19770, [24123] = 19771, [24124] = 19772, [24125] = 19773,
+ [24703] = 20382, [24846] = 20506, [24847] = 20507, [24848] = 20508,
+ [24849] = 20509, [24850] = 20510, [24851] = 20511, [24940] = 20576,
+ [26279] = 21548, [28472] = 22771, [28473] = 22770, [28474] = 22769,
+ [32455] = 25720, [32457] = 25721, [32458] = 25722, [32461] = 25725,
+ [32482] = 25726, [32485] = 25728, [32487] = 25729, [32488] = 25731,
+ [32489] = 25730, [32490] = 25732, [32493] = 25733, [32494] = 25734,
+ [32495] = 25735, [32496] = 25736, [32497] = 25737, [32498] = 29213,
+ [32499] = 29214, [32500] = 29215, [32501] = 29217, [32502] = 29219,
+ [32503] = 29218, [35520] = 29669, [35521] = 29672, [35522] = 29673,
+ [35523] = 29674, [35524] = 29675, [35525] = 29677, [35526] = 29682,
+ [35527] = 29684, [35528] = 29691, [35529] = 29689, [35530] = 30444,
+ [35531] = 29693, [35532] = 29698, [35533] = 29700, [35534] = 29701,
+ [35535] = 29702, [35536] = 29703, [35537] = 29704, [35538] = 29713,
+ [35539] = 34175, [35543] = 29717, [35544] = 34173, [35549] = 31361,
+ [35554] = 31362, [35555] = 29720, [35557] = 29721, [35558] = 29723,
+ [35559] = 35302, [35560] = 29725, [35561] = 29726, [35562] = 35303,
+ [35563] = 29728, [35564] = 29729, [35567] = 29730, [35568] = 35300,
+ [35572] = 29732, [35573] = 35301, [35574] = 29734, [36349] = 30301,
+ [36351] = 30302, [36352] = 30303, [36353] = 30304, [36355] = 30305,
+ [36357] = 30306, [36358] = 30307, [36359] = 30308, [39997] = 32429,
+ [40001] = 32431, [40002] = 32432, [40003] = 32433, [40004] = 32434,
+ [40005] = 32435, [40006] = 32436, [41156] = 32744, [41157] = 35523,
+ [41158] = 35527, [41160] = 35528, [41161] = 35517, [41162] = 35524,
+ [41163] = 35520, [41164] = 35521, [42546] = 33124, [42731] = 33205,
+ [44359] = 34200, [44768] = 34218, [44953] = 34262, [45117] = 34491,
+ [46132] = 35546, [46133] = 35541, [46134] = 35214, [46135] = 35215,
+ [46136] = 35216, [46137] = 35217, [46138] = 35218, [46139] = 35549,
+ [50970] = 44509, [50971] = 44510, [52733] = 32430,
+ [57692] = 44559, [57694] = 44560, [57696] = 44561, [57699] = 44562,
+ [57701] = 44563, [60645] = 44511, [60647] = 44512, [60697] = 44513,
+ [60702] = 44514, [60703] = 44515, [60704] = 44516, [60705] = 44517,
+ [60706] = 44518, [60711] = 44519, [60712] = 44520, [60715] = 44521,
+ [60716] = 44522, [60718] = 44523, [60720] = 44524, [60721] = 44525,
+ [60723] = 44526, [60725] = 44527, [60727] = 44528, [60728] = 44530,
+ [60729] = 44531, [60730] = 44532, [60731] = 44533, [60732] = 44534,
+ [60734] = 44535, [60735] = 44536, [60737] = 44537, [60743] = 44538,
+ [60746] = 44539, [60747] = 44540, [60748] = 44541, [60749] = 44542,
+ [60750] = 44543, [60751] = 44544, [60752] = 44545, [60754] = 44546,
+ [60755] = 44547, [60756] = 44548, [60757] = 44549, [60758] = 44550,
+ [60759] = 44551, [60760] = 44552, [60761] = 44553, [60996] = 44584,
+ [60997] = 44585, [60998] = 44586, [60999] = 44587, [61000] = 44588,
+ [61002] = 44589, [62176] = 44932, [62177] = 44933, [63194] = 45094,
+ [63195] = 45095, [63196] = 45096, [63197] = 45097, [63198] = 45098,
+ [63199] = 45099, [63200] = 45100, [63201] = 45101, [70554] = 49957,
+ [70555] = 49958, [70556] = 49959, [70557] = 49961, [70558] = 49962,
+ [70559] = 49963, [70560] = 49965, [70561] = 49966, [67136] = 47650,
+ [67137] = 47646, [67138] = 47649, [67139] = 47647, [67141] = 47653,
+ [67142] = 47651, [67143] = 47648, [67140] = 47652,
+
+ -------------------------------------------------------------------------------
+ --Smelting
+ -------------------------------------------------------------------------------
+ [22967] = 44956, [46353] = 35273,
+
+ -------------------------------------------------------------------------------
+ --Tailoring
+ -------------------------------------------------------------------------------
+ [2389] = 2598, [2403] = 2601, [3758] = 4292, [3844] = 4346,
+ [3847] = 4345, [3849] = 4347, [3851] = 4349, [3854] = 7114,
+ [3856] = 4350, [3857] = 14630, [3858] = 4351, [3860] = 4352,
+ [3862] = 4355, [3863] = 4353, [3864] = 4356, [3868] = 4348,
+ [3869] = 14627, [3870] = 6401, [3872] = 4354, [3873] = 10728,
+ [6686] = 5771, [6688] = 5772, [6692] = 5773, [6693] = 5774,
+ [6695] = 5775, [7629] = 6271, [7630] = 6270, [7633] = 6272,
+ [7639] = 6274, [7643] = 6275, [7892] = 6390, [7893] = 6391,
+ [8780] = 7092, [8782] = 7091, [8784] = 7090, [8786] = 7089,
+ [8789] = 7087, [8793] = 7084, [8795] = 7085, [8797] = 7086,
+ [8802] = 7088, [12047] = 10316, [12056] = 10300, [12059] = 10301,
+ [12060] = 10302, [12064] = 10311, [12066] = 10312, [12075] = 10314,
+ [12078] = 10315, [12080] = 10317, [12081] = 10318, [12084] = 10320,
+ [12085] = 10321, [12086] = 10463, [12089] = 10323, [12091] = 10325,
+ [12093] = 10326, [18403] = 14466, [18404] = 14467, [18405] = 14468,
+ [18406] = 14469, [18407] = 14470, [18408] = 14471, [18409] = 14472,
+ [18410] = 14473, [18411] = 14474, [18412] = 14476, [18413] = 14477,
+ [18414] = 14478, [18415] = 14479, [18416] = 14480, [18417] = 14481,
+ [18418] = 14482, [18419] = 14483, [18420] = 14484, [18421] = 14485,
+ [18422] = 14486, [18423] = 14488, [18424] = 14489, [18434] = 14490,
+ [18436] = 14493, [18437] = 14492, [18438] = 14491, [18439] = 14494,
+ [18440] = 14497, [18441] = 14495, [18442] = 14496, [18444] = 14498,
+ [18445] = 14499, [18446] = 14500, [18447] = 14501, [18448] = 14507,
+ [18449] = 14504, [18450] = 14505, [18451] = 14506, [18452] = 14509,
+ [18453] = 14508, [18454] = 14511, [18455] = 14510, [18456] = 14512,
+ [18457] = 14513, [18458] = 14514, [18560] = 14526, [20848] = 17017,
+ [20849] = 17018, [21945] = 17724, [22759] = 18265, [22866] = 18414,
+ [22867] = 18415, [22868] = 18416, [22869] = 18417, [22870] = 18418,
+ [22902] = 18487, [23662] = 19215, [23663] = 19218, [23664] = 19216,
+ [23665] = 19217, [23666] = 19219, [23667] = 19220, [24091] = 19764,
+ [24092] = 19765, [24093] = 19766, [24901] = 20546, [24902] = 20548,
+ [24903] = 20547, [26085] = 21358, [26087] = 21371, [26403] = 44916,
+ [26407] = 44917, [26747] = 21892, [26749] = 21893, [26750] = 21894,
+ [26751] = 21895, [26752] = 21908, [26753] = 21909, [26754] = 21910,
+ [26755] = 21911, [26756] = 21912, [26757] = 21914, [26758] = 21913,
+ [26759] = 21915, [26760] = 21916, [26761] = 21918, [26762] = 21917,
+ [26763] = 21919, [26773] = 21896, [26774] = 21897, [26775] = 21898,
+ [26776] = 21899, [26777] = 21900, [26778] = 21901, [26779] = 21902,
+ [26780] = 21903, [26781] = 21904, [26782] = 21905, [26783] = 21906,
+ [26784] = 21907, [27658] = 22307, [27659] = 22308, [27660] = 22309,
+ [27724] = 22310, [27725] = 22312, [28210] = 22683, [28480] = 22774,
+ [28481] = 22773, [28482] = 22772, [31373] = 24316, [31430] = 24292,
+ [31431] = 24293, [31432] = 24294, [31433] = 24295, [31434] = 35308,
+ [31435] = 24297, [31437] = 24298, [31438] = 24299, [31440] = 24300,
+ [31441] = 24301, [31442] = 35309, [31443] = 24303, [31444] = 24304,
+ [31448] = 24305, [31449] = 24306, [31450] = 24307, [31451] = 24308,
+ [31452] = 24309, [31453] = 24310, [31454] = 24311, [31455] = 24312,
+ [31456] = 24313, [31459] = 24314, [36315] = 30280, [36316] = 30281,
+ [36317] = 30282, [36318] = 30283, [36686] = 30483, [37873] = 30833,
+ [37882] = 30842, [37883] = 30843, [37884] = 30844, [40020] = 32437,
+ [40021] = 32438, [40023] = 32439, [40024] = 32440, [40060] = 32447,
+ [41205] = 32754, [41206] = 32755, [41207] = 32752, [41208] = 32753,
+ [44950] = 34261, [44958] = 34319, [46128] = 35204, [46129] = 35205,
+ [46130] = 35206, [46131] = 35207, [49677] = 37915, [50194] = 38229,
+ [50644] = 38327, [50647] = 38328, [55993] = 42172, [55994] = 42173,
+ [55996] = 42175, [55997] = 42177, [55998] = 42176, [55999] = 42178,
+ [56004] = 42183, [56005] = 42184, [56006] = 42185, [56009] = 42187,
+ [56011] = 42188, [63924] = 45774, [70550] = 49953, [70551] = 49954,
+ [70552] = 49955, [70553] = 49956, [63203] = 45102, [63205] = 45104,
+ [63206] = 45105, [67145] = 47639, [67146] = 47638, [63204] = 45103,
+ [67144] = 47636, [67147] = 47637,
+}
+
+local RECIPE_TO_SPELL_MAP = {}
+
+do
+ for spell_id, recipe_id in pairs(SPELL_TO_RECIPE_MAP) do
+ RECIPE_TO_SPELL_MAP[recipe_id] = spell_id
+ end
+end
+
+-------------------------------------------------------------------------------
+-- Look up table of spell IDs for recipes which do not have a player flag
+-- BASICALLY A TEMPORARY STORAGE FOR IDS, SO WE CAN SEE CLEANER SCANS AND WHAT NOT,
+-- WE'LL GO BACK HERE LATER DOWN THE ROAD.
+-------------------------------------------------------------------------------
+local NO_ROLE_FLAG = {
+
+ --------------------------------------------------------------------------------------------
+ -----ASSORTED CRAP
+ --------------------------------------------------------------------------------------------
+ [30344] = true, [30341] = true, [32814] = true, [23066] = true,
+ [26421] = true, [36955] = true, [19788] = true, [23129] = true,
+ [26422] = true, [12715] = true, [12899] = true, [56459] = true,
+ [30307] = true, [26423] = true, [3918] = true, [23067] = true,
+ [30308] = true, [3953] = true, [15255] = true, [26424] = true,
+ [30548] = true, [44157] = true, [56462] = true, [19567] = true,
+ [30552] = true, [23068] = true, [44155] = true, [28327] = true,
+ [26425] = true, [56461] = true, [68067] = true, [15633] = true,
+ [23096] = true, [12589] = true, [26442] = true, [26426] = true,
+ [67920] = true, [9273] = true, [3926] = true, [6458] = true,
+ [19793] = true, [55252] = true, [9271] = true, [26427] = true,
+ [26443] = true, [30551] = true, [23486] = true, [3922] = true,
+ [3924] = true, [12590] = true, [3928] = true, [3942] = true,
+ [26428] = true, [3952] = true, [22704] = true, [12902] = true,
+ [30569] = true, [15628] = true, [12895] = true, [21940] = true,
+ [56349] = true, [12584] = true, [56477] = true, [30348] = true,
+ [26416] = true, [53281] = true, [23507] = true, [12075] = true,
+ [12079] = true, [26746] = true, [56000] = true,
+
+ -----------------------------------------------------------------------------------------
+ ---JEWELCRAFTING
+ -----------------------------------------------------------------------------------------
+ [55401] = true, [53995] = true, [66432] = true, [25255] = true,
+ [66497] = true, [53996] = true, [56074] = true, [56202] = true,
+ [66434] = true, [32801] = true, [28948] = true, [53997] = true,
+ [39963] = true, [32866] = true, [66501] = true, [39452] = true,
+ [53934] = true, [66502] = true, [55405] = true, [58954] = true,
+ [56205] = true, [37855] = true, [38175] = true, [25305] = true,
+ [25321] = true, [66505] = true, [54000] = true, [39742] = true,
+ [56206] = true, [66506] = true, [32869] = true, [54001] = true,
+ [56079] = true, [32259] = true, [32870] = true, [56208] = true,
+ [32807] = true, [32871] = true, [26873] = true, [31061] = true,
+ [32872] = true, [42591] = true, [46779] = true, [56530] = true,
+ [42592] = true, [31062] = true, [56083] = true, [32874] = true,
+ [56531] = true, [31063] = true, [56085] = true, [38503] = true,
+ [56086] = true, [28938] = true, [38504] = true, [31064] = true,
+ [31096] = true, [55384] = true, [25278] = true, [68253] = true,
+ [43493] = true, [26925] = true, [31065] = true, [46403] = true,
+ [53852] = true, [53916] = true, [39722] = true, [25615] = true,
+ [28924] = true, [26926] = true, [53853] = true, [36526] = true,
+ [31098] = true, [55388] = true, [46405] = true, [53854] = true,
+ [39724] = true, [55389] = true, [26927] = true, [31051] = true,
+ [53919] = true, [39725] = true, [55390] = true, [53856] = true,
+ [53920] = true, [53952] = true, [26880] = true, [53857] = true,
+ [31052] = true, [34069] = true, [25490] = true, [55393] = true,
+ [39451] = true, [53956] = true, [44794] = true, [36524] = true,
+ [55395] = true, [38068] = true, [28944] = true, [53957] = true,
+ [31066] = true, [31082] = true, [66428] = true, [26909] = true,
+ [55396] = true, [31097] = true, [25284] = true, [56084] = true,
+ [62941] = true, [66431] = true, [53894] = true, [53958] = true,
+ [58146] = true, [31099] = true, [47053] = true, [31067] = true,
+ [28917] = true, [26903] = true, [36525] = true, [66503] = true,
+ [56197] = true, [47054] = true, [53961] = true, [39715] = true,
+ [31092] = true, [53960] = true, [31077] = true, [31101] = true,
+ [39719] = true, [55399] = true, [31113] = true, [32808] = true,
+ [53917] = true, [63743] = true, [39720] = true, [39721] = true,
+ [42590] = true, [58149] = true, [56199] = true, [47056] = true,
+ [28950] = true, [47280] = true, [32809] = true, [31072] = true,
+ [25318] = true, [66429] = true, [62242] = true,
+ ---------------------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------------------
+ ---COOKING
+ ---------------------------------------------------------------------------------------
+ [62050]= true, [22761]= true, [62051]= true, [8607]= true,
+ [18238]= true, [6413]= true, [6417]= true, [42296]= true,
+ [45557]= true, [6501]= true, [45558]= true, [18239]= true,
+ [7752]= true, [7828]= true, [45560]= true, [64358]= true,
+ [57421]= true, [45561]= true, [13028]= true, [2543]= true,
+ [2545]= true, [25659]= true, [58512]= true, [45565]= true,
+ [42305]= true, [45566]= true, [62350]= true, [7753]= true,
+ [45695]= true, [9513]= true, [18244]= true, [20626]= true,
+ [45569]= true, [43779]= true, [18245]= true, [45571]= true,
+ [18246]= true, [37836]= true, [57433]= true, [20916]= true,
+ [58521]= true, [18247]= true, [57435]= true, [7754]= true,
+ [53056]= true, [58523]= true, [57437]= true, [57438]= true,
+ [58525]= true, [45570]= true, [2538]= true, [2540]= true,
+ [2548]= true, [33290]= true, [45562]= true, [15906]= true,
+ [18241]= true, [45559]= true, [45551]= true, [57443]= true,
+ [58527]= true, [43758]= true, [58528]= true, [8238]= true,
+ [7751]= true, [7755]= true, [43761]= true, [7827]= true,
+ [45552]= true, [45553]= true, [66038] = true, [66034] = true,
+ ---------------------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------------------
+ ---BLACKSMITHING
+ ---------------------------------------------------------------------------------------
+ [10015] = true, [55202] = true, [16726] = true, [24399] = true,
+ [15293] = true, [32655] = true, [3320] = true, [40033] = true,
+ [34545] = true, [61010] = true, [16639] = true, [3115] = true,
+ [3116] = true, [3117] = true, [16648] = true, [40034] = true,
+ [9920] = true, [9928] = true, [29558] = true, [55839] = true,
+ [9964] = true, [7818] = true, [55732] = true, [29694] = true,
+ [3326] = true, [9950] = true, [59405] = true, [12260] = true,
+ [16983] = true, [16991] = true, [23650] = true, [16640] = true,
+ [2741] = true, [3513] = true, [3497] = true, [8768] = true,
+ [19666] = true, [2662] = true, [2663] = true, [20201] = true,
+ [16664] = true, [15294] = true, [3496] = true, [16645] = true,
+ [29569] = true, [2737] = true, [14380] = true, [16992] = true,
+ [36125] = true, [19667] = true, [22757] = true, [16665] = true,
+ [59406] = true, [2738] = true, [2739] = true, [2740] = true,
+ [24913] = true, [9933] = true, [20873] = true, [36126] = true,
+ [40035] = true, [8880] = true, [23636] = true, [3292] = true,
+ [3293] = true, [21161] = true, [32656] = true, [19668] = true,
+ [9921] = true, [7222] = true, [3319] = true, [15295] = true,
+ [20874] = true, [20890] = true, [3337] = true, [34546] = true,
+ [16970] = true, [16978] = true, [61008] = true, [7224] = true,
+ [11454] = true, [19669] = true, [55656] = true, [16667] = true,
+ [16731] = true, [61009] = true, [9926] = true, [16984] = true,
+ [21913] = true, [40036] = true, [9974] = true, [32657] = true,
+ [32285] = true, [23638] = true, [10011] = true, [36131] = true,
+ [27830] = true, [32284] = true, [16732] = true, [15292] = true,
+ [15296] = true, [38478] = true, [20876] = true, [38475] = true,
+ [23653] = true, [3325] = true, [14379] = true, [29729] = true,
+ [2661] = true, [29728] = true, [16655] = true, [16993] = true,
+ [3491] = true, [3494] = true, [3501] = true, [9959] = true,
+ [9983] = true, [36262] = true, [10003] = true, [10007] = true,
+ ---------------------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------------------
+ ----INSCRIPTION
+ ---------------------------------------------------------------------------------------
+ [58315] = true, [58331] = true, [58347] = true, [56974] = true, [56990] = true,
+ [64256] = true, [64304] = true, [57166] = true, [57709] = true, [57214] = true,
+ [57230] = true, [50603] = true, [57262] = true, [59338] = true, [58332] = true,
+ [56959] = true, [56975] = true, [56991] = true, [57007] = true, [57023] = true,
+ [53462] = true, [64257] = true, [64273] = true, [64289] = true, [57151] = true,
+ [57167] = true, [57183] = true, [57710] = true, [57215] = true, [57247] = true,
+ [50620] = true, [58301] = true, [59339] = true, [58333] = true, [59387] = true,
+ [52840] = true, [59499] = true, [56960] = true, [56976] = true, [57008] = true,
+ [57024] = true, [64258] = true, [64274] = true, [57168] = true, [57184] = true,
+ [61288] = true, [57216] = true, [57232] = true, [58286] = true, [58302] = true,
+ [59340] = true, [48114] = true, [64051] = true, [59484] = true, [59500] = true,
+ [56961] = true, [56977] = true, [57009] = true, [57025] = true, [61177] = true,
+ [64259] = true, [57121] = true, [64291] = true, [57153] = true, [57169] = true,
+ [57185] = true, [57712] = true, [57217] = true, [57233] = true, [58287] = true,
+ [58303] = true, [58319] = true, [56946] = true, [56978] = true, [56994] = true,
+ [57010] = true, [57026] = true, [64260] = true, [57122] = true, [57154] = true,
+ [57170] = true, [57186] = true, [57713] = true, [57218] = true, [57234] = true,
+ [57266] = true, [59326] = true, [58320] = true, [58336] = true, [59486] = true,
+ [59502] = true, [56963] = true, [56995] = true, [57011] = true, [57027] = true,
+ [64261] = true, [64277] = true, [57155] = true, [57187] = true, [57714] = true,
+ [57219] = true, [57235] = true, [58289] = true, [58305] = true, [58321] = true,
+ [58337] = true, [69385] = true, [57243] = true, [64314] = true, [64313] = true,
+ [56958] = true, [59487] = true, [59503] = true, [58288] = true, [56980] = true,
+ [56996] = true, [57012] = true, [57028] = true, [59501] = true, [56948] = true,
+ [57264] = true, [64246] = true, [64262] = true, [57124] = true, [64294] = true,
+ [57156] = true, [57172] = true, [57188] = true, [57715] = true, [57220] = true,
+ [57236] = true, [57268] = true, [58306] = true, [58322] = true, [58338] = true,
+ [48247] = true, [57133] = true, [57270] = true, [57131] = true, [57129] = true,
+ [50604] = true, [59488] = true, [59504] = true, [56965] = true, [56981] = true,
+ [56997] = true, [57013] = true, [57029] = true, [64280] = true, [57114] = true,
+ [64286] = true, [58299] = true, [57125] = true, [64295] = true, [64311] = true,
+ [57164] = true, [57189] = true, [57716] = true, [57221] = true, [57237] = true,
+ [57269] = true, [58307] = true, [58323] = true, [58339] = true, [64307] = true,
+ [57119] = true, [57246] = true, [68166] = true, [64282] = true, [57250] = true,
+ [59489] = true, [56957] = true, [56982] = true, [56998] = true, [57014] = true,
+ [57117] = true, [64305] = true, [61677] = true, [52843] = true, [57126] = true,
+ [64296] = true, [57158] = true, [64310] = true, [57190] = true, [56956] = true,
+ [57238] = true, [60336] = true, [58308] = true, [58324] = true, [58340] = true,
+ [64315] = true, [56949] = true, [56950] = true, [64308] = true, [56955] = true,
+ [59490] = true, [59315] = true, [56983] = true, [56999] = true, [64267] = true,
+ [57031] = true, [56954] = true, [64276] = true, [57249] = true, [64249] = true,
+ [56953] = true, [57127] = true, [64297] = true, [57159] = true, [64275] = true,
+ [57191] = true, [57207] = true, [57223] = true, [57239] = true, [50612] = true,
+ [60337] = true, [57208] = true, [58325] = true, [48121] = true, [56952] = true,
+ [56947] = true, [56951] = true, [64268] = true, [57123] = true, [59475] = true,
+ [59491] = true, [56968] = true, [56984] = true, [57000] = true, [48248] = true,
+ [58565] = true, [58317] = true, [64266] = true, [57252] = true, [64250] = true,
+ [57112] = true, [57128] = true, [64298] = true, [57160] = true, [58316] = true,
+ [57703] = true, [57719] = true, [57224] = true, [57240] = true, [57272] = true,
+ [58310] = true, [58326] = true, [58342] = true, [57201] = true, [56945] = true,
+ [57200] = true, [56944] = true, [57711] = true, [56985] = true, [57001] = true,
+ [57199] = true, [57033] = true, [56943] = true, [57198] = true, [64251] = true,
+ [57113] = true, [64283] = true, [64299] = true, [57161] = true, [57197] = true,
+ [57704] = true, [57209] = true, [57225] = true, [57241] = true, [50614] = true,
+ [57273] = true, [58311] = true, [58327] = true, [58343] = true, [52738] = true,
+ [57196] = true, [64278] = true, [57195] = true, [58318] = true, [64284] = true,
+ [57006] = true, [64316] = true, [56986] = true, [57002] = true, [59560] = true,
+ [57034] = true, [58341] = true, [57192] = true, [64252] = true, [67600] = true,
+ [57130] = true, [64300] = true, [57162] = true, [57244] = true, [57194] = true,
+ [57210] = true, [57226] = true, [50599] = true, [57258] = true, [58296] = true,
+ [58312] = true, [58328] = true, [58344] = true, [52739] = true, [58298] = true,
+ [57274] = true, [57265] = true, [57251] = true, [59478] = true, [56971] = true,
+ [56987] = true, [57003] = true, [57019] = true, [57035] = true, [57259] = true,
+ [57263] = true, [57271] = true, [64253] = true, [57115] = true, [64285] = true,
+ [57242] = true, [57163] = true, [57120] = true, [57706] = true, [57211] = true,
+ [57227] = true, [50600] = true, [50616] = true, [58297] = true, [58313] = true,
+ [58329] = true, [58345] = true, [50602] = true, [57248] = true, [59559] = true,
+ [57157] = true, [57257] = true, [64309] = true, [64317] = true, [56972] = true,
+ [56988] = true, [57004] = true, [57020] = true, [57036] = true, [62162] = true,
+ [57030] = true, [64254] = true, [57116] = true, [57132] = true, [64302] = true,
+ [64318] = true, [64270] = true, [57707] = true, [57212] = true, [57228] = true,
+ [50601] = true, [57260] = true, [57276] = true, [58314] = true, [58330] = true,
+ [58346] = true, [45382] = true, [57267] = true, [57275] = true, [64312] = true,
+ [64279] = true, [50598] = true, [59480] = true, [59496] = true, [56973] = true,
+ [56989] = true, [57005] = true, [57021] = true, [50619] = true, [50618] = true,
+ [65245] = true, [50617] = true, [64255] = true, [64271] = true, [64287] = true,
+ [64303] = true, [57165] = true, [57181] = true, [57708] = true, [57213] = true,
+ [57229] = true, [57245] = true, [57261] = true, [57277] = true, [57253] = true,
+ [71015] = true, [71101] = true, [71102] = true,
+ ---------------------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------------------
+ ----ENCHANTING
+ ---------------------------------------------------------------------------------------
+ [46578] = true, [25125] = true, [13612] = true, [13620] = true, [13628] = true,
+ [13640] = true, [13644] = true, [13648] = true, [59625] = true, [13700] = true,
+ [17181] = true, [27920] = true, [27960] = true, [28016] = true, [45765] = true,
+ [14810] = true, [63746] = true, [13836] = true, [20008] = true, [20032] = true,
+ [13868] = true, [13421] = true, [13948] = true, [27905] = true, [27945] = true,
+ [13501] = true, [7786] = true, [7788] = true, [13529] = true, [32664] = true,
+ [44506] = true, [25127] = true, [20025] = true, [20033] = true, [13617] = true,
+ [64579] = true, [60619] = true, [13657] = true, [13693] = true, [27914] = true,
+ [44555] = true, [27954] = true, [27962] = true, [14807] = true, [32665] = true,
+ [7421] = true, [13817] = true, [25072] = true, [44492] = true, [44524] = true,
+ [7443] = true, [44556] = true, [25128] = true, [20026] = true, [7457] = true,
+ [13378] = true, [34001] = true, [13917] = true, [13933] = true, [13937] = true,
+ [13941] = true, [44621] = true, [28003] = true, [28027] = true, [13522] = true,
+ [13538] = true, [25081] = true, [44494] = true, [20011] = true, [25129] = true,
+ [44590] = true, [47672] = true, [20051] = true, [13622] = true, [13626] = true,
+ [69412] = true, [60623] = true, [44383] = true, [13698] = true, [13702] = true,
+ [23804] = true, [44623] = true, [28004] = true, [28028] = true, [14293] = true,
+ [32667] = true, [13822] = true, [25082] = true, [44576] = true, [20028] = true,
+ [20036] = true, [13890] = true, [13898] = true, [60609] = true, [59619] = true,
+ [47898] = true, [7745] = true, [27957] = true, [13503] = true, [34006] = true,
+ [7793] = true, [7795] = true, [59636] = true, [25083] = true, [20029] = true,
+ [13631] = true, [13655] = true, [7861] = true, [7863] = true, [62256] = true,
+ [13695] = true, [13858] = true, [44483] = true, [27968] = true, [7857] = true,
+ [27967] = true, [42615] = true, [27958] = true, [42613] = true, [25084] = true,
+ [20017] = true, [33992] = true, [34008] = true, [13663] = true, [60653] = true,
+ [44528] = true, [14809] = true, [27961] = true, [47901] = true, [7418] = true,
+ [7420] = true, [44488] = true, [7426] = true, [44616] = true, [13841] = true,
+ [44596] = true, [17180] = true, [7454] = true, [33993] = true, [34009] = true,
+ [27950] = true, [20031] = true, [13915] = true, [47900] = true, [13943] = true,
+ [13947] = true, [13945] = true, [13464] = true, [27927] = true, [7771] = true,
+ [20014] = true, [20030] = true, [27947] = true, [33994] = true, [28022] = true,
+ [60692] = true, [25130] = true, [34005] = true, [13794] = true, [7748] = true,
+ [44588] = true, [15596] = true, [7776] = true, [44584] = true, [13607] = true,
+ [13653] = true, [20020] = true, [70524] = true, [71692] = true,
+ ---------------------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------------------
+ ---TAILORING
+ ---------------------------------------------------------------------------------------
+ [12055] = true, [12059] = true, [12071] = true, [46131] = true, [23664] = true,
+ [31433] = true, [31441] = true, [7624] = true, [26403] = true, [24902] = true,
+ [22866] = true, [56001] = true, [18411] = true, [18419] = true, [18451] = true,
+ [28208] = true, [6686] = true, [8766] = true, [23665] = true, [8786] = true,
+ [26747] = true, [56002] = true, [26763] = true, [26779] = true, [31434] = true,
+ [31450] = true, [60969] = true, [28480] = true, [22867] = true, [56003] = true,
+ [18404] = true, [18412] = true, [18420] = true, [12044] = true, [63924] = true,
+ [12056] = true, [12064] = true, [12080] = true, [12084] = true, [23666] = true,
+ [56004] = true, [26780] = true, [31459] = true, [7892] = true, [60971] = true,
+ [28481] = true, [22868] = true, [20848] = true, [56005] = true, [18405] = true,
+ [19435] = true, [26086] = true, [18437] = true, [18453] = true, [27659] = true,
+ [28210] = true, [40021] = true, [23667] = true, [26773] = true, [26781] = true,
+ [26759] = true, [8774] = true, [31460] = true, [24903] = true, [3755] = true,
+ [37882] = true, [3757] = true, [3758] = true, [50194] = true, [18446] = true,
+ [6692] = true, [28482] = true, [22869] = true, [18439] = true, [20849] = true,
+ [18440] = true, [2389] = true, [56007] = true, [18455] = true, [6521] = true,
+ [18445] = true, [18406] = true, [18414] = true, [18422] = true, [12045] = true,
+ [36318] = true, [18454] = true, [27660] = true, [24091] = true, [12065] = true,
+ [12069] = true, [12077] = true, [12081] = true, [12085] = true, [27724] = true,
+ [12093] = true, [40060] = true, [26087] = true, [26749] = true, [31373] = true,
+ [26750] = true, [26782] = true, [28205] = true, [28209] = true, [36686] = true,
+ [3813] = true, [2394] = true, [7629] = true, [18438] = true, [7633] = true,
+ [40023] = true, [49677] = true, [26407] = true, [18452] = true, [7643] = true,
+ [22870] = true, [26755] = true, [22902] = true, [3869] = true, [55993] = true,
+ [8789] = true, [3839] = true, [3841] = true, [3844] = true, [18407] = true,
+ [18415] = true, [3847] = true, [3848] = true, [3851] = true, [3852] = true,
+ [24092] = true, [3854] = true, [3856] = true, [3857] = true, [8760] = true,
+ [27725] = true, [8776] = true, [8780] = true, [8784] = true, [3865] = true,
+ [55994] = true, [3868] = true, [26783] = true, [3871] = true, [3872] = true,
+ [3873] = true, [31438] = true, [22759] = true, [12091] = true, [8804] = true,
+ [8772] = true, [18560] = true, [18447] = true, [44950] = true, [60993] = true,
+ [55899] = true, [55898] = true, [55995] = true, [2385] = true, [21945] = true,
+ [6688] = true, [12066] = true, [18416] = true, [8465] = true, [12046] = true,
+ [18448] = true, [3915] = true, [24093] = true, [8489] = true, [2386] = true,
+ [12078] = true, [12082] = true, [60994] = true, [55900] = true, [2392] = true,
+ [2393] = true, [23662] = true, [2396] = true, [55996] = true, [2399] = true,
+ [26784] = true, [2402] = true, [2403] = true, [2406] = true, [31431] = true,
+ [3864] = true, [8782] = true, [37884] = true, [37883] = true, [26751] = true,
+ [50647] = true, [8802] = true, [8467] = true, [7893] = true, [40020] = true,
+ [41208] = true, [22813] = true, [41207] = true, [37873] = true, [2387] = true,
+ [55997] = true, [26085] = true, [8799] = true, [27658] = true, [8483] = true,
+ [3914] = true, [18401] = true, [56006] = true, [18441] = true, [18449] = true,
+ [28207] = true, [55769] = true, [18413] = true, [18421] = true, [46129] = true,
+ [2963] = true, [2964] = true, [12061] = true, [12086] = true, [23663] = true,
+ [26745] = true, [55998] = true, [3863] = true, [8764] = true, [31440] = true,
+ [31448] = true, [12089] = true, [6695] = true, [40024] = true, [60990] = true,
+ [50644] = true, [8793] = true, [46130] = true, [24901] = true, [3870] = true,
+ [31437] = true, [44958] = true, [55999] = true, [3845] = true, [6693] = true,
+ [3866] = true, [18456] = true, [18410] = true, [18418] = true, [2397] = true,
+ [18434] = true, [18450] = true,
+ ---------------------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------------------
+ ----LEATHERWORKING
+ ---------------------------------------------------------------------------------------
+ [9198] = true, [23704] = true, [60996] = true, [35549] = true, [22921] = true,
+ [50958] = true, [10509] = true, [10525] = true, [19053] = true, [19085] = true,
+ [19101] = true, [2149] = true, [36349] = true, [2153] = true, [60997] = true,
+ [2159] = true, [2163] = true, [2165] = true, [35582] = true, [50959] = true,
+ [46132] = true, [23705] = true, [60998] = true, [22922] = true, [46133] = true,
+ [24121] = true, [19054] = true, [19070] = true, [19086] = true, [19102] = true,
+ [32465] = true, [32481] = true, [22331] = true, [35520] = true, [35584] = true,
+ [9207] = true, [6661] = true, [46134] = true, [23706] = true, [61000] = true,
+ [35521] = true, [35585] = true, [50962] = true, [10518] = true, [39997] = true,
+ [24122] = true, [19055] = true, [19087] = true, [19103] = true, [32466] = true,
+ [32482] = true, [36353] = true, [35522] = true, [35554] = true, [50963] = true,
+ [44953] = true, [46136] = true, [23707] = true, [61002] = true, [35523] = true,
+ [35555] = true, [35587] = true, [50964] = true, [46137] = true, [24123] = true,
+ [19072] = true, [19104] = true, [9064] = true, [9072] = true, [69386] = true,
+ [32499] = true, [36355] = true, [7133] = true, [35524] = true, [35588] = true,
+ [7153] = true, [9208] = true, [46138] = true, [23708] = true, [69388] = true,
+ [35525] = true, [35557] = true, [10487] = true, [10511] = true, [46139] = true,
+ [24124] = true, [19073] = true, [19089] = true, [32468] = true, [32500] = true,
+ [10647] = true, [28472] = true, [35526] = true, [35558] = true, [45117] = true,
+ [60622] = true, [23709] = true, [35527] = true, [3774] = true, [3778] = true,
+ [3780] = true, [40003] = true, [24125] = true, [19058] = true, [19074] = true,
+ [32485] = true, [32501] = true, [36359] = true, [3816] = true, [3818] = true,
+ [28473] = true, [35528] = true, [35560] = true, [9193] = true, [40004] = true,
+ [23710] = true, [8322] = true, [35529] = true, [35561] = true, [50970] = true,
+ [2881] = true, [10520] = true, [40005] = true, [10544] = true, [10552] = true,
+ [10560] = true, [19091] = true, [19107] = true, [32454] = true, [32502] = true,
+ [28474] = true, [35530] = true, [50971] = true, [62448] = true, [7953] = true,
+ [41157] = true, [36074] = true, [24846] = true, [35531] = true, [22928] = true,
+ [28219] = true, [41158] = true, [36075] = true, [32487] = true, [32503] = true,
+ [7126] = true, [9146] = true, [35532] = true, [35564] = true, [9194] = true,
+ [9202] = true, [24655] = true, [36076] = true, [24847] = true, [35533] = true,
+ [5244] = true, [10529] = true, [28220] = true, [19093] = true, [32456] = true,
+ [52733] = true, [2158] = true, [2160] = true, [2162] = true, [2166] = true,
+ [24848] = true, [35535] = true, [35567] = true, [28221] = true, [19094] = true,
+ [44359] = true, [57690] = true, [32457] = true, [32473] = true, [32489] = true,
+ [9147] = true, [35536] = true, [35568] = true, [9195] = true, [41163] = true,
+ [6703] = true, [24849] = true, [20853] = true, [10482] = true, [10490] = true,
+ [28222] = true, [10546] = true, [10554] = true, [41164] = true, [10570] = true,
+ [19095] = true, [57692] = true, [32458] = true, [10650] = true, [35538] = true,
+ [42731] = true, [24850] = true, [20854] = true, [44970] = true, [28223] = true,
+ [19048] = true, [19064] = true, [19080] = true, [57694] = true, [9148] = true,
+ [35540] = true, [35572] = true, [24851] = true, [20855] = true, [45100] = true,
+ [10531] = true, [28224] = true, [57696] = true, [10619] = true, [19081] = true,
+ [22727] = true, [35539] = true, [19079] = true, [10566] = true, [19065] = true,
+ [10574] = true, [19097] = true, [60647] = true, [3753] = true, [9065] = true,
+ [44343] = true, [3763] = true, [3767] = true, [3773] = true, [3775] = true,
+ [3777] = true, [3779] = true, [32455] = true, [24940] = true, [19050] = true,
+ [19082] = true, [23190] = true, [32461] = true, [60999] = true, [3817] = true,
+ [44344] = true, [9149] = true, [35544] = true, [9197] = true, [19077] = true,
+ [9060] = true, [19076] = true, [35573] = true, [40001] = true, [19066] = true,
+ [19090] = true, [19098] = true, [22711] = true, [57699] = true, [9059] = true,
+ [32480] = true, [64661] = true, [10562] = true, [40002] = true, [50936] = true,
+ [6705] = true, [9058] = true, [24703] = true, [22923] = true, [60645] = true,
+ [35577] = true, [2152] = true, [10556] = true, [10572] = true, [44770] = true,
+ [36077] = true, [19059] = true, [19075] = true, [35580] = true, [20648] = true,
+ [2169] = true, [60643] = true, [19088] = true, [6702] = true, [6704] = true,
+ [35543] = true, [7149] = true, [36078] = true, [36079] = true, [23703] = true,
+ [35534] = true, [57701] = true, [46135] = true, [19047] = true, [20649] = true,
+ [40006] = true, [3765] = true, [41156] = true, [3771] = true, [50956] = true,
+ [19061] = true, [20650] = true, [32467] = true, [35537] = true, [22926] = true,
+ [4096] = true, [19062] = true, [44768] = true, [35576] = true, [19063] = true,
+ [9062] = true, [9070] = true, [32495] = true,
+ ---------------------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------------------
+ -----ALCHEMY
+ ---------------------------------------------------------------------------------------
+ [53898] = true, [28579] = true, [17566] = true, [53771] = true, [7256] = true,
+ [53899] = true, [11452] = true, [11460] = true, [11468] = true, [3170] = true,
+ [3172] = true, [3174] = true, [3176] = true, [53836] = true, [53900] = true,
+ [28564] = true, [28580] = true, [54220] = true, [17551] = true, [53773] = true,
+ [53837] = true, [62213] = true, [54221] = true, [53774] = true, [53838] = true,
+ [6617] = true, [53902] = true, [28581] = true, [2331] = true, [2335] = true,
+ [2337] = true, [53775] = true, [53839] = true, [11453] = true, [7836] = true,
+ [24266] = true, [41500] = true, [53904] = true, [53936] = true, [28566] = true,
+ [28582] = true, [3452] = true, [3454] = true, [33732] = true, [17553] = true,
+ [22732] = true, [53777] = true, [53905] = true, [53937] = true, [33733] = true,
+ [62409] = true, [25146] = true, [41502] = true, [53938] = true, [28551] = true,
+ [28567] = true, [28583] = true, [62410] = true, [7181] = true, [17570] = true,
+ [17634] = true, [53779] = true, [7257] = true, [53939] = true, [11478] = true,
+ [17187] = true, [53812] = true, [28552] = true, [28568] = true, [28584] = true,
+ [60366] = true, [57425] = true, [17635] = true, [53781] = true, [60367] = true,
+ [4508] = true, [53782] = true, [24365] = true, [6618] = true, [53942] = true,
+ [28569] = true, [28585] = true, [29688] = true, [57427] = true, [17556] = true,
+ [17572] = true, [17636] = true, [53783] = true, [11479] = true, [7837] = true,
+ [7841] = true, [53784] = true, [24366] = true, [53848] = true, [28554] = true,
+ [28570] = true, [28586] = true, [58868] = true, [33741] = true, [24367] = true,
+ [28555] = true, [28571] = true, [17574] = true, [17638] = true, [7258] = true,
+ [11448] = true, [11456] = true, [11464] = true, [11480] = true, [3171] = true,
+ [3173] = true, [3175] = true, [24368] = true, [28572] = true, [28588] = true,
+ [45061] = true, [66658] = true, [17559] = true, [17575] = true, [66659] = true,
+ [66660] = true, [63732] = true, [28573] = true, [66662] = true, [17560] = true,
+ [2330] = true, [2332] = true, [2334] = true, [66663] = true, [11457] = true,
+ [11465] = true, [11473] = true, [66664] = true, [3449] = true, [3451] = true,
+ [3453] = true, [17561] = true, [17577] = true, [28543] = true, [28575] = true,
+ [7179] = true, [17562] = true, [17578] = true, [7255] = true, [7259] = true,
+ [11458] = true, [11466] = true, [38962] = true, [53776] = true, [12609] = true,
+ [53780] = true, [60893] = true, [58871] = true, [3448] = true, [3450] = true,
+ [3447] = true, [4942] = true, [28576] = true, [15833] = true, [17576] = true,
+ [41503] = true, [60350] = true, [41501] = true, [17563] = true, [42736] = true,
+ [54213] = true, [41458] = true, [6624] = true, [39636] = true, [28577] = true,
+ [32765] = true, [38070] = true, [17564] = true, [17580] = true, [53895] = true,
+ [11451] = true, [39637] = true, [28546] = true, [28562] = true, [28578] = true,
+ [60354] = true, [32766] = true, [17565] = true, [22808] = true, [39639] = true,
+ [60355] = true, [56519] = true,
+ ---------------------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------------------
+ ----ENGINEERING
+ ---------------------------------------------------------------------------------------
+ [23081] = true, [12586] = true, [12594] = true, [12622] = true, [30347] = true,
+ [44391] = true, [30547] = true, [56464] = true, [12754] = true, [12758] = true,
+ [23489] = true, [23082] = true, [8243] = true, [9269] = true, [30316] = true,
+ [30332] = true, [12906] = true, [8339] = true, [26420] = true, [56514] = true,
+ [39971] = true, [12599] = true, [12603] = true, [12607] = true, [43676] = true,
+ [12619] = true, [54998] = true, [30349] = true, [56468] = true, [12755] = true,
+ [12759] = true, [63750] = true, [39973] = true, [56465] = true, [56469] = true,
+ [30318] = true, [30334] = true, [55016] = true, [12903] = true, [54793] = true,
+ [19795] = true, [8895] = true, [19819] = true, [30558] = true, [39895] = true,
+ [23069] = true, [23077] = true, [12596] = true, [30303] = true, [56471] = true,
+ [12624] = true, [19796] = true, [56472] = true, [12760] = true, [63770] = true,
+ [23070] = true, [23078] = true, [61471] = true, [30304] = true, [30312] = true,
+ [12908] = true, [12597] = true, [3930] = true, [24356] = true, [67839] = true,
+ [67326] = true, [56474] = true, [30560] = true, [30568] = true, [30314] = true,
+ [3929] = true, [56475] = true, [19830] = true, [3946] = true, [54736] = true,
+ [30563] = true, [24357] = true, [30337] = true, [12591] = true, [19814] = true,
+ [60866] = true, [12716] = true, [23071] = true, [23079] = true, [12585] = true,
+ [3923] = true, [3925] = true, [30305] = true, [12621] = true, [30329] = true,
+ [3931] = true, [3932] = true, [3933] = true, [3936] = true, [3937] = true,
+ [3938] = true, [3939] = true, [3941] = true, [56473] = true, [3944] = true,
+ [3945] = true, [3947] = true, [54999] = true, [3949] = true, [3950] = true,
+ [26417] = true, [12717] = true, [3954] = true, [3955] = true, [3957] = true,
+ [3958] = true, [3961] = true, [3962] = true, [3963] = true, [3965] = true,
+ [3966] = true, [3967] = true, [3968] = true, [3969] = true, [3971] = true,
+ [3972] = true, [3973] = true, [7430] = true, [3977] = true, [3978] = true,
+ [3979] = true, [19790] = true, [23080] = true, [12620] = true, [30309] = true,
+ [30346] = true, [12905] = true, [41307] = true, [8334] = true, [56460] = true,
+ [56476] = true, [12718] = true, [26418] = true, [19791] = true, [3960] = true,
+ [19815] = true, [13240] = true, [19831] = true, [30570] = true, [19799] = true,
+ [30306] = true, [30310] = true, [26011] = true, [36954] = true, [3919] = true,
+ [3920] = true, [19800] = true, [12617] = true, [30311] = true, [56463] = true,
+ [72952] = true, [72953] = true,
+ ---------------------------------------------------------------------------------------
+}
+
+local function ItemLinkToID(link)
+ if not link then
+ return
+ end
+ local _, _, id_num = string.find(link,"item:(%d+):")
+
+ if id_num then
+ return tonumber(id_num)
+ end
+end
+
+
+local function LoadRecipe()
+ local recipe_list = private.recipe_list
+
+ if addon.db.profile.autoloaddb then
+ for idx, prof in pairs(PROFESSIONS) do
+ addon:InitializeRecipe(prof)
+ end
+ end
+ return recipe_list
+
+end
+
+-------------------------------------------------------------------------------
+-- Creates a reverse lookup for a recipe list
+-------------------------------------------------------------------------------
+local GetReverseLookup
+do
+ local reverse_lookup = {}
+
+ function GetReverseLookup(recipe_list)
+ if not recipe_list then
+ addon:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+ twipe(reverse_lookup)
+
+ for i in pairs(recipe_list) do
+ --if t[recipe_list[i].name] then addon:Print("Dupe: " .. i) end
+ reverse_lookup[recipe_list[i].name] = i
+ end
+ return reverse_lookup
+ end
+
+end
+
+-------------------------------------------------------------------------------
+-- Tooltip for data-mining.
+-------------------------------------------------------------------------------
+local ARLDatamineTT = CreateFrame("GameTooltip", "ARLDatamineTT", UIParent, "GameTooltipTemplate")
+
+do
+ -- Tables used in all the Scan functions within this do block. -Torhal
+ local info, output = {}, {}
+
+ --- Function to compare the skill levels of a trainers recipes with those in the ARL database.
+ -- @name AckisRecipeList:ScanSkillLevelData
+ -- @param autoscan True when autoscan is enabled in preferences, it will surpress output letting you know when a scan has occured.
+ -- @return Does a comparison of the information in your internal ARL database, and those items which are available on the trainer. Compares the skill levels between the two.
+ function addon:ScanSkillLevelData(autoscan)
+ if not IsTradeskillTrainer() then
+ if not autoscan then
+ self:Print(L["DATAMINER_SKILLLEVEL_ERROR"])
+ end
+ return
+ end
+ local recipe_list = LoadRecipe() -- Get internal database
+
+ if not recipe_list then
+ self:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+ -- Get the initial trainer filters
+ local avail = GetTrainerServiceTypeFilter("available")
+ local unavail = GetTrainerServiceTypeFilter("unavailable")
+ local used = GetTrainerServiceTypeFilter("used")
+
+ -- Clear the trainer filters
+ SetTrainerServiceTypeFilter("available", 1)
+ SetTrainerServiceTypeFilter("unavailable", 1)
+ SetTrainerServiceTypeFilter("used", 1)
+
+ twipe(info)
+
+ -- Get the skill levels from the trainer
+ for i = 1, GetNumTrainerServices(), 1 do
+ local name = GetTrainerServiceInfo(i)
+ local _, skilllevel = GetTrainerServiceSkillReq(i)
+
+ if not skilllevel then
+ skilllevel = 0
+ end
+ info[name] = skilllevel
+ end
+ local found = false
+
+ twipe(output)
+
+ for i in pairs(recipe_list) do
+ local i_name = recipe_list[i].name
+
+ if info[i_name] and info[i_name] ~= recipe_list[i].skill_level then
+ found = true
+ tinsert(output, L["DATAMINER_SKILLELVEL"]:format(i_name, recipe_list[i].skill_level, info[i_name]))
+ end
+ end
+ tinsert(output, "Trainer Skill Level Scan Complete.")
+
+ if found then
+ self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+ end
+ -- Reset the filters to what they were before
+ SetTrainerServiceTypeFilter("available", avail or 0)
+ SetTrainerServiceTypeFilter("unavailable", unavail or 0)
+ SetTrainerServiceTypeFilter("used", used or 0)
+ end
+
+ local teach, noteach = {}, {}
+
+ --- Function to compare which recipes are available from a trainer and compare with the internal ARL database.
+ -- @name AckisRecipeList:ScanTrainerData
+ -- @param autoscan True when autoscan is enabled in preferences, it will surpress output letting you know when a scan has occured.
+ -- @return Does a comparison of the information in your internal ARL database, and those items which are available on the trainer.
+ -- Compares the acquire information of the ARL database with what is available on the trainer.
+ function addon:ScanTrainerData(autoscan)
+ if not (UnitExists("target") and (not UnitIsPlayer("target")) and (not UnitIsEnemy("player", "target"))) then -- Make sure the target exists and is a NPC
+ if not autoscan then
+ self:Print(L["DATAMINER_TRAINER_NOTTARGETTED"])
+ end
+ return
+ end
+ local targetname = UnitName("target") -- Get its name
+ local targetID = tonumber(string.sub(UnitGUID("target"), -12, -7), 16) -- Get the NPC ID
+
+ if not IsTradeskillTrainer() then -- Are we at a trade skill trainer?
+ if not autoscan then
+ self:Print(L["DATAMINER_SKILLLEVEL_ERROR"])
+ end
+ return
+ end
+ local recipe_list = LoadRecipe() -- Get internal database
+
+ if not recipe_list then
+ self:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+
+ -- Get the initial trainer filters
+ local avail = GetTrainerServiceTypeFilter("available")
+ local unavail = GetTrainerServiceTypeFilter("unavailable")
+ local used = GetTrainerServiceTypeFilter("used")
+
+ -- Clear the trainer filters
+ SetTrainerServiceTypeFilter("available", 1)
+ SetTrainerServiceTypeFilter("unavailable", 1)
+ SetTrainerServiceTypeFilter("used", 1)
+
+ if GetNumTrainerServices() == 0 then
+ self:Print("Warning: Trainer is bugged, reporting 0 trainer items.")
+ end
+ twipe(info)
+
+ -- Get all the names of recipes from the trainer
+ for i = 1, GetNumTrainerServices(), 1 do
+ local name = GetTrainerServiceInfo(i)
+ info[name] = true
+ end
+ twipe(teach)
+ twipe(noteach)
+ twipe(output)
+
+ -- Dump out trainer info
+ tinsert(output, L["DATAMINER_TRAINER_INFO"]:format(targetname, targetID))
+
+ local teachflag = false
+ local noteachflag = false
+
+ for i in pairs(recipe_list) do
+ local recipe = recipe_list[i]
+ local i_name = recipe.name
+ local acquire = recipe["acquire_data"]
+
+ local train_data = acquire[A.TRAINER]
+
+ if info[i_name] then
+ local found = false
+
+ if train_data then
+ for id_num in pairs(train_data) do
+ if id_num == targetID then
+ found = true
+ break
+ end
+ end
+ end
+
+ if not found then
+ tinsert(teach, i)
+ teachflag = true
+
+ if not recipe:IsFlagged("common1", "TRAINER") then
+ tinsert(output, ": Trainer flag needs to be set.")
+ end
+ end
+ -- Trainer does not teach this recipe
+ else
+ local found = false
+
+ if train_data then
+ for id_num in pairs(train_data) do
+ if id_num == targetID then
+ found = true
+ break
+ end
+ end
+ end
+
+ if found then
+ noteachflag = true
+ tinsert(noteach, i)
+ end
+ end
+ end
+
+ if teachflag then
+ tinsert(output, "Missing entries (need to be added):")
+ tsort(teach)
+
+ for i in ipairs(teach) do
+ tinsert(output, L["DATAMINER_TRAINER_TEACH"]:format(teach[i], recipe_list[teach[i]].name))
+ end
+ end
+
+ if noteachflag then
+ tinsert(output, "Extra entries (need to be removed):")
+ tsort(noteach)
+
+ for i in ipairs(noteach) do
+ tinsert(output, L["DATAMINER_TRAINER_NOTTEACH"]:format(noteach[i], recipe_list[noteach[i]].name))
+ end
+ end
+ tinsert(output, "Trainer Acquire Scan Complete.")
+ tinsert(output, "If you're doing an engineering scan, there may be some goggles listed as extra. These goggles ONLY show up for those classes who can make them, so they may be false positives.")
+
+ if teachflag or noteachflag then
+ self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+ end
+ -- Reset the filters to what they were before
+ SetTrainerServiceTypeFilter("available", avail or 0)
+ SetTrainerServiceTypeFilter("unavailable", unavail or 0)
+ SetTrainerServiceTypeFilter("used", used or 0)
+ end
+end -- do
+
+--- Generates tradeskill links for all professions so you can scan them for completeness.
+-- @name AckisRecipeList:GenerateLinks
+-- @return Generates tradeskill links with all recipes. Used for testing to see if a recipe is missing from the database or not.
+function addon:GenerateLinks()
+ -- This code adopted from Gnomish Yellow Pages with permission
+
+ local guid = UnitGUID("player")
+ local playerGUID = string.gsub(guid, "0x0+", "")
+
+ -- Listing of all tradeskill professions
+ local tradelist = {51304, 51300, 51313, 51306, 45363, 51311, 51302, 51309, 51296, 45542}
+
+--[[
+ local encodingLength = floor((#recipeList+5) / 6)
+
+ local encodedString = string.rep("/", encodingLength)
+]]--
+ local bitmap = {}
+ bitmap[45542] = "8bffAA" -- First Aid 100% 17/17 recipes
+ bitmap[51296] = "2/6///7///9f///7//////////g///B" -- Cooking 98.2% 166/169 recipes
+ --bitmap[51306] = "4/////////////3nFA+///9+/P7//f//n//9dgdJgHA87/3f/TolD" -- Engineering (53)
+ bitmap[51306] = "4/////////////3nFA+///9+/P7//f//n//9dgdJgHA87/3f/Tol3B" -- Engineering
+ bitmap[51302] = "e+//ff////d//u//v//n+vv7/+ujr7/9////bg/+////f344//dA4I8j/X//B4/vu5/////////////////nvA8/M8/D" -- Leatherworking 85.4% 451/528 recipes
+ bitmap[51304] = "2//v//////f////3//v///////5//////////9/////v" -- Alchemy 100% 251/251 recipes
+ bitmap[51300] = "2//////f7fM//f/f53/+//7///ze8c6q/f9///P2/////m4BAA2XIG+dFA8//PC////4//z//////////Pwvy//H" -- Blacksmithing 82.9% 413/498 recipes
+ bitmap[51309] = "4//+/+5a79rv7/vx2/65t3nZ3f33N33LJq/z54Hx//mK7w1GQgFA+AQ4/////7//7//9//2wD" -- Tailoring 74.3% 303/408 recipes
+ bitmap[51311] = "8//3////fzj//u//////v/7///9///33////////Pw////////////////////////3///////////////////////////D" -- Jewelcrafting 97.5% 540/554 recipes
+ bitmap[45363] = "g////7////3///////////////////////////////////////////////////fHM+3dqhGYa0f" --Inscription 92.5% 407/440 recipes
+ bitmap[51313] = "4//////////7///////////w//+//9/n7///////3f//////ZsD" -- Enchanting 94.3% 279/296 recipes
+
+ for i in pairs(tradelist) do
+
+ local tradeName = GetSpellInfo(tradelist[i])
+ local tradelink = {}
+ tradelink[1] = "|cffffd000|Htrade:"
+ tradelink[2] = tradelist[i]
+ tradelink[3] = ":450:450:"
+ tradelink[4] = playerGUID
+ tradelink[5] = ":"
+ tradelink[6] = bitmap[tradelist[i]]
+ tradelink[7] = "|h["
+ tradelink[8] = tradeName
+ tradelink[9] = "]|h|r"
+
+ if (bitmap[tradelist[i]]) then
+ self:Print(tconcat(tradelink, ""))
+ else
+ self:Print("There currently is not a generated tradeskill link for: " .. tradeName)
+ end
+ -- /script DEFAULT_CHAT_FRAME:AddMessage(string.gsub(GetTradeSkillListLink(), "\124", "\124\124"))
+ end
+
+end
+
+-------------------------------------------------------------------------------
+--- Scans the items in the specified profession
+-------------------------------------------------------------------------------
+do
+ local ORDERED_PROFESSIONS = private.ordered_professions
+
+ local recipe_list = {}
+ local output = {}
+
+ local function Sort_AscID(a, b)
+ local reca, recb = private.recipe_list[a], private.recipe_list[b]
+
+ return reca.spell_id < recb.spell_id
+ end
+
+ local function SortRecipeList()
+ local sorted_recipes = addon.sorted_recipes
+ twipe(sorted_recipes)
+
+ for n, v in pairs(recipe_list) do
+ tinsert(sorted_recipes, n)
+ end
+ table.sort(sorted_recipes, Sort_AscID)
+ end
+
+ local function ProfessionScan(prof_name)
+ local master_list = LoadRecipe()
+
+ if not master_list then
+ addon:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+ twipe(recipe_list)
+
+ if prof_name == private.professions["Smelting"]:lower() then
+ prof_name = private.mining_name:lower()
+ end
+
+ for i in pairs(master_list) do
+ local prof = string.lower(master_list[i].profession)
+
+ if prof and prof == prof_name then
+ recipe_list[i] = master_list[i]
+ end
+ end
+ SortRecipeList()
+ twipe(output)
+
+ -- Parse the entire recipe database
+ for index, id in ipairs(addon.sorted_recipes) do
+ local ttscantext = addon:TooltipScanRecipe(id, false, true)
+
+ if ttscantext and ttscantext ~= "" then
+ tinsert(output, ttscantext)
+ end
+ end
+
+ if #output == 0 then
+ addon:Debug("ProfessionScan(): output is empty.")
+ end
+ addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+ ARLDatamineTT:Hide()
+ end
+
+ --- Parses all recipes for a specified profession, scanning their tool tips.
+ -- @name AckisRecipeList:ScanProfession
+ -- @usage AckisRecipeList:ScanProfession("first aid")
+ -- @param prof_name The profession name or the spell ID of it, which you wish to scan.
+ -- @return Recipes in the given profession have their tooltips scanned.
+ function addon:ScanProfession(prof_name)
+ if type(prof_name) == "number" then
+ prof_name = GetSpellInfo(prof_name)
+ end
+
+ local found = false
+ prof_name = string.lower(prof_name)
+
+ local scan_all = prof_name == "all"
+
+ if not scan_all then
+ for idx, name in ipairs(ORDERED_PROFESSIONS) do
+ if prof_name == name:lower() then
+ found = true
+ break
+ end
+ end
+
+ if not found then
+ self:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+
+ ProfessionScan(prof_name)
+ else
+ for idx, name in ipairs(ORDERED_PROFESSIONS) do
+ ProfessionScan(name:lower())
+ end
+ end
+ end
+
+ local FILTER_STRINGS = private.filter_strings
+ local ACQUIRE_STRINGS = private.acquire_strings
+ local REP_LEVELS = private.rep_level_strings
+ local FACTION_NAMES = private.faction_strings
+ local Q = private.item_quality_names
+ local V = private.game_version_names
+
+ local NUM_FILTER_FLAGS = 128
+
+ local FUNCTION_FORMATS = {
+ [A.TRAINER] = "self:AddRecipeTrainer(%d, %s)",
+ [A.VENDOR] = "self:AddRecipeVendor(%d, %s)",
+ [A.MOB_DROP] = "self:AddRecipeMobDrop(%d, %s)",
+ [A.WORLD_DROP] = "self:AddRecipeWorldDrop(%d, %s)",
+ [A.QUEST] = "self:AddRecipeQuest(%d, %s)",
+ }
+
+ local function RecipeDump(id, single)
+ local recipe = private.recipe_list[id or 1]
+
+ if single and not recipe then
+ addon:Print("Invalid recipe ID.")
+ return
+ end
+ local flag_string
+ local specialty = not recipe.specialty and "" or (", "..recipe.specialty)
+
+ tinsert(output, string.format("-- %s -- %d", recipe.name, recipe.spell_id))
+ tinsert(output, string.format("AddRecipe(%d, %d, %s, Q.%s, V.%s, %d, %d, %d, %d%s)",
+ recipe.spell_id, recipe.skill_level, tostring(recipe.item_id), Q[recipe.quality], V[recipe.genesis],
+ recipe.optimal_level, recipe.medium_level, recipe.easy_level, recipe.trivial_level, specialty))
+
+ for table_index, bits in ipairs(private.bit_flags) do
+ for flag_name, flag in pairs(bits) do
+ local bitfield = recipe.flags[private.flag_members[table_index]]
+
+ if bitfield and bit.band(bitfield, flag) == flag then
+ if not flag_string then
+ flag_string = "F."..FILTER_STRINGS[private.filter_flags[flag_name]]
+ else
+ flag_string = flag_string..", ".."F."..FILTER_STRINGS[private.filter_flags[flag_name]]
+ end
+ end
+ end
+ end
+ tinsert(output, string.format("self:AddRecipeFlags(%d, %s)", recipe.spell_id, flag_string))
+
+ flag_string = nil
+
+ for acquire_type, acquire_info in pairs(recipe.acquire_data) do
+ if acquire_type == A.REPUTATION then
+ for rep_id, rep_info in pairs(acquire_info) do
+ local faction_string = FACTION_NAMES[rep_id]
+
+ if not faction_string then
+ faction_string = rep_id
+ addon:Printf("Recipe %d (%s) - no string for faction %d", recipe.spell_id, recipe.name, rep_id)
+ else
+ faction_string = "FAC."..faction_string
+ end
+
+ for rep_level, level_info in pairs(rep_info) do
+ local rep_string = "REP."..REP_LEVELS[rep_level or 1]
+ local values
+
+ for vendor_id in pairs(level_info) do
+ values = values and (values..", "..vendor_id) or vendor_id
+ end
+ tinsert(output, string.format("self:AddRecipeRepVendor(%d, %s, %s, %s)", recipe.spell_id, faction_string, rep_string, values))
+ end
+ end
+ elseif FUNCTION_FORMATS[acquire_type] then
+ local values
+
+ for id_num in pairs(acquire_info) do
+ local saved_id = (type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
+ values = values and (values..", "..saved_id) or saved_id
+ end
+ tinsert(output, string.format(FUNCTION_FORMATS[acquire_type], recipe.spell_id, values))
+ else
+ for id_num in pairs(acquire_info) do
+ if not flag_string then
+ flag_string = "A."..ACQUIRE_STRINGS[acquire_type]..", "..(type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
+ else
+ flag_string = flag_string..", ".."A."..ACQUIRE_STRINGS[acquire_type]..", "..(type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
+ end
+ end
+ end
+ end
+
+ if flag_string then
+ tinsert(output, string.format("self:AddRecipeAcquire(%d, %s)", recipe.spell_id, flag_string))
+ end
+ tinsert(output, "")
+ end
+
+ local function ProfessionDump(prof_name)
+ local master_list = LoadRecipe()
+
+ if not master_list then
+ addon:Print(L["DATAMINE_NODB_ERROR"])
+ return
+ end
+ twipe(recipe_list)
+
+ if prof_name == private.professions["Smelting"]:lower() then
+ prof_name = private.mining_name:lower()
+ end
+ for i in pairs(master_list) do
+ local prof = string.lower(master_list[i].profession)
+
+ if prof and prof == prof_name then
+ recipe_list[i] = master_list[i]
+ end
+ end
+ SortRecipeList()
+ twipe(output)
+
+ for index, id in ipairs(addon.sorted_recipes) do
+ RecipeDump(id, false)
+ end
+ addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+ end
+
+ function addon:DumpRecipe(id_num)
+ twipe(output)
+ RecipeDump(id_num, true)
+ addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+ end
+
+ function addon:DumpProfession(prof_name)
+ if type(prof_name) == "number" then
+ prof_name = GetSpellInfo(prof_name)
+ end
+
+ local found = false
+ prof_name = string.lower(prof_name)
+
+ local scan_all = prof_name == "all"
+
+ if not scan_all then
+ for idx, name in ipairs(ORDERED_PROFESSIONS) do
+ if prof_name == name:lower() then
+ found = true
+ break
+ end
+ end
+
+ if not found then
+ self:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+ ProfessionDump(prof_name)
+ else
+ for idx, name in ipairs(ORDERED_PROFESSIONS) do
+ ProfessionDump(name:lower())
+ end
+ end
+ end
+end -- do
+
+local RECIPE_TYPES = {
+ -- JC
+ ["design: "] = true,
+ -- LW or Tailoring
+ ["pattern: "] = true,
+ -- Alchemy or Cooking
+ ["recipe: "] = true,
+ -- BS
+ ["plans: "] = true,
+ -- Enchanting
+ ["formula: "] = true,
+ -- Engineering
+ ["schematic: "] = true,
+ -- First Aid
+ ["manual: "] = true,
+
+ ["alchemy: "] = true,
+ ["blacksmithing: "] = true,
+ ["cooking: "] = true,
+ ["enchanting: "] = true,
+ ["engineering: "] = true,
+ ["first aid: "] = true,
+ ["inscription: "] = true,
+ ["jewelcrafting: "] = true,
+ ["leatherworking: "] = true,
+ ["tailoring: "] = true,
+}
+
+--- Scans the items on a vendor, determining which recipes are available if any and compares it with the database entries
+-- @name AckisRecipeList:ScanVendor
+-- @usage AckisRecipeList:ScanVendor()
+-- @return Obtains all the vendor information on tradeskill recipes and attempts to compare the current vendor with the internal database
+do
+ local output = {}
+
+ function addon:ScanVendor()
+ if not (UnitExists("target") and (not UnitIsPlayer("target")) and (not UnitIsEnemy("player", "target"))) then -- Make sure the target exists and is a NPC
+ self:Print(L["DATAMINER_VENDOR_NOTTARGETTED"])
+ return
+ end
+ local recipe_list = LoadRecipe() -- Get internal database
+
+ if not recipe_list then
+ self:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+ local targetname = UnitName("target") -- Get its name
+ local targetID = tonumber(string.sub(UnitGUID("target"), -12, -7), 16) -- Get the NPC ID
+ local added = false
+
+ twipe(output)
+
+ tinsert(output, "Vendor Name: "..targetname.." NPC ID: "..targetID)
+ -- Parse all the items on the merchant
+ for i = 1, GetMerchantNumItems(), 1 do
+ local name, _, _, _, numAvailable = GetMerchantItemInfo(i)
+
+ if name then
+ -- Lets scan recipes only on vendors
+ local matchtext = string.match(name, "%a+: ")
+
+ -- Check to see if we're dealing with a recipe
+ if matchtext and RECIPE_TYPES[string.lower(matchtext)] then
+ local item_link = GetMerchantItemLink(i)
+ local item_id = ItemLinkToID(item_link)
+ local spell_id = RECIPE_TO_SPELL_MAP[item_id]
+
+ if spell_id then
+ local ttscantext = addon:TooltipScanRecipe(spell_id, true, true)
+
+ if ttscantext and ttscantext ~= "" then
+ added = true
+ tinsert(output, ttscantext)
+ end
+
+ -- Check the database to see if the vendor is listed as an acquire method.
+ local acquire = recipe_list[spell_id]["acquire_data"]
+ local vendor_data = acquire[A.VENDOR]
+ local rep_data = acquire[A.REPUTATION]
+ local found = false
+
+ if vendor_data then
+ for id_num in pairs(vendor_data) do
+ if id_num == targetID then
+ found = true
+ break
+ end
+ end
+ elseif rep_data then
+ for id_num in pairs(rep_data) do
+ if id_num == targetID then
+ found = true
+ break
+ end
+ end
+ end
+
+ if not found then
+ added = true
+ tinsert(output, string.format("Vendor ID missing from \"%s\" %d.", recipe_list[spell_id].name, spell_id))
+ end
+ else
+ --@debug@
+ added = true
+ tinsert(output, "Spell ID not found for: " .. name)
+ --@end-debug@
+ end
+ end
+ end
+ end
+
+ if added then
+ self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+ end
+ ARLDatamineTT:Hide()
+ end
+end -- do
+
+--- Parses all the recipes in the database, and scanning their tooltips.
+-- @name AckisRecipeList:TooltipScanDatabase
+-- @usage AckisRecipeList:TooltipScanDatabase()
+-- @return Entire recipe database has its tooltips scanned.
+do
+ local output = {}
+
+ function addon:TooltipScanDatabase()
+ -- Get internal database
+ local recipe_list = LoadRecipe()
+
+ if (not recipe_list) then
+ self:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+ twipe(output)
+
+ -- Parse the entire recipe database
+ for i in pairs(recipe_list) do
+
+ local ttscantext = addon:TooltipScanRecipe(i, false, true)
+ if (ttscantext) then
+ tinsert(output, ttscantext)
+ end
+ end
+ self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+ end
+end -- do
+--- Parses a specific recipe in the database, and scanning its tooltip
+-- @name AckisRecipeList:TooltipScanRecipe
+-- @param spell_id The [[[http://www.wowwiki.com/SpellLink|Spell ID]]] of the recipe being added to the database
+-- @param is_vendor Boolean to determine if we're viewing a vendor or not
+-- @param is_largescan Boolean to determine if we're doing a large scan
+-- @return Recipe has its tooltips scanned
+
+
+-- Table to store scanned information. Wiped and re-used every scan.
+local scan_data = {}
+
+do
+ ---------------------------------------------------------------------------------------------------------
+ ----This table, DO_NOT_SCAN, contains itemid's that will not cache on the servers
+ ---------------------------------------------------------------------------------------------------------
+
+ local DO_NOT_SCAN = {
+ -------------------------------------------------------------------------------
+ --Leatherworking
+ -------------------------------------------------------------------------------
+ [35214] = true, [32434] = true, [15769] = true,
+ [32431] = true, [32432] = true, [35215] = true, [35521] = true,
+ [35520] = true, [35524] = true, [35517] = true, [35528] = true,
+ [35527] = true, [35523] = true, [35549] = true, [35218] = true,
+ [35217] = true, [35216] = true, [35546] = true, [35541] = true, [15756] = true,
+ [15777] = true, [32433] = true, [29729] = true, [29732] = true, [32744] = true,
+ [15773] = true, [30301] = true, [15745] = true, [35302] = true, [15774] = true,
+
+ -------------------------------------------------------------------------------
+ --Tailoring
+ -------------------------------------------------------------------------------
+ [14477] = true, [14485] = true, [30281] = true, [14478] = true, [14500] = true,
+ [32439] = true, [14479] = true, [32447] = true, [14480] = true, [32437] = true,
+ [14495] = true, [14505] = true, [35204] = true, [35205] = true, [35206] = true,
+ [14473] = true, [14488] = true, [14481] = true,
+ [35309] = true, [30280] = true, [14492] = true, [14491] = true,
+
+ -------------------------------------------------------------------------------
+ --Jewelcrafting
+ -------------------------------------------------------------------------------
+ [23130] = true, [23140] = true, [23137] = true, [23131] = true, [23148] = true,
+ [35538] = true, [35201] = true, [35533] = true, [35200] = true, [23147] = true,
+ [23135] = true, [35203] = true, [35198] = true, [23152] = true, [23151] = true,
+ [23141] = true, [28596] = true, [28291] = true, [23153] = true,
+
+ -------------------------------------------------------------------------------
+ --Alchemy
+ -------------------------------------------------------------------------------
+ [22925] = true, [13480] = true, [13481] = true, [13493] = true, [35295] = true,
+ [44568] = true,
+
+ -------------------------------------------------------------------------------
+ --Cooking
+ -------------------------------------------------------------------------------
+ [39644] = true,
+
+ -------------------------------------------------------------------------------
+ --Blacksmithing
+ -------------------------------------------------------------------------------
+ [32441] = true, [32443] = true, [12687] = true, [12714] = true, [12688 ] = true,
+ [35211] = true, [35209] = true, [35210] = true, [12706] = true, [7982] = true,
+ [12718] = true, [23621] = true, [35208] = true, [12716] = true, [23632] = true,
+ [23633] = true, [30324] = true, [23637] = true, [31393] = true,[22221] = true,
+ [12690] = true, [31394] = true,[31395] = true,[23630] = true,[23629] = true,[7978] = true,
+ [41120] = true, [12717] = true,[22219] = true,[23627] = true,
+
+ -------------------------------------------------------------------------------
+ --Engineering
+ -------------------------------------------------------------------------------
+ [35196] = true, [21734] = true, [18292] = true, [21727] = true, [21735] = true, [16053] = true, [21729] = true,
+ [16047] = true,[21730] = true,[21731] = true,[21732] = true,[4411] = true, [21733] = true, [21728] = true,
+ [35186] = true, [18655] = true,
+
+ -------------------------------------------------------------------------------
+ --Enchanting
+ -------------------------------------------------------------------------------
+ [16222] = true, [20734] = true, [20729] = true, [20731] = true, [16246] = true,
+ }
+
+ local output = {}
+
+ function addon:TooltipScanRecipe(spell_id, is_vendor, is_largescan)
+ local recipe_list = LoadRecipe()
+
+ if not recipe_list then
+ self:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+ local recipe = recipe_list[spell_id]
+
+ if not recipe then
+ self:Debug("Spell ID %d does not exist in the database.", tonumber(spell_id))
+ return
+ end
+ local recipe_name = recipe.name
+ local game_vers = recipe.genesis
+
+ twipe(output)
+
+ if not game_vers then
+ tinsert(output, "No expansion information: " .. tostring(spell_id) .. " " .. recipe_name)
+ elseif game_vers > private.game_versions.WOTLK then
+ tinsert(output, "Expansion information too high: " .. tostring(spell_id) .. " " .. recipe_name)
+ end
+ local optimal = recipe.optimal_level
+ local medium = recipe.medium_level
+ local easy = recipe.easy_level
+ local trivial = recipe.trivial_level
+ local skill_level = recipe.skill_level
+
+ if not optimal then
+ tinsert(output, "No skill level information: " .. tostring(spell_id) .. " " .. recipe_name)
+ else
+ -- Highest level is greater than the skill of the recipe
+ if optimal > skill_level then
+ tinsert(output, "Skill Level Error (optimal_level > skill_level): " .. tostring(spell_id) .. " " .. recipe_name)
+ elseif optimal < skill_level then
+ tinsert(output, "Skill Level Error (optimal_level < skill_level): " .. tostring(spell_id) .. " " .. recipe_name)
+ end
+
+ -- Level info is messed up
+ if optimal > medium or optimal > easy or optimal > trivial or medium > easy or medium > trivial or easy > trivial then
+ tinsert(output, "Skill Level Error: " .. tostring(spell_id) .. " " .. recipe_name)
+ end
+ end
+ local recipe_link = recipe.spell_link
+
+ if not recipe_link then
+ if recipe.profession ~= GetSpellInfo(53428) then -- Lets hide this output for runeforging.
+ self:Printf("Missing spell_link for ID %d (%s).", spell_id, recipe_name)
+ end
+ return
+ end
+ ARLDatamineTT:SetOwner(WorldFrame, "ANCHOR_NONE")
+ GameTooltip_SetDefaultAnchor(ARLDatamineTT, UIParent)
+
+ ARLDatamineTT:SetHyperlink(recipe_link)
+
+ -- Check to see if this is a recipe tooltip.
+ local text = string.lower(_G["ARLDatamineTTTextLeft1"]:GetText())
+ local match_text = string.match(text, "%a+: ")
+
+ if not RECIPE_TYPES[match_text] and not (string.find(text, "smelt") or string.find(text, "sunder") or string.find(text, "shatter")) then
+ ARLDatamineTT:Hide()
+ return
+ end
+ local reverse_lookup = GetReverseLookup(recipe_list)
+
+ local item_id = SPELL_TO_RECIPE_MAP[spell_id]
+
+ wipe(scan_data)
+
+ if item_id and not DO_NOT_SCAN[item_id] then
+ local item_name, item_link, item_quality = GetItemInfo(item_id)
+
+ if item_name then
+ scan_data.quality = item_quality
+
+ ARLDatamineTT:SetHyperlink(item_link)
+ self:ScanToolTip(recipe_name, recipe_list, reverse_lookup, is_vendor)
+ else
+ local querier_string = _G.Querier and string.format(" To fix: /iq %d", item_id) or ""
+
+ tinsert(output, string.format("%s: %d", recipe.name, spell_id))
+ tinsert(output, string.format(" Recipe item not in cache.%s", querier_string))
+ end
+ elseif not item_id then
+ -- We are dealing with a recipe that does not have an item to learn it from.
+ -- Lets check the recipe flags to see if we have a data error and the item should exist
+ if not recipe:IsFlagged("common1", "RETIRED")
+ and (recipe:IsFlagged("common1", "VENDOR") or recipe:IsFlagged("common1", "INSTANCE") or recipe:IsFlagged("common1", "RAID")) then
+ tinsert(output, string.format("%s: %d", recipe.name, spell_id))
+ tinsert(output, " No match found in the SPELL_TO_RECIPE_MAP table.")
+ end
+ end
+ ARLDatamineTT:Hide()
+
+ -- Add the flag scan to the table if it's not nil
+ local results = self:PrintScanResults()
+
+ if results then
+ tinsert(output, results)
+ end
+
+ if is_largescan then
+ return tconcat(output, "\n")
+ else
+ self:Print(tconcat(output, "\n"))
+ end
+ end
+end -- do
+
+-------------------------------------------------------------------------------
+-- Tooltip-scanning code
+-------------------------------------------------------------------------------
+do
+ local SPECIALTY_TEXT = {
+ ["requires spellfire tailoring"] = 26797,
+ ["requires mooncloth tailoring"] = 26798,
+ ["requires shadoweave tailoring"] = 26801,
+ ["requires dragonscale leatherworking"] = 10657,
+ ["requires elemental leatherworking"] = 10659,
+ ["requires tribal leatherworking"] = 10661,
+ ["requires gnomish engineer"] = 20219,
+ ["requires goblin engineer"] = 20222,
+ ["requires armorsmith"] = 9788,
+ ["requires master axesmith"] = 17041,
+ ["requires master hammersmith"] = 17040,
+ ["requires master swordsmith"] = 17039,
+ ["requires weaponsmith"] = 9787,
+ }
+
+ local FACTION_TEXT = {
+ ["thorium brotherhood"] = 98,
+ ["zandalar tribe"] = 100,
+ ["argent dawn"] = 96,
+ ["timbermaw hold"] = 99,
+ ["cenarion circle"] = 97,
+ ["the aldor"] = 101,
+ ["the consortium"] = 105,
+ ["the scryers"] = 110,
+ ["the sha'tar"] = 111,
+ ["the mag'har"] = 108,
+ ["cenarion expedition"] = 103,
+ ["honor hold"] = 104,
+ ["thrallmar"] = 104,
+ ["the violet eye"] = 114,
+ ["sporeggar"] = 113,
+ ["kurenai"] = 108,
+ ["keepers of time"] = 106,
+ ["the scale of the sands"] = 109,
+ ["lower city"] = 107,
+ ["ashtongue deathsworn"] = 102,
+ ["alliance vanguard"] = 131,
+ ["valiance expedition"] = 126,
+ ["horde expedition"] = 130,
+ ["the taunka"] = 128,
+ ["the hand of vengeance"] = 127,
+ ["explorers' league"] = 125,
+ ["the kalu'ak"] = 120,
+ ["shattered sun offensive"] = 112,
+ ["warsong offensive"] = 129,
+ ["kirin tor"] = 118,
+ ["the wyrmrest accord"] = 122,
+ ["knights of the ebon blade"] = 117,
+ ["frenzyheart tribe"] = 116,
+ ["the oracles"] = 121,
+ ["argent crusade"] = 115,
+ ["the sons of hodir"] = 119,
+ }
+
+ local FACTION_LEVELS = {
+ ["neutral"] = 0,
+ ["friendly"] = 1,
+ ["honored"] = 2,
+ ["revered"] = 3,
+ ["exalted"] = 4,
+ }
+
+ local CLASS_TYPES = {
+ ["Death Knight"] = 21, ["Druid"] = 22, ["Hunter"] = 23,
+ ["Mage"] = 24, ["Paladin"] = 25, ["Priest"] = 26,
+ ["Shaman"] = 27, ["Rogue"] = 28, ["Warlock"] = 29,
+ ["Warrior"] = 30,
+ }
+
+ local ORDERED_CLASS_TYPES = {
+ [1] = "Death Knight", [2] = "Druid", [3] = "Hunter",
+ [4] = "Mage", [5] = "Paladin", [6] = "Priest",
+ [7] = "Shaman", [8] = "Rogue", [9] = "Warlock",
+ [10] = "Warrior",
+ }
+
+ local ROLE_TYPES = {
+ ["dps"] = 51, ["tank"] = 52, ["healer"] = 53,
+ ["caster"] = 54,
+ }
+
+ local ORDERED_ROLE_TYPES = {
+ [1] = "dps", [2] = "tank", [3] = "healer",
+ [4] = "caster",
+ }
+
+ local ENCHANT_TO_ITEM = {
+ ["Cloak"] = "Back",
+ ["Ring"] = "Finger",
+ ["2H Weapon"] = "Two-Hand",
+ }
+
+ local ITEM_TYPES = {
+ -- Armor types
+ ["Cloth"] = 56, ["Leather"] = 57, ["Mail"] = 58,
+ ["Plate"] = 59, ["Back"] = 60, ["Trinket"] = 61,
+ ["Finger"] = 62, ["Neck"] = 63, ["Shield"] = 64,
+
+ -- Weapon types
+ ["One-Hand"] = 66, ["Two-Hand"] = 67, ["Axe"] = 68,
+ ["Sword"] = 69, ["Mace"] = 70, ["Polearm"] = 71,
+ ["Dagger"] = 72, ["Staff"] = 73, ["Wand"] = 74,
+ ["Thrown"] = 75, ["Bow"] = 76, ["CrossBow"] = 77,
+ ["Ammo"] = 78, ["Fist Weapon"] = 79, ["Gun"] = 80,
+ }
+
+ local ORDERED_ITEM_TYPES = {
+ -- Armor types
+ [1] = "Cloth", [2] = "Leather", [3] = "Mail",
+ [4] = "Plate", [5] = "Back", [6] = "Trinket",
+ [7] = "Finger", [8] = "Neck", [9] = "Shield",
+
+ -- Weapon types
+ [11] = "One-Hand", [12] = "Two-Hand", [13] = "Axe",
+ [14] = "Sword", [15] = "Mace", [16] = "Polearm",
+ [17] = "Dagger", [18] = "Staff", [19] = "Wand",
+ [20] = "Thrown", [21] = "Bow", [22] = "CrossBow",
+ [23] = "Ammo", [24] = "Fist Weapon", [25] = "Gun",
+ }
+
+ --- Parses the mining tooltip for certain keywords, comparing them with the database flags
+ -- @name AckisRecipeList:ScanToolTip
+ -- @param name The name of the recipe
+ -- @param recipe_list Recipe database
+ -- @param reverse_lookup Reverse lookup database
+ -- @param is_vendor Boolean to indicate if we're scanning a vendor
+ -- @return Scans a tooltip, and outputs the missing or extra filter flags
+ function addon:ScanToolTip(name, recipe_list, reverse_lookup, is_vendor)
+ scan_data.match_name = name
+ scan_data.recipe_list = recipe_list
+ scan_data.reverse_lookup = reverse_lookup
+ scan_data.is_vendor = is_vendor
+
+ -- Parse all the lines of the tooltip
+ for i = 1, ARLDatamineTT:NumLines(), 1 do
+ local text_l = _G["ARLDatamineTTTextLeft" .. i]:GetText()
+ local text_r = _G["ARLDatamineTTTextRight" .. i]:GetText()
+ local text
+
+ if text_r then
+ text = text_l .. " " .. text_r
+ else
+ text = text_l
+ end
+
+ local text = string.lower(text)
+
+ -- Check for recipe/item binding
+ -- The recipe binding is within the first few lines of the tooltip always
+ if string.match(text, "binds when picked up") then
+ if (i < 3) then
+ scan_data.recipe_bop = true
+ else
+ scan_data.item_bop = true
+ end
+ end
+
+ -- Recipe Specialities
+ if SPECIALTY_TEXT[text] then
+ scan_data.specialty = SPECIALTY_TEXT[text]
+ end
+
+ -- Recipe Reputations
+ local rep, replevel = string.match(text_l, "Requires (.+) %- (.+)")
+
+ if rep and replevel and FACTION_TEXT[rep] then
+ scan_data.repid = FACTION_TEXT[rep]
+ scan_data.repidlevel = FACTION_LEVELS[replevel]
+ end
+
+ -- Flag so that we don't bother checking for classes if we're sure of the class
+ -- AKA +spell hit == caster DPS only no matter what other stats are on it
+ -- Saves processing cycles and it won't cause the flags to be overwritten if a non-specific stat is found after
+ scan_data.verifiedclass = false
+
+ if not scan_data.verifiedclass then
+ -- Certain stats can be considered for a specific role (aka spell hit == caster dps).
+ if string.match(text, "strength") and not string.match(text, "strength of the clefthoof") and not string.match(text, "set:") then
+ scan_data.dps = true
+ elseif string.match(text, "agility") then
+ scan_data.dps = true
+ elseif string.match(text, "spirit") then
+ scan_data.caster = true
+ scan_data.healer = true
+ elseif string.match(text, "spell power") then
+ scan_data.caster = true
+ scan_data.healer = true
+ elseif string.match(text, "spell crit") then
+ scan_data.caster = true
+ scan_data.healer = true
+ elseif string.match(text, "spell hit") then
+ scan_data.caster = true
+ scan_data.verifiedclass = true
+ elseif string.match(text, "spell penetration") then
+ scan_data.caster = true
+ scan_data.verifiedclass = true
+ elseif string.match(text, "mana per 5 sec.") or string.match(text, "mana every 5 seconds") then
+ scan_data.caster = true
+ scan_data.healer = true
+ elseif string.match(text, "attack power") then
+ scan_data.dps = true
+ elseif string.match(text, "expertise") then
+ scan_data.dps = true
+ scan_data.tank = true
+ elseif string.match(text, "melee crit") then
+ scan_data.dps = true
+ elseif string.match(text, "critical hit") then
+ scan_data.dps = true
+ elseif string.match(text, "weapon damage") then
+ scan_data.dps = true
+ elseif string.match(text, "ranged crit") then
+ scan_data.dps = true
+ scan_data.verifiedclass = true
+ elseif string.match(text, "melee haste") then
+ scan_data.dps = true
+ elseif string.match(text, "ranged haste") then
+ scan_data.dps = true
+ scan_data.verifiedclass = true
+ elseif string.match(text, "melee hit") then
+ scan_data.dps = true
+ elseif string.match(text, "ranged hit") then
+ scan_data.dps = true
+ scan_data.verifiedclass = true
+ elseif string.match(text, "armor pen") then
+ scan_data.dps = true
+ elseif string.match(text, "feral attack power") then
+ scan_data.tank = true
+ scan_data.dps = true
+ elseif string.match(text, "defense") and not string.match(text, "defenseless") then
+ scan_data.tank = true
+ scan_data.verifiedclass = true
+ elseif string.match(text, "block") then
+ scan_data.tank = true
+ scan_data.verifiedclass = true
+ elseif string.match(text, "parry") then
+ scan_data.tank = true
+ scan_data.verifiedclass = true
+ elseif string.match(text, "dodge") and not string.match(text, "set:") then
+ scan_data.tank = true
+ scan_data.verifiedclass = true
+ end
+ end
+
+ -- Classes
+ local class_type = string.match(text_l, "Classes: (.+)")
+
+ if class_type then
+ for idx, class in ipairs(ORDERED_CLASS_TYPES) do
+ if string.match(class_type, class) then
+ scan_data[class] = true
+ scan_data.found_class = true
+ end
+ end
+ end
+
+ -- Armor types
+ if ITEM_TYPES[text_l] then
+ scan_data[text_l] = true
+ elseif text_l == "Held In Off-hand" or text_l == "Off Hand" or text_l == "Main Hand" then -- Special cases.
+ scan_data["One-Hand"] = true
+ elseif text_l == "Projectile" then
+ scan_data["Ammo"] = true
+ end
+
+ if text_r and ITEM_TYPES[text_r] then
+ scan_data[text_r] = true
+ end
+
+ -- Enchantment voodoo
+ local ench_type, _ = string.match(text_l, "Enchant (.+) %- (.+)")
+
+ if ench_type then
+ if ITEM_TYPES[ench_type] then
+ scan_data[ench_type] = true
+ elseif ITEM_TYPES[ENCHANT_TO_ITEM[ench_type]] then
+ scan_data[ENCHANT_TO_ITEM[ench_type]] = true
+ elseif ench_type == "Weapon" then -- Special case.
+ scan_data["One-Hand"] = true
+ scan_data["Two-Hand"] = true
+ end
+ end
+ end -- for
+ end
+
+ -- Flag data for printing. Wiped and re-used.
+ local missing_flags = {}
+ local extra_flags = {}
+ local output = {}
+
+ local ACQUIRE_TO_FILTER_MAP = {
+ [A.MOB_DROP] = F.MOB_DROP,
+ [A.QUEST] = F.QUEST,
+ [A.SEASONAL] = F.SEASONAL,
+ [A.WORLD_DROP] = F.WORLD_DROP,
+ }
+ local FILTER_TO_ACQUIRE_MAP
+
+ --- Prints out the results of the tooltip scan.
+ -- @name AckisRecipeList:PrintScanResults
+ function addon:PrintScanResults()
+ if not scan_data.match_name then
+ return
+ end
+
+ -- Parse the recipe database until we get a match on the name
+ local recipe_name = string.gsub(scan_data.match_name, "%a+%?: ", "")
+ local spell_id = scan_data.reverse_lookup[recipe_name]
+
+ if not spell_id then
+ self:Print(recipe_name .. " has no reverse lookup")
+ return
+ end
+ local recipe = scan_data.recipe_list[spell_id]
+ local acquire_data = recipe["acquire_data"]
+
+ local FS = private.filter_strings
+ local flag_format = "F.%s"
+
+ twipe(missing_flags)
+ twipe(extra_flags)
+ twipe(output)
+
+ -- If we're a vendor scan, do some extra checks
+ if scan_data.is_vendor then
+ -- Check to see if the vendor flag is set
+ if not recipe:IsFlagged("common1", "VENDOR") then
+ tinsert(missing_flags, string.format(flag_format, FS[F.VENDOR]))
+ end
+
+ -- Check to see if we're in a PVP zone
+ if (GetSubZoneText() == "Wintergrasp Fortress" or GetSubZoneText() == "Halaa") and not recipe:IsFlagged("common1", "PVP") then
+ tinsert(missing_flags, string.format(flag_format, FS[F.PVP]))
+ elseif recipe:IsFlagged("common1", "PVP") and not (GetSubZoneText() == "Wintergrasp Fortress" or GetSubZoneText() == "Halaa") then
+ tinsert(extra_flags, string.format(flag_format, FS[F.PVP]))
+ end
+ end
+
+ -- -- If we've picked up at least one class flag
+ if scan_data.found_class then
+ for k, v in ipairs(ORDERED_CLASS_TYPES) do
+ if scan_data[v] and not recipe:IsFlagged("class1", FS[CLASS_TYPES[v]]) then
+ tinsert(missing_flags, string.format(flag_format, FS[CLASS_TYPES[v]]))
+ elseif not scan_data[v] and recipe:IsFlagged("class1", FS[CLASS_TYPES[v]]) then
+ tinsert(extra_flags, string.format(flag_format, FS[CLASS_TYPES[v]]))
+ end
+ end
+ end
+
+ if scan_data.item_bop and not recipe:IsFlagged("common1", "IBOP") then
+ tinsert(missing_flags, string.format(flag_format, FS[F.IBOP]))
+
+ if recipe:IsFlagged("common1", "IBOE") then
+ tinsert(extra_flags, string.format(flag_format, FS[F.IBOE]))
+ end
+
+ if recipe:IsFlagged("common1", "IBOA") then
+ tinsert(extra_flags, string.format(flag_format, FS[F.IBOA]))
+ end
+ elseif not recipe:IsFlagged("common1", "IBOE") and not scan_data.item_bop then
+ tinsert(missing_flags, string.format(flag_format, FS[F.IBOE]))
+
+ if recipe:IsFlagged("common1", "IBOP") then
+ tinsert(extra_flags, string.format(flag_format, FS[F.IBOP]))
+ end
+
+ if recipe:IsFlagged("common1", "IBOA") then
+ tinsert(extra_flags, string.format(flag_format, FS[F.IBOA]))
+ end
+ end
+
+ if scan_data.recipe_bop and not recipe:IsFlagged("common1", "RBOP") then
+ tinsert(missing_flags, string.format(flag_format, FS[F.RBOP]))
+
+ if recipe:IsFlagged("common1", "RBOE") then
+ tinsert(extra_flags, string.format(flag_format, FS[F.RBOE]))
+ end
+
+ if recipe:IsFlagged("common1", "RBOA") then
+ tinsert(extra_flags, string.format(flag_format, FS[F.RBOA]))
+ end
+
+ elseif not recipe:IsFlagged("common1", "TRAINER") and not recipe:IsFlagged("common1", "RBOE") and not scan_data.recipe_bop then
+ tinsert(missing_flags, string.format(flag_format, FS[F.RBOE]))
+
+ if recipe:IsFlagged("common1", "RBOP") then
+ tinsert(extra_flags, string.format(flag_format, FS[F.RBOP]))
+ end
+
+ if recipe:IsFlagged("common1", "RBOA") then
+ tinsert(extra_flags, string.format(flag_format, FS[F.RBOA]))
+ end
+ end
+
+ for k, v in ipairs(ORDERED_ROLE_TYPES) do
+ local role_string = FS[ROLE_TYPES[v]]
+
+ if scan_data[v] and not recipe:IsFlagged("common1", role_string) then
+ tinsert(missing_flags, string.format(flag_format, role_string))
+ elseif not scan_data[v] and recipe:IsFlagged("common1", role_string) then
+ tinsert(extra_flags, string.format(flag_format, role_string))
+ end
+ end
+
+ for k, v in ipairs(ORDERED_ITEM_TYPES) do
+ if scan_data[v] and not recipe:IsFlagged("item1", FS[ITEM_TYPES[v]]) then
+ tinsert(missing_flags, string.format(flag_format, FS[ITEM_TYPES[v]]))
+ elseif not scan_data[v] and recipe:IsFlagged("item1", FS[ITEM_TYPES[v]]) then
+ tinsert(extra_flags, string.format(flag_format, FS[ITEM_TYPES[v]]))
+ end
+ end
+
+ -- Reputations
+ local repid = scan_data.repid
+ local found_problem = false
+
+ if repid and not recipe:IsFlagged("reputation1", FS[repid]) and not recipe:IsFlagged("reputation2", FS[repid]) then
+ tinsert(missing_flags, repid)
+
+ local rep_data = acquire_data[A.REPUTATION]
+
+ if rep_data then
+ for rep_id, rep_info in pairs(acquire_info) do
+ for rep_level, level_info in pairs(rep_info) do
+ if rep_level ~= scan_data.repidlevel then
+ tinsert(output, " Wrong reputation level.")
+ end
+ end
+ end
+ end
+ end
+
+ -- Make sure the recipe's filter flags match with its acquire types.
+ if not FILTER_TO_ACQUIRE_MAP then
+ FILTER_TO_ACQUIRE_MAP = {}
+
+ for k, v in pairs(ACQUIRE_TO_FILTER_MAP) do
+ FILTER_TO_ACQUIRE_MAP[v] = k
+ end
+ end
+
+ for acquire_type in pairs(acquire_data) do
+ local flag = ACQUIRE_TO_FILTER_MAP[acquire_type]
+
+ if flag and not recipe:IsFlagged("common1", FS[flag]) then
+ tinsert(missing_flags, string.format(flag_format, FS[flag]))
+ end
+ end
+
+ if (acquire_data[A.VENDOR] or acquire_data[A.REPUTATION]) and not recipe:IsFlagged("common1", "VENDOR") then
+ tinsert(missing_flags, string.format(flag_format, FS[F.VENDOR]))
+ end
+
+ if recipe:IsFlagged("common1", "VENDOR") and not (acquire_data[A.VENDOR] or acquire_data[A.REPUTATION]) then
+ tinsert(extra_flags, string.format(flag_format, FS[F.VENDOR]))
+ end
+
+ if acquire_data[A.TRAINER] and not recipe:IsFlagged("common1", "TRAINER") then
+ tinsert(missing_flags, string.format(flag_format, FS[F.TRAINER]))
+ end
+
+ if recipe:IsFlagged("common1", "TRAINER") and not acquire_data[A.TRAINER] then
+ if not acquire_data[A.CUSTOM] then
+ tinsert(extra_flags, string.format(flag_format, FS[F.TRAINER]))
+ end
+ end
+
+ for flag, acquire_type in pairs(FILTER_TO_ACQUIRE_MAP) do
+ if recipe:IsFlagged("common1", FS[flag]) and not acquire_data[acquire_type] then
+ tinsert(extra_flags, string.format(flag_format, FS[flag]))
+ end
+ end
+
+ if #missing_flags > 0 or #extra_flags > 0 then
+ found_problem = true
+
+ -- Add a string of the missing flag numbers
+ if #missing_flags > 0 then
+ tinsert(output, " Missing flags: " .. tconcat(missing_flags, ", "))
+ end
+
+ -- Add a string of the extra flag numbers
+ if #extra_flags > 0 then
+ tinsert(output, " Extra flags: " .. tconcat(extra_flags, ", "))
+ end
+ local found_type = false
+
+ for k, v in ipairs(ORDERED_ITEM_TYPES) do
+ if scan_data[v] then
+ found_type = true
+ break
+ end
+ end
+
+ if not found_type then
+ tinsert(output, " Missing: item type flag")
+ end
+ end
+
+ -- Check to see if we have a horde/alliance flag, all recipes must have one of these
+ if not recipe:IsFlagged("common1", "ALLIANCE") and not recipe:IsFlagged("common1", "HORDE") then
+ found_problem = true
+ tinsert(output, " Horde or Alliance not selected.")
+ end
+
+ -- Check to see if we have an obtain method flag, all recipes must have at least one of these
+ if (not recipe:IsFlagged("common1", "TRAINER") and not recipe:IsFlagged("common1", "VENDOR") and not recipe:IsFlagged("common1", "INSTANCE") and not recipe:IsFlagged("common1", "RAID")
+ and not recipe:IsFlagged("common1", "SEASONAL") and not recipe:IsFlagged("common1", "QUEST") and not recipe:IsFlagged("common1", "PVP") and not recipe:IsFlagged("common1", "WORLD_DROP")
+ and not recipe:IsFlagged("common1", "MOB_DROP") and not recipe:IsFlagged("common1", "DISC")) then
+ found_problem = true
+ tinsert(output, " No obtain flag.")
+ end
+
+ -- Check for recipe binding information, all recipes must have one of these
+ if not recipe:IsFlagged("common1", "RBOE") and not recipe:IsFlagged("common1", "RBOP") and not recipe:IsFlagged("common1", "RBOA") then
+ found_problem = true
+ tinsert(output, " No recipe binding information.")
+ end
+
+ -- Check for item binding information, all recipes must have one of these
+ if not recipe:IsFlagged("common1", "IBOE") and not recipe:IsFlagged("common1", "IBOP") and not recipe:IsFlagged("common1", "IBOA") then
+ found_problem = true
+ tinsert(output, " No item binding information.")
+ end
+
+ -- We need to code this better. Some items (aka bags) won't have a role at all.
+ -- Check for player role flags
+ if not scan_data.tank and not scan_data.healer and not scan_data.caster and not scan_data.dps and not NO_ROLE_FLAG[spell_id] then
+ found_problem = true
+ tinsert(output, " No player role flag.")
+ end
+
+ if scan_data.specialty then
+ if not recipe.specialty then
+ found_problem = true
+ tinsert(output, string.format(" Missing Specialty: %s", scan_data.specialty))
+ elseif recipe.specialty ~= scan_data.specialty then
+ tinsert(output, string.format(" Wrong Specialty: %s - should be %s ", recipe.specialty, scan_data.specialty))
+ end
+ elseif recipe.specialty then
+ found_problem = true
+ tinsert(output, string.format(" Extra Specialty: %s", recipe.specialty))
+ end
+
+ if scan_data.quality ~= recipe.quality then
+ local QS = private.item_quality_names
+
+ found_problem = true
+ tinsert(output, string.format(" Wrong quality: Q.%s - should be Q.%s.", QS[recipe.quality], QS[scan_data.quality]))
+ end
+ if found_problem then
+ tinsert(output, 1, string.format("%s: <a href=\"http://www.wowhead.com/?spell=%d\">%d</a>", recipe_name, spell_id, spell_id))
+ return tconcat(output, "\n")
+ else
+ return
+ end
+ end
+end
\ No newline at end of file