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
|
-- Copyright © 2015, JoshK6656, Sechs
-- 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 AnnounceTarget 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 Sechs 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.
config = require ('config')
require ('logger')
_addon.name = 'AnnounceTarget'
_addon.author = 'JoshK6656, Sechs'
_addon.version = '1.2.1'
_addon.commands = {'announcetarget','at'}
defaults = T{}
defaults.AnnounceMode = 'party' --this can be say/party/linkshell/linkshell2/shout/echo/s/p/l/l2/sh
defaults.AutoAnnounce = false
settings = config.load(defaults)
adherents_map = {['Steadfast Adherent']="PLD, DEF+", ['Furtive Adherent']="WHM, MDB+", ['Occult Adherent']="WAR, EVA+",
['Fleet Adherent']="WAR, Haste+", ['Brawny Adherent']="DRK, ATK+", ['Martial Adherent']="DRK,Regain+",
['Honed Adherent']="RDM, Fast Cast+", ['Insidious Adherent']="RDM, MEVA+", ['Hexbreaking Adherent']="BLM, MAB+"}
chatmodes = S{'say','party','linkshell','linkshell2','shout','echo','s','p','l','l2','sh'}
false_values = S{'false','off','f','0'}
true_values = S{'true','on','t','1'}
moblist = S{}
mob = windower.ffxi.get_mob_by_target('st') or windower.ffxi.get_mob_by_target('t')
windower.register_event('addon command', function (command,...)
command = command and command:lower() or 'help'
local args = T{...}
if command == 'reload' then
windower.send_command('lua reload AnnounceTarget')
elseif command == 'unload' then
windower.send_command('lua unload AnnounceTarget')
elseif command == 'chatmode' or command == 'cm' then
if args[1] ~= nil and chatmodes:contains(args[1]) then
log(' ***** Chat Mode changed to "'..args[1]..'" *****')
settings.AnnounceMode = args[1]
config.save(settings)
else
error(' ***** That is not a valid chat mode *****')
end
elseif command == 'announce' or command == 'a' then
announce(mob.name)
elseif command == 'autoannounce' or command == 'aa' then
local value = args[1] and args[1]:lower() or nil
if not value then
settings.AutoAnnounce = not settings.AutoAnnounce
elseif false_values:contains(value) or true_values:contains(value) then
settings.AutoAnnounce = not false_values:contains(args[1]:lower())
else
error(' ***** "'..args[1]..'" is not a valid setting for AutoAnnounce *****')
return
end
log(' ***** AutoAnnounce changed to "',settings.AutoAnnounce,'" *****')
config.save(settings)
elseif command == 'clear' or command == 'c' then
moblist:clear()
log(' ***** Previously announced targets table cleared *****')
elseif command == 'help' then
log(' *** '.._addon.name..' v'.._addon.version..' - Authors: '.._addon.author..' ***')
log(' help -> Displays this message')
log(' chatmode -> Changes chat output mode. Available settings: say/party/linkshell/linkshell2/shout/echo')
log(' autoannounce -> Turns AutoAnnounce on or off. Accepted settings: on/true/false/off')
log(' announce -> Manually announces for the current target')
log(' clear -> Clears the list of announced mobs during AutoAnnounce mode on')
else
error(' ***** That is not a valid AnnounceTarget command. See //at help. *****')
end
end)
function announce(name)
if adherents_map[name] then
windower.send_command('input /'..settings.AnnounceMode..' '..name..' buff is ==> '..adherents_map[name])
else
log(' ***** Target is not an Adherent *****')
end
end
windower.register_event('target change',function(index)
mob = windower.ffxi.get_mob_by_index(index)
if settings.AutoAnnounce and index ~= 0 then
if adherents_map[mob.name] and not moblist:contains(mob.id) then
moblist:add(mob.id)
announce(mob.name)
end
end
end)
windower.register_event('zone change',function(...)
moblist:clear()
end)
|