diff options
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/AnnounceTarget/AnnounceTarget.lua')
-rw-r--r-- | Data/BuiltIn/Libraries/lua-addons/addons/AnnounceTarget/AnnounceTarget.lua | 114 |
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) |