diff options
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer')
3 files changed, 347 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer/InfoReplacer.lua b/Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer/InfoReplacer.lua new file mode 100644 index 0000000..7948f62 --- /dev/null +++ b/Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer/InfoReplacer.lua @@ -0,0 +1,105 @@ +-- Copyright © 2014-2015, Cairthenn +-- 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 InfoReplacer 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 Cairthenn 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.author = 'Cairthenn' +_addon.name = 'InfoReplacer' +_addon.version = '2.0' +_addon.command = 'inforeplacer' + +require('tables') +require('strings') +require('logger') + +replace = require('reps') +raw = {} +custom = T{} +fns = {} + +windower.register_event('addon command', function(command, ...) + command = command and command:lower() or 'help' + local args = {...} + + if command == 'help' or command == 'h' then + print(_addon.name .. 'v.' .. _addon.version) + print(' \\cs(51, 153, 255)s\\cs(153, 204, 255)et <name> <value>\\cr - Defines a custom replacement') + print(' \\cs(153, 204, 255)set\\cs(51, 153, 255)e\\cs(153, 204, 255)val <name> <code>\\cr - Defines a custom replacement as Lua code') + print(' \\cs(51, 153, 255)u\\cs(153, 204, 255)nset <name>\\cr - Removes a previously defined custom replacement') + print(' \\cs(51, 153, 255)l\\cs(153, 204, 255)ist\\cr - Lists all custom replacements') + + elseif command == 'list' or command == 'l' then + if not custom:empty() then + log('Available custom replacement variable list:') + for key in custom:keyset():sort():it() do + local value = raw[key] + if fns[key] then + value = '%s ? %s':format(value, custom[key]()) + end + log(' #' .. key, value) + end + else + log('No custom replacements defined. For default replacements view ' .. windower.addon_path .. 'reps.lua') + end + + elseif command == 'set' or command == 's' then + if #args < 2 then + error('Incorrect syntax. The "set" syntax is as follows: //inforeplacer set <name> <value>') + return + end + + custom[args[1]] = args[2]:fn() + raw[args[1]] = args[2] + fns[args[1]] = nil + + elseif command == 'unset' or command == 'u' then + if #args < 1 then + error('Incorrect syntax. The "unset" syntax is as follows: //inforeplacer unset <name>') + return + end + + custom[args[1]] = nil + raw[args[1]] = nil + fns[args[1]] = nil + + elseif command == 'seteval' or command == 'e' then + if #args < 2 then + error('Incorrect syntax. The "seteval" syntax is as follows: //inforeplacer seteval <name> <value>') + return + end + + custom[args[1]] = assert(loadstring('return ' .. args[2])) + raw[args[1]] = args[2] + fns[args[1]] = true + + end +end) + +windower.register_event('outgoing text', function(original,modified,blocked) + return modified:gsub('%%[^ ]+', function(match) + local token = match:sub(2) + local fn = custom[token] or replace[token] + return fn and fn() or match + end) +end) diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer/ReadMe.md b/Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer/ReadMe.md new file mode 100644 index 0000000..6772625 --- /dev/null +++ b/Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer/ReadMe.md @@ -0,0 +1,39 @@ +# InfoReplacer # + +Replaces outgoing text prefixed by % with respective information. For a complete list of replacements, view [`reps.lua`](https://github.com/Windower/Lua/blob/4.1/addons/InfoReplacer/reps.lua). + +---- + +### Commands: ### + +#### Show replacements #### + +``` +//inforeplacer list +``` + +Shows all (custom) replacement names. + +#### Set custom replacement #### + +``` +//inforeplacer set <name> <value> +``` + +Defines a custom replacement variable as the provided value. + +#### Set custom code replacement #### + +``` +//inforeplacer seteval <name> <code> +``` + +Defines a custom replacement variable as the provided Lua expression. This expression will be evaluated whenever it appears in the chat, so this can be used to print dynamic values. + +#### Remove custom replacement #### + +``` +//inforeplacer unset <name> +``` + +Deletes a previously defined custom replacement variable. diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer/reps.lua b/Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer/reps.lua new file mode 100644 index 0000000..685a17c --- /dev/null +++ b/Data/BuiltIn/Libraries/lua-addons/addons/InfoReplacer/reps.lua @@ -0,0 +1,203 @@ +-- Copyright © 2014-2015, Cairthenn +-- 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 InfoReplacer 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 Cairthenn 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. + +require('tables') +local res = require('resources') + +return T{ + + name = function() return windower.ffxi.get_player().name end, + linkshell = function() return windower.ffxi.get_player().linkshell end, + linkshell_rank = function() return windower.ffxi.get_player().linkshell_rank end, + linkshell_slot = function() return windower.ffxi.get_player().linkshell_slot end, + main_job = function() return res.jobs[windower.ffxi.get_player().main_job].short end, + main_job_level = function() return windower.ffxi.get_player().main_job_level end, + main_job_full = function() return res.jobs[windower.ffxi.get_player().main_job].english end, + main_job_id = function() return windower.ffxi.get_player().main_job_id end, + status = function() return res.statuses[windower.ffxi.get_player().status].english end, + status_id = function() return windower.ffxi.get_player().status end, + index = function() return windower.ffxi.get_player().index end, + sub_job = function() return res.jobs[windower.ffxi.get_player().sub_job].short end, + sub_job_level = function() return windower.ffxi.get_player().sub_job_level end, + sub_job_full = function() return res.jobs[windower.ffxi.get_player().sub_job].english end, + sub_job_id = function() return windower.ffxi.get_player().sub_job_id end, + target_index = function() return windower.ffxi.get_player().target_index end, + target_locked = function() return windower.ffxi.get_player().target_locked and "True" or "False" end, + autorun = function() return windower.ffxi.get_player().autorun and "True" or "False" end, + follow_index = function() return windower.ffxi.get_player().follow_index end, + in_combat = function() return windower.ffxi.get_player().in_combat and "True" or "False" end, + id = function() return windower.ffxi.get_mob_by_target('me').id end, + + + hp = function() return windower.ffxi.get_player().vitals.hp end, + max_hp = function() return windower.ffxi.get_player().vitals.max_hp end, + hpp = function() return windower.ffxi.get_player().vitals.hpp end, + mp = function() return windower.ffxi.get_player().vitals.mp end, + max_mp = function() return windower.ffxi.get_player().vitals.max_mp end, + mpp = function() return windower.ffxi.get_player().vitals.mpp end, + tp = function() return windower.ffxi.get_player().vitals.tp end, + + + hand_to_hand = function() return windower.ffxi.get_player().skills.hand_to_hand end, + dagger = function() return windower.ffxi.get_player().skills.dagger end, + sword = function() return windower.ffxi.get_player().skills.sword end, + great_sword = function() return windower.ffxi.get_player().skills.great_sword end, + axe = function() return windower.ffxi.get_player().skills.axe end, + great_axe = function() return windower.ffxi.get_player().skills.great_axe end, + scythe = function() return windower.ffxi.get_player().skills.scythe end, + polearm = function() return windower.ffxi.get_player().skills.polearm end, + katana = function() return windower.ffxi.get_player().skills.katana end, + great_katana = function() return windower.ffxi.get_player().skills.great_katana end, + club = function() return windower.ffxi.get_player().skills.club end, + staff = function() return windower.ffxi.get_player().skills.staff end, + archery = function() return windower.ffxi.get_player().skills.archery end, + marksmanship = function() return windower.ffxi.get_player().skills.marksmanship end, + throwing = function() return windower.ffxi.get_player().skills.throwing end, + guarding = function() return windower.ffxi.get_player().skills.guarding end, + evasion = function() return windower.ffxi.get_player().skills.evasion end, + shield = function() return windower.ffxi.get_player().skills.shield end, + parrying = function() return windower.ffxi.get_player().skills.parrying end, + divine_magic = function() return windower.ffxi.get_player().skills.divine_magic end, + healing_magic = function() return windower.ffxi.get_player().skills.healing_magic end, + enhancing_magic = function() return windower.ffxi.get_player().skills.enhancing_magic end, + enfeebling_magic = function() return windower.ffxi.get_player().skills.enfeebling_magic end, + elemental_magic = function() return windower.ffxi.get_player().skills.elemental_magic end, + dark_magic = function() return windower.ffxi.get_player().skills.dark_magic end, + summoning_magic = function() return windower.ffxi.get_player().skills.summoning_magic end, + ninjitsu = function() return windower.ffxi.get_player().skills.ninjitsu end, + singing = function() return windower.ffxi.get_player().skills.singing end, + stringed_instrument = function() return windower.ffxi.get_player().skills.string end, + wind_instrument = function() return windower.ffxi.get_player().skills.wind end, + blue_magic = function() return windower.ffxi.get_player().skills.blue_magic end, + alchemy = function() return windower.ffxi.get_player().skills.alchemy end, + bonecraft = function() return windower.ffxi.get_player().skills.bonecraft end, + clothcraft = function() return windower.ffxi.get_player().skills.clothcraft end, + cooking = function() return windower.ffxi.get_player().skills.cooking end, + fishing = function() return windower.ffxi.get_player().skills.fishing end, + goldsmithing = function() return windower.ffxi.get_player().skills.goldsmithing end, + leathercraft = function() return windower.ffxi.get_player().skills.leathercraft end, + smithing = function() return windower.ffxi.get_player().skills.smithing end, + woodworking = function() return windower.ffxi.get_player().skills.woodworking end, + synergy = function() return windower.ffxi.get_player().skills.synergy end, + + + camera_x = function() return windower.ffxi.get_camera().camera_x end, + camera_y = function() return windower.ffxi.get_camera().camera_y end, + camera_z = function() return windower.ffxi.get_camera().camera_z end, + + + windower_x = function() return windower.get_windower_settings().windower_x end, + windower_y = function() return windower.get_windower_settings().windower_y end, + windower_x_pos = function() return windower.get_windower_settings().windower_x_pos end, + windower_y_pos = function() return windower.get_windower_settings().windower_y_pos end, + ui_x = function() return windower.get_windower_settings().ui_x end, + ui_y = function() return windower.get_windower_settings().ui_y end, + launcher_version = function() return windower.get_windower_settings().launcher_version end, + + + day = function() return res.days[windower.ffxi.get_info().day].english end, + day_element = function() return res.elements[res.days[windower.ffxi.get_info().day].element].english end, + moon = function() return res.moon_phases[windower.ffxi.get_info().moon_phase].english end, + moon_pct = function() return windower.ffxi.get_info().moon end, + time = function() time = windower.ffxi.get_info().time return (time / 60):floor() .. ':' .. (time % 60) end, + zone = function() return res.zones[windower.ffxi.get_info().zone].english end, + zone_id = function() return windower.ffxi.get_info().zone end, + logged_in = function() return windower.ffxi.get_info().logged_in end, + weather = function() return res.weather[windower.ffxi.get_info().weather].english end, + weather_id = function() return windower.ffxi.get_info().weather end, + weather_element = function() return res.elements[res.weathers[windower.ffxi.get_info().weather].element].english end, + language = function() return windower.ffxi.get_info().language end, + + + target_name = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').name end, + target_claim_id = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').claim_id end, + target_distance = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').distance end, + target_facing = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').facing end, + target_hpp = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').hpp end, + target_id = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').id end, + target_is_npc = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').is_npc and "True" or "False" end, + target_mob_type = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').mob_type end, + target_model_size = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t')._model_size end, + target_speed = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').speed end, + target_speed_base = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').speed_base end, + target_status = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').status end, + target_index = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').index end, + target_x = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').x end, + target_y = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').y end, + target_z = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').z end, + target_pet_index = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').pet_index end, + target_mpp = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').mpp end, + target_fellow_index = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').fellow_index end, + target_race = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').race end, + target_tp = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').tp end, + target_charmed = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').charmed and "True" or "False" end, + target_in_party = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').in_party and "True" or "False" end, + target_in_alliance = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').in_alliance and "True" or "False" end, + target_is_valid = function() return windower.ffxi.get_mob_by_target('t') and windower.ffxi.get_mob_by_target('t').is_valid and "True" or "False" end, + + pet_name = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').name end, + pet_claim_id = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').claim_id end, + pet_distance = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').distance end, + pet_facing = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').facing end, + pet_hpp = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').hpp end, + pet_id = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').id end, + pet_is_npc = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').is_npc end, + pet_mob_type = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').mob_type end, + pet_model_size = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').model_size end, + pet_speed = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').speed end, + pet_speed_base = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').speed_base end, + pet_status = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').status end, + pet_index = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').index end, + pet_x = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').x end, + pet_y = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').y end, + pet_z = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').z end, + pet_race = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').race end, + pet_tp = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').tp end, + pet_charmed = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').charmed and "True" or "False" end, + pet_in_party = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').in_party and "True" or "False" end, + pet_in_alliance = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').in_alliance and "True" or "False" end, + pet_is_valid = function() return windower.ffxi.get_mob_by_target('pet') and windower.ffxi.get_mob_by_target('pet').is_valid and "True" or "False" end, + + + gil = function() return windower.ffxi.get_items().gil end, + + ammo = function() return windower.ffxi.get_items().equipment.ammo > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.ammo].id].english end, + back = function() return windower.ffxi.get_items().equipment.back > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.back].id].english end, + body = function() return windower.ffxi.get_items().equipment.body > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.body].id].english end, + feet = function() return windower.ffxi.get_items().equipment.feet > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.feet].id].english end, + hands = function() return windower.ffxi.get_items().equipment.hands > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.hands].id].english end, + head = function() return windower.ffxi.get_items().equipment.head > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.head].id].english end, + left_ear = function() return windower.ffxi.get_items().equipment.left_ear > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.left_ear].id].english end, + legs = function() return windower.ffxi.get_items().equipment.legs > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.legs].id].english end, + left_ring = function() return windower.ffxi.get_items().equipment.left_ring > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.left_ring].id].english end, + main = function() return windower.ffxi.get_items().equipment.main > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.main].id].english end, + neck = function() return windower.ffxi.get_items().equipment.neck > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.neck].id].english end, + range = function() return windower.ffxi.get_items().equipment.range > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.range].id].english end, + right_ear = function() return windower.ffxi.get_items().equipment.right_ear > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.right_ear].id].english end, + right_ring = function() return windower.ffxi.get_items().equipment.right_ring > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.right_ring].id].english end, + sub = function() return windower.ffxi.get_items().equipment.sub > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.sub].id].english end, + waist = function() return windower.ffxi.get_items().equipment.waist > 0 and res.items[windower.ffxi.get_items().inventory[windower.ffxi.get_items().equipment.waist].id].english end +} |