1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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
|