diff options
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/thtracker/thtracker.lua')
-rw-r--r-- | Data/BuiltIn/Libraries/lua-addons/addons/thtracker/thtracker.lua | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/thtracker/thtracker.lua b/Data/BuiltIn/Libraries/lua-addons/addons/thtracker/thtracker.lua new file mode 100644 index 0000000..2f05e04 --- /dev/null +++ b/Data/BuiltIn/Libraries/lua-addons/addons/thtracker/thtracker.lua @@ -0,0 +1,125 @@ +--Copyright © 2017, Krizz +--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 thtracker 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 KRIZZ 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 = 'THTracker' +_addon.author = 'Krizz' +_addon.version = 1.2 +_addon.commands = {'thtracker', 'th'} + +config = require ('config') +texts = require ('texts') +packets = require('packets') +require('logger') + +defaults = {} +defaults.pos = {} +defaults.pos.x = 1000 +defaults.pos.y = 200 +defaults.color = {} +defaults.color.alpha = 200 +defaults.color.red = 200 +defaults.color.green = 200 +defaults.color.blue = 200 +defaults.bg = {} +defaults.bg.alpha = 200 +defaults.bg.red = 30 +defaults.bg.green = 30 +defaults.bg.blue = 30 + +settings = config.load(defaults) + +th = texts.new('${th_string}', settings) + +local th_table = {} + +windower.register_event('addon command', function(command, ...) + command = command and command:lower() + local params = {...} + + if command == 'pos' then + local posx, posy = tonumber(params[2]), tonumber(params[3]) + if posx and posy then + th:pos(posx, posy) + end + elseif command == "hide" then + th:hide() + elseif command == 'show' then + th:show() + else + print('th help : Shows help message') + print('th pos <x> <y> : Positions the list') + print('th hide : Hides the box') + print('th show : Shows the box') + end +end) + +windower.register_event('incoming chunk', function(id, data) + if id == 0x028 then + local packet = packets.parse('incoming', data) + if packet.Category == 1 and packet['Target 1 Action 1 Has Added Effect'] and packet['Target 1 Action 1 Added Effect Message'] == 603 then + th_table[packet['Target 1 ID']] = 'TH: '..packet['Target 1 Action 1 Added Effect Param'] + update_text() + elseif packet.Category == 3 and packet['Target 1 Action 1 Message'] == 608 then + th_table[packet['Target 1 ID']] = 'TH: '..packet['Target 1 Action 1 Param'] + update_text() + end + elseif id == 0x038 then + local packet = packets.parse('incoming', data) + if th_table[packet['Mob']] and packet['Type'] == 'kesu' then + th_table[packet['Mob']] = nil + update_text() + end + elseif id == 0x00E then + local packet = packets.parse('incoming', data) + if th_table[packet['NPC']] and packet['Status'] == 0 and packet['HP %'] == 100 then + th_table[packet['NPC']] = nil + update_text() + end + end +end) + +windower.register_event('zone change', function() + th_table = {} + update_text() +end) + +windower.register_event('target change', function() + update_text() +end) + +function update_text() + local current_string + local target = windower.ffxi.get_mob_by_target('st') or windower.ffxi.get_mob_by_target('t') + if target and th_table[target.id] then + current_string = target.name..'\n '..th_table[target.id] + th:show() + else + current_string = '' + th:hide() + end + th.th_string = current_string +end |