summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/lua-addons/addons/AnnounceTarget/AnnounceTarget.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/AnnounceTarget/AnnounceTarget.lua')
-rw-r--r--Data/BuiltIn/Libraries/lua-addons/addons/AnnounceTarget/AnnounceTarget.lua114
1 files changed, 114 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/AnnounceTarget/AnnounceTarget.lua b/Data/BuiltIn/Libraries/lua-addons/addons/AnnounceTarget/AnnounceTarget.lua
new file mode 100644
index 0000000..8c966cc
--- /dev/null
+++ b/Data/BuiltIn/Libraries/lua-addons/addons/AnnounceTarget/AnnounceTarget.lua
@@ -0,0 +1,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)