summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/lua-addons/addons/GearSwap/libs/Mote-SelfCommands.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/GearSwap/libs/Mote-SelfCommands.lua')
-rw-r--r--Data/BuiltIn/Libraries/lua-addons/addons/GearSwap/libs/Mote-SelfCommands.lua466
1 files changed, 466 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/GearSwap/libs/Mote-SelfCommands.lua b/Data/BuiltIn/Libraries/lua-addons/addons/GearSwap/libs/Mote-SelfCommands.lua
new file mode 100644
index 0000000..3015e1f
--- /dev/null
+++ b/Data/BuiltIn/Libraries/lua-addons/addons/GearSwap/libs/Mote-SelfCommands.lua
@@ -0,0 +1,466 @@
+-------------------------------------------------------------------------------------------------------------------
+-- General functions for manipulating state values via self-commands.
+-- Only handles certain specific states that we've defined, though it
+-- allows the user to hook into the cycle command.
+-------------------------------------------------------------------------------------------------------------------
+
+-- Routing function for general known self_commands. Mappings are at the bottom of the file.
+-- Handles splitting the provided command line up into discrete words, for the other functions to use.
+function self_command(commandArgs)
+ local commandArgs = commandArgs
+ if type(commandArgs) == 'string' then
+ commandArgs = T(commandArgs:split(' '))
+ if #commandArgs == 0 then
+ return
+ end
+ end
+
+ -- init a new eventArgs
+ local eventArgs = {handled = false}
+
+ -- Allow jobs to override this code
+ if job_self_command then
+ job_self_command(commandArgs, eventArgs)
+ end
+
+ if not eventArgs.handled then
+ -- Of the original command message passed in, remove the first word from
+ -- the list (it will be used to determine which function to call), and
+ -- send the remaining words as parameters for the function.
+ local handleCmd = table.remove(commandArgs, 1)
+
+ if selfCommandMaps[handleCmd] then
+ selfCommandMaps[handleCmd](commandArgs)
+ end
+ end
+end
+
+
+-------------------------------------------------------------------------------------------------------------------
+-- Functions for manipulating state vars.
+-------------------------------------------------------------------------------------------------------------------
+
+-- Function to set various states to specific values directly.
+-- User command format: gs c set [field] [value]
+-- If a boolean [field] is used, but not given a [value], it will be set to true.
+function handle_set(cmdParams)
+ if #cmdParams == 0 then
+ add_to_chat(123,'Mote-Libs: Set parameter failure: field not specified.')
+ return
+ end
+
+ local state_var = get_state(cmdParams[1])
+
+ if state_var then
+ local oldVal = state_var.value
+ state_var:set(cmdParams[2])
+ local newVal = state_var.value
+
+ local descrip = state_var.description or cmdParams[1]
+ if job_state_change then
+ job_state_change(descrip, newVal, oldVal)
+ end
+
+ local msg = descrip..' is now '..state_var.current
+ if state_var == state.DefenseMode and newVal ~= 'None' then
+ msg = msg .. ' (' .. state[newVal .. 'DefenseMode'].current .. ')'
+ end
+ msg = msg .. '.'
+
+ add_to_chat(122, msg)
+ handle_update({'auto'})
+ else
+ add_to_chat(123,'Mote-Libs: Set: Unknown field ['..cmdParams[1]..']')
+ end
+
+ -- handle string states: CombatForm, CombatWeapon, etc
+end
+
+-- Function to reset values to their defaults.
+-- User command format: gs c reset [field]
+-- Or: gs c reset all
+function handle_reset(cmdParams)
+ if #cmdParams == 0 then
+ if _global.debug_mode then add_to_chat(123,'handle_reset: parameter failure: reset type not specified') end
+ return
+ end
+
+ local state_var = get_state(cmdParams[1])
+
+ local oldVal
+ local newVal
+ local descrip
+
+ if state_var then
+ oldVal = state_var.value
+ state_var:reset()
+ newVal = state_var.value
+
+ local descrip = state_var.description or cmdParams[1]
+ if job_state_change then
+ job_state_change(descrip, newVal, oldVal)
+ end
+
+ add_to_chat(122,descrip..' is now '..state_var.current..'.')
+ handle_update({'auto'})
+ elseif cmdParams[1]:lower() == 'all' then
+ for k,v in pairs(state) do
+ if v._type == 'mode' then
+ oldVal = v.value
+ v:reset()
+ newVal = v.value
+
+ descrip = state_var.description
+ if descrip and job_state_change then
+ job_state_change(descrip, newVal, oldVal)
+ end
+ end
+ end
+
+ if job_reset_state then
+ job_reset_state('all')
+ end
+
+ if job_state_change then
+ job_state_change('Reset All')
+ end
+
+ add_to_chat(122,"All state vars have been reset.")
+ handle_update({'auto'})
+ elseif job_reset_state then
+ job_reset_state(cmdParams[1])
+ else
+ add_to_chat(123,'Mote-Libs: Reset: Unknown field ['..cmdParams[1]..']')
+ end
+end
+
+
+-- Handle cycling through the options list of a state var.
+-- User command format: gs c cycle [field]
+function handle_cycle(cmdParams)
+ if #cmdParams == 0 then
+ add_to_chat(123,'Mote-Libs: Cycle parameter failure: field not specified.')
+ return
+ end
+
+ local state_var = get_state(cmdParams[1])
+
+ if state_var then
+ local oldVal = state_var.value
+ if cmdParams[2] and S{'reverse', 'backwards', 'r'}:contains(cmdParams[2]:lower()) then
+ state_var:cycleback()
+ else
+ state_var:cycle()
+ end
+ local newVal = state_var.value
+
+ local descrip = state_var.description or cmdParams[1]
+ if job_state_change then
+ job_state_change(descrip, newVal, oldVal)
+ end
+
+ add_to_chat(122,descrip..' is now '..state_var.current..'.')
+ handle_update({'auto'})
+ else
+ add_to_chat(123,'Mote-Libs: Cycle: Unknown field ['..cmdParams[1]..']')
+ end
+end
+
+
+-- Handle cycling backwards through the options list of a state var.
+-- User command format: gs c cycleback [field]
+function handle_cycleback(cmdParams)
+ cmdParams[2] = 'reverse'
+ handle_cycle(cmdParams)
+end
+
+
+-- Handle toggling of boolean mode vars.
+-- User command format: gs c toggle [field]
+function handle_toggle(cmdParams)
+ if #cmdParams == 0 then
+ add_to_chat(123,'Mote-Libs: Toggle parameter failure: field not specified.')
+ return
+ end
+
+ local state_var = get_state(cmdParams[1])
+
+ if state_var then
+ local oldVal = state_var.value
+ state_var:toggle()
+ local newVal = state_var.value
+
+ local descrip = state_var.description or cmdParams[1]
+ if job_state_change then
+ job_state_change(descrip, newVal, oldVal)
+ end
+
+ add_to_chat(122,descrip..' is now '..state_var.current..'.')
+ handle_update({'auto'})
+ else
+ add_to_chat(123,'Mote-Libs: Toggle: Unknown field ['..cmdParams[1]..']')
+ end
+end
+
+
+-- Function to force a boolean field to false.
+-- User command format: gs c unset [field]
+function handle_unset(cmdParams)
+ if #cmdParams == 0 then
+ add_to_chat(123,'Mote-Libs: Unset parameter failure: field not specified.')
+ return
+ end
+
+ local state_var = get_state(cmdParams[1])
+
+ if state_var then
+ local oldVal = state_var.value
+ state_var:unset()
+ local newVal = state_var.value
+
+ local descrip = state_var.description or cmdParams[1]
+ if job_state_change then
+ job_state_change(descrip, newVal, oldVal)
+ end
+
+ add_to_chat(122,descrip..' is now '..state_var.current..'.')
+ handle_update({'auto'})
+ else
+ add_to_chat(123,'Mote-Libs: Toggle: Unknown field ['..cmdParams[1]..']')
+ end
+end
+
+-------------------------------------------------------------------------------------------------------------------
+
+-- User command format: gs c update [option]
+-- Where [option] can be 'user' to display current state.
+-- Otherwise, generally refreshes current gear used.
+function handle_update(cmdParams)
+ -- init a new eventArgs
+ local eventArgs = {handled = false}
+
+ reset_buff_states()
+
+ -- Allow jobs to override this code
+ if job_update then
+ job_update(cmdParams, eventArgs)
+ end
+
+ if not eventArgs.handled then
+ if handle_equipping_gear then
+ handle_equipping_gear(player.status)
+ end
+ end
+
+ if cmdParams[1] == 'user' then
+ display_current_state()
+ end
+end
+
+
+-- showtp: equip the current TP set for examination.
+function handle_showtp(cmdParams)
+ local msg = 'Showing current TP set: ['.. state.OffenseMode.value
+ if state.HybridMode.value ~= 'Normal' then
+ msg = msg .. '/' .. state.HybridMode.value
+ end
+ msg = msg .. ']'
+
+ if #classes.CustomMeleeGroups > 0 then
+ msg = msg .. ' ['
+ for i = 1,#classes.CustomMeleeGroups do
+ msg = msg .. classes.CustomMeleeGroups[i]
+ if i < #classes.CustomMeleeGroups then
+ msg = msg .. ', '
+ end
+ end
+ msg = msg .. ']'
+ end
+
+ add_to_chat(122, msg)
+ equip(get_melee_set())
+end
+
+
+-- Minor variation on the GearSwap "gs equip naked" command, that ensures that
+-- all slots are enabled before removing gear.
+-- Command: "gs c naked"
+function handle_naked(cmdParams)
+ enable('main','sub','range','ammo','head','neck','lear','rear','body','hands','lring','rring','back','waist','legs','feet')
+ equip(sets.naked)
+end
+
+
+-------------------------------------------------------------------------------------------------------------------
+
+-- Get the state var that matches the requested name.
+-- Only returns mode vars.
+function get_state(name)
+ if state[name] then
+ return state[name]._class == 'mode' and state[name] or nil
+ else
+ local l_name = name:lower()
+ for key,var in pairs(state) do
+ if key:lower() == l_name then
+ return var._class == 'mode' and var or nil
+ end
+ end
+ end
+end
+
+
+-- Function to reset state.Buff values (called from update).
+function reset_buff_states()
+ if state.Buff then
+ for buff,present in pairs(state.Buff) do
+ if mote_vars.res_buffs:contains(buff) then
+ state.Buff[buff] = buffactive[buff] or false
+ end
+ end
+ end
+end
+
+
+-- Function to display the current relevant user state when doing an update.
+-- Uses display_current_job_state instead if that is defined in the job lua.
+function display_current_state()
+ local eventArgs = {handled = false}
+ if display_current_job_state then
+ display_current_job_state(eventArgs)
+ end
+
+ if not eventArgs.handled then
+ local msg = 'Melee'
+
+ if state.CombatForm.has_value then
+ msg = msg .. ' (' .. state.CombatForm.value .. ')'
+ end
+
+ msg = msg .. ': '
+
+ msg = msg .. state.OffenseMode.value
+ if state.HybridMode.value ~= 'Normal' then
+ msg = msg .. '/' .. state.HybridMode.value
+ end
+ msg = msg .. ', WS: ' .. state.WeaponskillMode.value
+
+ if state.DefenseMode.value ~= 'None' then
+ msg = msg .. ', Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
+ end
+
+ if state.Kiting.value == true then
+ msg = msg .. ', Kiting'
+ end
+
+ if state.PCTargetMode.value ~= 'default' then
+ msg = msg .. ', Target PC: '..state.PCTargetMode.value
+ end
+
+ if state.SelectNPCTargets.value == true then
+ msg = msg .. ', Target NPCs'
+ end
+
+ add_to_chat(122, msg)
+ end
+
+ if state.EquipStop.value ~= 'off' then
+ add_to_chat(122,'Gear equips are blocked after ['..state.EquipStop.value..']. Use "//gs c reset equipstop" to turn it off.')
+ end
+end
+
+-- Generic version of this for casters
+function display_current_caster_state()
+ local msg = ''
+
+ if state.OffenseMode.value ~= 'None' then
+ msg = msg .. 'Melee'
+
+ if state.CombatForm.has_value then
+ msg = msg .. ' (' .. state.CombatForm.value .. ')'
+ end
+
+ msg = msg .. ', '
+ end
+
+ msg = msg .. 'Casting ['..state.CastingMode.value..'], Idle ['..state.IdleMode.value..']'
+
+ if state.DefenseMode.value ~= 'None' then
+ msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
+ end
+
+ if state.Kiting.value == true then
+ msg = msg .. ', Kiting'
+ end
+
+ if state.PCTargetMode.value ~= 'default' then
+ msg = msg .. ', Target PC: '..state.PCTargetMode.value
+ end
+
+ if state.SelectNPCTargets.value == true then
+ msg = msg .. ', Target NPCs'
+ end
+
+ add_to_chat(122, msg)
+end
+
+
+-------------------------------------------------------------------------------------------------------------------
+
+-- Function to show what commands are available, and their syntax.
+-- Syntax: gs c help
+-- Or: gs c
+function handle_help(cmdParams)
+ if cmdParams[1] and cmdParams[1]:lower():startswith('field') then
+ print('Predefined Library Fields:')
+ print('--------------------------')
+ print('OffenseMode, HybridMode, RangedMode, WeaponskillMode')
+ print('CastingMode, IdleMode, RestingMode, Kiting')
+ print('DefenseMode, PhysicalDefenseMode, MagicalDefenseMode')
+ print('SelectNPCTargets, PCTargetMode')
+ print('EquipStop (precast, midcast, pet_midcast)')
+ else
+ print('Custom Library Self-commands:')
+ print('-----------------------------')
+ print('Show TP Set: gs c showtp')
+ print('Toggle bool: gs c toggle [field]')
+ print('Cycle list: gs c cycle [field] [(r)everse]')
+ print('Cycle list back: gs c cycleback [field]')
+ print('Reset a state: gs c reset [field]')
+ print('Reset all states: gs c reset all')
+ print('Set state var: gs c set [field] [value]')
+ print('Set bool true: gs c set [field]')
+ print('Set bool false: gs c unset [field]')
+ print('Remove gear: gs c naked')
+ print('Show TP Set: gs c showtp')
+ print('State vars: gs c help field')
+ end
+end
+
+
+-- A function for testing lua code. Called via "gs c test".
+function handle_test(cmdParams)
+ if user_test then
+ user_test(cmdParams)
+ elseif job_test then
+ job_test(cmdParams)
+ end
+end
+
+
+-------------------------------------------------------------------------------------------------------------------
+-- The below table maps text commands to the above handler functions.
+-------------------------------------------------------------------------------------------------------------------
+
+selfCommandMaps = {
+ ['toggle'] = handle_toggle,
+ ['cycle'] = handle_cycle,
+ ['cycleback']= handle_cycleback,
+ ['set'] = handle_set,
+ ['reset'] = handle_reset,
+ ['unset'] = handle_unset,
+ ['update'] = handle_update,
+ ['showtp'] = handle_showtp,
+ ['naked'] = handle_naked,
+ ['help'] = handle_help,
+ ['test'] = handle_test}
+