diff --git a/addons/libs/config.lua b/addons/libs/config.lua index 11148d7d02..7829c7f199 100644 --- a/addons/libs/config.lua +++ b/addons/libs/config.lua @@ -115,7 +115,7 @@ function parse(settings) local full_parsed = parsed.global local player = windower.ffxi.get_player() if player then - full_parsed = full_parsed:update(parsed[player.name:lower()], true) + full_parsed = table.update(full_parsed, rawget(parsed, player.name:lower()), true) end return settings:update(full_parsed, true) @@ -133,7 +133,7 @@ function parse(settings) local player = windower.ffxi.get_player() if player then - full_parsed = full_parsed:update(parsed[player.name:lower()], true) + full_parsed = table.update(full_parsed, rawget(parsed, player.name:lower()), true) end return merge(settings, full_parsed) diff --git a/addons/libs/extdata.lua b/addons/libs/extdata.lua index c92e7bdcf1..61f73a2d94 100644 --- a/addons/libs/extdata.lua +++ b/addons/libs/extdata.lua @@ -1481,7 +1481,7 @@ function tools.bit.l_to_r_bit_packed(dat_string,start,stop) local c_count = math.ceil(stop/8) while c_count >= math.ceil((start+1)/8) do -- Grabs the most significant byte first and works down towards the least significant. - local cur_val = dat_string:byte(c_count) + local cur_val = dat_string:byte(c_count) or 0 local scal = 1 if c_count == math.ceil(stop/8) then -- Take the least significant bits of the most significant byte @@ -1683,7 +1683,10 @@ end function decode.Linkshell(str) local status_map = {[0]='Unopened',[1]='Linkshell',[2]='Pearlsack',[3]='Linkpearl',[4]='Broken'} - local name_end = string.find(str,string.char(0),10) + local name_end = #str + while str:byte(name_end) == 0 and name_end > 10 do + name_end = name_end - 1 + end local name_map = {[0]="'",[1]="a",[2]='b',[3]='c',[4]='d',[5]='e',[6]='f',[7]='g',[8]='h',[9]='i',[10]='j', [11]='k',[12]='l',[13]='m',[14]='n',[15]='o',[16]='p',[17]='q',[18]='r',[19]='s',[20]='t',[21]='u',[22]='v',[23]='w', [24]='x',[25]='yx',[26]='z',[27]='A',[28]='B',[29]='C',[30]='D',[31]='E',[32]='F',[33]='G',[34]='H',[35]='I',[36]='J', diff --git a/addons/libs/functions.lua b/addons/libs/functions.lua index eaefbd7fb7..5dc15f3004 100644 --- a/addons/libs/functions.lua +++ b/addons/libs/functions.lua @@ -145,9 +145,9 @@ function functions.it(fn, ...) end end --- Schedules the current function to run delayed by the provided time in seconds +-- Schedules the current function to run delayed by the provided time in seconds and returns the coroutine function functions.schedule(fn, time, ...) - coroutine.schedule(fn:prepare(...), time) + return coroutine.schedule(fn:prepare(...), time) end -- Returns a function that, when called, will execute the underlying function delayed by the provided number of seconds @@ -495,7 +495,7 @@ function string.map(str, fn) end --[[ -Copyright © 2013-2015, Windower +Copyright © 2013-2015, Windower All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/addons/libs/packets/fields.lua b/addons/libs/packets/fields.lua index a2f90857da..283aded25d 100644 --- a/addons/libs/packets/fields.lua +++ b/addons/libs/packets/fields.lua @@ -733,7 +733,7 @@ fields.outgoing[0x063] = L{ --"New" Key Item examination packet fields.outgoing[0x064] = L{ {ctype='unsigned int', label='Player', fn=id}, -- 04 - {ctype='byte[0x40]', label='flags'}, -- 08 These correspond to a particular section of the 0x55 incoming packet + {ctype='data[0x40]', label='flags'}, -- 08 These correspond to a particular section of the 0x55 incoming packet {ctype='unsigned int', label='_unknown1'}, -- 48 This field somehow denotes which half-0x55-packet the flags corresponds to } @@ -1243,7 +1243,8 @@ fields.incoming[0x00A] = L{ {ctype='unsigned short', label='Night Music'}, -- 58 {ctype='unsigned short', label='Solo Combat Music'}, -- 5A {ctype='unsigned short', label='Party Combat Music'}, -- 5C - {ctype='data[4]', label='_unknown4'}, -- 5E + {ctype='unsigned short', label='Mount Music'}, -- 5E + {ctype='data[2]', label='_unknown4'}, -- 60 {ctype='unsigned short', label='Menu Zone'}, -- 62 Only set if the menu ID is sent, used as the zone for menu responses (0x5b, 0x5c) {ctype='unsigned short', label='Menu ID'}, -- 64 {ctype='unsigned short', label='_unknown5'}, -- 66 @@ -3133,7 +3134,7 @@ fields.incoming[0x075] = L{ {ctype='unsigned int', label='Fight Designation'}, -- 04 Anything other than 0 makes a timer. 0 deletes the timer. {ctype='unsigned int', label='Timestamp Offset', fn=time}, -- 08 Number of seconds since 15:00:00 GMT 31/12/2002 (0x3C307D70) {ctype='unsigned int', label='Fight Duration', fn=time}, -- 0C - {ctype='byte[12]', label='_unknown1'}, -- 10 This packet clearly needs position information, but it's unclear how these bytes carry it + {ctype='data[12]', label='_unknown1'}, -- 10 This packet clearly needs position information, but it's unclear how these bytes carry it {ctype='unsigned int', label='Battlefield Radius'}, -- 1C Yalms*1000, so a 50 yalm battlefield would have 50,000 for this field {ctype='unsigned int', label='Render Radius'}, -- 20 Yalms*1000, so a fence that renders when you're 25 yalms away would have 25,000 for this field } diff --git a/addons/libs/slips.lua b/addons/libs/slips.lua index 495e624b24..67edbaa3b7 100644 --- a/addons/libs/slips.lua +++ b/addons/libs/slips.lua @@ -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, 20569, 20570, 22288, 26352, 23737, 22282, 3740, 26545, 21977, 21978, 3742, 26519, 26514, 26515, 3743, 21636, 23753, 23754, 54, 25910, 20571, 23790, 23791, 26489}, -- 129 + [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, 0, 26545, 21977, 21978, 3742, 26519, 26514, 26515, 3743, 21636, 23753, 23754, 54, 25910, 20571, 23790, 23791, 26489}, -- 130 SE Skipped an index hence the 0 as one of the items [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, 21681, 22005, 21745, 22068, 21759, 21770}, --174 [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 diff --git a/addons/macrochanger/macrochanger.lua b/addons/macrochanger/macrochanger.lua index 727f592dd3..592de141ee 100644 --- a/addons/macrochanger/macrochanger.lua +++ b/addons/macrochanger/macrochanger.lua @@ -30,139 +30,139 @@ _addon.version = '1.0.0.1' _addon.commands = {'mc','macrochanger'} require('strings') +require('logger') windower.register_event('load', function() - globaldisable = 0 - macros = { - WAR = {Book = '', Page = ''}, - MNK = {Book = '', Page = ''}, - WHM = {Book = '', Page = ''}, - BLM = {Book = '', Page = ''}, - RDM = {Book = '', Page = ''}, - THF = {Book = '', Page = ''}, - PLD = {Book = '', Page = ''}, - DRK = {Book = '', Page = ''}, - BST = {Book = '', Page = ''}, - BRD = {Book = '', Page = ''}, - RNG = {Book = '', Page = ''}, - SAM = {Book = '', Page = ''}, - NIN = {Book = '', Page = ''}, - DRG = {Book = '', Page = ''}, - SMN = {Book = '', Page = ''}, - BLU = {Book = '', Page = ''}, - COR = {Book = '', Page = ''}, - PUP = {Book = '', Page = ''}, - DNC = {Book = '', Page = ''}, - SCH = {Book = '', Page = ''}, - GEO = {Book = '', Page = ''}, - RUN = {Book = '', Page = ''}, - } - options_load() + globaldisable = 0 + macros = { + WAR = {Book = '', Page = ''}, + MNK = {Book = '', Page = ''}, + WHM = {Book = '', Page = ''}, + BLM = {Book = '', Page = ''}, + RDM = {Book = '', Page = ''}, + THF = {Book = '', Page = ''}, + PLD = {Book = '', Page = ''}, + DRK = {Book = '', Page = ''}, + BST = {Book = '', Page = ''}, + BRD = {Book = '', Page = ''}, + RNG = {Book = '', Page = ''}, + SAM = {Book = '', Page = ''}, + NIN = {Book = '', Page = ''}, + DRG = {Book = '', Page = ''}, + SMN = {Book = '', Page = ''}, + BLU = {Book = '', Page = ''}, + COR = {Book = '', Page = ''}, + PUP = {Book = '', Page = ''}, + DNC = {Book = '', Page = ''}, + SCH = {Book = '', Page = ''}, + GEO = {Book = '', Page = ''}, + RUN = {Book = '', Page = ''}, + } + options_load() end) function options_load() - local f = io.open(windower.addon_path..'data/settings.txt', "r") - if f == nil then - local g = io.open(windower.addon_path..'data/settings.txt', "w") - g:write('Release Date: 9:00 PM, 4-01-13\46\n') - g:write('Author Comment: This document is whitespace sensitive, which means that you need the same number of spaces between things as exist in this initial settings file\46\n') - g:write('Author Comment: It looks at the first two words separated by spaces and then takes anything as the value in question if the first two words are relevant\46\n') - g:write('Author Comment: If you ever mess it up so that it does not work, you can just delete it and MacroChanger will regenerate it upon reload\46\n') - g:write('Author Comment: For the output customization lines, simply place the book and page number that you would like to change to upon a job change.\46\n') - g:write('Author Comment: If 2 jobs share a book, you can place the same book number for each job, then put their individual pages.\46\n') - g:write('Author Comment: Example: BLM and SCH both use Macro Book 2: BLM uses page 3. SCH uses page 1.\46\n') - g:write('Author Comment: Put BLM Book: 2, BLM Page: 3, SCH Book: 2, SCH Page: 1.\46\n') - g:write('Author Comment: If you wish to disable auto-macro Changing for a specific job, type "disabled" instead of a book number. (e.g. BLM Book: disabled)\n') - g:write('Author Comment: The design of the settings file is credited to Byrthnoth as well as the creation of the settings file.\n\n\n') - g:write('File Settings: Fill in below\n') - g:write('Disable All: 0\n') - g:write('WAR Book: 1\nWAR Page: 1\nMNK Book: 2\nMNK Page: 1\nWHM Book: 3\nWHM Page: 1\nBLM Book: 4\nBLM Page: 1\nRDM Book: 5\nRDM Page: 1\nTHF Book: 6\nTHF Page: 1\n') - g:write('PLD Book: 7\nPLD Page: 1\nDRK Book: 8\nDRK Page: 1\nBST Book: 9\nBST Page: 1\nBRD Book: 10\nBRD Page: 1\nRNG Book: 11\nRNG Page: 1\nSAM Book: 12\nSAM Page: 1\n') - g:write('NIN Book: 13\nNIN Page: 1\nDRG Book: 14\nDRG Page: 1\nSMN Book: 15\nSMN Page: 1\nBLU Book: 16\nBLU Page: 1\nCOR Book: 17\nCOR Page: 1\nPUP Book: 18\nPUP Page: 1\n') - g:write('DNC Book: 19\nDNC Page: 1\nSCH Book: 20\nSCH Page: 1\nGEO Book: 20\nGEO Page: 1\nRUN Book: 20\nRUN Page: 1\n') - g:close() - DisableAll = 0 - macros = { - WAR = {Book = '1', Page = '1'}, - MNK = {Book = '2', Page = '1'}, - WHM = {Book = '3', Page = '1'}, - BLM = {Book = '4', Page = '1'}, - RDM = {Book = '5', Page = '1'}, - THF = {Book = '6', Page = '1'}, - PLD = {Book = '7', Page = '1'}, - DRK = {Book = '8', Page = '1'}, - BST = {Book = '9', Page = '1'}, - BRD = {Book = '10', Page = '1'}, - RNG = {Book = '11', Page = '1'}, - SAM = {Book = '12', Page = '1'}, - NIN = {Book = '13', Page = '1'}, - DRG = {Book = '14', Page = '1'}, - SMN = {Book = '15', Page = '1'}, - BLU = {Book = '16', Page = '1'}, - COR = {Book = '17', Page = '1'}, - PUP = {Book = '18', Page = '1'}, - DNC = {Book = '19', Page = '1'}, - SCH = {Book = '20', Page = '1'}, - GEO = {Book = '20', Page = '1'}, - RUN = {Book = '20', Page = '1'}, - } - print('Default settings file created') - windower.add_to_chat(12,'MacroChanger created a settings file and loaded!') - else - f:close() - for curline in io.lines(windower.addon_path..'data/settings.txt') do - local splat = curline:gsub(':',''):split(' ') - local cmd = '' - if splat[1] and macros[splat[1]:upper()] and splat[2] ~=nil and (splat[2]:lower() == 'book' or splat[2]:lower() == 'page') and splat[3] then - macros[splat[1]:upper()][splat[2]:ucfirst()] = splat[3] -- Instead of a number, this can also be 'disabled' - elseif splat[1] and splat[2] and (splat[1]..' '..splat[2]) == 'disable all' and tonumber(splat[3]) then - globaldisable = tonumber(splat[3]) - end - end - windower.add_to_chat(12,'MacroChanger read from a settings file and loaded!') - end + local f = io.open(windower.addon_path..'data/settings.txt', "r") + if f == nil then + local g = io.open(windower.addon_path..'data/settings.txt', "w") + g:write('Release Date: 9:00 PM, 4-01-13\46\n') + g:write('Author Comment: This document is whitespace sensitive, which means that you need the same number of spaces between things as exist in this initial settings file\46\n') + g:write('Author Comment: It looks at the first two words separated by spaces and then takes anything as the value in question if the first two words are relevant\46\n') + g:write('Author Comment: If you ever mess it up so that it does not work, you can just delete it and MacroChanger will regenerate it upon reload\46\n') + g:write('Author Comment: For the output customization lines, simply place the book and page number that you would like to change to upon a job change.\46\n') + g:write('Author Comment: If 2 jobs share a book, you can place the same book number for each job, then put their individual pages.\46\n') + g:write('Author Comment: Example: BLM and SCH both use Macro Book 2: BLM uses page 3. SCH uses page 1.\46\n') + g:write('Author Comment: Put BLM Book: 2, BLM Page: 3, SCH Book: 2, SCH Page: 1.\46\n') + g:write('Author Comment: If you wish to disable auto-macro Changing for a specific job, type "disabled" instead of a book number. (e.g. BLM Book: disabled)\n') + g:write('Author Comment: The design of the settings file is credited to Byrthnoth as well as the creation of the settings file.\n\n\n') + g:write('File Settings: Fill in below\n') + g:write('Disable All: 0\n') + g:write('WAR Book: 1\nWAR Page: 1\nMNK Book: 2\nMNK Page: 1\nWHM Book: 3\nWHM Page: 1\nBLM Book: 4\nBLM Page: 1\nRDM Book: 5\nRDM Page: 1\nTHF Book: 6\nTHF Page: 1\n') + g:write('PLD Book: 7\nPLD Page: 1\nDRK Book: 8\nDRK Page: 1\nBST Book: 9\nBST Page: 1\nBRD Book: 10\nBRD Page: 1\nRNG Book: 11\nRNG Page: 1\nSAM Book: 12\nSAM Page: 1\n') + g:write('NIN Book: 13\nNIN Page: 1\nDRG Book: 14\nDRG Page: 1\nSMN Book: 15\nSMN Page: 1\nBLU Book: 16\nBLU Page: 1\nCOR Book: 17\nCOR Page: 1\nPUP Book: 18\nPUP Page: 1\n') + g:write('DNC Book: 19\nDNC Page: 1\nSCH Book: 20\nSCH Page: 1\nGEO Book: 20\nGEO Page: 1\nRUN Book: 20\nRUN Page: 1\n') + g:close() + DisableAll = 0 + macros = { + WAR = {Book = '1', Page = '1'}, + MNK = {Book = '2', Page = '1'}, + WHM = {Book = '3', Page = '1'}, + BLM = {Book = '4', Page = '1'}, + RDM = {Book = '5', Page = '1'}, + THF = {Book = '6', Page = '1'}, + PLD = {Book = '7', Page = '1'}, + DRK = {Book = '8', Page = '1'}, + BST = {Book = '9', Page = '1'}, + BRD = {Book = '10', Page = '1'}, + RNG = {Book = '11', Page = '1'}, + SAM = {Book = '12', Page = '1'}, + NIN = {Book = '13', Page = '1'}, + DRG = {Book = '14', Page = '1'}, + SMN = {Book = '15', Page = '1'}, + BLU = {Book = '16', Page = '1'}, + COR = {Book = '17', Page = '1'}, + PUP = {Book = '18', Page = '1'}, + DNC = {Book = '19', Page = '1'}, + SCH = {Book = '20', Page = '1'}, + GEO = {Book = '20', Page = '1'}, + RUN = {Book = '20', Page = '1'}, + } + print('Default settings file created') + notice('MacroChanger created a settings file and loaded!') + else + f:close() + for curline in io.lines(windower.addon_path..'data/settings.txt') do + local splat = curline:gsub(':',''):split(' ') + local cmd = '' + if splat[1] and macros[splat[1]:upper()] and splat[2] ~=nil and (splat[2]:lower() == 'book' or splat[2]:lower() == 'page') and splat[3] then + macros[splat[1]:upper()][splat[2]:ucfirst()] = splat[3] -- Instead of a number, this can also be 'disabled' + elseif splat[1] and splat[2] and (splat[1]..' '..splat[2]) == 'disable all' and tonumber(splat[3]) then + globaldisable = tonumber(splat[3]) + end + end + notice('MacroChanger read from a settings file and loaded!') + end end windower.register_event('job change',function () -- Could use the job ID passed into this function, but the addon would have to include the resources library - local job = windower.ffxi.get_player().main_job - local book = '' - local page = '' - if globaldisable == 0 then + local job = windower.ffxi.get_player().main_job + local book = '' + local page = '' + if globaldisable == 0 then if job and macros[job] then - book = macros[job].Book - page = macros[job].Page - end - - if ((book == 'disabled') or (page == 'disabled')) then - windower.add_to_chat(17, ' Auto Macro Switching Disabled for ' .. job ..'.') - else - windower.add_to_chat(17, ' Changing macros to Book: ' .. book .. ' and Page: ' .. page .. '. Job Changed to ' .. job) - windower.send_command('input /macro book '..book..';wait 0.2;input /macro set '..page..';') - end - elseif globaldisable == 1 then - - windower.add_to_chat(17, ' Auto Macro Switching Disabled for All Jobs.') - - end + book = macros[job].Book + page = macros[job].Page + end + if ((book == 'disabled') or (page == 'disabled')) then + notice('Auto Macro Switching Disabled for ' .. job ..'.') + else + log('Job changed to ' .. job .. ' - switched to Book: ' .. book .. ' and Page: ' .. page) + windower.chat.input('/macro book ' .. book) + coroutine.sleep(0.2) + windower.chat.input('/macro set ' .. page) + end + elseif globaldisable == 1 then + notice('Auto Macro Switching Disabled for All Jobs.') + end end) windower.register_event('addon command', function(...) local args = {...} - local mjob = windower.ffxi.get_player().main_job - if args[1] == 'disableall' then - if args[2] == 'on' then - globaldisable = 1 - windower.add_to_chat(17, 'All automated macro switching disabled.') - elseif args[2] == 'off' then - globaldisable = 0 - windower.add_to_chat(17, 'Automated macro switching enabled.') - end - elseif args[1]:lower() == 'help' then - windower.add_to_chat(17, 'MacroChanger Commands:') - windower.add_to_chat(17, 'disableall [on|off]') - windower.add_to_chat(17, ' on - Disables all automated macro switching') - windower.add_to_chat(17, ' off - Enables all automated macro switching not disabled individually') - windower.add_to_chat(17, ' Resets to what is stored in settings upon unloading of addon. To Permanently change, please change the option in the settings file.') - end + local mjob = windower.ffxi.get_player().main_job + if args[1] == 'disableall' then + if args[2] == 'on' then + globaldisable = 1 + notice('All automated macro switching disabled.') + elseif args[2] == 'off' then + globaldisable = 0 + notice('Automated macro switching enabled.') + end + elseif args[1]:lower() == 'help' then + log('MacroChanger Commands:') + log('disableall [on|off]') + log(' on - Disables all automated macro switching') + log(' off - Enables all automated macro switching not disabled individually') + log('Resets to what is stored in settings upon unloading of addon. To Permanently change, please change the option in the settings file.') + end end) diff --git a/addons/organizer/organizer.lua b/addons/organizer/organizer.lua index 92d0853dea..7e04f14b28 100644 --- a/addons/organizer/organizer.lua +++ b/addons/organizer/organizer.lua @@ -38,7 +38,7 @@ slips = require 'slips' _addon.name = 'Organizer' _addon.author = 'Byrth, maintainer: Rooks' -_addon.version = 0.20200714 +_addon.version = 0.20210302 _addon.commands = {'organizer','org'} _static = { @@ -186,8 +186,10 @@ function options_load( ) slip_lists = require('slips') for slip_id,slip_list in pairs(slip_lists.items) do for item_id in slip_list:it() do - _retain[item_id] = "moogle slip" - org_debug("settings", "Adding ("..res.items[item_id].english..') to slip retain list') + if item_id ~= 0 then + _retain[item_id] = "moogle slip" + org_debug("settings", "Adding ("..res.items[item_id].english..') to slip retain list') + end end end end diff --git a/addons/porter/porter.lua b/addons/porter/porter.lua index b10c2eae39..39ca8d6f9a 100644 --- a/addons/porter/porter.lua +++ b/addons/porter/porter.lua @@ -36,7 +36,7 @@ res = require 'resources' slips = require 'slips' _addon.name = 'porter' -_addon.version = '1.20200419' +_addon.version = '1.20210302' _addon.command = 'porter' _addon.author = 'Zohno' @@ -83,15 +83,17 @@ function show_slip(slip_number, slip_page, owned_only) end for item_position, item_id in ipairs(slip_items) do - local is_contained = player_slip_items:contains(item_id) - - if owned_only == false or owned_only == true and is_contained == true then - windower.add_to_chat( - 55, - ('slip '..printable_slip_number..'/page '..tostring(slip_page and slip_page or math.ceil(item_position / 16)):lpad('0', 2)..':'):color(259)..' '.. - res.items[item_id].name:color(is_contained and 258 or 261) - ) - end + if item_id ~= 0 then + local is_contained = player_slip_items:contains(item_id) + + if owned_only == false or owned_only == true and is_contained == true then + windower.add_to_chat( + 55, + ('slip '..printable_slip_number..'/page '..tostring(slip_page and slip_page or math.ceil(item_position / 16)):lpad('0', 2)..':'):color(259)..' '.. + res.items[item_id].name:color(is_contained and 258 or 261) + ) + end + end end end end @@ -105,7 +107,7 @@ function show_bags() for _, item in ipairs(windower.ffxi.get_items(bag)) do local slip_id = slips.get_slip_id_by_item_id(item.id) - if slip_id then + if slip_id and item_id ~= 0 then n = n + 1 windower.add_to_chat(207, 'slip %02d: %s %s':format(slips.get_slip_number_by_id(slip_id), bag, res.items[item.id].name:color(258))) end