From 788e8119cc36160c0671a18973bac76590436bf1 Mon Sep 17 00:00:00 2001 From: nekonok Date: Mon, 6 Jan 2020 13:16:53 +0900 Subject: [PATCH 1/8] add sub command 'wearable' to 'gs export' --- addons/GearSwap/README.md | 4 ++-- addons/GearSwap/export.lua | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/addons/GearSwap/README.md b/addons/GearSwap/README.md index 8b417af36..650af8511 100644 --- a/addons/GearSwap/README.md +++ b/addons/GearSwap/README.md @@ -26,7 +26,7 @@ Commands (<> indicates a field. You do not actually have to use <>s): ** APPDATA/Windower/GearSwap/ ** ..Windower/addons/libs/ * gs reload : Reloads the current user file. -* gs export : Exports your currently equipped gear, inventory, or all the items in your current Lua files' sets into GearSwap .lua or spellcast .xml format. Takes options "inventory", "sets", and "xml." Defaults to currently equipped gear and lua otherwise. Also exports appropriate advanced set tables with augments for currently equipped gear and inventory. +* gs export : Exports your currently equipped gear, inventory, or all the items in your current Lua files' sets into GearSwap .lua or spellcast .xml format. Takes options "inventory", "all", "wearable", "sets", and "xml." Defaults to currently equipped gear and lua otherwise. Also exports appropriate advanced set tables with augments for currently equipped gear and inventory. * gs enable : Enables equip commands targeting a specified slot. "All" will allow all equip commands. Providing no slot argument will enable user GearSwap file execution, if it was disabled. * gs disable : Disables equip commands targeting a given slot. "All" will prevent all equip commands. Providing no second argument will disable user GearSwap file execution, although registered events will still run. * gs validate : This command checks to see whether the equipment in the sets table also exists in your inventory (default), or (by passing "inv") whether the equipment in your inventory exists in your sets table. is an optional list of words that restricts the output to only those items that contain text from one of the filter's words. @@ -37,4 +37,4 @@ Settings Files: There is no settings file for GearSwap. Additional Assistance: -The Windower/addons/GearSwap/beta_examples_and_information folder has a file in it named Variables.xlsx that gives more specific information. If that is insufficient, you can go to BlueGartr's FFXI section or FFXIAH and ask for more assistance. \ No newline at end of file +The Windower/addons/GearSwap/beta_examples_and_information folder has a file in it named Variables.xlsx that gives more specific information. If that is insufficient, you can go to BlueGartr's FFXI section or FFXIAH and ask for more assistance. diff --git a/addons/GearSwap/export.lua b/addons/GearSwap/export.lua index 4ad8b96e5..454bab4c7 100644 --- a/addons/GearSwap/export.lua +++ b/addons/GearSwap/export.lua @@ -33,6 +33,8 @@ function export_set(options) targinv = true elseif v:lower() == 'all' then all_items = true + elseif v:lower() == 'wearable' then + wearable = true elseif S{'xml'}:contains(v:lower()) then xml = true elseif S{'sets','set','s'}:contains(v:lower()) then @@ -60,6 +62,8 @@ function export_set(options) local buildmsg = 'Exporting ' if all_items then buildmsg = buildmsg..'all your items' + elseif wearable then + buildmsg = buildmsg..'all your items in inventory and wardrobes' elseif targinv then buildmsg = buildmsg..'your current inventory' elseif all_sets then @@ -96,6 +100,10 @@ function export_set(options) for i = 0, #res.bags do item_list:extend(get_item_list(items[res.bags[i].english:gsub(' ', ''):lower()])) end + elseif wearable then + for _, v in pairs(equippable_item_bags) do + item_list:extend(get_item_list(items[v.english:gsub(' ', ''):lower()])) + end elseif targinv then item_list:extend(get_item_list(items.inventory)) elseif all_sets then From 9ada9381a4a9f41d77223241aca1e7e4d128bf22 Mon Sep 17 00:00:00 2001 From: Ivaar <7287342+Ivaar@users.noreply.github.com> Date: Fri, 10 Jan 2020 16:38:21 -0800 Subject: [PATCH 2/8] Slips.lua: January 2020 update --- addons/libs/slips.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/libs/slips.lua b/addons/libs/slips.lua index 3e1911c36..2b5f752a4 100644 --- a/addons/libs/slips.lua +++ b/addons/libs/slips.lua @@ -26,7 +26,7 @@ slips.items = { [slips.storages[11]] = L{15297, 15298, 15299, 15919, 15929, 15921, 18871, 16273, 18166, 18167, 18256, 13216, 13217, 13218, 15455, 15456, 181, 182, 183, 184, 129, 11499, 18502, 18855, 19274, 18763, 19110, 15008, 17764, 19101, 365, 366, 367, 15860, 272, 273, 274, 275, 276, 11853, 11956, 11854, 11957, 11811, 11812, 11861, 11862, 3676, 18879, 3647, 3648, 3649, 3677, 18880, 18863, 18864, 15178, 14519, 10382, 11965, 11967, 15752, 15179, 14520, 10383, 11966, 11968, 15753, 10875, 3619, 3620, 3621, 3650, 3652, 10430, 10251, 10593, 10431, 10252, 10594, 10432, 10253, 10595, 10433, 10254, 10596, 10429, 10250, 17031, 17032, 10807, 18881, 10256, 10330, 10257, 10331, 10258, 10332, 10259, 10333, 10260, 10334, 10261, 10335, 10262, 10336, 10263, 10337, 10264, 10338, 10265, 10339, 10266, 10340, 10267, 10341, 10268, 10342, 10269, 10343, 10270, 10344, 10271, 10345, 10446, 10447, 426, 10808, 3654, 265, 266, 267, 269, 270, 271, 18464, 18545, 18563, 18912, 18913, 10293, 10809, 10810, 10811, 10812, 27803, 28086, 27804, 28087, 27805, 28088, 27806, 28089, 27765, 27911, 27760, 27906, 27759, 28661, 286, 27757, 27758, 287, 27899, 28185, 28324, 27898, 28655, 27756, 28511, 21118, 27902, 100, 21117, 87, 20953, 21280, 28652, 28650, 27726, 28509, 28651, 27727, 28510, 27872, 21113, 27873, 21114, 20532, 20533, 27717, 27718}, -- 192 [slips.storages[12]] = L{2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727}, -- 100 [slips.storages[13]] = L{10650, 10670, 10690, 10710, 10730, 10651, 10671, 10691, 10711, 10731, 10652, 10672, 10692, 10712, 10732, 10653, 10673, 10693, 10713, 10733, 10654, 10674, 10694, 10714, 10734, 10655, 10675, 10695, 10715, 10735, 10656, 10676, 10696, 10716, 10736, 10657, 10677, 10697, 10717, 10737, 10658, 10678, 10698, 10718, 10738, 10659, 10679, 10699, 10719, 10739, 10660, 10680, 10700, 10720, 10740, 10661, 10681, 10701, 10721, 10741, 10662, 10682, 10702, 10722, 10742, 10663, 10683, 10703, 10723, 10743, 10664, 10684, 10704, 10724, 10744, 10665, 10685, 10705, 10725, 10745, 10666, 10686, 10706, 10726, 10746, 10667, 10687, 10707, 10727, 10747, 10668, 10688, 10708, 10728, 10748, 10669, 10689, 10709, 10729, 10749}, -- 100 - [slips.storages[14]] = L{10901, 10474, 10523, 10554, 10620, 10906, 10479, 10528, 10559, 10625, 10911, 10484, 10533, 10564, 10630, 19799, 18916, 10442, 10280, 16084, 27788, 27928, 28071, 28208, 27649, 27789, 27929, 28072, 28209, 27650, 27790, 27930, 28073, 28210, 27651, 27791, 27931, 28074, 28211, 27652, 27792, 27932, 28075, 28212, 27653, 27793, 27933, 28076, 28213, 27654, 27794, 27934, 28077, 28214, 27655, 27795, 27935, 28078, 28215, 27656, 27796, 27936, 28079, 28216, 27657, 27797, 27937, 28080, 28217, 27658, 27798, 27938, 28081, 28218, 27659, 27799, 27939, 28082, 28219, 27660, 27800, 27940, 28083, 28220, 27661, 27801, 27941, 28084, 28221, 27662, 27802, 27942, 28085, 28222}, -- 94 + [slips.storages[14]] = L{10901, 10474, 10523, 10554, 10620, 10906, 10479, 10528, 10559, 10625, 10911, 10484, 10533, 10564, 10630, 19799, 18916, 10442, 10280, 16084, 27788, 27928, 28071, 28208, 27649, 27789, 27929, 28072, 28209, 27650, 27790, 27930, 28073, 28210, 27651, 27791, 27931, 28074, 28211, 27652, 27792, 27932, 28075, 28212, 27653, 27793, 27933, 28076, 28213, 27654, 27794, 27934, 28077, 28214, 27655, 27795, 27935, 28078, 28215, 27656, 27796, 27936, 28079, 28216, 27657, 27797, 27937, 28080, 28217, 27658, 27798, 27938, 28081, 28218, 27659, 27799, 27939, 28082, 28219, 27660, 27800, 27940, 28083, 28220, 27661, 27801, 27941, 28084, 28221, 27662, 27802, 27942, 28085, 28222, 21510, 21566, 21622, 21665, 21712, 21769, 21822, 21864, 21912, 21976, 22006, 22088, 22133, 22144, 22219, 26413, 23738, 23741, 23744, 23747, 23750, 23739, 23742, 23745, 23748, 23751, 23740, 23743, 23746, 23749, 23752}, -- 125 [slips.storages[15]] = L{27663, 27807, 27943, 28090, 28223, 27664, 27808, 27944, 28091, 28224, 27665, 27809, 27945, 28092, 28225, 27666, 27810, 27946, 28093, 28226, 27667, 27811, 27947, 28094, 28227, 27668, 27812, 27948, 28095, 28228, 27669, 27813, 27949, 28096, 28229, 27670, 27814, 27950, 28097, 28230, 27671, 27815, 27951, 28098, 28231, 27672, 27816, 27952, 28099, 28232, 27673, 27817, 27953, 28100, 28233, 27674, 27818, 27954, 28101, 28234, 27675, 27819, 27955, 28102, 28235, 27676, 27820, 27956, 28103, 28236, 27677, 27821, 27957, 28104, 28237, 27678, 27822, 27958, 28105, 28238, 27679, 27823, 27959, 28106, 28239, 27680, 27824, 27960, 28107, 28240, 27681, 27825, 27961, 28108, 28241, 27682, 27826, 27962, 28109, 28242, 27683, 27827, 27963, 28110, 28243}, -- 105 [slips.storages[16]] = L{27684, 27828, 27964, 28111, 28244, 27685, 27829, 27965, 28112, 28245, 27686, 27830, 27966, 28113, 28246, 27687, 27831, 27967, 28114, 28247, 27688, 27832, 27968, 28115, 28248, 27689, 27833, 27969, 28116, 28249, 27690, 27834, 27970, 28117, 28250, 27691, 27835, 27971, 28118, 28251, 27692, 27836, 27972, 28119, 28252, 27693, 27837, 27973, 28120, 28253, 27694, 27838, 27974, 28121, 28254, 27695, 27839, 27975, 28122, 28255, 27696, 27840, 27976, 28123, 28256, 27697, 27841, 27977, 28124, 28257, 27698, 27842, 27978, 28125, 28258, 27699, 27843, 27979, 28126, 28259, 27700, 27844, 27980, 28127, 28260, 27701, 27845, 27981, 28128, 28261, 27702, 27846, 27982, 28129, 28262, 27703, 27847, 27983, 28130, 28263, 27704, 27848, 27984, 28131, 28264, 27705, 27849, 27985, 28132, 28265, 27706, 27850, 27986, 28133, 28266}, -- 115 [slips.storages[17]] = L{26624, 26800, 26976, 27152, 27328, 26626, 26802, 26978, 27154, 27330, 26628, 26804, 26980, 27156, 27332, 26630, 26806, 26982, 27158, 27334, 26632, 26808, 26984, 27160, 27336, 26634, 26810, 26986, 27162, 27338, 26636, 26812, 26988, 27164, 27340, 26638, 26814, 26990, 27166, 27342, 26640, 26816, 26992, 27168, 27344, 26642, 26818, 26994, 27170, 27346, 26644, 26820, 26996, 27172, 27348, 26646, 26822, 26998, 27174, 27350, 26648, 26824, 27000, 27176, 27352, 26650, 26826, 27002, 27178, 27354, 26652, 26828, 27004, 27180, 27356, 26654, 26830, 27006, 27182, 27358, 26656, 26832, 27008, 27184, 27360, 26658, 26834, 27010, 27186, 27362, 26660, 26836, 27012, 27188, 27364, 26662, 26838, 27014, 27190, 27366, 26664, 26840, 27016, 27192, 27368, 26666, 26842, 27018, 27194, 27370}, -- 110 @@ -34,7 +34,7 @@ slips.items = { [slips.storages[19]] = L{27715, 27866, 27716, 27867, 278, 281, 284, 3680, 3681, 27859, 28149, 27860, 28150, 21107, 21108, 27625, 27626, 26693, 26694, 26707, 26708, 27631, 27632, 26705, 26706, 27854, 27855, 26703, 26704, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 21097, 21098, 26717, 26718, 26728,26719,26720,26889,26890, 21095, 21096, 26738, 26739, 26729, 26730, 26788, 26946, 27281, 27455, 26789, 3698, 20713, 20714, 26798, 26954, 26799, 26955, 3706, 26956, 26957, 3705, 26964, 26965, 27291, 26967, 27293, 26966, 27292, 26968, 27294, 21153, 21154, 21086, 21087, 25606, 26974, 27111, 27296, 27467, 25607, 26975, 27112, 27297, 27468, 14195, 14830, 14831, 13945, 13946, 14832, 13947, 17058, 13948, 14400, 14392, 14393, 14394, 14395, 14396, 14397, 14398, 14399, 11337, 11329, 11330, 11331, 11332, 11333, 11334, 11335, 11336, 15819, 15820, 15821, 15822, 15823, 15824, 15825, 15826, 3670, 3672, 3661, 3595, 3665, 3668, 3663, 3674, 3667, 191, 28, 153, 151, 198, 202, 142, 134, 137, 340, 341, 334, 335, 337, 339, 336, 342, 338, 3631, 3632, 3625, 3626, 3628, 3630, 3627, 3633, 3629, 25632, 25633, 25604, 25713, 27325, 25714, 27326, 3651, 25711, 25712, 10925, 10948, 10949, 10950, 10951, 10952, 10953, 10954, 10955, 25657, 25756, 25658, 25757}, -- 191 [slips.storages[20]] = L{26740, 26898, 27052, 27237, 27411, 26742, 26900, 27054, 27239, 27413, 26744, 26902, 27056, 27241, 27415, 26746, 26904, 27058, 27243, 27417, 26748, 26906, 27060, 27245, 27419, 26750, 26908, 27062, 27247, 27421, 26752, 26910, 27064, 27249, 27423, 26754, 26912, 27066, 27251, 27425, 26756, 26914, 27068, 27253, 27427, 26758, 26916, 27070, 27255, 27429, 26760, 26918, 27072, 27257, 27431, 26762, 26920, 27074, 27259, 27433, 26764, 26922, 27076, 27261, 27435, 26766, 26924, 27078, 27263, 27437, 26768, 26926, 27080, 27265, 27439, 26770, 26928, 27082, 27267, 27441, 26772, 26930, 27084, 27269, 27443, 26774, 26932, 27086, 27271, 27445, 26776, 26934, 27088, 27273, 27447, 26778, 26936, 27090, 27275, 27449, 26780, 26938, 27092, 27277, 27451, 26782, 26940, 27094, 27279, 27453,}, -- 110 [slips.storages[21]] = L{26741, 26899, 27053, 27238, 27412, 26743, 26901, 27055, 27240, 27414, 26745, 26903, 27057, 27242, 27416, 26747, 26905, 27059, 27244, 27418, 26749, 26907, 27061, 27246, 27420, 26751, 26909, 27063, 27248, 27422, 26753, 26911, 27065, 27250, 27424, 26755, 26913, 27067, 27252, 27426, 26757, 26915, 27069, 27254, 27428, 26759, 26917, 27071, 27256, 27430, 26761, 26919, 27073, 27258, 27432, 26763, 26921, 27075, 27260, 27434, 26765, 26923, 27077, 27262, 27436, 26767, 26925, 27079, 27264, 27438, 26769, 26927, 27081, 27266, 27440, 26771, 26929, 27083, 27268, 27442, 26773, 26931, 27085, 27270, 27444, 26775, 26933, 27087, 27272, 27446, 26777, 26935, 27089, 27274, 27448, 26779, 26937, 27091, 27276, 27450, 26781, 26939, 27093, 27278, 27452, 26783, 26941, 27095, 27280, 27454,}, -- 110 - [slips.storages[22]] = L{25639, 25715, 25638, 3707, 3708, 21074, 26406, 25645, 25726, 25648, 25649, 25650, 25758, 25759, 25672, 25673, 282, 279, 280, 268, 25670, 25671, 26520, 25652, 25669, 22017, 22018, 25586, 25587, 10384, 10385, 22019, 22020, 25722, 25585, 25776, 25677, 25678, 25675, 25679, 20668, 20669, 22069, 25755, 3722, 21608, 3713, 3714, 3715, 3717, 3727, 3728, 20577, 3726, 20666, 20667, 21741, 21609, 3723, 26410, 26411, 25850, 21509, 3725, 3720, 21658, 26524, 20665, 26412, 21965, 21966, 21967, 25774, 25838, 25775, 25839, 3724, 3721, 21682, 22072, 21820, 21821, 23731, 26517, 23730, 20573, 20674, 21742, 21860, 22065, 22039, 22124, 22132, 3719, 3738, 26518, 27623, 21867, 21868, 22283, 26516, 20933, 20578, 20568, 3739}, -- 105 + [slips.storages[22]] = L{25639, 25715, 25638, 3707, 3708, 21074, 26406, 25645, 25726, 25648, 25649, 25650, 25758, 25759, 25672, 25673, 282, 279, 280, 268, 25670, 25671, 26520, 25652, 25669, 22017, 22018, 25586, 25587, 10384, 10385, 22019, 22020, 25722, 25585, 25776, 25677, 25678, 25675, 25679, 20668, 20669, 22069, 25755, 3722, 21608, 3713, 3714, 3715, 3717, 3727, 3728, 20577, 3726, 20666, 20667, 21741, 21609, 3723, 26410, 26411, 25850, 21509, 3725, 3720, 21658, 26524, 20665, 26412, 21965, 21966, 21967, 25774, 25838, 25775, 25839, 3724, 3721, 21682, 22072, 21820, 21821, 23731, 26517, 23730, 20573, 20674, 21742, 21860, 22065, 22039, 22124, 22132, 3719, 3738, 26518, 27623, 21867, 21868, 22283, 26516, 20933, 20578, 20568, 3739, 20569, 20570, 22288, 26352, 23737, 22282, 3740}, -- 112 [slips.storages[23]] = L{25659, 25745, 25800, 25858, 25925, 25660, 25746, 25801, 25859, 25926, 25663, 25749, 25804, 25862, 25929, 25664, 25750, 25805, 25863, 25930, 25665, 25751, 25806, 25865, 25931, 25666, 25752, 25807, 25866, 25932, 25661, 25747, 25802, 25860, 25927, 25662, 25748, 25803, 25861, 25928, 25667, 25753, 25808, 25867, 25933, 25668, 25754, 25809, 25868, 25934, 25579, 25779, 25818, 25873, 25940, 25580, 25780, 25819, 25874, 25941, 25590, 25764, 25812, 25871, 25937, 25591, 25765, 25813, 25872, 25938, 25581, 25781, 25820, 25875, 25942, 25582, 25782, 25821, 25876, 25943, 25588, 25762, 25810, 25869, 25935, 25589, 25763, 25811, 25870, 25936, 25583, 25783, 25822, 25877, 25944, 25584, 25784, 25823, 25878, 25945, 25574, 25790, 25828, 25879, 25946, 25575, 25791, 25829, 25880, 25947, 25576, 25792, 25830, 25881, 25948, 25577, 25793, 25831, 25882, 25949, 25578, 25794, 25832, 25883, 25950, 26204, 26205, 26206, 26207, 26208, 25569, 25797, 25835, 25886, 25953, 25573, 25796, 25834, 25885, 25952, 25570, 25798, 25836, 25887, 25954, 25572, 25795, 25833, 25884, 25951, 25571, 25799, 25837, 25888, 25955, 26211, 26210, 26212, 26209, 26213, 21863, 22004, 21744, 21272, 20576, 21761, 26409, 22070}, --168 [slips.storages[24]] = L{23040, 23107, 23174, 23241, 23308, 23041, 23108, 23175, 23242, 23309, 23042, 23109, 23176, 23243, 23310, 23043, 23110, 23177, 23244, 23311, 23044, 23111, 23178, 23245, 23312, 23045, 23112, 23179, 23246, 23313, 23046, 23113, 23180, 23247, 23314, 23047, 23114, 23181, 23248, 23315, 23048, 23115, 23182, 23249, 23316, 23049, 23116, 23183, 23250, 23317, 23050, 23117, 23184, 23251, 23318, 23051, 23118, 23185, 23252, 23319, 23052, 23119, 23186, 23253, 23320, 23053, 23120, 23187, 23254, 23321, 23054, 23121, 23188, 23255, 23322, 23055, 23122, 23189, 23256, 23323, 23056, 23123, 23190, 23257, 23324, 23057, 23124, 23191, 23258, 23325, 23058, 23125, 23192, 23259, 23326, 23059, 23126, 23193, 23260, 23327, 23060, 23127, 23194, 23261, 23328, 23061, 23128, 23195, 23262, 23329, 23062, 23129, 23196, 23263, 23330,}, --115 [slips.storages[25]] = L{23375, 23442, 23509, 23576, 23643, 23376, 23443, 23510, 23577, 23644, 23377, 23444, 23511, 23578, 23645, 23378, 23445, 23512, 23579, 23646, 23379, 23446, 23513, 23580, 23647, 23380, 23447, 23514, 23581, 23648, 23381, 23448, 23515, 23582, 23649, 23382, 23449, 23516, 23583, 23650, 23383, 23450, 23517, 23584, 23651, 23384, 23451, 23518, 23585, 23652, 23385, 23452, 23519, 23586, 23653, 23386, 23453, 23520, 23587, 23654, 23387, 23454, 23521, 23588, 23655, 23388, 23455, 23522, 23589, 23656, 23389, 23456, 23523, 23590, 23657, 23390, 23457, 23524, 23591, 23658, 23391, 23458, 23525, 23592, 23659, 23392, 23459, 23526, 23593, 23660, 23393, 23460, 23527, 23594, 23661, 23394, 23461, 23528, 23595, 23662, 23395, 23462, 23529, 23596, 23663, 23396, 23463, 23530, 23597, 23664, 23397, 23464, 23531, 23598, 23665,}, --115 From f4068c4eea47e9be5139d78d29186ba157de0e38 Mon Sep 17 00:00:00 2001 From: Dean James Date: Mon, 13 Jan 2020 22:53:30 +0000 Subject: [PATCH 3/8] Added EmpyPopTracker addon. --- addons/EmpyPopTracker/EmpyPopTracker.lua | 339 +++++++++++++++++++++ addons/EmpyPopTracker/README.md | 53 ++++ addons/EmpyPopTracker/nms/README.md | 62 ++++ addons/EmpyPopTracker/nms/alfard.lua | 59 ++++ addons/EmpyPopTracker/nms/apademak.lua | 58 ++++ addons/EmpyPopTracker/nms/azdaja.lua | 37 +++ addons/EmpyPopTracker/nms/briareus.lua | 66 ++++ addons/EmpyPopTracker/nms/bukhis.lua | 59 ++++ addons/EmpyPopTracker/nms/carabosse.lua | 55 ++++ addons/EmpyPopTracker/nms/chloris.lua | 114 +++++++ addons/EmpyPopTracker/nms/cirein-croin.lua | 48 +++ addons/EmpyPopTracker/nms/dragua.lua | 37 +++ addons/EmpyPopTracker/nms/glavoid.lua | 83 +++++ addons/EmpyPopTracker/nms/index.lua | 54 ++++ addons/EmpyPopTracker/nms/isgebind.lua | 37 +++ addons/EmpyPopTracker/nms/itzpapalotl.lua | 59 ++++ addons/EmpyPopTracker/nms/kukulkan.lua | 66 ++++ addons/EmpyPopTracker/nms/orthrus.lua | 58 ++++ addons/EmpyPopTracker/nms/sedna.lua | 48 +++ addons/EmpyPopTracker/nms/sobek.lua | 59 ++++ addons/EmpyPopTracker/nms/ulhuadshi.lua | 48 +++ addons/EmpyPopTracker/readme/demo-full.png | Bin 0 -> 26460 bytes addons/EmpyPopTracker/readme/demo.png | Bin 0 -> 22426 bytes 23 files changed, 1499 insertions(+) create mode 100644 addons/EmpyPopTracker/EmpyPopTracker.lua create mode 100644 addons/EmpyPopTracker/README.md create mode 100644 addons/EmpyPopTracker/nms/README.md create mode 100644 addons/EmpyPopTracker/nms/alfard.lua create mode 100644 addons/EmpyPopTracker/nms/apademak.lua create mode 100644 addons/EmpyPopTracker/nms/azdaja.lua create mode 100644 addons/EmpyPopTracker/nms/briareus.lua create mode 100644 addons/EmpyPopTracker/nms/bukhis.lua create mode 100644 addons/EmpyPopTracker/nms/carabosse.lua create mode 100644 addons/EmpyPopTracker/nms/chloris.lua create mode 100644 addons/EmpyPopTracker/nms/cirein-croin.lua create mode 100644 addons/EmpyPopTracker/nms/dragua.lua create mode 100644 addons/EmpyPopTracker/nms/glavoid.lua create mode 100644 addons/EmpyPopTracker/nms/index.lua create mode 100644 addons/EmpyPopTracker/nms/isgebind.lua create mode 100644 addons/EmpyPopTracker/nms/itzpapalotl.lua create mode 100644 addons/EmpyPopTracker/nms/kukulkan.lua create mode 100644 addons/EmpyPopTracker/nms/orthrus.lua create mode 100644 addons/EmpyPopTracker/nms/sedna.lua create mode 100644 addons/EmpyPopTracker/nms/sobek.lua create mode 100644 addons/EmpyPopTracker/nms/ulhuadshi.lua create mode 100644 addons/EmpyPopTracker/readme/demo-full.png create mode 100644 addons/EmpyPopTracker/readme/demo.png diff --git a/addons/EmpyPopTracker/EmpyPopTracker.lua b/addons/EmpyPopTracker/EmpyPopTracker.lua new file mode 100644 index 000000000..6fd546248 --- /dev/null +++ b/addons/EmpyPopTracker/EmpyPopTracker.lua @@ -0,0 +1,339 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +_addon.name = "Empy Pop Tracker" +_addon.author = "Dean James (Xurion of Bismarck)" +_addon.commands = { "ept", "empypoptracker" } +_addon.version = "2.0.0" + +config = require("config") +res = require("resources") +nm_data = require("nms/index") + +active = false + +local EmpyPopTracker = {} + +local defaults = {} +defaults.text = {} +defaults.text.pos = {} +defaults.text.pos.x = 0 +defaults.text.pos.y = 0 +defaults.text.bg = {} +defaults.text.bg.alpha = 150 +defaults.text.bg.blue = 0 +defaults.text.bg.green = 0 +defaults.text.bg.red = 0 +defaults.text.bg.visible = true +defaults.text.padding = 8 +defaults.text.text = {} +defaults.text.text.font = "Consolas" +defaults.text.text.size = 10 +defaults.tracking = "briareus" +defaults.visible = true + +EmpyPopTracker.settings = config.load(defaults) +EmpyPopTracker.text = require("texts").new(EmpyPopTracker.settings.text, EmpyPopTracker.settings) + +colors = {} +colors.success = "\\cs(100,255,100)" +colors.danger = "\\cs(255,50,50)" +colors.warning = "\\cs(255,170,0)" +colors.close = "\\cr" + +function owns_item(id, items) + local owned = false + + -- Loop maximum 80 times over all slots. 80 indexes are returned for each bag regardless of max capacity. + for i = 1, 80, 1 do + if items.safe[i].id == id or + items.safe2[i].id == id or + items.locker[i].id == id or + items.sack[i].id == id or + items.satchel[i].id == id or + items.inventory[i].id == id or + items.storage[i].id == id then + owned = true + break + end + end + + return owned +end + +function owns_key_item(id, items) + local owned = false + + for _, item_id in pairs(items) do + if item_id == id then + owned = true + break + end + end + + return owned +end + +function item_treasure_pool_count(id, treasure) + local count = 0 + + for _, item in pairs(treasure) do + if item.item_id == id then + count = count + 1 + end + end + + return count +end + +function ucwords(str) + return string.gsub(str, "(%a)([%w_']*)", function(first, rest) + return first:upper() .. rest:lower() + end) +end + +function get_indent(depth) + return string.rep(" ", depth) +end + +function generate_text(data, key_items, items, depth) + local text = depth == 1 and data.name or "" + for _, pop in pairs(data.pops) do + local resource + local item_scope + local owns_pop + local in_pool_count = 0 + local item_identifier = '' + + if pop.type == 'key item' then + resource = res.key_items[pop.id] + owns_pop = owns_key_item(pop.id, key_items) + item_identifier = 'Ж ' + else + resource = res.items[pop.id] + owns_pop = owns_item(pop.id, items) + in_pool_count = item_treasure_pool_count(pop.id, items.treasure) + end + + local pop_name = 'Unknown pop' + if resource then + pop_name = ucwords(resource.en) + end + + --separator line for each top-level mob + if depth == 1 then + text = text .. "\n" + end + + local item_colour + if owns_pop then + item_colour = colors.success + else + item_colour = colors.danger + end + + local pool_notification = '' + if in_pool_count > 0 then + pool_notification = colors.warning .. ' [' .. in_pool_count .. ']' .. colors.close + end + text = text .. "\n" .. get_indent(depth) .. pop.dropped_from.name .. "\n" .. get_indent(depth) .. ' >> ' .. item_colour .. item_identifier .. pop_name .. colors.close .. pool_notification + if pop.dropped_from.pops then + text = text .. generate_text(pop.dropped_from, key_items, items, depth + 1) + end + end + + return text +end + +EmpyPopTracker.add_to_chat = function(message) + if type(message) ~= 'string' then + error('add_to_chat requires the message arg to be a string') + end + + windower.add_to_chat(8, message) +end + +EmpyPopTracker.generate_info = function(nm, key_items, items) + local nm_type = type(nm) + if nm_type ~= 'table' then + error('generate_info requires the nm arg to be a table, but got ' .. nm_type .. ' instead') + end + + local info = { + has_all_kis = true, + text = "" + } + + if nm.pops then + for _, key_item_data in pairs(nm.pops) do + local has_pop_ki = owns_key_item(key_item_data.id, key_items) + + if not has_pop_ki then + info.has_all_kis = false + end + end + end + + info.text = generate_text(nm, key_items, items, 1) + + return info +end + +function find_nms(query) + local matching_nms = {} + local lower_query = query:lower() + for _, nm in pairs(nm_data) do + local result = string.match(nm.name:lower(), '(.*' .. lower_query .. '.*)') + if result then + table.insert(matching_nms, result) + end + end + return matching_nms +end + +windower.register_event("addon command", function(command, ...) + if commands[command] then + commands[command](...) + else + commands.help() + end +end) + +commands = {} + +commands.track = function(...) + local args = {...} + local nm_name = args[1] + local matching_nm_names = find_nms(nm_name) + + if #matching_nm_names == 0 then + EmpyPopTracker.add_to_chat('Unable to find a NM using: "' .. nm_name .. '"') + elseif #matching_nm_names > 1 then + EmpyPopTracker.add_to_chat('"' .. nm_name .. '" matches ' .. #matching_nm_names .. ' NMs. Please be more explicit:') + for key, matching_file_name in pairs(matching_nm_names) do + EmpyPopTracker.add_to_chat(' Match ' .. key .. ': ' .. ucwords(matching_file_name)) + end + else + active = true + EmpyPopTracker.add_to_chat("Now tracking: " .. ucwords(matching_nm_names[1])) + EmpyPopTracker.settings.tracking = matching_nm_names[1] + EmpyPopTracker.update() + commands.show() + end +end +commands.t = commands.track + +commands.hide = function() + active = false + EmpyPopTracker.text:visible(false) + EmpyPopTracker.settings.visible = false + EmpyPopTracker.settings:save() +end + +commands.show = function() + active = true + EmpyPopTracker.text:visible(true) + EmpyPopTracker.settings.visible = true + EmpyPopTracker.settings:save() + EmpyPopTracker.update() +end + +commands.help = function() + EmpyPopTracker.add_to_chat("---Empy Pop Tracker---") + EmpyPopTracker.add_to_chat("Available commands:") + EmpyPopTracker.add_to_chat("//ept t|track briareus - tracks Briareus pops (partial names such as apadem work too!)") + EmpyPopTracker.add_to_chat("//ept hide - hides the UI") + EmpyPopTracker.add_to_chat("//ept show - shows the UI") + EmpyPopTracker.add_to_chat("//ept list - lists all trackable NMs") + EmpyPopTracker.add_to_chat("//ept help - displays this help") +end + +commands.list = function() + EmpyPopTracker.add_to_chat("---Empy Pop Tracker---") + EmpyPopTracker.add_to_chat("Trackable NMs:") + for _, nm in pairs(nm_data) do + EmpyPopTracker.add_to_chat(ucwords(nm.name)) + end +end + +commands.bg = function() + local tracking_nm = nm_data[EmpyPopTracker.settings.tracking] + windower.open_url(tracking_nm.bg_url) +end + +EmpyPopTracker.update = function() + local key_items = windower.ffxi.get_key_items() + local items = windower.ffxi.get_items() + local tracked_nm_data = nm_data[EmpyPopTracker.settings.tracking] + local generated_info = EmpyPopTracker.generate_info(tracked_nm_data, key_items, items) + EmpyPopTracker.text:text(generated_info.text) + if generated_info.has_all_kis then + EmpyPopTracker.text:bg_color(0, 75, 0) + else + EmpyPopTracker.text:bg_color(0, 0, 0) + end + if EmpyPopTracker.settings.visible then + EmpyPopTracker.text:visible(true) + end +end + +windower.register_event('load', function() + if windower.ffxi.get_info().logged_in and EmpyPopTracker.settings.visible then + active = true + EmpyPopTracker.update() + end +end) + +windower.register_event('add item', 'remove item', function() + if active then + EmpyPopTracker.update() + end +end) + +windower.register_event('incoming chunk', function(id) + --0x055: KI update + --0x0D2: Treasure pool addition + --0x0D3: Treasure pool lot/drop + if active and id == 0x055 or id == 0x0D2 or id == 0x0D3 then + EmpyPopTracker.update() + end +end) + +windower.register_event('login', function() + if EmpyPopTracker.settings.visible then + EmpyPopTracker.text:visible(true) + active = true + end +end) + +windower.register_event('logout', function() + EmpyPopTracker.text:visible(false) + active = false +end) + +return EmpyPopTracker diff --git a/addons/EmpyPopTracker/README.md b/addons/EmpyPopTracker/README.md new file mode 100644 index 000000000..3631de1ec --- /dev/null +++ b/addons/EmpyPopTracker/README.md @@ -0,0 +1,53 @@ +# FFXI Empy Pop Tracker + +An FFXI Windower 4 addon that tracks items and key items for popping Empyrean NMs in Abyssea, such as Briareus, Apademak and Sobek. + +![Example of Cirein-croin tracking](readme/demo.png) ![All KIs obtained](readme/demo-full.png) + +Key items are identified by the Zhe (Ж) character. Treasure pool counts for pop items are listed in amber after the item in the format of [3] (assuming 3 of that item in the pool). + +## Load + +`//lua load empypoptracker` + +## Track an NM + +`//ept track glavoid` tracks Glavoid pop items/key items. + +You can also track an NM by typing part of the name, because fuck having to remember how to spell Itzpapalotl: + +`//ept track itz` + +For a full list of trackable NMs, see the nms directory or use the `list` command (see below). + +## Other Commands + +### List Trackable NMs + +`//ept list` + +### Open BG Wiki for NM + +`//ept bg` + +### Hide UI + +`//ept hide` + +### Show UI + +`//ept show` + +### Display Help + +`//ept help` + +## Where is Fistule? + +Fistule is a unique NM when compared to the others. It does not require KIs that can be tracked, so it isn't included with the addon. + +## Contributing + +Notice something not quite right? [Raise an issue](https://github.com/xurion/ffxi-empy-pop-tracker/issues). + +[Pull requests](https://github.com/xurion/ffxi-empy-pop-tracker/pulls) welcome! diff --git a/addons/EmpyPopTracker/nms/README.md b/addons/EmpyPopTracker/nms/README.md new file mode 100644 index 000000000..bad2e262b --- /dev/null +++ b/addons/EmpyPopTracker/nms/README.md @@ -0,0 +1,62 @@ +# NM data + +The data structure for each trackable NM uses a series of nested NM entities. A standard NM entity contains the following data: + +| Key | Type | Required? | Description | +| ------------------- | --------- | --------- | --------------------------------- | +| name | String | Required | Name of the NM | +| bg_url | String | Required | URL of the bgwiki page for the NM | +| pops | Table | Optional | The pop information for the NM | +| pops{}.id | Number | Required | The ID of the item/key item | +| pops{}.type | String | Required | Either "key item" or "item" | +| pops{}.dropped_from | NM Entity | Required | A nested set of NM information | + +A simple example of the above would be: + +```lua +{ + name = "Azdaja", + pops = { { + id = 1531, --Vacant Bugard Eye + type = "key item", + dropped_from = { name = "Deelgeed, Timed (F-9/F-10)" } + } } +} +``` + +A larger example with multiple nested entites: + +```lua +{ + name = "Bukhis", + pops = { { + id = 1508, --Ingrown Taurus Nail + type = "key item", + dropped_from = { + name = "Khalkotaur, Forced (F-4)", + pops = { { + id = 3098, --Gnarled Taurus Horn + type = "item", + dropped_from = { name = "Aestutaur (G-9/G-10)" } + } } + }, { + id = 1509, --Ossified Gargouille Hand + type = "key item", + dropped_from = { + name = "Quasimodo, Forced (F-4)", + pops = { { + id = 3099, --Gargouille Stone + type = "item", + dropped_from = { name = "Gruesome Gargouille (F-10/G-10)" } + } } + } + }, { + id = 1510, --Imbrued Vampyr Fang + type = "key item", + dropped_from = { name = "Lord Varney, Timed (G-10/H-10)" } + } } + } +} +``` + +The main addon file requires the index.lua file which in turn is responsible for requiring and returning data for each nm. diff --git a/addons/EmpyPopTracker/nms/alfard.lua b/addons/EmpyPopTracker/nms/alfard.lua new file mode 100644 index 000000000..88dedb7a2 --- /dev/null +++ b/addons/EmpyPopTracker/nms/alfard.lua @@ -0,0 +1,59 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Alfard", + bg_url = 'https://www.bg-wiki.com/bg/Alfard', + pops = { { + id = 1530, --Venomous hydra fang + type = "key item", + dropped_from = { + name = "Ningishzida, Forced (I-7/I-8)", + pops = { { + id = 3262, --Jaculus Wing + type = "item", + dropped_from = { name = "Jaculus, Timed (I-8)" } + }, { + id = 3261, --Minaruja Skull + type = "item", + dropped_from = { + name = "Minaruja, Forced (I-10)", + pops = { { + id = 3267, --Pursuer's Wing + type = "item", + dropped_from = { name = "Faunus Wyvern (I-9)" } + } } + } + }, { + id = 3268, --High-Quality Wivre Hide + type = "item", + dropped_from = { name = "Glade Wivre (I-8)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/apademak.lua b/addons/EmpyPopTracker/nms/apademak.lua new file mode 100644 index 000000000..f3c37a21e --- /dev/null +++ b/addons/EmpyPopTracker/nms/apademak.lua @@ -0,0 +1,58 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Apademak", + bg_url = 'https://www.bg-wiki.com/bg/Apademak', + pops = { { + id = 1525, --Torn Khimaira Wing + type = "key item", + dropped_from = { + name = "Dhorme Khimaira, Forced (F-7)", + pops = { { + id = 3246, --Snow God Core + type = "item", + dropped_from = { + name = "Upas-Kamuy, Forced (G-5)", + pops = { { + id = 3252, --Gelid Arm + dropped_from = { name = "Snowflake (G-5)" } + } } + } + }, { + id = 3247, --Sisyphus Fragment + type = "item", + dropped_from = { name = "Sisyphus, Timed (F-6/G-6)" } + }, { + id = 3253, --High-quality marid hide + type = "item", + dropped_from = { name = "Olyphant (F-6)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/azdaja.lua b/addons/EmpyPopTracker/nms/azdaja.lua new file mode 100644 index 000000000..28716728a --- /dev/null +++ b/addons/EmpyPopTracker/nms/azdaja.lua @@ -0,0 +1,37 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Azdaja", + bg_url = 'https://www.bg-wiki.com/bg/Azdaja', + pops = { { + id = 1531, --Vacant Bugard Eye + type = "key item", + dropped_from = { name = "Deelgeed, Timed (F-9/F-10)" } + } } +} diff --git a/addons/EmpyPopTracker/nms/briareus.lua b/addons/EmpyPopTracker/nms/briareus.lua new file mode 100644 index 000000000..141f27b64 --- /dev/null +++ b/addons/EmpyPopTracker/nms/briareus.lua @@ -0,0 +1,66 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Briareus", + bg_url = 'https://www.bg-wiki.com/bg/Briareus', + pops = { { + id = 1482, --Dented Gigas Shield + type = "key item", + dropped_from = { + name = "Adamastor, Forced (C-4)", + pops = { { + id = 2894, --Trophy Shield + type = "item", + dropped_from = { name = "Bathyal Gigas (C-5/D-5)" } + } } + } + }, { + id = 1484, --Severed Gigas Collar + type = "key item", + dropped_from = { + name = "Grandgousier, Forced (F-10)", + pops = { { + id = 2896, --Massive Armband + type = "item", + dropped_from = { name = "Demersal Gigas (E-9/F-9)" } + } } + } + }, { + id = 1483, --Warped Gigas Armband + type = "key item", + dropped_from = { + name = "Pantagruel, Forced (F-7)", + pops = { { + id = 2895, --Oversized Sock + type = "item", + dropped_from = { name = "Hadal Gigas (F-6/F-7)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/bukhis.lua b/addons/EmpyPopTracker/nms/bukhis.lua new file mode 100644 index 000000000..4197cc0eb --- /dev/null +++ b/addons/EmpyPopTracker/nms/bukhis.lua @@ -0,0 +1,59 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Bukhis", + bg_url = 'https://www.bg-wiki.com/bg/Bukhis', + pops = { { + id = 1508, --Ingrown Taurus Nail + type = "key item", + dropped_from = { + name = "Khalkotaur, Forced (F-4)", + pops = { { + id = 3098, --Gnarled Taurus Horn + type = "item", + dropped_from = { name = "Aestutaur (G-9/G-10)" } + } } + } + }, { + id = 1509, --Ossified Gargouille Hand + type = "key item", + dropped_from = { + name = "Quasimodo, Forced (F-4)", + pops = { { + id = 3099, --Gargouille Stone + type = "item", + dropped_from = { name = "Gruesome Gargouille (F-10/G-10)" } + } } + } + }, { + id = 1510, --Imbrued Vampyr Fang + type = "key item", + dropped_from = { name = "Lord Varney, Timed (G-10/H-10)" } + } } +} diff --git a/addons/EmpyPopTracker/nms/carabosse.lua b/addons/EmpyPopTracker/nms/carabosse.lua new file mode 100644 index 000000000..7f4c59c86 --- /dev/null +++ b/addons/EmpyPopTracker/nms/carabosse.lua @@ -0,0 +1,55 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Carabosse", + bg_url = 'https://www.bg-wiki.com/bg/Carabosse', + pops = { { + id = 1485, --Pellucid Fly Eye + type = "key item", + dropped_from = { + name = "La Theine Liege, Forced (I-7)", + pops = { { + id = 2897, --Transparent Insect Wing + type = "item", + dropped_from = { name = "Plateau Glider (H-7)" } + } } + } + }, { + id = 1486, --Shimmering Pixie Pinion + type = "key item", + dropped_from = { + name = "Baba Yaga, Forced (H-7)", + pops = { { + id = 2898, --Piceous Scale + type = "item", + dropped_from = { name = "Farfadet (H-7)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/chloris.lua b/addons/EmpyPopTracker/nms/chloris.lua new file mode 100644 index 000000000..7695cd0e0 --- /dev/null +++ b/addons/EmpyPopTracker/nms/chloris.lua @@ -0,0 +1,114 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Chloris", + bg_url = 'https://www.bg-wiki.com/bg/Chloris', + pops = { { + id = 1470, --Gory Scorpion Claw + type = "key item", + dropped_from = { + name = "Hedetet, Forced (F-7)", + pops = { { + id = 2921, --Venomous Scorpion Stinger + type = "item", + dropped_from = { name = "Canyon Scorpion (F-7)" } + }, { + id = 2948, --Acidic Humus + type = "item", + dropped_from = { + name = "Gancanagh, Forced (H-8)", + pops = { { + id = 2920, --Alkaline Humus + type = "item", + dropped_from = { name = "Pachypodium (H-8)" } + } } + } + } } + } + }, { + id = 1469, --Torn Bat Wing + type = "key item", + dropped_from = { + name = "Treble Noctules, Forced (I-9)", + pops = { { + id = 2919, --Bloody Fang + type = "item", + dropped_from = { name = "Blood Bat (I-9)" } + }, { + id = 2947, --Exorcised Skull + type = "item", + dropped_from = { + name = "Cannered Noz, Forced (F-6)", + pops = { { + id = 2918, --Baleful Skull + type = "item", + dropped_from = { name = "Caoineag (F-6)" } + } } + } + } } + } + }, { + id = 1468, --Veinous Hecteyes Eyelid + type = "key item", + dropped_from = { + name = "Ophanim, Forced (G-9)", + pops = { { + id = 2946, --Tarnished Pincer + type = "item", + dropped_from = { + name = "Vetehinen, Forced (H-10)", + pops = { { + id = 2916, --High-quality Limule Pincer + type = "item", + dropped_from = { name = "Gulch Limule (H-10)" } + }, { + id = 2917, --Bloodshot Hecteye + type = "item", + dropped_from = { name = "Beholder (G-9)" } + }, { + id = 2945, --Shriveled Wing + type = "item", + dropped_from = { + name = "Halimede, Forced (G-12)", + pops = { { + id = 2915, --High-quality Clionid Wing + type = "item", + dropped_from = { name = "Gully Clionid (G-12)" } + } } + } + } } + } + } } + } + }, { + id = 1471, --Mossy Adamantoise Shell + type = "key item", + dropped_from = { name = "Chukwa, Timed (F-5)" } + } } +} diff --git a/addons/EmpyPopTracker/nms/cirein-croin.lua b/addons/EmpyPopTracker/nms/cirein-croin.lua new file mode 100644 index 000000000..78354bcd6 --- /dev/null +++ b/addons/EmpyPopTracker/nms/cirein-croin.lua @@ -0,0 +1,48 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Cirein-Croin", + bg_url = 'https://www.bg-wiki.com/bg/Cirein-croin', + pops = { { + id = 1504, --Glistening Orobon Liver + type = "key item", + dropped_from = { + name = "Cep-Kamuy, Forced (F-4)", + pops = { { + id = 3089, --Orobon Cheekmeat + type = "item", + dropped_from = { name = "Ancient Orobon (F-5)" } + } } + } + }, { + id = 1505, --Doffed Poroggo Hat + type = "key item", + dropped_from = { name = "Heqet, Timed (I-6)" } + } } +} diff --git a/addons/EmpyPopTracker/nms/dragua.lua b/addons/EmpyPopTracker/nms/dragua.lua new file mode 100644 index 000000000..c584499ca --- /dev/null +++ b/addons/EmpyPopTracker/nms/dragua.lua @@ -0,0 +1,37 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Dragua", + bg_url = 'https://www.bg-wiki.com/bg/Dragua', + pops = { { + id = 1521, --Bloodied Dragon Ear + type = "key item", + dropped_from = { name = "Hazhdiha, Timed (H-10)" } + } } +} diff --git a/addons/EmpyPopTracker/nms/glavoid.lua b/addons/EmpyPopTracker/nms/glavoid.lua new file mode 100644 index 000000000..067d2a345 --- /dev/null +++ b/addons/EmpyPopTracker/nms/glavoid.lua @@ -0,0 +1,83 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Glavoid", + bg_url = 'https://www.bg-wiki.com/bg/Glavoid', + pops = { { + id = 1473, --Sodden Sandworm Husk + type = "key item", + dropped_from = { name = "Minhocao, Timed (I-6)" } + }, { + id = 1475, --Sticky Gnat Wing + type = "key item", + dropped_from = { name = "Adze, Timed (G-5)" } + }, { + id = 1472, --Fat-lined Cockatrice Skin + type = "key item", + dropped_from = { + name = "Alectryon (H-8)", + pops = { { + id = 2923, --Cockatrice Tailmeat + type = "item", + dropped_from = { name = "Cluckatrice (H-8)" } + }, { + id = 2949, --Quivering Eft Egg + type = "item", + dropped_from = { + name = "Abas, Forced (K-10)", + pops = { { + id = 2922, --Eft Egg + dropped_from = { name = "Canyon Eft (J-10/J-11)" } + } } + } + } } + } + }, { + id = 1474, --Luxuriant manticore mane + type = "key item", + dropped_from = { + name = "Muscaliet, Forced (J-6)", + pops = { { + id = 2925, --Resilient Mane + type = "item", + dropped_from = { name = "Hieracosphinx (J-6)" } + }, { + id = 2950, --Smooth Whisker + type = "item", + dropped_from = { + name = "Tefenet, Forced (G-6)", + pops = { { + id = 2924, --Shocking Whisker + dropped_from = { name = "Jaguarundi (G-6)" } + } } + } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/index.lua b/addons/EmpyPopTracker/nms/index.lua new file mode 100644 index 000000000..9091a466a --- /dev/null +++ b/addons/EmpyPopTracker/nms/index.lua @@ -0,0 +1,54 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +local nms = { + 'alfard', + 'apademak', + 'azdaja', + 'briareus', + 'bukhis', + 'carabosse', + 'chloris', + 'cirein-croin', + 'dragua', + 'glavoid', + 'isgebind', + 'itzpapalotl', + 'kukulkan', + 'orthrus', + 'sedna', + 'sobek', + 'ulhuadshi' +} + +nm_data = {} +for _, nm in pairs(nms) do + nm_data[nm] = require('nms/' .. nm) +end + +return nm_data diff --git a/addons/EmpyPopTracker/nms/isgebind.lua b/addons/EmpyPopTracker/nms/isgebind.lua new file mode 100644 index 000000000..3d5f5ef1e --- /dev/null +++ b/addons/EmpyPopTracker/nms/isgebind.lua @@ -0,0 +1,37 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Isgebind", + bg_url = 'https://www.bg-wiki.com/bg/Isgebind', + pops = { { + id = 1526, --Begrimed Dragon Hide + type = "key item", + dropped_from = { name = "Kur, Timed (I-5/J-5)" } + } } +} diff --git a/addons/EmpyPopTracker/nms/itzpapalotl.lua b/addons/EmpyPopTracker/nms/itzpapalotl.lua new file mode 100644 index 000000000..5e44302d2 --- /dev/null +++ b/addons/EmpyPopTracker/nms/itzpapalotl.lua @@ -0,0 +1,59 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Itzpapalotl", + bg_url = 'https://www.bg-wiki.com/bg/Itzpapalotl', + pops = { { + id = 1488, --Venomous Wamoura Feeler + type = "key item", + dropped_from = { + name = "Granite Borer, Forced (K-10)", + pops = { { + id = 3072, --Withered Cocoon + type = "item", + dropped_from = { name = "Gullycampa (K-10)" } + } } + } + }, { + id = 1490, --Distended Chigoe Abdomen + type = "key item", + dropped_from = { name = "Tunga, Timed (K-10)" } + }, { + id = 1489, --Bulbous crawler cocoon + type = "key item", + dropped_from = { + name = "Blazing Eruca, Forced (J-10)", + pops = { { + id = 3073, --Eruca Egg + type = "item", + dropped_from = { name = "Ignis Eruca (J-10)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/kukulkan.lua b/addons/EmpyPopTracker/nms/kukulkan.lua new file mode 100644 index 000000000..5b1ddcc0b --- /dev/null +++ b/addons/EmpyPopTracker/nms/kukulkan.lua @@ -0,0 +1,66 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Kukulkan", + bg_url = 'https://www.bg-wiki.com/bg/Kukulkan', + pops = { { + id = 1466, --Mucid Ahriman Eyeball + type = "key item", + dropped_from = { + name = "Arimaspi, Forced (K-6)", + pops = { { + id = 2913, --Clouded Lens + type = "item", + dropped_from = { name = "Deep Eye (K-6/K-7)" } + } } + } + }, { + id = 1464, --Tattered Hippogryph Wing + type = "key item", + dropped_from = { + name = "Alkonost, Forced (H-6)", + pops = { { + id = 2912, --Giant Bugard Tusk + type = "item", + dropped_from = { name = "Ypotryll (I-7)" } + } } + } + }, { + id = 1465, --Cracked Wivre Horn + type = "key item", + dropped_from = { + name = "Keratyrannos, Forced (G-6)", + pops = { { + id = 2910, --Armored Dragonhorn + type = "item", + dropped_from = { name = "Mesa Wivre (G-6)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/orthrus.lua b/addons/EmpyPopTracker/nms/orthrus.lua new file mode 100644 index 000000000..ea7a0d817 --- /dev/null +++ b/addons/EmpyPopTracker/nms/orthrus.lua @@ -0,0 +1,58 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Orthrus", + bg_url = 'https://www.bg-wiki.com/bg/Orthrus', + pops = { { + id = 1520, --Steaming cerberus tongue + type = "key item", + dropped_from = { + name = "Amarok, Forced (E-6)", + pops = { { + id = 3231, --Sharabha Hide + type = "item", + dropped_from = { + name = "Sharabha, Forced (G-5)", + pops = { { + id = 3237, + dropped_from = { name = "Dune Manticore (F-5/F-6)" } + } } + } + }, { + id = 3232, --Tiger King Hide + type = "item", + dropped_from = { name = "Ansherekh, Timed (F-8/G-8)" } + }, { + id = 3238, --H.Q. Dhalmel Hide + type = "item", + dropped_from = { name = "Camelopardalis (F-7/G-7)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/sedna.lua b/addons/EmpyPopTracker/nms/sedna.lua new file mode 100644 index 000000000..de3f84d1c --- /dev/null +++ b/addons/EmpyPopTracker/nms/sedna.lua @@ -0,0 +1,48 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Sedna", + bg_url = 'https://www.bg-wiki.com/bg/Sedna', + pops = { { + id = 1512, --Shimmering Pugil Scale + type = "key item", + dropped_from = { name = "Hrosshvalur, Timed (J-6)" } + }, { + id = 1511, --Glossy Sea Monk Sucker + type = "key item", + dropped_from = { + name = "Iku-Turso, Forced (J-7)", + pops = { { + id = 3100, --Moonbeam Clam + type = "item", + dropped_from = { name = "Jasconius (I-7/J-7)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/sobek.lua b/addons/EmpyPopTracker/nms/sobek.lua new file mode 100644 index 000000000..570fd9d51 --- /dev/null +++ b/addons/EmpyPopTracker/nms/sobek.lua @@ -0,0 +1,59 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Sobek", + bg_url = 'https://www.bg-wiki.com/bg/Sobek', + pops = { { + id = 1500, --Molted Peiste Skin + type = "key item", + dropped_from = { name = "Gukumatz, Timed (J-11)" } + }, { + id = 1498, --Bloodstained Bugard Fang + type = "key item", + dropped_from = { + name = "Minax Bugard, Forced (K-10)", + pops = { { + id = 3085, --Bewitching Tusk + type = "item", + dropped_from = { name = "Abyssobugard (J-10/K-11)" } + } } + } + }, { + id = 1499, --Gnarled Lizard Nail + type = "key item", + dropped_from = { + name = "Sirrush, Forced (I-11)", + pops = { { + id = 3086, --Molt Scraps + type = "item", + dropped_from = { name = "Dusk Lizard (J-11)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/nms/ulhuadshi.lua b/addons/EmpyPopTracker/nms/ulhuadshi.lua new file mode 100644 index 000000000..3d2211396 --- /dev/null +++ b/addons/EmpyPopTracker/nms/ulhuadshi.lua @@ -0,0 +1,48 @@ +--[[ +Copyright © 2020, Dean James (Xurion of Bismarck) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Empy Pop Tracker nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL Dean James (Xurion of Bismarck) BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]] + +return { + name = "Ulhuadshi", + bg_url = 'https://www.bg-wiki.com/bg/Ulhuadshi', + pops = { { + id = 1492, --Shriveled Hecteyes Stalk + type = "key item", + dropped_from = { name = "Amun, Timed (H-8/I-9)" } + }, { + id = 1491, --Mucid Worm Segment + type = "key item", + dropped_from = { + name = "Pallid Percy, Forced (J-7)", + pops = { { + id = 3074, --Blanched Silver + type = "item", + dropped_from = { name = "Entozoon (J-7)" } + } } + } + } } +} diff --git a/addons/EmpyPopTracker/readme/demo-full.png b/addons/EmpyPopTracker/readme/demo-full.png new file mode 100644 index 0000000000000000000000000000000000000000..02df409dabe34d3fafaedacf0d13efe53a01c576 GIT binary patch literal 26460 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

QWC@pfDZ=P^XtlN03liT~${`5pATHe(-Ga*!vb( zsq-6a$S;3*Y6GyD=bgt)b(Bagq`pb{<71>XbJeoh_O+;X;C~Try*asjxM_-g6~~7x zcY*jx@RzAfx^(=n2wZv>?pr7N3M0yJTGE1E-;=~Oa$=rZk<7t&G}21G zefa8)Z}*(4Idm1HwLbqSin*!l`4iPx|K6sh*xeQg7t5+~usvXx#Pq%M+1DlvLP9o$ z&3%98080-J{5Wop@Gt>jYmNF)Yx)s6ADNy@S`Nr95+6%e3JzX1KpNDok@~RUjl21Qn!9e9dE$*av$dB?|-yc z#@fZ z>Y!y7B;tOF&4*`$yuOvT5?CG`Myr`u%M#*3awm6*S&+dKGiS z$f`-~ZE`Xmi%dEblQ7r!egN3T4n0^RVD%UYC(07?bI3{pQWX`b18W>n@iIPRCuZ>q zaKCP(jdO;sjk1QUP+{Wcrvrk&3d@|`vxDzNm7vlv3*z;?+#U>~A=X9<43U!_G+ z`nb+*T<@}jz}ee|HaD}xu4Mp3YJ=~uyIBoQIGgT=q^{XtltxT0cVf>tv>#u!Zai!Q zTtVk&(LGU?1H~;F>j~77=#;D!m7!`99R1o%{WbT45Y43Og^|<5taB(*Ma~S_E$TI> zMn5vjnD^4lQEd_lJHwTf=6e0WZhdhCGrl+LWldUjm++C#|N25da`ycEE51YWhLI@i zPu^Z}n;lrq=lZxe+_XssiaXCMPn-YFVi^*<=h1qU_*|tZgUPQE68m-zqkU%3Pz!t0 z{d`>KLR`9v2cxIYGL$*ufN1Kvt4(W%*{x{4Kq*&yEp@{`w_f`zjXF9wTsgsDP9uZe z?`Rxh-%*DXIv1r~P2XGwt(llrQh&KlC~AFh^fzFDP0-t6v(9#7y`sG!?DvN`wIYLP zUZp;0`|!QQvb<2u@M>qI=ei*$;W_fQAZdN@5tY zz%*PT_fIb)eW1^9vWO5}{)JZZAkQ|hoE})qtKqC)txN}1Q5UWRT_q#e1EzC#CWiMX z#eKIQmzzETH+DZ>Z^yM_4kY{V+Xj3$ThD^=Kjqs6OMo9a7y%xNG!$ZhC z01WsjHr&H#dB1ub4O@=8I2?fwmrRTO4$j7spy`nt46Lc+H{L05!0cm+z6JtKtKjpK z!G zrtZ(@!U@84@OMskGiL`ndi`M5w7b=w3`aY;F{%6tKu~N7#PQ(R6>*5?P}JXMYDg*Z zy|e~g@6XA!iGd_met>ekAONoxS=)H}9*7}+tCu9>3ysNbcF&+~?AH>E#_I#}BQZFC zUw;-{`1ttqo;qI_PH$z_l^1;#hQ|hldg9Zucr? zY>ca{Oof8B@3ZYse6Q)^PI)zX2Ac{byXPTj)HrMXQf9&2sFy%JDIM@&)AEzcL@Y$i zFLLRlq}O@*Au>LD6oqJ$9ymXW1q}Z|qtI3k>g@tw{uxTnMf zF;WAXjoKJ$aHD#okGlh+e3elzBr2{W0E&eksO)4>qw~)NIsbF3uRN#4d3ZXhj*u=r zuwvG777vn~AVvP#1tV-WQ3BOo*Yh>&%*lteLboH^PQT~M;YeThq zu-EiJgzi+RrOaie1l1^IL{>!*?y{#YwoMw4X4(Qw#^Y{*AmUZP%D~8hh*LxxLUW(q zupEM`D70cx54k?q-x{chAqfeWYq(f+#$gOiAqW>^23)kjSz^RH`kD1fJPN=hFuK)` zO0|AQJj{;gCxG{?sjTI>j#*&~3MfVee1WGBy*xcyEEkIKL;7e|D`8H;Qt zvRfCA1f|4HwxT!#(^S}C*&TwS<*jW>D0k6V;!laiB@p}#$}`1URGJ+ZNdPA){xCB( zz6CxuM+{ZO)|Uzgudd$^EoS^~ZPc8X&El*dw<;Qzq`jWlP9sGbf!%KKSlYb!{=!z9 zYlxg)d3N{=ihOWzej_Y9Mj~T!d0~9?VKC6mJ=TtvDmK>C#~dSZnT<9I)_On>nY4di zeK!WC8JhvX9Jq^a8*MBupKBKQV@f-xg22#P7;1K?4`U1WVp-ceZKOV5T)9anMiE7+ZHQcb>B075qpTmR zNF%q{k&Q~0(~;P`P?!AI1xfH?QPf({^B3k>1^V+ZMcK8mN%N=R`)>~AbrZ8v`}TIZ!gARAk0 z6xcK0Eg9RRvuzStmb57|Q)q$s6(TnRJ|O6-jEb&b6_R`6V^L#x>;utqmpSftCZZX86>Mpn}2N3dN?1|=bBg?3@6xgUvl4`gEV{-KC2Ujp*OPyY;}wk7-c2DhXgyoM>=Y`k;hbdUz*IH3YT=Kcqfjx7sAxl z*N1pT3YUz+eSYL`|8u!XtZTFfArLYbNDy>J-0LN2hED$}FK&_y>TFxNyg=sFm#XdzrPf%}RL$?3Soc zxkeuUR2p6nvIzM&TW)VyMrZ|OjU84`Og#{hQH_n=#g|rEQ#{W0HJo)XJTq@)VjgV% zZAK-zmOoJN#NB$*;R!gc8<#6zs@8<<{F6m<89F4EhwIN9oraiRDdO;yKWhi{m5(FT zK?hpc2N_=d$$MRSY-R)!wxE3+=R=DHU`{Sy_~DII&wcqztuQ=!Jh8lK;O+6TRk;kF zj5qXi|0A-y!+U#i6lW<`BLoH#I6ZF#sV(*Wwb%Nx)$x82$6Q?HETa4=HMcQKLJv9> zrcxpbV7lJwSFGItf946h+5an*^QrsAJ?!S&%~9W%nn*t2(B#u>-^aToOv{HOcs5Ku z`uwnxNZ4^Ve)rYyqdz)N*yC`WIYSukgbAY$%XnGE0<*?V1sFy>6vLGswzIk)Nm6~eqO`Pit}<1QyNT|~!Y^Tsi z>!Lvz!oA|NIby6vP@wn5r(Qd1>uvQHnkyg8@Qd++)k5|)adz`RIrzTZ&K-h&7rE(M zS2$}N>Rc2}Z~gNLPj3lWY=UfxSOd=h`D|BtLhGw(cDwv+6!jQ^&72@dU+*_a23Mp| zDmq(!Z0FUDuCWYT)U}8RMI8vE-p|Ya?*9C(F&S{Z&)nVZ=c^lRLj6R_C_(!fb6>0N z%~l>kiY84;TKTZeSi@xXcW@`8ptY92K_lolblch8p@1ztll-T4vpHy&`FQqMU%4g~ z#5JtX>E_+aBQ$aff6rW3K3{XRT6o0c0}K;A!h7cr2pCB1Tk4&%pJR!$VUM27650V~aS`V#&yi5DZyzTd{zS*Iv zEo;G>a`%tfjCY)s9o|O>f@W*(jeuAOqlM4boQV9jJ4AXx?+go`8I{`%_5r!Z9 zaXt1e?jUZcVIPh5dqInp{R;5}^U|6(b(P_NZhdElnYJPt7`{B2WZuNS<4_3vU z+;PfJ9xM2q-p310uhuyjgr67wt{t9fzJXK{dL?p=C2e0sW=<2wD-C*<#^E6x8gX1B1`ReQ0T z@M~j2oMn3%^>*273XzTzpd54+eq2WnE1&^s{cBC2x#=qchSoIIQFz(;CE@xysvgS7 z2TW}~-kDgWy$81fcb6P<=l6~<=JZaIBgMW=KQei%qal0lm2;`K%};U zF{+7CA6vojh`8l?zOUKV*R`D{s1bIju`oHzx}#+ z)b5HTK9);V#_u?hPA%k+q?pVw#c(#X>&R7V+%O`IlY!rlVh7vOv+hlna%zCk7C+at z&)+Q5oUwS^G}r`(fB*waMO6NSF(=&fQj1_$?dQuRl;jDko^E28nl{G)8B*dE;iQhN z=;I11fUUZ`lhc~W6@r<$_ov}!_TS*|WH{VktpTv1H3lD6*tOJhM3Qnu!X$5E4I z@)H6xrFLGPqFznNa@z-bW2Oibfg{0OY!BK?GmQ`}@%RfK0o8$xko`FUGt|D*_k+T! zH5d{?stACm(46moLh$!>M!)UU_Fl9 z)_tf9=)d8KzGH{^Y*Te6S;rbk>!I8C7(Xb8TdXC6=zi=jE${_W+Xf8i^5mnZ@}0`O z){uEn?!lj3)jMN(0#qSRwBcqPt8J1`YamZzT^7^WK-#2$SOO0|9_WHFw05c-MIF;J zPLw5S$As(<3+A|3RX_ub#v2sPXzI4&t(qUGPI{KmU%1c68-qfZ{ycUKs zd*$?IL#U7`_o)&KH{K04vC19s_2E_1FB-b%*U7i*J5n2^7@FMmqeVzV_^bA7-KQJr zxOmk?+6*?pN;<5xuojKLA|VnuwoFkMH^|0x4g9a{rdJy1?978lIC@bTJv^@L6k;Fu z-SrsHimhQbUS@eDA+xEWdG-PHaxexb#ipu{&u^9C^^V!lxB>dFy*q!Klq4?5^*Ixw zwgV_Hv?;4MTkLj!RLJykb1r|N|D5K{h`6e(G|*a$s+fZYXGT_uMEkWqu{d2t%QYgz z0QK#Cr2ryde?ruwK-04QP7Z6U{pN{cL~UyucH^V_b$VYC&0yCH(>?w0Sh1q1H&-z> z7G6r$hydXjqI8pk!~M^ADvQ&gKppE~%R;*Q=Ssm!u$ETYA5U*nThKunv9F-5&1A@! zlZN%@IMPt{nk9>bCZPQz(^fk#)rytfSs{|SsqY=MS!<7tf8XW$XK~A+FAkp7?WAOW z$oW9O;W?d%w=QFlF{g!a_MYL}u6zq2UU!$p-#9dQHt*$Vq7@6E=cVjcdA4!PmW&$@6*$E?6s$f>CK5aUTsbHnoUgJ&Sp}_ zFCThjy?Q>P29LX=wWScdO@oc^ISWacYKB2QZv__RAXU5Jm>i$37iaM6OzY1f2NvvI zJ|gRcolR`#=kbkM*&D>QeE4YnOF!K|plhk3ZGsMKo%D%t1VRmnxnZN|(Q55wD6ep| zS$vrfr6$>B8o^b}At-ED{8mgZde*%OgHp1fC?=7Lq1iwnhqg+^Ag=z!$%5Uckmto> zLkgQB*kz1qr;)_oFQA^(cY&nG)mm(=A*4hp;b}4I#`1%g4N(>wUw^>h)#_?=fFAUa zqc;Y);G&Kv%(_}H>zgAX)WI-$*eEk~VF#Uj*6DZu#=f}ltogQ9*%0HSIk8>Bj+C4M zy+qWz<}-xL8#>f0fbw|W8LqQsh;2(%mow;AP!A{y)*-5|;Ti2145~+?riUzW=TOtI zNz5_UL#F3LrUa0h))P0=>-5yVzX}WD^Nmv;}03-0*^*z;)1cs;bjHSWhbp+&(v-9qltU<~QKhJiHEQpIYs6 zqob2cujk@M|pM#p$=RyHm!TsQ+X6FTnO zargWw)cg8SbT+r$`BZ_)ULovnNQj}sv?HvI!Q>$sa`Oi@A`U*6VJMk_YaMsB^aQ7L z2uTIVbOy1a(PW)_NbVe8aZrqBQ@cNKRO0AI1j-ut&O^=Way5{TZx?(`+fCb zqOzn=#78NBL3apZDUTa;CId0m0=7oDC!D%|O(5Cr7)*U%PiW;jILU%%X@r11G@6i< zq#C9b@IR(glCz-aB@Sz;gPQfPFy&ZN8KYRd(~GJuv1<&4aKqt*V9^e*C359c!Ig@W zQ^?i->-lk}WXjHS{4rkB<7E-6R8pJAkNDw!#PLuwnD@B5*&1+3>%W1^^`Qltgtr}P zfCj&m8c9Dm5WWl^fMB>!ho`5>zxadTu>MoHR8#f2%5FtXRS z2HgHUbG_V*=}FC0wrOudii8nKX2)4`>_3vnT*6DIJhiI?l+WtHRGTmx!MWtM5f8W` zlmAkmnhF_5>gU+6;OUbYo5cd6hMzAUFxnIt@{JPOf(O(#1>Nr^r&u?8??J<#JF{yo z1@ZZQn;6t2dj&C@Vm0rNuipuTVyyjHT@H5EDVmrs$8>0ch71Bc@1TL7+u#4bxZ4j# zFTiREeKcF_l3;=+8&GH?c8u0p%+y-3w{J|f$w@``hMX+gw--hP(HJ-BE3ziTY(gZC z?aKii&HsEML&7}~Dxo$2OOFv-@{mZqOc4nay?%X5u9E~(Mq4lOsH0jte9v3qiE@b| zE^=|b=Uv^ev`fEjp$^i{RU=n0GfBZtQ_oz1VV>|d#=*(qT!GK|S{mhoPn+4%=QX`W;ni@6xgtB3ZQ<;7WjZ_DoxRC>~DWZ775+g60O$!0AVScS-SkThH@ z%tyI-U1XX_Ed~Z4J>o*!gEle+v3F_`?d3H&l*FB{*aaKHZ&6*@U=heNQS9N%8*8Wfq|4P!0T?C8_f-8lUk+dtKYke6IspZYyN%;+E zT+Nc}5ODS+#sbyFkW6T&xdFwQlsnCSI;xaY`Ol2%$h55$d>2O~WxGL8xMOMW$(0$9 znB{e%W6oGX0ixduzxHQ@43OHZ>xVSs4dE#>WLS13+{hyMJs@KfBbAl};_F}@sg~;? ziQ7D%Xmb3TFj)os9(_`-=WfA7WXb&UlVG;idg~=002fMxO^B5=9KH=3D?o`=H+6|8 zC&;T4srDSa(wG4V@JfIoK7v~;)_|qP!~nLhv%OficN5Y9GA3DQt_j+A=k-7^G9no& zjTy+DhICwmn5_KWeV%!dGiZVLbkUr6ihyBaNvTx`mtJkxL$F9>5jTxCzbub3wvmW` zCEI+5s;y8gUWtW!IC8wLs>}Cb^Nkz5csbLvh?zc7$|Z)=LYyIkH#W!P!0Ah@d50k` zBW~$H3DndIBi#zcOyg@;t2#je6Unb{z}%!Sq7AG3;g&WW^q0JaEFgIzCX|Eemip0Y z-7e7KxVnLUL{Tb75K^xf50__fkhpu&*eEZK?N8&aphxygib!-^d^jy}q4Oa5A)!hJ z^YJROj(uN()zL9*du4n013^Ol;b8w{9nd#=s-NrT+M1LGu++r3QnXexPNQbiw$lB* z1LkCMMl+2x?ytmDZ|F(QL+RLrt8eQ zc^8sQKm3OSvi&@x=@*>!1r=XXbu8ay4Pe%#wCdhFUUkbdj0ZLbwAvVS5IPClY&%H8`72RA9L5w=Mxpkyo-&ZP3HjPQFEk z=&-DRHO~;#QG}n-2ly<`DgXUXf60Eph1RqyWdNC&SBt=38Hg@|&=BFPmbbK`@g09T%xEivNP-g-ygC zTSh$CNfN^;_D6Zt+|NT8Fv**Ngu#Z{3-|0dWLwLRRP>q|?$MO(l^eiY6# zB=Fb6?CtUBI}AcxqYb_-o}TW=qMD@CeZD+?^`4c3k7dIz-`@eLSqKf3odGp^Nx>K~ zwdz)LWZvXIPAZ1h;tRmfMK0$<1#SBQFnQ+r{NF}JwbRW{|2#S#rGc?R7mqE1M(#Y4 z)^?!ZYO+-nRH+NreU-;ECupE?CIW5tyIz411f}A_UYHlrGf9%f+|El}VSSvdg?wp&ZJ)R06*6}SP*urQ*wFbluunjKtShCW zcl~<5E2Y-0>){e4dm#jcEsIV&3M2QTes|g5tl!5hL}-vzkkOdpZ`EQSv*DlB?MO2F zKHL1x(#O^=$ouN(i{-=PwV#D*%@N>TzR6IQeKyI?)}2ao@sdFUL2p0{88O1)8PuqQXULsdGN+Ku$d zhlRs&{56(1D6bouKW?smS}eqlP3N@zv!R4L-HGv? zExo&+2E#MPPWAE-=`UdIH^H!P?k-Dp23Ojf{7A;qW&Cgg2c&=c*EgWp z%yTpkr8pBUvEssqio~!3ewA?eEdHFyCp>061UHdV|nMg`>*?{Cq@7G zUAuAUiJg3c?;f_Qf-nzg=pk-eT)6xN9t(@^+y3zL`~!cjypVTV)6c98 z|J|D(7Z+Ae9T;!-R&09bPJ81=HDq;n8E}Rv^H@cr*uBE(kn90ZVosGT zm=N;ota4-R0Cr*P^nhWb0w>LJRxA?gu$367Mn=HGu6!``*=m)$in^S=i{MWO7dAvC zrXC#m3%tV^7tcKWWNYijyxq9IB77yg$5-vj)m3Jc?L5R=jQ@P!h7ofX+@S-LV*j>y zah;3a-TLK@BQ3oH_xV@;%lPJvaU1^Hn}4QntbF)mmEY}Oy^RZE(W?;mG*PVJXU_)9 zM>&mw)qsFn9A{Q?bOzuulL(x_69hk|aj-jI@?(4p2%5?Mc@z;lM+s$8E zR?N4A7SsQov@j8HaG)KqO0Qqv*xKMpzrG7yJ%0H0q)q1!9KJqo*Wt1z|GRSk(CYNF z;KGWXKmPi4Yin!%_2FO6J(D6ib@lqV0K`sA;QC3~yjw5{#n#Z0oxYsQ#%U?Q{e}S{ zBJiPwXDcb(IH&W#db>##Fn3J>xnYPU0b>Ui8CKnLjtATP*+$#w?hKfor@Fl*=BAwq z0SFY`UV9*;!QD+xs7~&#^j3uYw(>#hyIq;<-IdLxg3kzfb*Wb%$Z6W$iN18d$naqfYXO{f;!qHAi;@(CN}mvF4Ym7%*-K??6d9PLOFQCdd1bt$imPP6St+i3lXe#vxd42Jon^X^eKZig z0)PPjH^94%W)2S4SP{PG%3B5nWJ{Tfnf-Nz6z(*b*sIt%>#!$>)pEWKWdV!jq#n@9 zg3pk1AOw5rWz|}4zyy|Y_W{R!Fl^3K1+*?$7|etuH?SE_dgd)ah&Y=8w7c{iovJxM zqQj&hU|#}*XcAYUl_YVZcR?R<&7 z_2nG~I9(_oV#`S%nHx0Ep*Cg1Qu*A?nNej?RyC)YnZW6u;m00u&@zj};~JvowG!ZS z4p##y&Kr&;b5mA`XK@Znu~Lpg z!VDtMj!*{hGdDm)1r=vgP;Q1L@{N-sj^AY59XOMNV+l>!SB`&Iv94PQj_rpiHhIDE zy0L4;Q?81jc8P4)pY4jWUBeH<9*Xk_+^lsI#}zzA*>EQkP9ueVU*5sN!1UBP#LdN& zGJbGFRtF3pRUq9Q=HNaR0voFs1;KR;o0&33^aAKItca?Ux~{*0;w=w64Yh3C2piZL zwhq8sabk7G$K#6)cos+5P~hu;6O~z~06EjLsuJ+;BvFA`j(mr`hcymB$j}MjebNY9 zaTSMKL4zYayPF>AkZf*#7z|FpkbGH^48@3&$3|@kJ1M6t;AbasNyKO}+6l11s`8fO z+I1xtVA9wa&fVZJq>5DmjQTjaC4g=i{R7S34EX<%@IrNGUx1rgp&q25EfT$SToK6Mi4jOjYG@busXK( z>x^SWn&Ip`0#ehoRL#bbjKlYTJQ!c;4SP->)d9y*QuSDx!$GS*MmRVYn+&HdMT$5s zb0Zms6L+=4MtA@&8)6HVgRiv$Kk?X#!$@5K7nQgf5~hd=1B!x!QZgnQ!NCCoVRvA= zIO}jYX^!=T^h9`|1bBgS{GiswkA7Oly*b5z^PYapA9o)n!Edp>4ua0P9I*3#i&atV zx@Wac$qFUK@wxCmBwC>xZssZqhr^^en-KsHo508YflOfY8tN5CT(I@Os`>da0OhgI z>_6CAMY6|?k~bVx5K#Z=I$h}nu!A8ca)X-O1fj@NZ2$16?|4H*?TH33MU~9p_Y4c7 z0zZ-D82OLSW??G~XNft7$Uj{2l92%z2{&!0Vc3cDcw67tsLT-??67tpoWSfSNAD{5 zjYRTO2+BNRB#@not_wS)ck+jYJH`V6A23qKi~{dQ#V;$(6mK((!T?Mt8oxS&W~pT& zn%ub2d&Z3}Bb)zmHtgzwi5x`$6PMbz@qgfJ{xKNw>1R*-DfMaysXP&UZiI>4n z!9}VcpC^$2n32X_FUkk!5a?Vb1q*F(_ki(U*Psd$HALL(Pzk(2?dFeRzYV9T(Dl~^ zD{^496AoyuV3vV42?;rAjSuOD9CCoI7gu%cx~=$6&YRCTKZ@gT9f6mXAGkKTW+;n< z)NcL|hrY;UhmM-Y1!NaE$vv53EhmRRa#|2OB;9-uM~gU1kA+K(!)2V{& zFm|b6bQ9J)_uRf2H$j2J*Nm%=;z#+^?sJ|3AN;@I=cPzWWy8_r#?3|H#MNQch0o^m z<8`Y4KYuQ0fZ8%wGH93|$xRf&C~;=JPMpND9L;^miJQbZoX${l3N(B#fIL6tNx6PC zXKGv$w&d;)2AoUfK6WE_BPw%OD_NF7l|+#$xR}xw+a;&U|#+?QO@7y>pcuXZ!m>PEZaK70U9kaZsm;zDzL#@INqs-2Z5QUqMWJ2~&A z!*V5tI5>Zn(H!3-{5Tyzw{+mVVdFA1!`&)5ehDHBg5uMnWMG4a8C+Ty!0@W@B7U5S zi-$F4ILVbLnb?UVqRYU2E{`j+bRQ+f&c@0`SPIUPZCZmS8`g0$YVAHnr*X)HlSiC; z=aSgP>mX&t3OyJpcPte{X&j@+>UdxTmM8J!ci4u_&U`mQl^66wehQhh!3Drb1gnPA zVg!H#PaUPwr1LtMAr!ei#jvI&X3AU&Va2=f!|U&Qd$fW|YGu{F9U7ou8?QP`^RZ zhm#1&xL~0;&Xj6FMCnrw*mQ_Ry0jv*X^=TK@x!f9;~IX5O)?xaIPf^nk;9WJ_fb9^ z(^pcN>V%(l5}N=z#656RdayFGG-_@T(+V{zikNla2NMv7mM$3@#T>rGgeDz~Qy3lu zKPW|!Ec)QnY>Z_e1KSr1M*i`3Cm^K*V8*H2Ft7@%?ZuBeB%2RO}Mb&_&ljD)_lvH!D&yey4V#XX;T)T;9 z@b*k}QMs}Pl9{;L1I`j7Z^$`BjqP}WVr#fFj1UG`0optM$&bZx({ozOU|F>rXGz&C zjSrm2&mrT((EqtldU9i#IAzK6mZLPq!*KF=?W}O*yfr5b(gbjt80YiRp##vH;Vfq+ znR18L)KJ;Ecrenea0BjQ&8fH~y^xVC#;(V46c1vyDNAk+&L{$D(+=RkhX+F-l?>RL zi_`QR&mTG{+B<%r628NUWgLYz#FC{OWEuoTfs+QPGs9-^l7T)T>4+^WEJTZo;h>O! zpUs7{dNhD44mfv+6O${}Z8e#*uDk;F+s}s6uDHD6X)=@BkRCWT<3_hqm{|~9x({=s zaZ`ZUHS|5M2BmSF638!p1T3c|?QNNr%jy$9J@AR(Jg_RQ!YK4&LO8wo#p@V1JPdSnt9@7NVXDpzo@GunSqNcz+Eikve-7jc^XOxdQ$K+4t(b~7$9VzBd-Q<;wA@H&kM>R1KG~}*KX9c z9t_7?6WKU%PA`FK{3;g<7 zP^E@=6W-TDTg>5hT$KvNyGuPGM*kF&J**%l?gNH^HKglnwR>}{SO)AaDs~OfQ0c8( zza1Ny`)x(o=W}nj{K2rty0f0Sl)V>fYma^vUKDu@%cc7-=U#}->EC`Dxiyv!C*U_? z``x7nw?3re>#??g0>$(>EJQc(Lz(X;EN9d}e!7BYmL`VNF2PnA)+z9Z$=!^zp{}|C z#8t)#o^|F%ghBV&RlDpb;*sYdj8lQK;s?grmk-9QeRC3zyYQ+njJCZiSJt+)=)Rih z+LcxZM*N@-rEz9 zPu#{+V&R{*Fo{^X_*BT@%yB=r6ZhV(^`+9{<D+dE?#SZY!3j5dlOJl}Y?-H|9s53G_2$W^XRfhD zbN2M;gM%WSm>r#6!`I)B%`NT;MHdUBuzhUyIV`i-zBFs)uxC7%JF{=+N(kZ;^fHVSLYWO?2jo`+l#Nn)RFy-xe5Dxc2wA}PsP>;eqLJwLsmLf z$C=BudowbOSS*~{sR!@g{r&h@fA83g-MiGYPyg2!M{f$hrnDJ3^LJ0cSjhgdS&{pC zYe(*2(=Hx)Id`(3s=~gxX}=8s**SrxNgSwQ0FPr9I9LxJts1&~oGzU_$N2G6xRmea zB~)%qDH|wj#m`~UEROZQvBNyZNjtEWxUM2K1R5|(_TNSC- zeR*jK;{B&R$|+Sh|Kc2`wp;Yuw{NGUeLpL4Pf&U|m;nzUC)||~Z|sGb`3ZJz@2FV# zd~>A#^#tDXcALYU#Ozn=sb!*2IfF$Hic<7Po{G{u9J})NUE5ClG-X*P-SO?wTT*(S zb2zNruiVE@FdD`Y5bz~ns|kY&4hI_tJS+EslnvoNlQt@j6??{#LFfRHj+?>(Ilxdt z;Xx-fIwrApv1s47*M92ZU?%LFgKkRI+P&xY(+RtD>>9ty#Lb_^tT5~_m=d7%u0>Jh z=@`U2(sujOpB5)A-hIA#uYYrKitp)OI%^ls>{&H}H1>V$HhWT-{VA)4Wp3CY$xrA2 zkz$fzz}h2YqS$?AiLTj<77}wt%3B_|kJwRcpYp{^R&*a76>UzbS`)iRKAk`P_r6^i znSDGursd{u|9reDO7ZT@Tg#di29g>nZv8VOv!z#`E*?3(xA*DM$;a57{n?)$e>~Z> z*G`;%b>gP2;{*n(l1oRPK9^PZ+Q)l~Z{7i&a7a*Q7rs9}GP*64=q>J9BG;S+c_cwO zK%C+S;tf2O?3T*alO{>y`kZRcSSw?%;{_^&PXXEipCx$UXK?{k!UiPl?ut}kZw`1LuDw+1)?#&$i%cfIj&%XbEL|y%F+ens_*SPg5oOXxI zVA1ly1VqFGX#qFbXT*~^dMsO=S!IR9hT#G2cmi11Jp;K@5XQsx0Te~*U%#ryEcTZm zacGJC_4<9(tJKmO(rixo>R^s7$Py|xmt^9sKSM~8e9?3ln8{QVD;(#x~jP+*!l0d8|0uGGsvY`Kv2$uKS8 zd{Y4qQ&rPzHx-W)LX<=_IZ_d>q$;;$)V_hMOv-ybrT;D^cbkVqS_mw_Ge^exstJ*X zUzH14n^?0I>0M|QLweoKKu`YkSsUT9rD`Fw272q|bIePQC_1#4CW#DuG)helQi&9s zwM-$OWiE&DWu2SM%k@!S{rh>GZi0D~Fnh$DRV-{n1G6sw>+gt08usN@0a>&XgP4z^ zB+?Dbel?75nR-&wGwqF|E9b`0;bZ$NTknE!JDCr769)|-_XF`-c-#cIuJx#m1ICE); zo{9EBr0bKYutApVuke5^{Tmi=VQM36!hvD!t{s+arhtjY1O>X3B!sSbWff`d+ae2+ zY@sw!ah8j~SBDFR$&sjqxSLi=%9xNWDyR>MfE=dGgiYMS4W+aL`GlnG#651-cmOt; zaig$d7-mn6R%Re-BV8a#{V5|POoNR{sQWY%Rgur-EI`^QsnA?Ksa0o5ebb62i~tQ=2E&5^|5zx@KK7 z!KPY~WnW@Va`!UBA;neCvK_W{fZwik&J_!LJo}wYjd-Y-D^1i*;2U;MbDpa8hY@vT9xCLA$|gkryUObr#@jy~m_qTHK#T z7o>mNJXx|>R}Blf@vk{~cXV1K`uDMD%*Shj z;>nS)YSy^u$O&v%8wo4;nFNbe*m7`AB%RZ)JGX?zh|uKBVM!n%K06Vzl6PaHfhE@mlkvKEa4B0b%$ zIOFuU&y?y-$~g&=qH?)^`u?U=Hp#Lm z%Dt(vI}9$_To+*=Jq%RZ2)tJ0-_+{T8p{qsYxS(JtMX=6;-@86q0IYdDi+;Z#uIT1 zi#Q;>$MIGql11on)z+5S0K z-&m@~PJC9C9FE@~j2={~%PXbo+70g}4?`@#>G8$cL(HEpETTyDc>hO*jqZc_;^SWb z$L-!y`||4D@{$v>SRiQ2377V`D;M~ky!*f^ta^p?#50#q+k@RPklV^?k87gR=VYl`t;kZP znB&J)|1Xv*jm@+1Iys!U^P|(!y*oV|->Svqbnmmn5O>~A3Dkb-ANC37pIx7BPn^g7 zu~@3t_n+L>_KhPwRbQ)FKN_D-l`8v(r=;Y%xgH&k9^AwD`0)Bfl{d$yk+M;Wg^k=V zJ$!0!*PXmMKAgF;-qFGF=+tswBtcEi9cJUj#;!Z9bP^&HuOg@%w-T8P-&Zzy9qlx3)5@qEB2L1Z(#+@AB^tbzNx_vP2y)kb0sNXx7I{aw1 zJ$B`b{gcCkGhwM3MGD)y@K0*@#pB~62HpSh{ji?fx@)y|8Hi;K~&JMZ0-fXaP1Ja=utb`Tz2>M~(VtbJkFk45Py$+ZaU7OZ@; z3f8@-h2Lu}F3>n_8=VI>E-bAXg0#4Z@{Xmda?k(r{qwScAKO;dKUu04f)mu_Oe>Gx z+>Z90yZHIcsp4`9E@))Rb?Gv1q;P9?Z(&+yKcC*!##HHR8Ai)CzB}!U~z)z z`fRA9L_?M%&hcL8X4s_LTj)jSq>~-QbnOsYN({os*0EGo9ZMAne5!WyFP17|HjGM+ zc9+*UUH$Fz&!?r)txy3cpQQl;v&z?5Oe;T2$|k9XZ{dk6L#`{5z4 zL-xPL1n(2b^b`~x5hemII%FwEok=`S?Kc=QDWK*;NXBj~ueIny4@7QD4S)Da#jE)C zhd+H%RGB4JnVR&puvC?7X06o8@v9N(1LN_lSGc*n-syeBrJ>FbXJuAlz%l_W0-mNlh2M*Fah|H$QMZuF@|8POQHi##TXF`|)mPya1 z;-a@g@Lp^JxP~zz^0bp+B}-KinfB|&N0o+MBhR41;vT(>VD)Z?7q@M^xVgQ(k!hs)T9Aw2TLFY+V{ zveetGC0SxfBqPqOr;oW3dDymR!^Vr#Y56v=1W8tEmgA|i(og^(C9(#dRxEnf0`k{` zm9_!4juhz_O(S-&h$VDxF{iE4ELq0HIA@XPX{kxdK(-0;ZnT@sutvbfO|KX8d9cyc zMqamUe$4%1d~k#NdpO>{`S9atsGA~Zds_ql6t@MON*!kzd#Y`L5Gu=bR>;=Q5P3w= z(v#DLy>tZ86qHaS{v%HZ5-TGP?h)a&W>~%<;W_Rr__sw)C966XXc}>xm@VnmqM{xP zgb2DAwO}{~M zqGclC*;~5*_Qx4K_?!1Xp57{Whn5PjjimiCQ^^yx2u<)LtdM4oSd~2@Dco6vaZ!-x zRPJq~!9R;FpwYD5~iY7A$ZsN!6L z#mcui!JSMkbQuSPq|8mQi(BfTYnQshBRz@NrGEr?juY@;P|#ES|C zMwbZ!0Nx0umFyRlu_<|b5O)_iE;=t#LYyV-AtHinQm|iME_IB#Z0Pl*8T_10&H9`) z5D+CMCFw3Q64o*y6E@hntXN|e#1Vw?u(X-X*|lpNQ>`-!6OlG3;QP}XLij!#A1C-MNy{L;N~HkvQd^{HVdW>PgFFA(^D?_Yn;e6*(wGP&s-aAD2 zi0(3mc#L{8L2ARcw3?c4RF%QS)Wq>+PS12D$P7Z2*g>0;DjJb|HlJHW(`g;k(Z@z4 z+R(I8Bl2q)E7&0l?*#g3CBBB>fdHFF&#|`AJP0xY01#mmHD)okBN6LE`Oj8XH(9dueFYJxRu6O8em=zB`Rp%&0$vg(4ra6rs0KQY9c za7Uy#R+~7XF8zu!00U{(Ur7&b$GVmdV7KT;@>}>n_%0Yde8K=v62`_yYd(-r6@K;q a0t^65+0Q<)G5p&A0000# literal 0 HcmV?d00001 diff --git a/addons/EmpyPopTracker/readme/demo.png b/addons/EmpyPopTracker/readme/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..db24c678e886cc87643b64ec01bc83a6d62734ce GIT binary patch literal 22426 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

%S})^feiZ?HGl^wWG|Gt6gB;9TL%CT3Ntw8Lx^# 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 literal 0 HcmV?d00001 From db5445aeb69b3f6e70a7285c1d24b985c7c97ea1 Mon Sep 17 00:00:00 2001 From: Dean James Date: Mon, 13 Jan 2020 23:00:26 +0000 Subject: [PATCH 4/8] Added EmpyPopTracker to addons.xml. --- addons/addons.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/addons.xml b/addons/addons.xml index f09c2cb2d..dfc12b02d 100644 --- a/addons/addons.xml +++ b/addons/addons.xml @@ -205,6 +205,13 @@ https://github.com/tehkrizz/Lua/issues http://www.ffxiah.com/player/Bahamut/Krizz + + EmpyPopTracker + Dean James (Xurion of Bismarck) + Tracks items and key items for popping Empyrean NMs in Abyssea, such as Briareus, Apademak and Sobek. + https://github.com/xurion/ffxi-empy-pop-tracker/issues + https://www.ffxiah.com/forum/topic/54376/empyrean-pop-tracker-addon-10-years-late/ + Enemybar mmckee From 1cebfdbb2ce52a37e5d44b0ed6834a5c48eec3eb Mon Sep 17 00:00:00 2001 From: Dean James Date: Mon, 27 Jan 2020 22:50:37 +0000 Subject: [PATCH 5/8] Double quotes to singles. Fixed issue with ucwords where it would return a list. Futureproofed owns_items function. Referencing resources by name. Removed add_to_chat function and moved chat mode to settings. Removed unnecessary validation from generate_info function. Removed BG URL from each data file and inferred URL by NM name. Corrected indent size in data files. PR comments addressed. --- addons/EmpyPopTracker/EmpyPopTracker.lua | 382 ++++++++++----------- addons/EmpyPopTracker/nms/README.md | 83 ++--- addons/EmpyPopTracker/nms/alfard.lua | 53 ++- addons/EmpyPopTracker/nms/apademak.lua | 51 ++- addons/EmpyPopTracker/nms/azdaja.lua | 13 +- addons/EmpyPopTracker/nms/briareus.lua | 71 ++-- addons/EmpyPopTracker/nms/bukhis.lua | 55 +-- addons/EmpyPopTracker/nms/carabosse.lua | 49 ++- addons/EmpyPopTracker/nms/chloris.lua | 155 +++++---- addons/EmpyPopTracker/nms/cirein-croin.lua | 35 +- addons/EmpyPopTracker/nms/dragua.lua | 13 +- addons/EmpyPopTracker/nms/glavoid.lua | 97 +++--- addons/EmpyPopTracker/nms/index.lua | 36 +- addons/EmpyPopTracker/nms/isgebind.lua | 13 +- addons/EmpyPopTracker/nms/itzpapalotl.lua | 57 ++- addons/EmpyPopTracker/nms/kukulkan.lua | 71 ++-- addons/EmpyPopTracker/nms/orthrus.lua | 51 ++- addons/EmpyPopTracker/nms/sedna.lua | 35 +- addons/EmpyPopTracker/nms/sobek.lua | 57 ++- addons/EmpyPopTracker/nms/ulhuadshi.lua | 35 +- 20 files changed, 691 insertions(+), 721 deletions(-) diff --git a/addons/EmpyPopTracker/EmpyPopTracker.lua b/addons/EmpyPopTracker/EmpyPopTracker.lua index 6fd546248..cb11451aa 100644 --- a/addons/EmpyPopTracker/EmpyPopTracker.lua +++ b/addons/EmpyPopTracker/EmpyPopTracker.lua @@ -27,13 +27,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] _addon.name = "Empy Pop Tracker" -_addon.author = "Dean James (Xurion of Bismarck)" -_addon.commands = { "ept", "empypoptracker" } -_addon.version = "2.0.0" +_addon.author = 'Dean James (Xurion of Bismarck)' +_addon.commands = { 'ept', 'empypoptracker' } +_addon.version = '2.0.0' -config = require("config") -res = require("resources") -nm_data = require("nms/index") +config = require('config') +res = require('resources') +nm_data = require('nms/index') active = false @@ -52,288 +52,272 @@ defaults.text.bg.red = 0 defaults.text.bg.visible = true defaults.text.padding = 8 defaults.text.text = {} -defaults.text.text.font = "Consolas" +defaults.text.text.font = 'Consolas' defaults.text.text.size = 10 -defaults.tracking = "briareus" +defaults.tracking = 'briareus' defaults.visible = true +defaults.add_to_chat_mode = 8 EmpyPopTracker.settings = config.load(defaults) -EmpyPopTracker.text = require("texts").new(EmpyPopTracker.settings.text, EmpyPopTracker.settings) +EmpyPopTracker.text = require('texts').new(EmpyPopTracker.settings.text, EmpyPopTracker.settings) colors = {} -colors.success = "\\cs(100,255,100)" -colors.danger = "\\cs(255,50,50)" -colors.warning = "\\cs(255,170,0)" -colors.close = "\\cr" +colors.success = '\\cs(100,255,100)' +colors.danger = '\\cs(255,50,50)' +colors.warning = '\\cs(255,170,0)' +colors.close = '\\cr' function owns_item(id, items) - local owned = false - - -- Loop maximum 80 times over all slots. 80 indexes are returned for each bag regardless of max capacity. - for i = 1, 80, 1 do - if items.safe[i].id == id or - items.safe2[i].id == id or - items.locker[i].id == id or - items.sack[i].id == id or - items.satchel[i].id == id or - items.inventory[i].id == id or - items.storage[i].id == id then - owned = true - break - end + for _, bag in ipairs(items) do + for _, item in ipairs(bag) do + if item.id == id then + return true + end end + end - return owned + return false end function owns_key_item(id, items) - local owned = false + local owned = false - for _, item_id in pairs(items) do - if item_id == id then - owned = true - break - end + for _, item_id in pairs(items) do + if item_id == id then + owned = true + break end + end - return owned + return owned end function item_treasure_pool_count(id, treasure) - local count = 0 + local count = 0 - for _, item in pairs(treasure) do - if item.item_id == id then - count = count + 1 - end + for _, item in pairs(treasure) do + if item.item_id == id then + count = count + 1 end + end - return count + return count end function ucwords(str) - return string.gsub(str, "(%a)([%w_']*)", function(first, rest) - return first:upper() .. rest:lower() - end) + local result = string.gsub(str, '(%a)([%w_\']*)', function(first, rest) + return first:upper() .. rest:lower() + end) + + return result end function get_indent(depth) - return string.rep(" ", depth) + return string.rep(' ', depth) end function generate_text(data, key_items, items, depth) - local text = depth == 1 and data.name or "" - for _, pop in pairs(data.pops) do - local resource - local item_scope - local owns_pop - local in_pool_count = 0 - local item_identifier = '' - - if pop.type == 'key item' then - resource = res.key_items[pop.id] - owns_pop = owns_key_item(pop.id, key_items) - item_identifier = 'Ж ' - else - resource = res.items[pop.id] - owns_pop = owns_item(pop.id, items) - in_pool_count = item_treasure_pool_count(pop.id, items.treasure) - end - - local pop_name = 'Unknown pop' - if resource then - pop_name = ucwords(resource.en) - end - - --separator line for each top-level mob - if depth == 1 then - text = text .. "\n" - end - - local item_colour - if owns_pop then - item_colour = colors.success - else - item_colour = colors.danger - end - - local pool_notification = '' - if in_pool_count > 0 then - pool_notification = colors.warning .. ' [' .. in_pool_count .. ']' .. colors.close - end - text = text .. "\n" .. get_indent(depth) .. pop.dropped_from.name .. "\n" .. get_indent(depth) .. ' >> ' .. item_colour .. item_identifier .. pop_name .. colors.close .. pool_notification - if pop.dropped_from.pops then - text = text .. generate_text(pop.dropped_from, key_items, items, depth + 1) - end + local text = depth == 1 and data.name or '' + for _, pop in pairs(data.pops) do + local resource + local item_scope + local owns_pop + local in_pool_count = 0 + local item_identifier = '' + + if pop.type == 'key item' then + resource = res.key_items[pop.id] + owns_pop = owns_key_item(pop.id, key_items) + item_identifier = 'Ж ' + else + resource = res.items[pop.id] + owns_pop = owns_item(pop.id, items) + in_pool_count = item_treasure_pool_count(pop.id, items.treasure) end - return text -end - -EmpyPopTracker.add_to_chat = function(message) - if type(message) ~= 'string' then - error('add_to_chat requires the message arg to be a string') + local pop_name = 'Unknown pop' + if resource then + pop_name = ucwords(resource.name) end - windower.add_to_chat(8, message) -end + --separator line for each top-level mob + if depth == 1 then + text = text .. '\n' + end -EmpyPopTracker.generate_info = function(nm, key_items, items) - local nm_type = type(nm) - if nm_type ~= 'table' then - error('generate_info requires the nm arg to be a table, but got ' .. nm_type .. ' instead') + local item_colour + if owns_pop then + item_colour = colors.success + else + item_colour = colors.danger end - local info = { - has_all_kis = true, - text = "" - } + local pool_notification = '' + if in_pool_count > 0 then + pool_notification = colors.warning .. ' [' .. in_pool_count .. ']' .. colors.close + end + text = text .. '\n' .. get_indent(depth) .. pop.dropped_from.name .. '\n' .. get_indent(depth) .. ' >> ' .. item_colour .. item_identifier .. pop_name .. colors.close .. pool_notification + if pop.dropped_from.pops then + text = text .. generate_text(pop.dropped_from, key_items, items, depth + 1) + end + end - if nm.pops then - for _, key_item_data in pairs(nm.pops) do - local has_pop_ki = owns_key_item(key_item_data.id, key_items) + return text +end - if not has_pop_ki then - info.has_all_kis = false - end - end +EmpyPopTracker.generate_info = function(nm, key_items, items) + local nm_type = type(nm) + local info = { + has_all_kis = true, + text = '' + } + + if nm.pops then + for _, key_item_data in pairs(nm.pops) do + local has_pop_ki = owns_key_item(key_item_data.id, key_items) + + if not has_pop_ki then + info.has_all_kis = false + end end + end - info.text = generate_text(nm, key_items, items, 1) + info.text = generate_text(nm, key_items, items, 1) - return info + return info end function find_nms(query) - local matching_nms = {} - local lower_query = query:lower() - for _, nm in pairs(nm_data) do - local result = string.match(nm.name:lower(), '(.*' .. lower_query .. '.*)') - if result then - table.insert(matching_nms, result) - end + local matching_nms = {} + local lower_query = query:lower() + for _, nm in pairs(nm_data) do + local result = string.match(nm.name:lower(), '(.*' .. lower_query .. '.*)') + if result then + table.insert(matching_nms, result) end - return matching_nms + end + return matching_nms end -windower.register_event("addon command", function(command, ...) - if commands[command] then - commands[command](...) - else - commands.help() - end +windower.register_event('addon command', function(command, ...) + if commands[command] then + commands[command](...) + else + commands.help() + end end) commands = {} commands.track = function(...) - local args = {...} - local nm_name = args[1] - local matching_nm_names = find_nms(nm_name) - - if #matching_nm_names == 0 then - EmpyPopTracker.add_to_chat('Unable to find a NM using: "' .. nm_name .. '"') - elseif #matching_nm_names > 1 then - EmpyPopTracker.add_to_chat('"' .. nm_name .. '" matches ' .. #matching_nm_names .. ' NMs. Please be more explicit:') - for key, matching_file_name in pairs(matching_nm_names) do - EmpyPopTracker.add_to_chat(' Match ' .. key .. ': ' .. ucwords(matching_file_name)) - end - else - active = true - EmpyPopTracker.add_to_chat("Now tracking: " .. ucwords(matching_nm_names[1])) - EmpyPopTracker.settings.tracking = matching_nm_names[1] - EmpyPopTracker.update() - commands.show() + local args = {...} + local nm_name = args[1] + local matching_nm_names = find_nms(nm_name) + + if #matching_nm_names == 0 then + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Unable to find a NM using: "' .. nm_name .. '"') + elseif #matching_nm_names > 1 then + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '"' .. nm_name .. '" matches ' .. #matching_nm_names .. ' NMs. Please be more explicit:') + for key, matching_file_name in pairs(matching_nm_names) do + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, ' Match ' .. key .. ': ' .. ucwords(matching_file_name)) end + else + active = true + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Now tracking: ' .. ucwords(matching_nm_names[1])) + EmpyPopTracker.settings.tracking = matching_nm_names[1] + EmpyPopTracker.update() + commands.show() + end end commands.t = commands.track commands.hide = function() - active = false - EmpyPopTracker.text:visible(false) - EmpyPopTracker.settings.visible = false - EmpyPopTracker.settings:save() + active = false + EmpyPopTracker.text:visible(false) + EmpyPopTracker.settings.visible = false + EmpyPopTracker.settings:save() end commands.show = function() - active = true - EmpyPopTracker.text:visible(true) - EmpyPopTracker.settings.visible = true - EmpyPopTracker.settings:save() - EmpyPopTracker.update() + active = true + EmpyPopTracker.text:visible(true) + EmpyPopTracker.settings.visible = true + EmpyPopTracker.settings:save() + EmpyPopTracker.update() end commands.help = function() - EmpyPopTracker.add_to_chat("---Empy Pop Tracker---") - EmpyPopTracker.add_to_chat("Available commands:") - EmpyPopTracker.add_to_chat("//ept t|track briareus - tracks Briareus pops (partial names such as apadem work too!)") - EmpyPopTracker.add_to_chat("//ept hide - hides the UI") - EmpyPopTracker.add_to_chat("//ept show - shows the UI") - EmpyPopTracker.add_to_chat("//ept list - lists all trackable NMs") - EmpyPopTracker.add_to_chat("//ept help - displays this help") + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '---Empy Pop Tracker---') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Available commands:') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept track briareus - tracks Briareus pops (partial names such as apadem work too!)') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept hide - hides the UI') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept show - shows the UI') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept list - lists all trackable NMs') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept help - displays this help') end commands.list = function() - EmpyPopTracker.add_to_chat("---Empy Pop Tracker---") - EmpyPopTracker.add_to_chat("Trackable NMs:") - for _, nm in pairs(nm_data) do - EmpyPopTracker.add_to_chat(ucwords(nm.name)) - end + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '---Empy Pop Tracker---') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Trackable NMs:') + for _, nm in pairs(nm_data) do + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, ucwords(nm.name)) + end end commands.bg = function() - local tracking_nm = nm_data[EmpyPopTracker.settings.tracking] - windower.open_url(tracking_nm.bg_url) + local tracking_nm = nm_data[EmpyPopTracker.settings.tracking] + local url = 'https://www.bg-wiki.com/bg/' .. tracking_nm.name + windower.open_url(url) end EmpyPopTracker.update = function() - local key_items = windower.ffxi.get_key_items() - local items = windower.ffxi.get_items() - local tracked_nm_data = nm_data[EmpyPopTracker.settings.tracking] - local generated_info = EmpyPopTracker.generate_info(tracked_nm_data, key_items, items) - EmpyPopTracker.text:text(generated_info.text) - if generated_info.has_all_kis then - EmpyPopTracker.text:bg_color(0, 75, 0) - else - EmpyPopTracker.text:bg_color(0, 0, 0) - end - if EmpyPopTracker.settings.visible then - EmpyPopTracker.text:visible(true) - end + local key_items = windower.ffxi.get_key_items() + local items = windower.ffxi.get_items() + local tracked_nm_data = nm_data[EmpyPopTracker.settings.tracking] + local generated_info = EmpyPopTracker.generate_info(tracked_nm_data, key_items, items) + EmpyPopTracker.text:text(generated_info.text) + if generated_info.has_all_kis then + EmpyPopTracker.text:bg_color(0, 75, 0) + else + EmpyPopTracker.text:bg_color(0, 0, 0) + end + if EmpyPopTracker.settings.visible then + EmpyPopTracker.text:visible(true) + end end windower.register_event('load', function() - if windower.ffxi.get_info().logged_in and EmpyPopTracker.settings.visible then - active = true - EmpyPopTracker.update() - end + if windower.ffxi.get_info().logged_in and EmpyPopTracker.settings.visible then + active = true + EmpyPopTracker.update() + end end) windower.register_event('add item', 'remove item', function() - if active then - EmpyPopTracker.update() - end + if active then + EmpyPopTracker.update() + end end) windower.register_event('incoming chunk', function(id) - --0x055: KI update - --0x0D2: Treasure pool addition - --0x0D3: Treasure pool lot/drop - if active and id == 0x055 or id == 0x0D2 or id == 0x0D3 then - EmpyPopTracker.update() - end + --0x055: KI update + --0x0D2: Treasure pool addition + --0x0D3: Treasure pool lot/drop + if active and id == 0x055 or id == 0x0D2 or id == 0x0D3 then + EmpyPopTracker.update() + end end) windower.register_event('login', function() - if EmpyPopTracker.settings.visible then - EmpyPopTracker.text:visible(true) - active = true - end + if EmpyPopTracker.settings.visible then + EmpyPopTracker.text:visible(true) + active = true + end end) windower.register_event('logout', function() - EmpyPopTracker.text:visible(false) - active = false + EmpyPopTracker.text:visible(false) + active = false end) return EmpyPopTracker diff --git a/addons/EmpyPopTracker/nms/README.md b/addons/EmpyPopTracker/nms/README.md index bad2e262b..720d0a7d4 100644 --- a/addons/EmpyPopTracker/nms/README.md +++ b/addons/EmpyPopTracker/nms/README.md @@ -2,25 +2,24 @@ The data structure for each trackable NM uses a series of nested NM entities. A standard NM entity contains the following data: -| Key | Type | Required? | Description | -| ------------------- | --------- | --------- | --------------------------------- | -| name | String | Required | Name of the NM | -| bg_url | String | Required | URL of the bgwiki page for the NM | -| pops | Table | Optional | The pop information for the NM | -| pops{}.id | Number | Required | The ID of the item/key item | -| pops{}.type | String | Required | Either "key item" or "item" | -| pops{}.dropped_from | NM Entity | Required | A nested set of NM information | +| Key | Type | Required? | Description | +| ------------------- | --------- | --------- | ------------------------------ | +| name | String | Required | Name of the NM | +| pops | Table | Optional | The pop information for the NM | +| pops{}.id | Number | Required | The ID of the item/key item | +| pops{}.type | String | Required | Either "key item" or "item" | +| pops{}.dropped_from | NM Entity | Required | A nested set of NM information | A simple example of the above would be: ```lua { - name = "Azdaja", - pops = { { - id = 1531, --Vacant Bugard Eye - type = "key item", - dropped_from = { name = "Deelgeed, Timed (F-9/F-10)" } - } } + name = 'Azdaja', + pops = { { + id = 1531, --Vacant Bugard Eye + type = 'key item', + dropped_from = { name = 'Deelgeed, Timed (F-9/F-10)' } + } } } ``` @@ -28,34 +27,36 @@ A larger example with multiple nested entites: ```lua { - name = "Bukhis", - pops = { { - id = 1508, --Ingrown Taurus Nail - type = "key item", - dropped_from = { - name = "Khalkotaur, Forced (F-4)", - pops = { { - id = 3098, --Gnarled Taurus Horn - type = "item", - dropped_from = { name = "Aestutaur (G-9/G-10)" } - } } - }, { - id = 1509, --Ossified Gargouille Hand - type = "key item", - dropped_from = { - name = "Quasimodo, Forced (F-4)", - pops = { { - id = 3099, --Gargouille Stone - type = "item", - dropped_from = { name = "Gruesome Gargouille (F-10/G-10)" } - } } - } - }, { - id = 1510, --Imbrued Vampyr Fang - type = "key item", - dropped_from = { name = "Lord Varney, Timed (G-10/H-10)" } + name = 'Bukhis', + pops = { { + id = 1508, --Ingrown Taurus Nail + type = 'key item', + dropped_from = { + name = 'Khalkotaur, Forced (F-4)', + pops = { { + id = 3098, --Gnarled Taurus Horn + type = 'item', + dropped_from = { name = 'Aestutaur (G-9/G-10)' } + } } + }, { + id = 1509, --Ossified Gargouille Hand + type = 'key item', + dropped_from = { + name = 'Quasimodo, Forced (F-4)', + pops = { { + id = 3099, --Gargouille Stone + type = 'item', + dropped_from = { + name = 'Gruesome Gargouille (F-10/G-10)' + } } } - } + } + }, { + id = 1510, --Imbrued Vampyr Fang + type = 'key item', + dropped_from = { name = 'Lord Varney, Timed (G-10/H-10)' } + } } + } } ``` diff --git a/addons/EmpyPopTracker/nms/alfard.lua b/addons/EmpyPopTracker/nms/alfard.lua index 88dedb7a2..689d4ddcc 100644 --- a/addons/EmpyPopTracker/nms/alfard.lua +++ b/addons/EmpyPopTracker/nms/alfard.lua @@ -27,33 +27,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Alfard", - bg_url = 'https://www.bg-wiki.com/bg/Alfard', - pops = { { - id = 1530, --Venomous hydra fang - type = "key item", + name = 'Alfard', + pops = { { + id = 1530, --Venomous hydra fang + type = 'key item', + dropped_from = { + name = 'Ningishzida, Forced (I-7/I-8)', + pops = { { + id = 3262, --Jaculus Wing + type = 'item', + dropped_from = { name = 'Jaculus, Timed (I-8)' } + }, { + id = 3261, --Minaruja Skull + type = 'item', dropped_from = { - name = "Ningishzida, Forced (I-7/I-8)", - pops = { { - id = 3262, --Jaculus Wing - type = "item", - dropped_from = { name = "Jaculus, Timed (I-8)" } - }, { - id = 3261, --Minaruja Skull - type = "item", - dropped_from = { - name = "Minaruja, Forced (I-10)", - pops = { { - id = 3267, --Pursuer's Wing - type = "item", - dropped_from = { name = "Faunus Wyvern (I-9)" } - } } - } - }, { - id = 3268, --High-Quality Wivre Hide - type = "item", - dropped_from = { name = "Glade Wivre (I-8)" } - } } + name = 'Minaruja, Forced (I-10)', + pops = { { + id = 3267, --Pursuer's Wing + type = 'item', + dropped_from = { name = 'Faunus Wyvern (I-9)' } + } } } - } } + }, { + id = 3268, --High-Quality Wivre Hide + type = 'item', + dropped_from = { name = 'Glade Wivre (I-8)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/apademak.lua b/addons/EmpyPopTracker/nms/apademak.lua index f3c37a21e..63315f568 100644 --- a/addons/EmpyPopTracker/nms/apademak.lua +++ b/addons/EmpyPopTracker/nms/apademak.lua @@ -27,32 +27,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Apademak", - bg_url = 'https://www.bg-wiki.com/bg/Apademak', - pops = { { - id = 1525, --Torn Khimaira Wing - type = "key item", + name = 'Apademak', + pops = { { + id = 1525, --Torn Khimaira Wing + type = 'key item', + dropped_from = { + name = 'Dhorme Khimaira, Forced (F-7)', + pops = { { + id = 3246, --Snow God Core + type = 'item', dropped_from = { - name = "Dhorme Khimaira, Forced (F-7)", - pops = { { - id = 3246, --Snow God Core - type = "item", - dropped_from = { - name = "Upas-Kamuy, Forced (G-5)", - pops = { { - id = 3252, --Gelid Arm - dropped_from = { name = "Snowflake (G-5)" } - } } - } - }, { - id = 3247, --Sisyphus Fragment - type = "item", - dropped_from = { name = "Sisyphus, Timed (F-6/G-6)" } - }, { - id = 3253, --High-quality marid hide - type = "item", - dropped_from = { name = "Olyphant (F-6)" } - } } + name = 'Upas-Kamuy, Forced (G-5)', + pops = { { + id = 3252, --Gelid Arm + dropped_from = { name = 'Snowflake (G-5)' } + } } } - } } + }, { + id = 3247, --Sisyphus Fragment + type = 'item', + dropped_from = { name = 'Sisyphus, Timed (F-6/G-6)' } + }, { + id = 3253, --High-quality marid hide + type = 'item', + dropped_from = { name = 'Olyphant (F-6)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/azdaja.lua b/addons/EmpyPopTracker/nms/azdaja.lua index 28716728a..b6eb58f1d 100644 --- a/addons/EmpyPopTracker/nms/azdaja.lua +++ b/addons/EmpyPopTracker/nms/azdaja.lua @@ -27,11 +27,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Azdaja", - bg_url = 'https://www.bg-wiki.com/bg/Azdaja', - pops = { { - id = 1531, --Vacant Bugard Eye - type = "key item", - dropped_from = { name = "Deelgeed, Timed (F-9/F-10)" } - } } + name = 'Azdaja', + pops = { { + id = 1531, --Vacant Bugard Eye + type = 'key item', + dropped_from = { name = 'Deelgeed, Timed (F-9/F-10)' } + } } } diff --git a/addons/EmpyPopTracker/nms/briareus.lua b/addons/EmpyPopTracker/nms/briareus.lua index 141f27b64..553350cbd 100644 --- a/addons/EmpyPopTracker/nms/briareus.lua +++ b/addons/EmpyPopTracker/nms/briareus.lua @@ -27,40 +27,39 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Briareus", - bg_url = 'https://www.bg-wiki.com/bg/Briareus', - pops = { { - id = 1482, --Dented Gigas Shield - type = "key item", - dropped_from = { - name = "Adamastor, Forced (C-4)", - pops = { { - id = 2894, --Trophy Shield - type = "item", - dropped_from = { name = "Bathyal Gigas (C-5/D-5)" } - } } - } - }, { - id = 1484, --Severed Gigas Collar - type = "key item", - dropped_from = { - name = "Grandgousier, Forced (F-10)", - pops = { { - id = 2896, --Massive Armband - type = "item", - dropped_from = { name = "Demersal Gigas (E-9/F-9)" } - } } - } - }, { - id = 1483, --Warped Gigas Armband - type = "key item", - dropped_from = { - name = "Pantagruel, Forced (F-7)", - pops = { { - id = 2895, --Oversized Sock - type = "item", - dropped_from = { name = "Hadal Gigas (F-6/F-7)" } - } } - } - } } + name = 'Briareus', + pops = { { + id = 1482, --Dented Gigas Shield + type = 'key item', + dropped_from = { + name = 'Adamastor, Forced (C-4)', + pops = { { + id = 2894, --Trophy Shield + type = 'item', + dropped_from = { name = 'Bathyal Gigas (C-5/D-5)' } + } } + } + }, { + id = 1484, --Severed Gigas Collar + type = 'key item', + dropped_from = { + name = 'Grandgousier, Forced (F-10)', + pops = { { + id = 2896, --Massive Armband + type = 'item', + dropped_from = { name = 'Demersal Gigas (E-9/F-9)' } + } } + } + }, { + id = 1483, --Warped Gigas Armband + type = 'key item', + dropped_from = { + name = 'Pantagruel, Forced (F-7)', + pops = { { + id = 2895, --Oversized Sock + type = 'item', + dropped_from = { name = 'Hadal Gigas (F-6/F-7)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/bukhis.lua b/addons/EmpyPopTracker/nms/bukhis.lua index 4197cc0eb..019864b73 100644 --- a/addons/EmpyPopTracker/nms/bukhis.lua +++ b/addons/EmpyPopTracker/nms/bukhis.lua @@ -27,33 +27,34 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Bukhis", - bg_url = 'https://www.bg-wiki.com/bg/Bukhis', - pops = { { - id = 1508, --Ingrown Taurus Nail - type = "key item", + name = 'Bukhis', + pops = { { + id = 1508, --Ingrown Taurus Nail + type = 'key item', + dropped_from = { + name = 'Khalkotaur, Forced (F-4)', + pops = { { + id = 3098, --Gnarled Taurus Horn + type = 'item', + dropped_from = { name = 'Aestutaur (G-9/G-10)' } + } } + } + }, { + id = 1509, --Ossified Gargouille Hand + type = 'key item', + dropped_from = { + name = 'Quasimodo, Forced (F-4)', + pops = { { + id = 3099, --Gargouille Stone + type = 'item', dropped_from = { - name = "Khalkotaur, Forced (F-4)", - pops = { { - id = 3098, --Gnarled Taurus Horn - type = "item", - dropped_from = { name = "Aestutaur (G-9/G-10)" } - } } + name = 'Gruesome Gargouille (F-10/G-10)' } - }, { - id = 1509, --Ossified Gargouille Hand - type = "key item", - dropped_from = { - name = "Quasimodo, Forced (F-4)", - pops = { { - id = 3099, --Gargouille Stone - type = "item", - dropped_from = { name = "Gruesome Gargouille (F-10/G-10)" } - } } - } - }, { - id = 1510, --Imbrued Vampyr Fang - type = "key item", - dropped_from = { name = "Lord Varney, Timed (G-10/H-10)" } - } } + } } + } + }, { + id = 1510, --Imbrued Vampyr Fang + type = 'key item', + dropped_from = { name = 'Lord Varney, Timed (G-10/H-10)' } + } } } diff --git a/addons/EmpyPopTracker/nms/carabosse.lua b/addons/EmpyPopTracker/nms/carabosse.lua index 7f4c59c86..97b0c9c5e 100644 --- a/addons/EmpyPopTracker/nms/carabosse.lua +++ b/addons/EmpyPopTracker/nms/carabosse.lua @@ -27,29 +27,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Carabosse", - bg_url = 'https://www.bg-wiki.com/bg/Carabosse', - pops = { { - id = 1485, --Pellucid Fly Eye - type = "key item", - dropped_from = { - name = "La Theine Liege, Forced (I-7)", - pops = { { - id = 2897, --Transparent Insect Wing - type = "item", - dropped_from = { name = "Plateau Glider (H-7)" } - } } - } - }, { - id = 1486, --Shimmering Pixie Pinion - type = "key item", - dropped_from = { - name = "Baba Yaga, Forced (H-7)", - pops = { { - id = 2898, --Piceous Scale - type = "item", - dropped_from = { name = "Farfadet (H-7)" } - } } - } - } } + name = 'Carabosse', + pops = { { + id = 1485, --Pellucid Fly Eye + type = 'key item', + dropped_from = { + name = 'La Theine Liege, Forced (I-7)', + pops = { { + id = 2897, --Transparent Insect Wing + type = 'item', + dropped_from = { name = 'Plateau Glider (H-7)' } + } } + } + }, { + id = 1486, --Shimmering Pixie Pinion + type = 'key item', + dropped_from = { + name = 'Baba Yaga, Forced (H-7)', + pops = { { + id = 2898, --Piceous Scale + type = 'item', + dropped_from = { name = 'Farfadet (H-7)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/chloris.lua b/addons/EmpyPopTracker/nms/chloris.lua index 7695cd0e0..78dbaeacc 100644 --- a/addons/EmpyPopTracker/nms/chloris.lua +++ b/addons/EmpyPopTracker/nms/chloris.lua @@ -27,88 +27,87 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Chloris", - bg_url = 'https://www.bg-wiki.com/bg/Chloris', - pops = { { - id = 1470, --Gory Scorpion Claw - type = "key item", + name = 'Chloris', + pops = { { + id = 1470, --Gory Scorpion Claw + type = 'key item', + dropped_from = { + name = 'Hedetet, Forced (F-7)', + pops = { { + id = 2921, --Venomous Scorpion Stinger + type = 'item', + dropped_from = { name = 'Canyon Scorpion (F-7)' } + }, { + id = 2948, --Acidic Humus + type = 'item', dropped_from = { - name = "Hedetet, Forced (F-7)", - pops = { { - id = 2921, --Venomous Scorpion Stinger - type = "item", - dropped_from = { name = "Canyon Scorpion (F-7)" } - }, { - id = 2948, --Acidic Humus - type = "item", - dropped_from = { - name = "Gancanagh, Forced (H-8)", - pops = { { - id = 2920, --Alkaline Humus - type = "item", - dropped_from = { name = "Pachypodium (H-8)" } - } } - } - } } + name = 'Gancanagh, Forced (H-8)', + pops = { { + id = 2920, --Alkaline Humus + type = 'item', + dropped_from = { name = 'Pachypodium (H-8)' } + } } } - }, { - id = 1469, --Torn Bat Wing - type = "key item", + } } + } + }, { + id = 1469, --Torn Bat Wing + type = 'key item', + dropped_from = { + name = 'Treble Noctules, Forced (I-9)', + pops = { { + id = 2919, --Bloody Fang + type = 'item', + dropped_from = { name = 'Blood Bat (I-9)' } + }, { + id = 2947, --Exorcised Skull + type = 'item', dropped_from = { - name = "Treble Noctules, Forced (I-9)", - pops = { { - id = 2919, --Bloody Fang - type = "item", - dropped_from = { name = "Blood Bat (I-9)" } - }, { - id = 2947, --Exorcised Skull - type = "item", - dropped_from = { - name = "Cannered Noz, Forced (F-6)", - pops = { { - id = 2918, --Baleful Skull - type = "item", - dropped_from = { name = "Caoineag (F-6)" } - } } - } - } } + name = 'Cannered Noz, Forced (F-6)', + pops = { { + id = 2918, --Baleful Skull + type = 'item', + dropped_from = { name = 'Caoineag (F-6)' } + } } } - }, { - id = 1468, --Veinous Hecteyes Eyelid - type = "key item", + } } + } + }, { + id = 1468, --Veinous Hecteyes Eyelid + type = 'key item', + dropped_from = { + name = 'Ophanim, Forced (G-9)', + pops = { { + id = 2946, --Tarnished Pincer + type = 'item', dropped_from = { - name = "Ophanim, Forced (G-9)", - pops = { { - id = 2946, --Tarnished Pincer - type = "item", - dropped_from = { - name = "Vetehinen, Forced (H-10)", - pops = { { - id = 2916, --High-quality Limule Pincer - type = "item", - dropped_from = { name = "Gulch Limule (H-10)" } - }, { - id = 2917, --Bloodshot Hecteye - type = "item", - dropped_from = { name = "Beholder (G-9)" } - }, { - id = 2945, --Shriveled Wing - type = "item", - dropped_from = { - name = "Halimede, Forced (G-12)", - pops = { { - id = 2915, --High-quality Clionid Wing - type = "item", - dropped_from = { name = "Gully Clionid (G-12)" } - } } - } - } } - } - } } + name = 'Vetehinen, Forced (H-10)', + pops = { { + id = 2916, --High-quality Limule Pincer + type = 'item', + dropped_from = { name = 'Gulch Limule (H-10)' } + }, { + id = 2917, --Bloodshot Hecteye + type = 'item', + dropped_from = { name = 'Beholder (G-9)' } + }, { + id = 2945, --Shriveled Wing + type = 'item', + dropped_from = { + name = 'Halimede, Forced (G-12)', + pops = { { + id = 2915, --High-quality Clionid Wing + type = 'item', + dropped_from = { name = 'Gully Clionid (G-12)' } + } } + } + } } } - }, { - id = 1471, --Mossy Adamantoise Shell - type = "key item", - dropped_from = { name = "Chukwa, Timed (F-5)" } - } } + } } + } + }, { + id = 1471, --Mossy Adamantoise Shell + type = 'key item', + dropped_from = { name = 'Chukwa, Timed (F-5)' } + } } } diff --git a/addons/EmpyPopTracker/nms/cirein-croin.lua b/addons/EmpyPopTracker/nms/cirein-croin.lua index 78354bcd6..7a8a40af7 100644 --- a/addons/EmpyPopTracker/nms/cirein-croin.lua +++ b/addons/EmpyPopTracker/nms/cirein-croin.lua @@ -27,22 +27,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Cirein-Croin", - bg_url = 'https://www.bg-wiki.com/bg/Cirein-croin', - pops = { { - id = 1504, --Glistening Orobon Liver - type = "key item", - dropped_from = { - name = "Cep-Kamuy, Forced (F-4)", - pops = { { - id = 3089, --Orobon Cheekmeat - type = "item", - dropped_from = { name = "Ancient Orobon (F-5)" } - } } - } - }, { - id = 1505, --Doffed Poroggo Hat - type = "key item", - dropped_from = { name = "Heqet, Timed (I-6)" } - } } + name = 'Cirein-croin', + pops = { { + id = 1504, --Glistening Orobon Liver + type = 'key item', + dropped_from = { + name = 'Cep-Kamuy, Forced (F-4)', + pops = { { + id = 3089, --Orobon Cheekmeat + type = 'item', + dropped_from = { name = 'Ancient Orobon (F-5)' } + } } + } + }, { + id = 1505, --Doffed Poroggo Hat + type = 'key item', + dropped_from = { name = 'Heqet, Timed (I-6)' } + } } } diff --git a/addons/EmpyPopTracker/nms/dragua.lua b/addons/EmpyPopTracker/nms/dragua.lua index c584499ca..aa841e076 100644 --- a/addons/EmpyPopTracker/nms/dragua.lua +++ b/addons/EmpyPopTracker/nms/dragua.lua @@ -27,11 +27,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Dragua", - bg_url = 'https://www.bg-wiki.com/bg/Dragua', - pops = { { - id = 1521, --Bloodied Dragon Ear - type = "key item", - dropped_from = { name = "Hazhdiha, Timed (H-10)" } - } } + name = 'Dragua', + pops = { { + id = 1521, --Bloodied Dragon Ear + type = 'key item', + dropped_from = { name = 'Hazhdiha, Timed (H-10)' } + } } } diff --git a/addons/EmpyPopTracker/nms/glavoid.lua b/addons/EmpyPopTracker/nms/glavoid.lua index 067d2a345..3acf9b513 100644 --- a/addons/EmpyPopTracker/nms/glavoid.lua +++ b/addons/EmpyPopTracker/nms/glavoid.lua @@ -27,57 +27,56 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Glavoid", - bg_url = 'https://www.bg-wiki.com/bg/Glavoid', - pops = { { - id = 1473, --Sodden Sandworm Husk - type = "key item", - dropped_from = { name = "Minhocao, Timed (I-6)" } - }, { - id = 1475, --Sticky Gnat Wing - type = "key item", - dropped_from = { name = "Adze, Timed (G-5)" } - }, { - id = 1472, --Fat-lined Cockatrice Skin - type = "key item", + name = 'Glavoid', + pops = { { + id = 1473, --Sodden Sandworm Husk + type = 'key item', + dropped_from = { name = 'Minhocao, Timed (I-6)' } + }, { + id = 1475, --Sticky Gnat Wing + type = 'key item', + dropped_from = { name = 'Adze, Timed (G-5)' } + }, { + id = 1472, --Fat-lined Cockatrice Skin + type = 'key item', + dropped_from = { + name = 'Alectryon (H-8)', + pops = { { + id = 2923, --Cockatrice Tailmeat + type = 'item', + dropped_from = { name = 'Cluckatrice (H-8)' } + }, { + id = 2949, --Quivering Eft Egg + type = 'item', dropped_from = { - name = "Alectryon (H-8)", - pops = { { - id = 2923, --Cockatrice Tailmeat - type = "item", - dropped_from = { name = "Cluckatrice (H-8)" } - }, { - id = 2949, --Quivering Eft Egg - type = "item", - dropped_from = { - name = "Abas, Forced (K-10)", - pops = { { - id = 2922, --Eft Egg - dropped_from = { name = "Canyon Eft (J-10/J-11)" } - } } - } - } } + name = 'Abas, Forced (K-10)', + pops = { { + id = 2922, --Eft Egg + dropped_from = { name = 'Canyon Eft (J-10/J-11)' } + } } } - }, { - id = 1474, --Luxuriant manticore mane - type = "key item", + } } + } + }, { + id = 1474, --Luxuriant manticore mane + type = 'key item', + dropped_from = { + name = 'Muscaliet, Forced (J-6)', + pops = { { + id = 2925, --Resilient Mane + type = 'item', + dropped_from = { name = 'Hieracosphinx (J-6)' } + }, { + id = 2950, --Smooth Whisker + type = 'item', dropped_from = { - name = "Muscaliet, Forced (J-6)", - pops = { { - id = 2925, --Resilient Mane - type = "item", - dropped_from = { name = "Hieracosphinx (J-6)" } - }, { - id = 2950, --Smooth Whisker - type = "item", - dropped_from = { - name = "Tefenet, Forced (G-6)", - pops = { { - id = 2924, --Shocking Whisker - dropped_from = { name = "Jaguarundi (G-6)" } - } } - } - } } + name = 'Tefenet, Forced (G-6)', + pops = { { + id = 2924, --Shocking Whisker + dropped_from = { name = 'Jaguarundi (G-6)' } + } } } - } } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/index.lua b/addons/EmpyPopTracker/nms/index.lua index 9091a466a..e10a91c5c 100644 --- a/addons/EmpyPopTracker/nms/index.lua +++ b/addons/EmpyPopTracker/nms/index.lua @@ -27,28 +27,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] local nms = { - 'alfard', - 'apademak', - 'azdaja', - 'briareus', - 'bukhis', - 'carabosse', - 'chloris', - 'cirein-croin', - 'dragua', - 'glavoid', - 'isgebind', - 'itzpapalotl', - 'kukulkan', - 'orthrus', - 'sedna', - 'sobek', - 'ulhuadshi' + 'alfard', + 'apademak', + 'azdaja', + 'briareus', + 'bukhis', + 'carabosse', + 'chloris', + 'cirein-croin', + 'dragua', + 'glavoid', + 'isgebind', + 'itzpapalotl', + 'kukulkan', + 'orthrus', + 'sedna', + 'sobek', + 'ulhuadshi' } nm_data = {} for _, nm in pairs(nms) do - nm_data[nm] = require('nms/' .. nm) + nm_data[nm] = require('nms/' .. nm) end return nm_data diff --git a/addons/EmpyPopTracker/nms/isgebind.lua b/addons/EmpyPopTracker/nms/isgebind.lua index 3d5f5ef1e..266c59e4e 100644 --- a/addons/EmpyPopTracker/nms/isgebind.lua +++ b/addons/EmpyPopTracker/nms/isgebind.lua @@ -27,11 +27,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Isgebind", - bg_url = 'https://www.bg-wiki.com/bg/Isgebind', - pops = { { - id = 1526, --Begrimed Dragon Hide - type = "key item", - dropped_from = { name = "Kur, Timed (I-5/J-5)" } - } } + name = 'Isgebind', + pops = { { + id = 1526, --Begrimed Dragon Hide + type = 'key item', + dropped_from = { name = 'Kur, Timed (I-5/J-5)' } + } } } diff --git a/addons/EmpyPopTracker/nms/itzpapalotl.lua b/addons/EmpyPopTracker/nms/itzpapalotl.lua index 5e44302d2..744677a52 100644 --- a/addons/EmpyPopTracker/nms/itzpapalotl.lua +++ b/addons/EmpyPopTracker/nms/itzpapalotl.lua @@ -27,33 +27,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Itzpapalotl", - bg_url = 'https://www.bg-wiki.com/bg/Itzpapalotl', - pops = { { - id = 1488, --Venomous Wamoura Feeler - type = "key item", - dropped_from = { - name = "Granite Borer, Forced (K-10)", - pops = { { - id = 3072, --Withered Cocoon - type = "item", - dropped_from = { name = "Gullycampa (K-10)" } - } } - } - }, { - id = 1490, --Distended Chigoe Abdomen - type = "key item", - dropped_from = { name = "Tunga, Timed (K-10)" } - }, { - id = 1489, --Bulbous crawler cocoon - type = "key item", - dropped_from = { - name = "Blazing Eruca, Forced (J-10)", - pops = { { - id = 3073, --Eruca Egg - type = "item", - dropped_from = { name = "Ignis Eruca (J-10)" } - } } - } - } } + name = 'Itzpapalotl', + pops = { { + id = 1488, --Venomous Wamoura Feeler + type = 'key item', + dropped_from = { + name = 'Granite Borer, Forced (K-10)', + pops = { { + id = 3072, --Withered Cocoon + type = 'item', + dropped_from = { name = 'Gullycampa (K-10)' } + } } + } + }, { + id = 1490, --Distended Chigoe Abdomen + type = 'key item', + dropped_from = { name = 'Tunga, Timed (K-10)' } + }, { + id = 1489, --Bulbous crawler cocoon + type = 'key item', + dropped_from = { + name = 'Blazing Eruca, Forced (J-10)', + pops = { { + id = 3073, --Eruca Egg + type = 'item', + dropped_from = { name = 'Ignis Eruca (J-10)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/kukulkan.lua b/addons/EmpyPopTracker/nms/kukulkan.lua index 5b1ddcc0b..002a1926b 100644 --- a/addons/EmpyPopTracker/nms/kukulkan.lua +++ b/addons/EmpyPopTracker/nms/kukulkan.lua @@ -27,40 +27,39 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Kukulkan", - bg_url = 'https://www.bg-wiki.com/bg/Kukulkan', - pops = { { - id = 1466, --Mucid Ahriman Eyeball - type = "key item", - dropped_from = { - name = "Arimaspi, Forced (K-6)", - pops = { { - id = 2913, --Clouded Lens - type = "item", - dropped_from = { name = "Deep Eye (K-6/K-7)" } - } } - } - }, { - id = 1464, --Tattered Hippogryph Wing - type = "key item", - dropped_from = { - name = "Alkonost, Forced (H-6)", - pops = { { - id = 2912, --Giant Bugard Tusk - type = "item", - dropped_from = { name = "Ypotryll (I-7)" } - } } - } - }, { - id = 1465, --Cracked Wivre Horn - type = "key item", - dropped_from = { - name = "Keratyrannos, Forced (G-6)", - pops = { { - id = 2910, --Armored Dragonhorn - type = "item", - dropped_from = { name = "Mesa Wivre (G-6)" } - } } - } - } } + name = 'Kukulkan', + pops = { { + id = 1466, --Mucid Ahriman Eyeball + type = 'key item', + dropped_from = { + name = 'Arimaspi, Forced (K-6)', + pops = { { + id = 2913, --Clouded Lens + type = 'item', + dropped_from = { name = 'Deep Eye (K-6/K-7)' } + } } + } + }, { + id = 1464, --Tattered Hippogryph Wing + type = 'key item', + dropped_from = { + name = 'Alkonost, Forced (H-6)', + pops = { { + id = 2912, --Giant Bugard Tusk + type = 'item', + dropped_from = { name = 'Ypotryll (I-7)' } + } } + } + }, { + id = 1465, --Cracked Wivre Horn + type = 'key item', + dropped_from = { + name = 'Keratyrannos, Forced (G-6)', + pops = { { + id = 2910, --Armored Dragonhorn + type = 'item', + dropped_from = { name = 'Mesa Wivre (G-6)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/orthrus.lua b/addons/EmpyPopTracker/nms/orthrus.lua index ea7a0d817..0a48cea5b 100644 --- a/addons/EmpyPopTracker/nms/orthrus.lua +++ b/addons/EmpyPopTracker/nms/orthrus.lua @@ -27,32 +27,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Orthrus", - bg_url = 'https://www.bg-wiki.com/bg/Orthrus', - pops = { { - id = 1520, --Steaming cerberus tongue - type = "key item", + name = 'Orthrus', + pops = { { + id = 1520, --Steaming cerberus tongue + type = 'key item', + dropped_from = { + name = 'Amarok, Forced (E-6)', + pops = { { + id = 3231, --Sharabha Hide + type = 'item', dropped_from = { - name = "Amarok, Forced (E-6)", - pops = { { - id = 3231, --Sharabha Hide - type = "item", - dropped_from = { - name = "Sharabha, Forced (G-5)", - pops = { { - id = 3237, - dropped_from = { name = "Dune Manticore (F-5/F-6)" } - } } - } - }, { - id = 3232, --Tiger King Hide - type = "item", - dropped_from = { name = "Ansherekh, Timed (F-8/G-8)" } - }, { - id = 3238, --H.Q. Dhalmel Hide - type = "item", - dropped_from = { name = "Camelopardalis (F-7/G-7)" } - } } + name = 'Sharabha, Forced (G-5)', + pops = { { + id = 3237, + dropped_from = { name = 'Dune Manticore (F-5/F-6)' } + } } } - } } + }, { + id = 3232, --Tiger King Hide + type = 'item', + dropped_from = { name = 'Ansherekh, Timed (F-8/G-8)' } + }, { + id = 3238, --H.Q. Dhalmel Hide + type = 'item', + dropped_from = { name = 'Camelopardalis (F-7/G-7)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/sedna.lua b/addons/EmpyPopTracker/nms/sedna.lua index de3f84d1c..d6b20f988 100644 --- a/addons/EmpyPopTracker/nms/sedna.lua +++ b/addons/EmpyPopTracker/nms/sedna.lua @@ -27,22 +27,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Sedna", - bg_url = 'https://www.bg-wiki.com/bg/Sedna', - pops = { { - id = 1512, --Shimmering Pugil Scale - type = "key item", - dropped_from = { name = "Hrosshvalur, Timed (J-6)" } - }, { - id = 1511, --Glossy Sea Monk Sucker - type = "key item", - dropped_from = { - name = "Iku-Turso, Forced (J-7)", - pops = { { - id = 3100, --Moonbeam Clam - type = "item", - dropped_from = { name = "Jasconius (I-7/J-7)" } - } } - } - } } + name = 'Sedna', + pops = { { + id = 1512, --Shimmering Pugil Scale + type = 'key item', + dropped_from = { name = 'Hrosshvalur, Timed (J-6)' } + }, { + id = 1511, --Glossy Sea Monk Sucker + type = 'key item', + dropped_from = { + name = 'Iku-Turso, Forced (J-7)', + pops = { { + id = 3100, --Moonbeam Clam + type = 'item', + dropped_from = { name = 'Jasconius (I-7/J-7)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/sobek.lua b/addons/EmpyPopTracker/nms/sobek.lua index 570fd9d51..f6e22e968 100644 --- a/addons/EmpyPopTracker/nms/sobek.lua +++ b/addons/EmpyPopTracker/nms/sobek.lua @@ -27,33 +27,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Sobek", - bg_url = 'https://www.bg-wiki.com/bg/Sobek', - pops = { { - id = 1500, --Molted Peiste Skin - type = "key item", - dropped_from = { name = "Gukumatz, Timed (J-11)" } - }, { - id = 1498, --Bloodstained Bugard Fang - type = "key item", - dropped_from = { - name = "Minax Bugard, Forced (K-10)", - pops = { { - id = 3085, --Bewitching Tusk - type = "item", - dropped_from = { name = "Abyssobugard (J-10/K-11)" } - } } - } - }, { - id = 1499, --Gnarled Lizard Nail - type = "key item", - dropped_from = { - name = "Sirrush, Forced (I-11)", - pops = { { - id = 3086, --Molt Scraps - type = "item", - dropped_from = { name = "Dusk Lizard (J-11)" } - } } - } - } } + name = 'Sobek', + pops = { { + id = 1500, --Molted Peiste Skin + type = 'key item', + dropped_from = { name = 'Gukumatz, Timed (J-11)' } + }, { + id = 1498, --Bloodstained Bugard Fang + type = 'key item', + dropped_from = { + name = 'Minax Bugard, Forced (K-10)', + pops = { { + id = 3085, --Bewitching Tusk + type = 'item', + dropped_from = { name = 'Abyssobugard (J-10/K-11)' } + } } + } + }, { + id = 1499, --Gnarled Lizard Nail + type = 'key item', + dropped_from = { + name = 'Sirrush, Forced (I-11)', + pops = { { + id = 3086, --Molt Scraps + type = 'item', + dropped_from = { name = 'Dusk Lizard (J-11)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/ulhuadshi.lua b/addons/EmpyPopTracker/nms/ulhuadshi.lua index 3d2211396..ad63f9168 100644 --- a/addons/EmpyPopTracker/nms/ulhuadshi.lua +++ b/addons/EmpyPopTracker/nms/ulhuadshi.lua @@ -27,22 +27,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = "Ulhuadshi", - bg_url = 'https://www.bg-wiki.com/bg/Ulhuadshi', - pops = { { - id = 1492, --Shriveled Hecteyes Stalk - type = "key item", - dropped_from = { name = "Amun, Timed (H-8/I-9)" } - }, { - id = 1491, --Mucid Worm Segment - type = "key item", - dropped_from = { - name = "Pallid Percy, Forced (J-7)", - pops = { { - id = 3074, --Blanched Silver - type = "item", - dropped_from = { name = "Entozoon (J-7)" } - } } - } - } } + name = 'Ulhuadshi', + pops = { { + id = 1492, --Shriveled Hecteyes Stalk + type = 'key item', + dropped_from = { name = 'Amun, Timed (H-8/I-9)' } + }, { + id = 1491, --Mucid Worm Segment + type = 'key item', + dropped_from = { + name = 'Pallid Percy, Forced (J-7)', + pops = { { + id = 3074, --Blanched Silver + type = 'item', + dropped_from = { name = 'Entozoon (J-7)' } + } } + } + } } } From 5eaf5b0bf6e7b91aaf2b5b97910f36c31c2f50b1 Mon Sep 17 00:00:00 2001 From: Dean James Date: Sun, 9 Feb 2020 13:49:40 +0000 Subject: [PATCH 6/8] Switched to pattern matching. Reverted indents to 4 spaces. Commands now handle different cases. --- addons/EmpyPopTracker/EmpyPopTracker.lua | 349 +++++++++++---------- addons/EmpyPopTracker/README.md | 6 +- addons/EmpyPopTracker/nms/README.md | 67 ++-- addons/EmpyPopTracker/nms/alfard.lua | 52 +-- addons/EmpyPopTracker/nms/apademak.lua | 50 +-- addons/EmpyPopTracker/nms/azdaja.lua | 12 +- addons/EmpyPopTracker/nms/briareus.lua | 70 ++--- addons/EmpyPopTracker/nms/bukhis.lua | 56 ++-- addons/EmpyPopTracker/nms/carabosse.lua | 48 +-- addons/EmpyPopTracker/nms/chloris.lua | 152 ++++----- addons/EmpyPopTracker/nms/cirein-croin.lua | 34 +- addons/EmpyPopTracker/nms/dragua.lua | 12 +- addons/EmpyPopTracker/nms/glavoid.lua | 96 +++--- addons/EmpyPopTracker/nms/index.lua | 36 +-- addons/EmpyPopTracker/nms/isgebind.lua | 12 +- addons/EmpyPopTracker/nms/itzpapalotl.lua | 56 ++-- addons/EmpyPopTracker/nms/kukulkan.lua | 70 ++--- addons/EmpyPopTracker/nms/orthrus.lua | 50 +-- addons/EmpyPopTracker/nms/sedna.lua | 34 +- addons/EmpyPopTracker/nms/sobek.lua | 56 ++-- addons/EmpyPopTracker/nms/ulhuadshi.lua | 34 +- 21 files changed, 678 insertions(+), 674 deletions(-) diff --git a/addons/EmpyPopTracker/EmpyPopTracker.lua b/addons/EmpyPopTracker/EmpyPopTracker.lua index cb11451aa..a87bbf5d2 100644 --- a/addons/EmpyPopTracker/EmpyPopTracker.lua +++ b/addons/EmpyPopTracker/EmpyPopTracker.lua @@ -26,7 +26,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] -_addon.name = "Empy Pop Tracker" +_addon.name = 'Empy Pop Tracker' _addon.author = 'Dean James (Xurion of Bismarck)' _addon.commands = { 'ept', 'empypoptracker' } _addon.version = '2.0.0' @@ -68,256 +68,259 @@ colors.warning = '\\cs(255,170,0)' colors.close = '\\cr' function owns_item(id, items) - for _, bag in ipairs(items) do - for _, item in ipairs(bag) do - if item.id == id then - return true - end + for _, bag in ipairs(items) do + for _, item in ipairs(bag) do + if item.id == id then + return true + end + end end - end - return false + return false end function owns_key_item(id, items) - local owned = false + local owned = false - for _, item_id in pairs(items) do - if item_id == id then - owned = true - break + for _, item_id in pairs(items) do + if item_id == id then + owned = true + break + end end - end - return owned + return owned end function item_treasure_pool_count(id, treasure) - local count = 0 + local count = 0 - for _, item in pairs(treasure) do - if item.item_id == id then - count = count + 1 + for _, item in pairs(treasure) do + if item.item_id == id then + count = count + 1 + end end - end - return count + return count end function ucwords(str) - local result = string.gsub(str, '(%a)([%w_\']*)', function(first, rest) - return first:upper() .. rest:lower() - end) + local result = string.gsub(str, '(%a)([%w_\']*)', function(first, rest) + return first:upper() .. rest:lower() + end) - return result + return result end function get_indent(depth) - return string.rep(' ', depth) + return string.rep(' ', depth) end function generate_text(data, key_items, items, depth) - local text = depth == 1 and data.name or '' - for _, pop in pairs(data.pops) do - local resource - local item_scope - local owns_pop - local in_pool_count = 0 - local item_identifier = '' - - if pop.type == 'key item' then - resource = res.key_items[pop.id] - owns_pop = owns_key_item(pop.id, key_items) - item_identifier = 'Ж ' - else - resource = res.items[pop.id] - owns_pop = owns_item(pop.id, items) - in_pool_count = item_treasure_pool_count(pop.id, items.treasure) - end - - local pop_name = 'Unknown pop' - if resource then - pop_name = ucwords(resource.name) - end - - --separator line for each top-level mob - if depth == 1 then - text = text .. '\n' - end - - local item_colour - if owns_pop then - item_colour = colors.success - else - item_colour = colors.danger - end - - local pool_notification = '' - if in_pool_count > 0 then - pool_notification = colors.warning .. ' [' .. in_pool_count .. ']' .. colors.close - end - text = text .. '\n' .. get_indent(depth) .. pop.dropped_from.name .. '\n' .. get_indent(depth) .. ' >> ' .. item_colour .. item_identifier .. pop_name .. colors.close .. pool_notification - if pop.dropped_from.pops then - text = text .. generate_text(pop.dropped_from, key_items, items, depth + 1) + local text = depth == 1 and data.name or '' + for _, pop in pairs(data.pops) do + local resource + local item_scope + local owns_pop + local in_pool_count = 0 + local item_identifier = '' + + if pop.type == 'key item' then + resource = res.key_items[pop.id] + owns_pop = owns_key_item(pop.id, key_items) + item_identifier = 'Ж ' + else + resource = res.items[pop.id] + owns_pop = owns_item(pop.id, items) + in_pool_count = item_treasure_pool_count(pop.id, items.treasure) + end + + local pop_name = 'Unknown pop' + if resource then + pop_name = ucwords(resource.name) + end + + --separator line for each top-level mob + if depth == 1 then + text = text .. '\n' + end + + local item_colour + if owns_pop then + item_colour = colors.success + else + item_colour = colors.danger + end + + local pool_notification = '' + if in_pool_count > 0 then + pool_notification = colors.warning .. ' [' .. in_pool_count .. ']' .. colors.close + end + text = text .. '\n' .. get_indent(depth) .. pop.dropped_from.name .. '\n' .. get_indent(depth) .. ' >> ' .. item_colour .. item_identifier .. pop_name .. colors.close .. pool_notification + if pop.dropped_from.pops then + text = text .. generate_text(pop.dropped_from, key_items, items, depth + 1) + end end - end - return text + return text end EmpyPopTracker.generate_info = function(nm, key_items, items) - local nm_type = type(nm) - local info = { - has_all_kis = true, - text = '' - } - - if nm.pops then - for _, key_item_data in pairs(nm.pops) do - local has_pop_ki = owns_key_item(key_item_data.id, key_items) - - if not has_pop_ki then - info.has_all_kis = false - end + local info = { + has_all_kis = true, + text = '' + } + + if nm.pops then + for _, key_item_data in pairs(nm.pops) do + local has_pop_ki = owns_key_item(key_item_data.id, key_items) + + if not has_pop_ki then + info.has_all_kis = false + end + end end - end - info.text = generate_text(nm, key_items, items, 1) + info.text = generate_text(nm, key_items, items, 1) - return info + return info end -function find_nms(query) - local matching_nms = {} - local lower_query = query:lower() - for _, nm in pairs(nm_data) do - local result = string.match(nm.name:lower(), '(.*' .. lower_query .. '.*)') - if result then - table.insert(matching_nms, result) +function find_nms(pattern) + local matching_nms = {} + local lower_pattern = pattern:lower() + for _, nm in pairs(nm_data) do + local nm_name = nm.name:lower() + local result = windower.wc_match(nm_name, lower_pattern) + if result then + table.insert(matching_nms, nm_name) + end end - end - return matching_nms + + return matching_nms end windower.register_event('addon command', function(command, ...) - if commands[command] then - commands[command](...) - else - commands.help() - end + command = command and command:lower() or 'help' + + if commands[command] then + commands[command](...) + else + commands.help() + end end) commands = {} commands.track = function(...) - local args = {...} - local nm_name = args[1] - local matching_nm_names = find_nms(nm_name) - - if #matching_nm_names == 0 then - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Unable to find a NM using: "' .. nm_name .. '"') - elseif #matching_nm_names > 1 then - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '"' .. nm_name .. '" matches ' .. #matching_nm_names .. ' NMs. Please be more explicit:') - for key, matching_file_name in pairs(matching_nm_names) do - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, ' Match ' .. key .. ': ' .. ucwords(matching_file_name)) + local args = {...} + local nm_search_pattern = args[1] + local matching_nm_names = find_nms(nm_search_pattern) + + if #matching_nm_names == 0 then + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Unable to find a NM using: "' .. nm_search_pattern .. '"') + elseif #matching_nm_names > 1 then + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '"' .. nm_search_pattern .. '" matches ' .. #matching_nm_names .. ' NMs. Please be more explicit:') + for key, matching_file_name in pairs(matching_nm_names) do + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, ' Match ' .. key .. ': ' .. ucwords(matching_file_name)) + end + else + active = true + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Now tracking: ' .. ucwords(matching_nm_names[1])) + EmpyPopTracker.settings.tracking = matching_nm_names[1] + EmpyPopTracker.update() + commands.show() end - else - active = true - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Now tracking: ' .. ucwords(matching_nm_names[1])) - EmpyPopTracker.settings.tracking = matching_nm_names[1] - EmpyPopTracker.update() - commands.show() - end end commands.t = commands.track commands.hide = function() - active = false - EmpyPopTracker.text:visible(false) - EmpyPopTracker.settings.visible = false - EmpyPopTracker.settings:save() + active = false + EmpyPopTracker.text:visible(false) + EmpyPopTracker.settings.visible = false + EmpyPopTracker.settings:save() end commands.show = function() - active = true - EmpyPopTracker.text:visible(true) - EmpyPopTracker.settings.visible = true - EmpyPopTracker.settings:save() - EmpyPopTracker.update() + active = true + EmpyPopTracker.text:visible(true) + EmpyPopTracker.settings.visible = true + EmpyPopTracker.settings:save() + EmpyPopTracker.update() end commands.help = function() - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '---Empy Pop Tracker---') - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Available commands:') - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept track briareus - tracks Briareus pops (partial names such as apadem work too!)') - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept hide - hides the UI') - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept show - shows the UI') - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept list - lists all trackable NMs') - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept help - displays this help') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '---Empy Pop Tracker---') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Available commands:') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept track briareus - tracks Briareus pops (search patterns such as apadem* work too!)') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept hide - hides the UI') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept show - shows the UI') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept list - lists all trackable NMs') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '//ept help - displays this help') end commands.list = function() - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '---Empy Pop Tracker---') - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Trackable NMs:') - for _, nm in pairs(nm_data) do - windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, ucwords(nm.name)) - end + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, '---Empy Pop Tracker---') + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, 'Trackable NMs:') + for _, nm in pairs(nm_data) do + windower.add_to_chat(EmpyPopTracker.settings.add_to_chat_mode, ucwords(nm.name)) + end end commands.bg = function() - local tracking_nm = nm_data[EmpyPopTracker.settings.tracking] - local url = 'https://www.bg-wiki.com/bg/' .. tracking_nm.name - windower.open_url(url) + local tracking_nm = nm_data[EmpyPopTracker.settings.tracking] + local url = 'https://www.bg-wiki.com/bg/' .. tracking_nm.name + windower.open_url(url) end EmpyPopTracker.update = function() - local key_items = windower.ffxi.get_key_items() - local items = windower.ffxi.get_items() - local tracked_nm_data = nm_data[EmpyPopTracker.settings.tracking] - local generated_info = EmpyPopTracker.generate_info(tracked_nm_data, key_items, items) - EmpyPopTracker.text:text(generated_info.text) - if generated_info.has_all_kis then - EmpyPopTracker.text:bg_color(0, 75, 0) - else - EmpyPopTracker.text:bg_color(0, 0, 0) - end - if EmpyPopTracker.settings.visible then - EmpyPopTracker.text:visible(true) - end + local key_items = windower.ffxi.get_key_items() + local items = windower.ffxi.get_items() + local tracked_nm_data = nm_data[EmpyPopTracker.settings.tracking] + local generated_info = EmpyPopTracker.generate_info(tracked_nm_data, key_items, items) + EmpyPopTracker.text:text(generated_info.text) + if generated_info.has_all_kis then + EmpyPopTracker.text:bg_color(0, 75, 0) + else + EmpyPopTracker.text:bg_color(0, 0, 0) + end + if EmpyPopTracker.settings.visible then + EmpyPopTracker.text:visible(true) + end end windower.register_event('load', function() - if windower.ffxi.get_info().logged_in and EmpyPopTracker.settings.visible then - active = true - EmpyPopTracker.update() - end + if windower.ffxi.get_info().logged_in and EmpyPopTracker.settings.visible then + active = true + EmpyPopTracker.update() + end end) windower.register_event('add item', 'remove item', function() - if active then - EmpyPopTracker.update() - end + if active then + EmpyPopTracker.update() + end end) windower.register_event('incoming chunk', function(id) - --0x055: KI update - --0x0D2: Treasure pool addition - --0x0D3: Treasure pool lot/drop - if active and id == 0x055 or id == 0x0D2 or id == 0x0D3 then - EmpyPopTracker.update() - end + --0x055: KI update + --0x0D2: Treasure pool addition + --0x0D3: Treasure pool lot/drop + if active and id == 0x055 or id == 0x0D2 or id == 0x0D3 then + EmpyPopTracker.update() + end end) windower.register_event('login', function() - if EmpyPopTracker.settings.visible then - EmpyPopTracker.text:visible(true) - active = true - end + if EmpyPopTracker.settings.visible then + EmpyPopTracker.text:visible(true) + active = true + end end) windower.register_event('logout', function() - EmpyPopTracker.text:visible(false) - active = false + EmpyPopTracker.text:visible(false) + active = false end) return EmpyPopTracker diff --git a/addons/EmpyPopTracker/README.md b/addons/EmpyPopTracker/README.md index 3631de1ec..f674c3c94 100644 --- a/addons/EmpyPopTracker/README.md +++ b/addons/EmpyPopTracker/README.md @@ -1,4 +1,4 @@ -# FFXI Empy Pop Tracker +# FFXI Empyrean Pop Tracker An FFXI Windower 4 addon that tracks items and key items for popping Empyrean NMs in Abyssea, such as Briareus, Apademak and Sobek. @@ -14,9 +14,9 @@ Key items are identified by the Zhe (Ж) character. Treasure pool counts for pop `//ept track glavoid` tracks Glavoid pop items/key items. -You can also track an NM by typing part of the name, because fuck having to remember how to spell Itzpapalotl: +You can also track an NM by using a wildcard pattern, because fuck having to remember how to spell Itzpapalotl: -`//ept track itz` +`//ept track itz*` For a full list of trackable NMs, see the nms directory or use the `list` command (see below). diff --git a/addons/EmpyPopTracker/nms/README.md b/addons/EmpyPopTracker/nms/README.md index 720d0a7d4..d9e9278bd 100644 --- a/addons/EmpyPopTracker/nms/README.md +++ b/addons/EmpyPopTracker/nms/README.md @@ -14,12 +14,12 @@ A simple example of the above would be: ```lua { - name = 'Azdaja', - pops = { { - id = 1531, --Vacant Bugard Eye - type = 'key item', - dropped_from = { name = 'Deelgeed, Timed (F-9/F-10)' } - } } + name = 'Azdaja', + pops = { { + id = 1531, --Vacant Bugard Eye + type = 'key item', + dropped_from = { name = 'Deelgeed, Timed (F-9/F-10)' } + } } } ``` @@ -27,37 +27,38 @@ A larger example with multiple nested entites: ```lua { - name = 'Bukhis', - pops = { { - id = 1508, --Ingrown Taurus Nail - type = 'key item', - dropped_from = { - name = 'Khalkotaur, Forced (F-4)', - pops = { { - id = 3098, --Gnarled Taurus Horn - type = 'item', - dropped_from = { name = 'Aestutaur (G-9/G-10)' } - } } + name = 'Bukhis', + pops = { { + id = 1508, --Ingrown Taurus Nail + type = 'key item', + dropped_from = { + name = 'Khalkotaur, Forced (F-4)', + pops = { { + id = 3098, --Gnarled Taurus Horn + type = 'item', + dropped_from = { name = 'Aestutaur (G-9/G-10)' } + } } + } }, { - id = 1509, --Ossified Gargouille Hand - type = 'key item', - dropped_from = { - name = 'Quasimodo, Forced (F-4)', - pops = { { - id = 3099, --Gargouille Stone - type = 'item', - dropped_from = { - name = 'Gruesome Gargouille (F-10/G-10)' - } - } } - } + id = 1509, --Ossified Gargouille Hand + type = 'key item', + dropped_from = { + name = 'Quasimodo, Forced (F-4)', + pops = { { + id = 3099, --Gargouille Stone + type = 'item', + dropped_from = { + name = 'Gruesome Gargouille (F-10/G-10)' + } + } } + } }, { - id = 1510, --Imbrued Vampyr Fang - type = 'key item', - dropped_from = { name = 'Lord Varney, Timed (G-10/H-10)' } + id = 1510, --Imbrued Vampyr Fang + type = 'key item', + dropped_from = { name = 'Lord Varney, Timed (G-10/H-10)' } } } - } } + ``` The main addon file requires the index.lua file which in turn is responsible for requiring and returning data for each nm. diff --git a/addons/EmpyPopTracker/nms/alfard.lua b/addons/EmpyPopTracker/nms/alfard.lua index 689d4ddcc..ee492fd25 100644 --- a/addons/EmpyPopTracker/nms/alfard.lua +++ b/addons/EmpyPopTracker/nms/alfard.lua @@ -27,32 +27,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Alfard', - pops = { { - id = 1530, --Venomous hydra fang - type = 'key item', - dropped_from = { - name = 'Ningishzida, Forced (I-7/I-8)', - pops = { { - id = 3262, --Jaculus Wing - type = 'item', - dropped_from = { name = 'Jaculus, Timed (I-8)' } - }, { - id = 3261, --Minaruja Skull - type = 'item', + name = 'Alfard', + pops = { { + id = 1530, --Venomous hydra fang + type = 'key item', dropped_from = { - name = 'Minaruja, Forced (I-10)', - pops = { { - id = 3267, --Pursuer's Wing - type = 'item', - dropped_from = { name = 'Faunus Wyvern (I-9)' } - } } + name = 'Ningishzida, Forced (I-7/I-8)', + pops = { { + id = 3262, --Jaculus Wing + type = 'item', + dropped_from = { name = 'Jaculus, Timed (I-8)' } + }, { + id = 3261, --Minaruja Skull + type = 'item', + dropped_from = { + name = 'Minaruja, Forced (I-10)', + pops = { { + id = 3267, --Pursuer's Wing + type = 'item', + dropped_from = { name = 'Faunus Wyvern (I-9)' } + } } + } + }, { + id = 3268, --High-Quality Wivre Hide + type = 'item', + dropped_from = { name = 'Glade Wivre (I-8)' } + } } } - }, { - id = 3268, --High-Quality Wivre Hide - type = 'item', - dropped_from = { name = 'Glade Wivre (I-8)' } - } } - } - } } + } } } diff --git a/addons/EmpyPopTracker/nms/apademak.lua b/addons/EmpyPopTracker/nms/apademak.lua index 63315f568..4ecec8aec 100644 --- a/addons/EmpyPopTracker/nms/apademak.lua +++ b/addons/EmpyPopTracker/nms/apademak.lua @@ -27,31 +27,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Apademak', - pops = { { - id = 1525, --Torn Khimaira Wing - type = 'key item', - dropped_from = { - name = 'Dhorme Khimaira, Forced (F-7)', - pops = { { - id = 3246, --Snow God Core - type = 'item', + name = 'Apademak', + pops = { { + id = 1525, --Torn Khimaira Wing + type = 'key item', dropped_from = { - name = 'Upas-Kamuy, Forced (G-5)', - pops = { { - id = 3252, --Gelid Arm - dropped_from = { name = 'Snowflake (G-5)' } - } } + name = 'Dhorme Khimaira, Forced (F-7)', + pops = { { + id = 3246, --Snow God Core + type = 'item', + dropped_from = { + name = 'Upas-Kamuy, Forced (G-5)', + pops = { { + id = 3252, --Gelid Arm + dropped_from = { name = 'Snowflake (G-5)' } + } } + } + }, { + id = 3247, --Sisyphus Fragment + type = 'item', + dropped_from = { name = 'Sisyphus, Timed (F-6/G-6)' } + }, { + id = 3253, --High-quality marid hide + type = 'item', + dropped_from = { name = 'Olyphant (F-6)' } + } } } - }, { - id = 3247, --Sisyphus Fragment - type = 'item', - dropped_from = { name = 'Sisyphus, Timed (F-6/G-6)' } - }, { - id = 3253, --High-quality marid hide - type = 'item', - dropped_from = { name = 'Olyphant (F-6)' } - } } - } - } } + } } } diff --git a/addons/EmpyPopTracker/nms/azdaja.lua b/addons/EmpyPopTracker/nms/azdaja.lua index b6eb58f1d..cb06f668d 100644 --- a/addons/EmpyPopTracker/nms/azdaja.lua +++ b/addons/EmpyPopTracker/nms/azdaja.lua @@ -27,10 +27,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Azdaja', - pops = { { - id = 1531, --Vacant Bugard Eye - type = 'key item', - dropped_from = { name = 'Deelgeed, Timed (F-9/F-10)' } - } } + name = 'Azdaja', + pops = { { + id = 1531, --Vacant Bugard Eye + type = 'key item', + dropped_from = { name = 'Deelgeed, Timed (F-9/F-10)' } + } } } diff --git a/addons/EmpyPopTracker/nms/briareus.lua b/addons/EmpyPopTracker/nms/briareus.lua index 553350cbd..7b2e68d4b 100644 --- a/addons/EmpyPopTracker/nms/briareus.lua +++ b/addons/EmpyPopTracker/nms/briareus.lua @@ -27,39 +27,39 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Briareus', - pops = { { - id = 1482, --Dented Gigas Shield - type = 'key item', - dropped_from = { - name = 'Adamastor, Forced (C-4)', - pops = { { - id = 2894, --Trophy Shield - type = 'item', - dropped_from = { name = 'Bathyal Gigas (C-5/D-5)' } - } } - } - }, { - id = 1484, --Severed Gigas Collar - type = 'key item', - dropped_from = { - name = 'Grandgousier, Forced (F-10)', - pops = { { - id = 2896, --Massive Armband - type = 'item', - dropped_from = { name = 'Demersal Gigas (E-9/F-9)' } - } } - } - }, { - id = 1483, --Warped Gigas Armband - type = 'key item', - dropped_from = { - name = 'Pantagruel, Forced (F-7)', - pops = { { - id = 2895, --Oversized Sock - type = 'item', - dropped_from = { name = 'Hadal Gigas (F-6/F-7)' } - } } - } - } } + name = 'Briareus', + pops = { { + id = 1482, --Dented Gigas Shield + type = 'key item', + dropped_from = { + name = 'Adamastor, Forced (C-4)', + pops = { { + id = 2894, --Trophy Shield + type = 'item', + dropped_from = { name = 'Bathyal Gigas (C-5/D-5)' } + } } + } + }, { + id = 1484, --Severed Gigas Collar + type = 'key item', + dropped_from = { + name = 'Grandgousier, Forced (F-10)', + pops = { { + id = 2896, --Massive Armband + type = 'item', + dropped_from = { name = 'Demersal Gigas (E-9/F-9)' } + } } + } + }, { + id = 1483, --Warped Gigas Armband + type = 'key item', + dropped_from = { + name = 'Pantagruel, Forced (F-7)', + pops = { { + id = 2895, --Oversized Sock + type = 'item', + dropped_from = { name = 'Hadal Gigas (F-6/F-7)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/bukhis.lua b/addons/EmpyPopTracker/nms/bukhis.lua index 019864b73..b1926152a 100644 --- a/addons/EmpyPopTracker/nms/bukhis.lua +++ b/addons/EmpyPopTracker/nms/bukhis.lua @@ -27,34 +27,34 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Bukhis', - pops = { { - id = 1508, --Ingrown Taurus Nail - type = 'key item', - dropped_from = { - name = 'Khalkotaur, Forced (F-4)', - pops = { { - id = 3098, --Gnarled Taurus Horn - type = 'item', - dropped_from = { name = 'Aestutaur (G-9/G-10)' } - } } - } - }, { - id = 1509, --Ossified Gargouille Hand - type = 'key item', - dropped_from = { - name = 'Quasimodo, Forced (F-4)', - pops = { { - id = 3099, --Gargouille Stone - type = 'item', + name = 'Bukhis', + pops = { { + id = 1508, --Ingrown Taurus Nail + type = 'key item', dropped_from = { - name = 'Gruesome Gargouille (F-10/G-10)' + name = 'Khalkotaur, Forced (F-4)', + pops = { { + id = 3098, --Gnarled Taurus Horn + type = 'item', + dropped_from = { name = 'Aestutaur (G-9/G-10)' } + } } } - } } - } - }, { - id = 1510, --Imbrued Vampyr Fang - type = 'key item', - dropped_from = { name = 'Lord Varney, Timed (G-10/H-10)' } - } } + }, { + id = 1509, --Ossified Gargouille Hand + type = 'key item', + dropped_from = { + name = 'Quasimodo, Forced (F-4)', + pops = { { + id = 3099, --Gargouille Stone + type = 'item', + dropped_from = { + name = 'Gruesome Gargouille (F-10/G-10)' + } + } } + } + }, { + id = 1510, --Imbrued Vampyr Fang + type = 'key item', + dropped_from = { name = 'Lord Varney, Timed (G-10/H-10)' } + } } } diff --git a/addons/EmpyPopTracker/nms/carabosse.lua b/addons/EmpyPopTracker/nms/carabosse.lua index 97b0c9c5e..ad9aa0079 100644 --- a/addons/EmpyPopTracker/nms/carabosse.lua +++ b/addons/EmpyPopTracker/nms/carabosse.lua @@ -27,28 +27,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Carabosse', - pops = { { - id = 1485, --Pellucid Fly Eye - type = 'key item', - dropped_from = { - name = 'La Theine Liege, Forced (I-7)', - pops = { { - id = 2897, --Transparent Insect Wing - type = 'item', - dropped_from = { name = 'Plateau Glider (H-7)' } - } } - } - }, { - id = 1486, --Shimmering Pixie Pinion - type = 'key item', - dropped_from = { - name = 'Baba Yaga, Forced (H-7)', - pops = { { - id = 2898, --Piceous Scale - type = 'item', - dropped_from = { name = 'Farfadet (H-7)' } - } } - } - } } + name = 'Carabosse', + pops = { { + id = 1485, --Pellucid Fly Eye + type = 'key item', + dropped_from = { + name = 'La Theine Liege, Forced (I-7)', + pops = { { + id = 2897, --Transparent Insect Wing + type = 'item', + dropped_from = { name = 'Plateau Glider (H-7)' } + } } + } + }, { + id = 1486, --Shimmering Pixie Pinion + type = 'key item', + dropped_from = { + name = 'Baba Yaga, Forced (H-7)', + pops = { { + id = 2898, --Piceous Scale + type = 'item', + dropped_from = { name = 'Farfadet (H-7)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/chloris.lua b/addons/EmpyPopTracker/nms/chloris.lua index 78dbaeacc..df7451eed 100644 --- a/addons/EmpyPopTracker/nms/chloris.lua +++ b/addons/EmpyPopTracker/nms/chloris.lua @@ -27,87 +27,87 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Chloris', - pops = { { - id = 1470, --Gory Scorpion Claw - type = 'key item', - dropped_from = { - name = 'Hedetet, Forced (F-7)', - pops = { { - id = 2921, --Venomous Scorpion Stinger - type = 'item', - dropped_from = { name = 'Canyon Scorpion (F-7)' } - }, { - id = 2948, --Acidic Humus - type = 'item', + name = 'Chloris', + pops = { { + id = 1470, --Gory Scorpion Claw + type = 'key item', dropped_from = { - name = 'Gancanagh, Forced (H-8)', - pops = { { - id = 2920, --Alkaline Humus - type = 'item', - dropped_from = { name = 'Pachypodium (H-8)' } - } } + name = 'Hedetet, Forced (F-7)', + pops = { { + id = 2921, --Venomous Scorpion Stinger + type = 'item', + dropped_from = { name = 'Canyon Scorpion (F-7)' } + }, { + id = 2948, --Acidic Humus + type = 'item', + dropped_from = { + name = 'Gancanagh, Forced (H-8)', + pops = { { + id = 2920, --Alkaline Humus + type = 'item', + dropped_from = { name = 'Pachypodium (H-8)' } + } } + } + } } } - } } - } - }, { - id = 1469, --Torn Bat Wing - type = 'key item', - dropped_from = { - name = 'Treble Noctules, Forced (I-9)', - pops = { { - id = 2919, --Bloody Fang - type = 'item', - dropped_from = { name = 'Blood Bat (I-9)' } - }, { - id = 2947, --Exorcised Skull - type = 'item', + }, { + id = 1469, --Torn Bat Wing + type = 'key item', dropped_from = { - name = 'Cannered Noz, Forced (F-6)', - pops = { { - id = 2918, --Baleful Skull - type = 'item', - dropped_from = { name = 'Caoineag (F-6)' } - } } + name = 'Treble Noctules, Forced (I-9)', + pops = { { + id = 2919, --Bloody Fang + type = 'item', + dropped_from = { name = 'Blood Bat (I-9)' } + }, { + id = 2947, --Exorcised Skull + type = 'item', + dropped_from = { + name = 'Cannered Noz, Forced (F-6)', + pops = { { + id = 2918, --Baleful Skull + type = 'item', + dropped_from = { name = 'Caoineag (F-6)' } + } } + } + } } } - } } - } - }, { - id = 1468, --Veinous Hecteyes Eyelid - type = 'key item', - dropped_from = { - name = 'Ophanim, Forced (G-9)', - pops = { { - id = 2946, --Tarnished Pincer - type = 'item', + }, { + id = 1468, --Veinous Hecteyes Eyelid + type = 'key item', dropped_from = { - name = 'Vetehinen, Forced (H-10)', - pops = { { - id = 2916, --High-quality Limule Pincer - type = 'item', - dropped_from = { name = 'Gulch Limule (H-10)' } - }, { - id = 2917, --Bloodshot Hecteye - type = 'item', - dropped_from = { name = 'Beholder (G-9)' } - }, { - id = 2945, --Shriveled Wing - type = 'item', - dropped_from = { - name = 'Halimede, Forced (G-12)', - pops = { { - id = 2915, --High-quality Clionid Wing + name = 'Ophanim, Forced (G-9)', + pops = { { + id = 2946, --Tarnished Pincer type = 'item', - dropped_from = { name = 'Gully Clionid (G-12)' } - } } - } - } } + dropped_from = { + name = 'Vetehinen, Forced (H-10)', + pops = { { + id = 2916, --High-quality Limule Pincer + type = 'item', + dropped_from = { name = 'Gulch Limule (H-10)' } + }, { + id = 2917, --Bloodshot Hecteye + type = 'item', + dropped_from = { name = 'Beholder (G-9)' } + }, { + id = 2945, --Shriveled Wing + type = 'item', + dropped_from = { + name = 'Halimede, Forced (G-12)', + pops = { { + id = 2915, --High-quality Clionid Wing + type = 'item', + dropped_from = { name = 'Gully Clionid (G-12)' } + } } + } + } } + } + } } } - } } - } - }, { - id = 1471, --Mossy Adamantoise Shell - type = 'key item', - dropped_from = { name = 'Chukwa, Timed (F-5)' } - } } + }, { + id = 1471, --Mossy Adamantoise Shell + type = 'key item', + dropped_from = { name = 'Chukwa, Timed (F-5)' } + } } } diff --git a/addons/EmpyPopTracker/nms/cirein-croin.lua b/addons/EmpyPopTracker/nms/cirein-croin.lua index 7a8a40af7..478c23ffe 100644 --- a/addons/EmpyPopTracker/nms/cirein-croin.lua +++ b/addons/EmpyPopTracker/nms/cirein-croin.lua @@ -27,21 +27,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Cirein-croin', - pops = { { - id = 1504, --Glistening Orobon Liver - type = 'key item', - dropped_from = { - name = 'Cep-Kamuy, Forced (F-4)', - pops = { { - id = 3089, --Orobon Cheekmeat - type = 'item', - dropped_from = { name = 'Ancient Orobon (F-5)' } - } } - } - }, { - id = 1505, --Doffed Poroggo Hat - type = 'key item', - dropped_from = { name = 'Heqet, Timed (I-6)' } - } } + name = 'Cirein-croin', + pops = { { + id = 1504, --Glistening Orobon Liver + type = 'key item', + dropped_from = { + name = 'Cep-Kamuy, Forced (F-4)', + pops = { { + id = 3089, --Orobon Cheekmeat + type = 'item', + dropped_from = { name = 'Ancient Orobon (F-5)' } + } } + } + }, { + id = 1505, --Doffed Poroggo Hat + type = 'key item', + dropped_from = { name = 'Heqet, Timed (I-6)' } + } } } diff --git a/addons/EmpyPopTracker/nms/dragua.lua b/addons/EmpyPopTracker/nms/dragua.lua index aa841e076..456a477b9 100644 --- a/addons/EmpyPopTracker/nms/dragua.lua +++ b/addons/EmpyPopTracker/nms/dragua.lua @@ -27,10 +27,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Dragua', - pops = { { - id = 1521, --Bloodied Dragon Ear - type = 'key item', - dropped_from = { name = 'Hazhdiha, Timed (H-10)' } - } } + name = 'Dragua', + pops = { { + id = 1521, --Bloodied Dragon Ear + type = 'key item', + dropped_from = { name = 'Hazhdiha, Timed (H-10)' } + } } } diff --git a/addons/EmpyPopTracker/nms/glavoid.lua b/addons/EmpyPopTracker/nms/glavoid.lua index 3acf9b513..9beca3c7d 100644 --- a/addons/EmpyPopTracker/nms/glavoid.lua +++ b/addons/EmpyPopTracker/nms/glavoid.lua @@ -27,56 +27,56 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Glavoid', - pops = { { - id = 1473, --Sodden Sandworm Husk - type = 'key item', - dropped_from = { name = 'Minhocao, Timed (I-6)' } - }, { - id = 1475, --Sticky Gnat Wing - type = 'key item', - dropped_from = { name = 'Adze, Timed (G-5)' } - }, { - id = 1472, --Fat-lined Cockatrice Skin - type = 'key item', - dropped_from = { - name = 'Alectryon (H-8)', - pops = { { - id = 2923, --Cockatrice Tailmeat - type = 'item', - dropped_from = { name = 'Cluckatrice (H-8)' } - }, { - id = 2949, --Quivering Eft Egg - type = 'item', + name = 'Glavoid', + pops = { { + id = 1473, --Sodden Sandworm Husk + type = 'key item', + dropped_from = { name = 'Minhocao, Timed (I-6)' } + }, { + id = 1475, --Sticky Gnat Wing + type = 'key item', + dropped_from = { name = 'Adze, Timed (G-5)' } + }, { + id = 1472, --Fat-lined Cockatrice Skin + type = 'key item', dropped_from = { - name = 'Abas, Forced (K-10)', - pops = { { - id = 2922, --Eft Egg - dropped_from = { name = 'Canyon Eft (J-10/J-11)' } - } } + name = 'Alectryon (H-8)', + pops = { { + id = 2923, --Cockatrice Tailmeat + type = 'item', + dropped_from = { name = 'Cluckatrice (H-8)' } + }, { + id = 2949, --Quivering Eft Egg + type = 'item', + dropped_from = { + name = 'Abas, Forced (K-10)', + pops = { { + id = 2922, --Eft Egg + dropped_from = { name = 'Canyon Eft (J-10/J-11)' } + } } + } + } } } - } } - } - }, { - id = 1474, --Luxuriant manticore mane - type = 'key item', - dropped_from = { - name = 'Muscaliet, Forced (J-6)', - pops = { { - id = 2925, --Resilient Mane - type = 'item', - dropped_from = { name = 'Hieracosphinx (J-6)' } - }, { - id = 2950, --Smooth Whisker - type = 'item', + }, { + id = 1474, --Luxuriant manticore mane + type = 'key item', dropped_from = { - name = 'Tefenet, Forced (G-6)', - pops = { { - id = 2924, --Shocking Whisker - dropped_from = { name = 'Jaguarundi (G-6)' } - } } + name = 'Muscaliet, Forced (J-6)', + pops = { { + id = 2925, --Resilient Mane + type = 'item', + dropped_from = { name = 'Hieracosphinx (J-6)' } + }, { + id = 2950, --Smooth Whisker + type = 'item', + dropped_from = { + name = 'Tefenet, Forced (G-6)', + pops = { { + id = 2924, --Shocking Whisker + dropped_from = { name = 'Jaguarundi (G-6)' } + } } + } + } } } - } } - } - } } + } } } diff --git a/addons/EmpyPopTracker/nms/index.lua b/addons/EmpyPopTracker/nms/index.lua index e10a91c5c..9091a466a 100644 --- a/addons/EmpyPopTracker/nms/index.lua +++ b/addons/EmpyPopTracker/nms/index.lua @@ -27,28 +27,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] local nms = { - 'alfard', - 'apademak', - 'azdaja', - 'briareus', - 'bukhis', - 'carabosse', - 'chloris', - 'cirein-croin', - 'dragua', - 'glavoid', - 'isgebind', - 'itzpapalotl', - 'kukulkan', - 'orthrus', - 'sedna', - 'sobek', - 'ulhuadshi' + 'alfard', + 'apademak', + 'azdaja', + 'briareus', + 'bukhis', + 'carabosse', + 'chloris', + 'cirein-croin', + 'dragua', + 'glavoid', + 'isgebind', + 'itzpapalotl', + 'kukulkan', + 'orthrus', + 'sedna', + 'sobek', + 'ulhuadshi' } nm_data = {} for _, nm in pairs(nms) do - nm_data[nm] = require('nms/' .. nm) + nm_data[nm] = require('nms/' .. nm) end return nm_data diff --git a/addons/EmpyPopTracker/nms/isgebind.lua b/addons/EmpyPopTracker/nms/isgebind.lua index 266c59e4e..1fd4de0e6 100644 --- a/addons/EmpyPopTracker/nms/isgebind.lua +++ b/addons/EmpyPopTracker/nms/isgebind.lua @@ -27,10 +27,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Isgebind', - pops = { { - id = 1526, --Begrimed Dragon Hide - type = 'key item', - dropped_from = { name = 'Kur, Timed (I-5/J-5)' } - } } + name = 'Isgebind', + pops = { { + id = 1526, --Begrimed Dragon Hide + type = 'key item', + dropped_from = { name = 'Kur, Timed (I-5/J-5)' } + } } } diff --git a/addons/EmpyPopTracker/nms/itzpapalotl.lua b/addons/EmpyPopTracker/nms/itzpapalotl.lua index 744677a52..371d4ab8c 100644 --- a/addons/EmpyPopTracker/nms/itzpapalotl.lua +++ b/addons/EmpyPopTracker/nms/itzpapalotl.lua @@ -27,32 +27,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Itzpapalotl', - pops = { { - id = 1488, --Venomous Wamoura Feeler - type = 'key item', - dropped_from = { - name = 'Granite Borer, Forced (K-10)', - pops = { { - id = 3072, --Withered Cocoon - type = 'item', - dropped_from = { name = 'Gullycampa (K-10)' } - } } - } - }, { - id = 1490, --Distended Chigoe Abdomen - type = 'key item', - dropped_from = { name = 'Tunga, Timed (K-10)' } - }, { - id = 1489, --Bulbous crawler cocoon - type = 'key item', - dropped_from = { - name = 'Blazing Eruca, Forced (J-10)', - pops = { { - id = 3073, --Eruca Egg - type = 'item', - dropped_from = { name = 'Ignis Eruca (J-10)' } - } } - } - } } + name = 'Itzpapalotl', + pops = { { + id = 1488, --Venomous Wamoura Feeler + type = 'key item', + dropped_from = { + name = 'Granite Borer, Forced (K-10)', + pops = { { + id = 3072, --Withered Cocoon + type = 'item', + dropped_from = { name = 'Gullycampa (K-10)' } + } } + } + }, { + id = 1490, --Distended Chigoe Abdomen + type = 'key item', + dropped_from = { name = 'Tunga, Timed (K-10)' } + }, { + id = 1489, --Bulbous crawler cocoon + type = 'key item', + dropped_from = { + name = 'Blazing Eruca, Forced (J-10)', + pops = { { + id = 3073, --Eruca Egg + type = 'item', + dropped_from = { name = 'Ignis Eruca (J-10)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/kukulkan.lua b/addons/EmpyPopTracker/nms/kukulkan.lua index 002a1926b..d49fbc8ac 100644 --- a/addons/EmpyPopTracker/nms/kukulkan.lua +++ b/addons/EmpyPopTracker/nms/kukulkan.lua @@ -27,39 +27,39 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Kukulkan', - pops = { { - id = 1466, --Mucid Ahriman Eyeball - type = 'key item', - dropped_from = { - name = 'Arimaspi, Forced (K-6)', - pops = { { - id = 2913, --Clouded Lens - type = 'item', - dropped_from = { name = 'Deep Eye (K-6/K-7)' } - } } - } - }, { - id = 1464, --Tattered Hippogryph Wing - type = 'key item', - dropped_from = { - name = 'Alkonost, Forced (H-6)', - pops = { { - id = 2912, --Giant Bugard Tusk - type = 'item', - dropped_from = { name = 'Ypotryll (I-7)' } - } } - } - }, { - id = 1465, --Cracked Wivre Horn - type = 'key item', - dropped_from = { - name = 'Keratyrannos, Forced (G-6)', - pops = { { - id = 2910, --Armored Dragonhorn - type = 'item', - dropped_from = { name = 'Mesa Wivre (G-6)' } - } } - } - } } + name = 'Kukulkan', + pops = { { + id = 1466, --Mucid Ahriman Eyeball + type = 'key item', + dropped_from = { + name = 'Arimaspi, Forced (K-6)', + pops = { { + id = 2913, --Clouded Lens + type = 'item', + dropped_from = { name = 'Deep Eye (K-6/K-7)' } + } } + } + }, { + id = 1464, --Tattered Hippogryph Wing + type = 'key item', + dropped_from = { + name = 'Alkonost, Forced (H-6)', + pops = { { + id = 2912, --Giant Bugard Tusk + type = 'item', + dropped_from = { name = 'Ypotryll (I-7)' } + } } + } + }, { + id = 1465, --Cracked Wivre Horn + type = 'key item', + dropped_from = { + name = 'Keratyrannos, Forced (G-6)', + pops = { { + id = 2910, --Armored Dragonhorn + type = 'item', + dropped_from = { name = 'Mesa Wivre (G-6)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/orthrus.lua b/addons/EmpyPopTracker/nms/orthrus.lua index 0a48cea5b..16ff706e6 100644 --- a/addons/EmpyPopTracker/nms/orthrus.lua +++ b/addons/EmpyPopTracker/nms/orthrus.lua @@ -27,31 +27,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Orthrus', - pops = { { - id = 1520, --Steaming cerberus tongue - type = 'key item', - dropped_from = { - name = 'Amarok, Forced (E-6)', - pops = { { - id = 3231, --Sharabha Hide - type = 'item', + name = 'Orthrus', + pops = { { + id = 1520, --Steaming cerberus tongue + type = 'key item', dropped_from = { - name = 'Sharabha, Forced (G-5)', - pops = { { - id = 3237, - dropped_from = { name = 'Dune Manticore (F-5/F-6)' } - } } + name = 'Amarok, Forced (E-6)', + pops = { { + id = 3231, --Sharabha Hide + type = 'item', + dropped_from = { + name = 'Sharabha, Forced (G-5)', + pops = { { + id = 3237, + dropped_from = { name = 'Dune Manticore (F-5/F-6)' } + } } + } + }, { + id = 3232, --Tiger King Hide + type = 'item', + dropped_from = { name = 'Ansherekh, Timed (F-8/G-8)' } + }, { + id = 3238, --H.Q. Dhalmel Hide + type = 'item', + dropped_from = { name = 'Camelopardalis (F-7/G-7)' } + } } } - }, { - id = 3232, --Tiger King Hide - type = 'item', - dropped_from = { name = 'Ansherekh, Timed (F-8/G-8)' } - }, { - id = 3238, --H.Q. Dhalmel Hide - type = 'item', - dropped_from = { name = 'Camelopardalis (F-7/G-7)' } - } } - } - } } + } } } diff --git a/addons/EmpyPopTracker/nms/sedna.lua b/addons/EmpyPopTracker/nms/sedna.lua index d6b20f988..e2d95077c 100644 --- a/addons/EmpyPopTracker/nms/sedna.lua +++ b/addons/EmpyPopTracker/nms/sedna.lua @@ -27,21 +27,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Sedna', - pops = { { - id = 1512, --Shimmering Pugil Scale - type = 'key item', - dropped_from = { name = 'Hrosshvalur, Timed (J-6)' } - }, { - id = 1511, --Glossy Sea Monk Sucker - type = 'key item', - dropped_from = { - name = 'Iku-Turso, Forced (J-7)', - pops = { { - id = 3100, --Moonbeam Clam - type = 'item', - dropped_from = { name = 'Jasconius (I-7/J-7)' } - } } - } - } } + name = 'Sedna', + pops = { { + id = 1512, --Shimmering Pugil Scale + type = 'key item', + dropped_from = { name = 'Hrosshvalur, Timed (J-6)' } + }, { + id = 1511, --Glossy Sea Monk Sucker + type = 'key item', + dropped_from = { + name = 'Iku-Turso, Forced (J-7)', + pops = { { + id = 3100, --Moonbeam Clam + type = 'item', + dropped_from = { name = 'Jasconius (I-7/J-7)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/sobek.lua b/addons/EmpyPopTracker/nms/sobek.lua index f6e22e968..a9dcaa033 100644 --- a/addons/EmpyPopTracker/nms/sobek.lua +++ b/addons/EmpyPopTracker/nms/sobek.lua @@ -27,32 +27,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Sobek', - pops = { { - id = 1500, --Molted Peiste Skin - type = 'key item', - dropped_from = { name = 'Gukumatz, Timed (J-11)' } - }, { - id = 1498, --Bloodstained Bugard Fang - type = 'key item', - dropped_from = { - name = 'Minax Bugard, Forced (K-10)', - pops = { { - id = 3085, --Bewitching Tusk - type = 'item', - dropped_from = { name = 'Abyssobugard (J-10/K-11)' } - } } - } - }, { - id = 1499, --Gnarled Lizard Nail - type = 'key item', - dropped_from = { - name = 'Sirrush, Forced (I-11)', - pops = { { - id = 3086, --Molt Scraps - type = 'item', - dropped_from = { name = 'Dusk Lizard (J-11)' } - } } - } - } } + name = 'Sobek', + pops = { { + id = 1500, --Molted Peiste Skin + type = 'key item', + dropped_from = { name = 'Gukumatz, Timed (J-11)' } + }, { + id = 1498, --Bloodstained Bugard Fang + type = 'key item', + dropped_from = { + name = 'Minax Bugard, Forced (K-10)', + pops = { { + id = 3085, --Bewitching Tusk + type = 'item', + dropped_from = { name = 'Abyssobugard (J-10/K-11)' } + } } + } + }, { + id = 1499, --Gnarled Lizard Nail + type = 'key item', + dropped_from = { + name = 'Sirrush, Forced (I-11)', + pops = { { + id = 3086, --Molt Scraps + type = 'item', + dropped_from = { name = 'Dusk Lizard (J-11)' } + } } + } + } } } diff --git a/addons/EmpyPopTracker/nms/ulhuadshi.lua b/addons/EmpyPopTracker/nms/ulhuadshi.lua index ad63f9168..38ead1379 100644 --- a/addons/EmpyPopTracker/nms/ulhuadshi.lua +++ b/addons/EmpyPopTracker/nms/ulhuadshi.lua @@ -27,21 +27,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] return { - name = 'Ulhuadshi', - pops = { { - id = 1492, --Shriveled Hecteyes Stalk - type = 'key item', - dropped_from = { name = 'Amun, Timed (H-8/I-9)' } - }, { - id = 1491, --Mucid Worm Segment - type = 'key item', - dropped_from = { - name = 'Pallid Percy, Forced (J-7)', - pops = { { - id = 3074, --Blanched Silver - type = 'item', - dropped_from = { name = 'Entozoon (J-7)' } - } } - } - } } + name = 'Ulhuadshi', + pops = { { + id = 1492, --Shriveled Hecteyes Stalk + type = 'key item', + dropped_from = { name = 'Amun, Timed (H-8/I-9)' } + }, { + id = 1491, --Mucid Worm Segment + type = 'key item', + dropped_from = { + name = 'Pallid Percy, Forced (J-7)', + pops = { { + id = 3074, --Blanched Silver + type = 'item', + dropped_from = { name = 'Entozoon (J-7)' } + } } + } + } } } From 56e7eb6e55d1cc861696a8a373af76ad6189793c Mon Sep 17 00:00:00 2001 From: nassiralawar Date: Thu, 13 Feb 2020 19:59:37 -0800 Subject: [PATCH 7/8] Clean up a tab --- addons/scoreboard/scoreboard.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/scoreboard/scoreboard.lua b/addons/scoreboard/scoreboard.lua index 6a6c0fe39..be92b2363 100644 --- a/addons/scoreboard/scoreboard.lua +++ b/addons/scoreboard/scoreboard.lua @@ -485,7 +485,7 @@ function find_pet_owner_name(actionpacket) for _, member in pairs(party) do if type(member) == 'table' and member.mob then if member.mob.pet_index and member.mob.pet_index> 0 and pet.index == member.mob.pet_index then - name = member.mob.name + name = member.mob.name break end end From edf900c66e4da636875787d10e47b017e0bc0d4d Mon Sep 17 00:00:00 2001 From: nassiralawar Date: Thu, 13 Feb 2020 20:00:16 -0800 Subject: [PATCH 8/8] Adding check for message_id 802 to cover the new Siren HP drain BP --- addons/scoreboard/scoreboard.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/scoreboard/scoreboard.lua b/addons/scoreboard/scoreboard.lua index be92b2363..1d35ea159 100644 --- a/addons/scoreboard/scoreboard.lua +++ b/addons/scoreboard/scoreboard.lua @@ -437,6 +437,9 @@ function action_handler(raw_actionpacket) dps_db:incr_ws_misses(target:get_name(), create_mob_name(actionpacket)) elseif main.resource and main.resource == 'weapon_skills' and main.conclusion then dps_db:add_ws_damage(target:get_name(), create_mob_name(actionpacket), main.param, main.spell_id) + -- Siren's Hysteric Assault does HP drain and falls under message_id 802 + elseif main.message_id == 802 then + dps_db:add_damage(target:get_name(), create_mob_name(actionpacket), main.param) elseif main.conclusion then if main.conclusion.subject == 'target' and T(main.conclusion.objects):contains('HP') and main.param ~= 0 then dps_db:add_damage(target:get_name(), create_mob_name(actionpacket), (main.conclusion.verb == 'gains' and -1 or 1)*main.param)