summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/lua-addons/addons/send/send.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/send/send.lua')
-rw-r--r--Data/BuiltIn/Libraries/lua-addons/addons/send/send.lua101
1 files changed, 101 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/send/send.lua b/Data/BuiltIn/Libraries/lua-addons/addons/send/send.lua
new file mode 100644
index 0000000..8df543b
--- /dev/null
+++ b/Data/BuiltIn/Libraries/lua-addons/addons/send/send.lua
@@ -0,0 +1,101 @@
+_addon.version = '1.0'
+_addon.name = 'Send'
+_addon.command = 'send'
+_addon.author = 'Byrth'
+
+windower.register_event('addon command',function (...)
+ local term = table.concat({...}, ' ')
+
+ term = term:gsub('<(%a+)id>', function(target_string)
+ local entity = windower.ffxi.get_mob_by_target(target_string)
+ return entity and entity.id or '<' .. target_string .. 'id>'
+ end)
+
+ local broken_init = split(term, ' ')
+ local qual = table.remove(broken_init,1)
+ local player = windower.ffxi.get_player()
+
+ if qual:lower()==player['name']:lower() then
+ if broken_init ~= nil then
+ relevant_msg(table.concat(broken_init,' '))
+ end
+ elseif qual:lower()=='@all' or qual:lower()=='@'..player.main_job:lower() then
+ if broken_init ~= nil then
+ relevant_msg(table.concat(broken_init,' '))
+ end
+ windower.send_ipc_message('send ' .. term)
+ else
+ windower.send_ipc_message('send ' .. term)
+ end
+end)
+
+windower.register_event('ipc message',function (msg)
+ local broken = split(msg, ' ')
+
+ local command = table.remove(broken, 1)
+ if command ~= 'send' then
+ return
+ end
+
+ if #broken < 2 then return end
+
+ local qual = table.remove(broken,1)
+ local player = windower.ffxi.get_player()
+ if qual:lower()==player.name:lower() then
+ relevant_msg(table.concat(broken,' '))
+ end
+ if string.char(qual:byte(1)) == '@' then
+ local arg = string.char(qual:byte(2, qual:len()))
+ if arg:upper() == player.main_job:upper() then
+ if broken ~= nil then
+ relevant_msg(table.concat(broken,' '))
+ end
+ elseif arg:upper() == 'ALL' then
+ if broken ~= nil then
+ relevant_msg(table.concat(broken,' '))
+ end
+ elseif arg:upper() == 'OTHERS' then
+ if broken ~= nil then
+ relevant_msg(table.concat(broken,' '))
+ end
+ end
+ end
+end)
+
+function split(msg, match)
+ if msg == nil then return '' end
+ local length = msg:len()
+ local splitarr = {}
+ local u = 1
+ while u <= length do
+ local nextanch = msg:find(match,u)
+ if nextanch ~= nil then
+ splitarr[#splitarr+1] = msg:sub(u,nextanch-match:len())
+ if nextanch~=length then
+ u = nextanch+match:len()
+ else
+ u = length
+ end
+ else
+ splitarr[#splitarr+1] = msg:sub(u,length)
+ u = length+1
+ end
+ end
+ return splitarr
+end
+
+function relevant_msg(msg)
+ local player = windower.ffxi.get_player()
+
+ if msg:sub(1,2)=='//' then
+ windower.send_command(msg:sub(3))
+ elseif msg:sub(1,1)=='/' then
+ windower.send_command('input '..msg)
+ elseif msg:sub(1,3)=='atc' then
+ windower.add_to_chat(55,msg:sub(5))
+ else
+ windower.send_command(msg)
+ end
+
+end
+