|
Gearswap Support Thread
Quetzalcoatl.Falkirk
Serveur: Quetzalcoatl
Game: FFXI
Posts: 683
By Quetzalcoatl.Falkirk 2015-05-20 06:37:08
Perhaps semi-related, a bunch of the recent-ish jug pet abilities don't register with Gearswap. Would the solution be similar for those? :)
I think this is the full list of moves that don't work:
Somersault
Tickling Tendrils
Stink Bomb
Nectarous Deluge
Nepenthic Plunge
Sickle Slash
Acid Spray
Spider Web
Pecking Flurry
Foul Waters
Pestilent Plume
Any help would be greatly appreciated. <3
Lakshmi.Byrth
VIP
Serveur: Lakshmi
Game: FFXI
Posts: 6184
By Lakshmi.Byrth 2015-05-20 07:49:36
Can you find them in the resources?
Quetzalcoatl.Falkirk
Serveur: Quetzalcoatl
Game: FFXI
Posts: 683
By Quetzalcoatl.Falkirk 2015-05-20 07:56:26
Edit: Oops, was looking in the wrong file - they're in job_abilities.lua:
[768] = {id=768,en="Tickling Tendrils",ja="ティックルテンドリル",element=4,icon_id=44,mp_cost=1,prefix="/pet",range=4,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[769] = {id=769,en="Stink Bomb",ja="スティンクボム",element=3,icon_id=43,mp_cost=2,prefix="/pet",range=8,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[770] = {id=770,en="Nectarous Deluge",ja="ネクターデルージュ",element=5,icon_id=45,mp_cost=2,prefix="/pet",range=8,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[771] = {id=771,en="Nepenthic Plunge",ja="ネペンシックプランジ",element=5,icon_id=45,mp_cost=3,prefix="/pet",range=8,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[772] = {id=772,en="Somersault ",ja="サマーソルト",element=6,icon_id=46,mp_cost=1,prefix="/pet",range=2,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[774] = {id=774,en="Foul Waters",ja="ファウルウォーター",element=5,icon_id=45,mp_cost=2,prefix="/pet",range=10,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[775] = {id=775,en="Pestilent Plume",ja="ペステレントプルーム",element=7,icon_id=47,mp_cost=2,prefix="/pet",range=10,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[776] = {id=776,en="Pecking Flurry",ja="ペッキングフラリー",element=6,icon_id=46,mp_cost=1,prefix="/pet",range=4,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[777] = {id=777,en="Sickle Slash",ja="シックルスラッシュ",element=6,icon_id=46,mp_cost=1,prefix="/pet",range=2,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[778] = {id=778,en="Acid Spray",ja="アシッドスプレー",element=5,icon_id=45,mp_cost=1,prefix="/pet",range=9,recast_id=102,targets=1,tp_cost=0,type="Monster"},
[779] = {id=779,en="Spider Web",ja="スパイダーウェブ",element=3,icon_id=43,mp_cost=2,prefix="/pet",range=9,recast_id=102,targets=1,tp_cost=0,type="Monster"},
--
Oh yeah, they fixed the errant space after "Somersault " in the emergency maintenance yesterday. :)
Lakshmi.Byrth
VIP
Serveur: Lakshmi
Game: FFXI
Posts: 6184
By Lakshmi.Byrth 2015-05-20 09:22:31
It is interesting that the MP cost is the number of charges the moves consume. Also, the fact that it starts at 768 (256*3) indicates it's likely something internal in gearswap. I'll take a look at it later.
[+]
Quetzalcoatl.Falkirk
Serveur: Quetzalcoatl
Game: FFXI
Posts: 683
By Quetzalcoatl.Falkirk 2015-05-20 09:27:11
Thank you, sir! <3
Lakshmi.Byrth
VIP
Serveur: Lakshmi
Game: FFXI
Posts: 6184
By Lakshmi.Byrth 2015-05-20 09:40:17
Just to clarify, they fail to trigger pretarget/precast?
Quetzalcoatl.Falkirk
Serveur: Quetzalcoatl
Game: FFXI
Posts: 683
By Quetzalcoatl.Falkirk 2015-05-20 09:57:56
Right!
Tried to debug them a while back - attempting to print "spell" gave no result for those moves ( but worked fine for all of the older ready moves).
Lakshmi.Byrth
VIP
Serveur: Lakshmi
Game: FFXI
Posts: 6184
By Lakshmi.Byrth 2015-05-21 00:48:37
Okay, it turns out this issue was actually in LuaCore. I submitted the changes to the repository and it'll probably go out in the next LuaCore version.
Asura.Sechs
Serveur: Asura
Game: FFXI
Posts: 10088
By Asura.Sechs 2015-05-21 01:40:18
Byrth could this lua core issue you've found relate in some way to the issue some SMNs were experiencing? (BPs being executed in gear other than the pet midcast defined sets)
Lakshmi.Byrth
VIP
Serveur: Lakshmi
Game: FFXI
Posts: 6184
By Lakshmi.Byrth 2015-05-21 01:45:45
[+]
By Draylo 2015-05-21 11:45:41
I would say its an issue w/motes GS but it seems Sechs doesn't use that. I wonder what is causing it that isn't showing up in the default SMN gs made.
Serveur: Shiva
Game: FFXI
Posts: 518
By Shiva.Malthar 2015-05-21 12:20:00
Why don't you make your own GS, Draylo, you lazy bum. :-P
Quetzalcoatl.Kyrial
Serveur: Quetzalcoatl
Game: FFXI
Posts: 332
By Quetzalcoatl.Kyrial 2015-05-21 18:54:05
Since I have no idea how syntax works at all and everything I have is copied from others... What would be the easiest way to define a set for summoning trusts (to make sure I summon them at as high an ilvl as possible)?
Quetzalcoatl.Kyrial
Serveur: Quetzalcoatl
Game: FFXI
Posts: 332
By Quetzalcoatl.Kyrial 2015-05-21 19:43:07
SE specifically said that they are affected by our ilvl. But while I was looking for where they said that, I found something saying that, while Trusts don't level with us (if you're 56 and hit 57, your trusts stay 56 until you resummon them), they do change along with our ilvl without needing to be resummoned. So I guess it is unnecessary all the same. :P
Serveur: Asura
Game: FFXI
Posts: 115
By Asura.Pintseyes 2015-05-22 17:23:22
Hey guys.
I'm not sure if this was my doing or the most recent update. My cancel features quit working within GS. If I cast SS,refresh,sneak etc etc the "cancel conflicting buffs" doesnt work.
What I've tried:
Completely deleted GS folder keeping only my folder DATA. Reinstalled GS, went and got new Motes from Kinematics. So my unknowledged guess is that my issue isnt in utilities.lua..Considering I've reinstalled all new versions of my motes and lua's, yet that seems like where my problem should be - where i see the functions for my cancels.. Anyone have a better idea of whats wrong?
I've looked through my lua's for jobs to see if there's any cancels in there that maybe broke, there isn't.. beyond that, every single job lua is having the same problem =(, i didnt change ALL my luas recently enough to think its within them..
Last ditch effort im gonna reinstall cancel see if that works.. Anyone got a better idea?
Thanks for your time!
Lakshmi.Zyphos
Serveur: Lakshmi
Game: FFXI
Posts: 70
By Lakshmi.Zyphos 2015-05-23 11:43:18
So I've been trying to get GearSwap to work at all, and I've swapped my gear into Mote's THF Lua. Lo and behold, it's broken as hell. It won't swap into the various sets at all, it seems intent on throwing on my idle and TH set at the same time and just staying there, doesn't swap to TP or WS sets. Any idea what could possibly be causing it?
Google doesn't find anything, and I've wasted a few hours trying to figure out what in the hell could be causing it.
Asura.Psylo
Serveur: Asura
Game: FFXI
Posts: 446
By Asura.Psylo 2015-05-30 05:13:05
Hello, i need some help fro one thing.
I have a special phalanx set, in my lua : Code
sets.midcast.Phalanx = set_combine(sets.midcast['Enhancing Magic'],{
main="Egeking",
head={ name="Taeon Chapeau", augments={'Accuracy+19','"Triple Atk."+2','Phalanx +1',}},
body={ name="Taeon Tabard", augments={'Accuracy+10','"Triple Atk."+2','Phalanx +2',}},
hands={ name="Taeon Gloves", augments={'"Dual Wield"+5','Phalanx +2',}},
legs={ name="Taeon Tights", augments={'Accuracy+12','"Dual Wield"+5','Phalanx +1',}},
feet={ name="Taeon Boots", augments={'Accuracy+12','"Triple Atk."+2','Phalanx +2',}},
})
And have another special set for duration :
Code
sets.midcast.EnhancingDuration = {hands="Atrophy Gloves +1",
back={ name="Ghostfyre Cape", augments={'Enfb.mag. skill +6','Enha.mag. skill +7','Mag. Acc.+9','Enh. Mag. eff. dur. +19',}}
,feet="Leth. Houseaux +1"}
But atm, when i cast phalanx, GS swap to duration, i try to adjust mid cast function but ...
Code
if spell.skill == 'Enfeebling Magic' and state.Buff.Saboteur then
equip(sets.buff.Saboteur)
elseif spell.skill == 'Enhancing Magic' then
if spell.english == "phalanx" then equip(sets.midcast.Phalanx)
else equip(sets.midcast.EnhancingDuration)
end
if buffactive.composure and spell.target.type == 'PLAYER' then
equip(sets.buff.ComposureOther)
end
Anyone see where i made mistake ?
Thks in advance
Asura.Psylo
Serveur: Asura
Game: FFXI
Posts: 446
By Asura.Psylo 2015-05-30 05:57:36
Ok got it ^^
Code
elseif spell.skill == 'Enhancing Magic' and spell.english ~= "Phalanx" then
Cerberus.Tidis
Serveur: Cerberus
Game: FFXI
Posts: 3927
By Cerberus.Tidis 2015-05-30 12:46:56
I have just made the switch to Mote's THF Gearswap, I want to change it so I start in "None" mode for TH rather than "Tag" but I can't seem to get it working, I figured it was a case of editing the Mote-TreasureHunter.lua itself Code -------------------------------------------------------------------------------------------------------------------
-- Utility include for applying and tracking Treasure Hunter effects.
--
-- Include this if you want a means of applying TH on the first contact
-- with a mob, then resume using normal gear.
-- Thf also has modes to use TH gear for SATA and for keeping it on fulltime.
--
-- Command: include('Mote-TreasureHunter')
-- Place this in your job_setup() function, or user_setup() function if using
-- a sidecar file, or get_sets() function if your job file isn't based
-- on my includes.
-- Be sure to define your own sets.TreasureHunter gear set after the include.
-- If using a job file based on my includes, simply place it in the
-- standard init_gear_sets() function.
--
-- If you define TH gear sets for common actions (eg: Provoke, Box Step, etc),
-- then make sure they are accounted for in a th_action_check function
-- (signature: th_action_check(category, param)) in the job file. It's passed
-- category and param value for actions the user takes, and if it returns true,
-- that means that it's considered a valid tagging action.
--
-- If using this in a job file that isn't based on my includes, you must
-- handle cycling the options values on your own, unless you also include
-- Mote-SelfCommands.
--
-- The job file must handle the 'update' self-command (gs c update auto).
-- This is automatically handled if using my includes, but must be ensured
-- if being used with a user-built job file.
-- When called, it merely needs to equip standard melee gear for the current
-- configuration.
--
-- Create a macro or keybind to cycle the Treasure Mode value:
-- gs c cycle TreasureMode
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-- Setup vars and events when first running the include.
-------------------------------------------------------------------------------------------------------------------
-- Ensure base tables are defined
options = options or {}
state = state or {}
info = info or {}
state.TreasureMode = M{['description']='Treasure Mode'}
-- TH mode handling
if player.main_job == 'THF' then
state.TreasureMode:options('None','Tag','SATA','Fulltime')
state.TreasureMode:set('None')
else
state.TreasureMode:options('None','Tag')
end
-- Tracking vars for TH.
info.tagged_mobs = T{}
info.last_player_target_index = 0
state.th_gear_is_locked = false
-- Required gear set. Expand this in the job file when defining sets.
sets.TreasureHunter = {}
-- Event registration is done at the bottom of this file.
-------------------------------------------------------------------------------------------------------------------
-- User-callable functions for TH handling utility.
-------------------------------------------------------------------------------------------------------------------
-- Can call to force a status refresh.
-- Also displays the current tagged mob table if in debug mode.
function th_update(cmdParams, eventArgs)
if (cmdParams and cmdParams[1] == 'user') or not cmdParams then
TH_for_first_hit()
if _settings.debug_mode then
print_set(info.tagged_mobs, 'Tagged mobs')
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Local functions to support TH handling.
-------------------------------------------------------------------------------------------------------------------
-- Set locked TH flag to true, and disable relevant gear slots.
function lock_TH()
state.th_gear_is_locked = true
local slots = T{}
for slot,item in pairs(sets.TreasureHunter) do
slots:append(slot)
end
disable(slots)
end
-- Set locked TH flag to false, and enable relevant gear slots.
function unlock_TH()
state.th_gear_is_locked = false
local slots = T{}
for slot,item in pairs(sets.TreasureHunter) do
slots:append(slot)
end
enable(slots)
send_command('gs c update auto')
end
-- For any active TH mode, if we haven't already tagged this target, equip TH gear and lock slots until we manage to hit it.
function TH_for_first_hit()
if player.status == 'Engaged' and state.TreasureMode.value ~= 'None' then
if not info.tagged_mobs[player.target.id] then
if _settings.debug_mode then add_to_chat(123,'Prepping for first hit on '..tostring(player.target.id)..'.') end
equip(sets.TreasureHunter)
lock_TH()
elseif state.th_gear_is_locked then
if _settings.debug_mode then add_to_chat(123,'Target '..player.target.id..' has been tagged. Unlocking.') end
unlock_TH()
else
if _settings.debug_mode then add_to_chat(123,'Prepping for first hit on '..player.target.id..'. Target has already been tagged.') end
end
else
unlock_TH()
end
end
-------------------------------------------------------------------------------------------------------------------
-- Event handlers to allow tracking TH application.
-------------------------------------------------------------------------------------------------------------------
-- On engaging a mob, attempt to add TH gear. For any other status change, unlock TH gear slots.
function on_status_change_for_th(new_status_id, old_status_id)
if gearswap.gearswap_disabled or T{2,3,4}:contains(old_status_id) or T{2,3,4}:contains(new_status_id) then return end
local new_status = gearswap.res.statuses[new_status_id].english
local old_status = gearswap.res.statuses[old_status_id].english
if new_status == 'Engaged' then
if _settings.debug_mode then add_to_chat(123,'Engaging '..player.target.id..'.') end
info.last_player_target_index = player.target.index
TH_for_first_hit()
elseif old_status == 'Engaged' then
if _settings.debug_mode and state.th_gear_is_locked then add_to_chat(123,'Disengaging. Unlocking TH.') end
info.last_player_target_index = 0
unlock_TH()
end
end
-- On changing targets, attempt to add TH gear.
function on_target_change_for_th(new_index, old_index)
-- Only care about changing targets while we're engaged, either manually or via current target death.
if player.status == 'Engaged' then
-- If the current player.target is the same as the new mob then we're actually
-- engaged with it.
-- If it's different than the last known mob, then we've actually changed targets.
if player.target.index == new_index and new_index ~= info.last_player_target_index then
if _settings.debug_mode then add_to_chat(123,'Changing target to '..player.target.id..'.') end
info.last_player_target_index = player.target.index
TH_for_first_hit()
end
end
end
-- On any action event, mark mobs that we tag with TH. Also, update the last time tagged mobs were acted on.
function on_action_for_th(action)
--add_to_chat(123,'cat='..action.category..',param='..action.param)
-- If player takes action, adjust TH tagging information
if state.TreasureMode.value ~= 'None' then
if action.actor_id == player.id then
-- category == 1=melee, 2=ranged, 3=weaponskill, 4=spell, 6=job ability, 14=unblinkable JA
if state.TreasureMode.value == 'Fulltime' or
(state.TreasureMode.value == 'SATA' and (action.category == 1 or ((state.Buff['Sneak Attack'] or state.Buff['Trick Attack']) and action.category == 3))) or
(state.TreasureMode.value == 'Tag' and action.category == 1 and state.th_gear_is_locked) or -- Tagging with a melee hit
(th_action_check and th_action_check(action.category, action.param)) -- Any user-specified tagging actions
then
for index,target in pairs(action.targets) do
if not info.tagged_mobs[target.id] and _settings.debug_mode then
add_to_chat(123,'Mob '..target.id..' hit. Adding to tagged mobs table.')
end
info.tagged_mobs[target.id] = os.time()
end
if state.th_gear_is_locked then
unlock_TH()
end
end
elseif info.tagged_mobs[action.actor_id] then
-- If mob acts, keep an update of last action time for TH bookkeeping
info.tagged_mobs[action.actor_id] = os.time()
else
-- If anyone else acts, check if any of the targets are our tagged mobs
for index,target in pairs(action.targets) do
if info.tagged_mobs[target.id] then
info.tagged_mobs[target.id] = os.time()
end
end
end
end
cleanup_tagged_mobs()
end
-- Need to use this event handler to listen for deaths in case Battlemod is loaded,
-- because Battlemod blocks the 'action message' event.
--
-- This function removes mobs from our tracking table when they die.
function on_incoming_chunk_for_th(id, data, modified, injected, blocked)
if id == 0x29 then
local target_id = data:unpack('I',0x09)
local message_id = data:unpack('H',0x19)%32768
-- Remove mobs that die from our tagged mobs list.
if info.tagged_mobs[target_id] then
-- 6 == actor defeats target
-- 20 == target falls to the ground
if message_id == 6 or message_id == 20 then
if _settings.debug_mode then add_to_chat(123,'Mob '..target_id..' died. Removing from tagged mobs table.') end
info.tagged_mobs[target_id] = nil
end
end
end
end
-- Clear out the entire tagged mobs table when zoning.
function on_zone_change_for_th(new_zone, old_zone)
if _settings.debug_mode then add_to_chat(123,'Zoning. Clearing tagged mobs table.') end
info.tagged_mobs:clear()
end
-- Save the existing function, if it exists, and call it after our own handling.
if job_state_change then
job_state_change_via_th = job_state_change
end
-- Called if we change any user state fields.
function job_state_change(stateField, newValue, oldValue)
if stateField == 'Treasure Mode' then
if newValue == 'None' and state.th_gear_is_locked then
if _settings.debug_mode then add_to_chat(123,'TH Mode set to None. Unlocking gear.') end
unlock_TH()
elseif oldValue == 'None' then
TH_for_first_hit()
end
end
if job_state_change_via_th then
job_state_change_via_th(stateField, newValue, oldValue)
end
end
-------------------------------------------------------------------------------------------------------------------
-- Extra utility functions.
-------------------------------------------------------------------------------------------------------------------
-- Remove mobs that we've marked as tagged with TH if we haven't seen any activity from or on them
-- for over 3 minutes. This is to handle deagros, player deaths, or other random stuff where the
-- mob is lost, but doesn't die.
function cleanup_tagged_mobs()
-- If it's been more than 3 minutes since an action on or by a tagged mob,
-- remove them from the tagged mobs list.
local current_time = os.time()
local remove_mobs = S{}
-- Search list and flag old entries.
for target_id,action_time in pairs(info.tagged_mobs) do
local time_since_last_action = current_time - action_time
if time_since_last_action > 180 then
remove_mobs:add(target_id)
if _settings.debug_mode then add_to_chat(123,'Over 3 minutes since last action on mob '..target_id..'. Removing from tagged mobs list.') end
end
end
-- Clean out mobs flagged for removal.
for mob_id,_ in pairs(remove_mobs) do
info.tagged_mobs[mob_id] = nil
end
end
-------------------------------------------------------------------------------------------------------------------
-- Event function registration calls.
-- Can call these now that the above functions have been defined.
-------------------------------------------------------------------------------------------------------------------
-- Register events to allow us to manage TH application.
windower.register_event('status change', on_status_change_for_th)
windower.register_event('target change', on_target_change_for_th)
windower.raw_register_event('action', on_action_for_th)
windower.raw_register_event('incoming chunk', on_incoming_chunk_for_th)
windower.raw_register_event('zone change', on_zone_change_for_th)
The part near the top is what I changed, it used to say: Code state.TreasureMode:set('Tag')
which I changed to: Code state.TreasureMode:set('None')
But that didn't work, is there likely to be something in this file I missed, or is it going to be somewhere in my THF lua file?
Seraph.Jacaut
Serveur: Seraph
Game: FFXI
Posts: 383
By Seraph.Jacaut 2015-06-01 12:07:42
I killed my dnc.lua but i dont have a clue what i did to it.. All i did was change some gearsets and add some now i get this message
"GearSwap has detected an error in the user function get_sets:
files(x86)windower4/addons/GearSwap/Data/DNC.lua:306: Attempt to index field 'Evasion' (a nil value)"
Im trying to post my lua on here but i cant figure it out, never been my strong suit =/ any ideas what the error means?
Edit*
Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
--[[
Custom commands:
gs c step
Uses the currently configured step on the target, with either <t> or <stnpc> depending on setting.
gs c step t
Uses the currently configured step on the target, but forces use of <t>.
Configuration commands:
gs c cycle mainstep
Cycles through the available steps to use as the primary step when using one of the above commands.
gs c cycle altstep
Cycles through the available steps to use for alternating with the configured main step.
gs c toggle usealtstep
Toggles whether or not to use an alternate step.
gs c toggle selectsteptarget
Toggles whether or not to use <stnpc> (as opposed to <t>) when using a step.
--]]
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff['Climactic Flourish'] = buffactive['climactic flourish'] or false
state.MainStep = M{['description']='Main Step', 'Box Step', 'Quickstep', 'Feather Step', 'Stutter Step'}
state.AltStep = M{['description']='Alt Step', 'Quickstep', 'Feather Step', 'Stutter Step', 'Box Step'}
state.UseAltStep = M(false, 'Use Alt Step')
state.SelectStepTarget = M(false, 'Select Step Target')
state.IgnoreTargetting = M(false, 'Ignore Targetting')
state.CurrentStep = M{['description']='Current Step', 'Main', 'Alt'}
state.SkillchainPending = M(false, 'Skillchain Pending')
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.OffenseMode:options('Normal', 'Acc', 'Fodder', 'Tank', 'Solo')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.WeaponskillMode:options('Normal', 'Acc', 'Fodder')
state.PhysicalDefenseMode:options('Evasion', 'PDT')
gear.default.weaponskill_neck = "Asperity Necklace"
gear.default.weaponskill_waist = "Caudata Belt"
gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
-- Additional local binds
send_command('bind ^= gs c cycle mainstep')
send_command('bind != gs c cycle altstep')
send_command('bind ^- gs c toggle selectsteptarget')
send_command('bind !- gs c toggle usealtstep')
send_command('bind ^` input /ja "Chocobo Jig" <me>')
send_command('bind !` input /ja "Chocobo Jig II" <me>')
select_default_macro_book()
end
-- Called when this job file is unloaded (eg: job change)
function user_unload()
send_command('unbind ^`')
send_command('unbind !`')
send_command('unbind ^=')
send_command('unbind !=')
send_command('unbind ^-')
send_command('unbind !-')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
-- Precast Sets
-- Precast sets to enhance JAs
sets.precast.JA['No Foot Rise'] = {body="Horos Casaque"}
sets.precast.JA['Trance'] = {head="Horos Tiara"}
-- Waltz set (chr and vit)
sets.precast.Waltz = {ammo="Sonia's Plectrum",
head="Anwig Salade",ear1="Roundel Earring",
body="Maxixi Casaque",hands="Maxixi Bangles +1",ring1="Asklepian Ring",
back="Toetapper Mantle",waist="Caudata Belt",legs="Horos Tights +1",feet="Maxixi Toe Shoes"}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
sets.precast.Samba = {head="Maxixi Tiara"}
sets.precast.Jig = {legs="Horos Tights +1", feet="Maxixi Toe Shoes"}
sets.precast.Step = {waist="Chaac Belt"}
sets.precast.Step['Feather Step'] = {feet="Charis Shoes +2"}
sets.precast.Flourish1 = {}
sets.precast.Flourish1['Violent Flourish'] = {ear1="Psystorm Earring",ear2="Lifestorm Earring",
body="Horos Casaque",hands="Buremte Gloves",ring2="Sangoma Ring",
waist="Chaac Belt",legs="Iuitl Tights",feet="Iuitl Gaiters +1"} -- magic accuracy
sets.precast.Flourish1['Desperate Flourish'] = {ammo="Charis Feather",
head="Whirlpool Mask",neck="Ej Necklace",
body="Horos Casaque",hands="Buremte Gloves",ring1="Beeline Ring",
back="Toetapper Mantle",waist="Hurch'lan Sash",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"} -- acc gear
sets.precast.Flourish2 = {}
sets.precast.Flourish2['Reverse Flourish'] = {hands="Maculele Bangles",back="Toetapper Mantle"}
sets.precast.Flourish3 = {}
sets.precast.Flourish3['Striking Flourish'] = {body="Charis Casaque +2"}
sets.precast.Flourish3['Climactic Flourish'] = {head="Charis Tiara +2"}
-- Fast cast sets for spells
sets.precast.FC = {ammo="Impatiens",head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring"}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {ammo="Charis Feather",
head="Ux'ukaj Cap",neck="Breeze Gorget",ear1="Brutal Earring",ear2="Moonshade Earring",
body="Taeon Tabard",hands="Taeon Gloves",ring1="Ramuh Ring",ring2="Epona's Ring",
back="Rancorous Mantle",waist="Fotia Belt",legs="Manibozho Brais",feet="Horos Toe Shoes +1"}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {ammo="Honed Tathlum", back="Toetapper Mantle"})
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {neck="Houyi's Gorget",
hands="Iuitl Wristbands",ring1="Stormsoul Ring",
waist="Caudata Belt",legs="Nahtirah Trousers"})
sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {ammo="Honed Tathlum", back="Toetapper Mantle"})
sets.precast.WS['Exenterator'].Fodder = set_combine(sets.precast.WS['Exenterator'], {waist=gear.ElementalBelt})
sets.precast.WS['Pyrrhic Kleos'] = set_combine(sets.precast.WS, {ammo="Thew bomblet",
head="Whirlpool Mask",neck="Snow Gorget",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Taeon Tabard",hands="Maxixi Bangles +1",ring1="Ramuh Ring",ring2="Epona's Ring",
back="Rancorous Mantle",waist="Fotia Belt",legs="Manibozho Brais",feet="Horos Toe Shoes +1"})
sets.precast.WS['Pyrrhic Kleos'].Acc = set_combine(sets.precast.WS.Acc, {hands="Iuitl Wristbands"})
sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {ammo="Charis Feather",
head="Ux'ukaj Cap",neck="Breeze Gorget",ear1="Brutal Earring",ear2="Moonshade Earring",
body="Taeon Tabard",hands="Taeon Gloves",ring1="Ramuh Ring",ring2="Epona's Ring",
back="Rancorous Mantle",waist="Fotia Belt",legs="Manibozho Brais",feet="Horos Toe Shoes +1"})
sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {ammo="Honed Tathlum", back="Toetapper Mantle"})
sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {ammo="Charis Feather",ear1="Brutal Earring",ear2="Moonshade Earring"})
sets.precast.WS["Rudra's Storm"].Acc = set_combine(sets.precast.WS["Rudra's Storm"], {ammo="Honed Tathlum", back="Toetapper Mantle"})
sets.precast.WS['Aeolian Edge'] = {ammo="Charis Feather",
head="Wayfarer Circlet",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Moonshade Earring",
body="Wayfarer Robe",hands="Wayfarer Cuffs",ring1="Acumen Ring",ring2="Demon's Ring",
back="Toro Cape",waist="Chaac Belt",legs="Shneddick Tights +1",feet="Wayfarer Clogs"}
sets.precast.Skillchain = {hands="Charis Bangles +2"}
-- Midcast Sets
sets.midcast.FastRecast = {
head="Felistris Mask",ear2="Loquacious Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",
legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
-- Specific spells
sets.midcast.Utsusemi = {
head="Felistris Mask",neck="Ej Necklace",ear2="Loquacious Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Beeline Ring",
back="Toetapper Mantle",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
-- Sets to return to when not performing an action.
-- Resting sets
sets.resting = {head="Ocelomeh Headpiece +1",neck="Wiglen Gorget",
ring1="Sheltered Ring",ring2="Paguroidea Ring"}
sets.ExtraRegen = {head="Ocelomeh Headpiece +1"}
-- Idle sets
sets.idle = {ammo="Iron Gobbet",
head="Felistris Mask",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Shadow Mantle",waist="Flume Belt",legs="Qaaxo Tights",feet="Skadi's Jambeaux +1"}
sets.idle.Town = {main="Izhiikoh", sub="Sabebus",ammo="Charis Feather",
head="Whirlpool Mask",neck="Charis Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Skadi's Jambeaux +1"}
sets.idle.Weak = {ammo="Iron Gobbet",
head="Felistris Mask",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Buremte Gloves",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Shadow Mantle",waist="Flume Belt",legs="Kaabnax Trousers",feet="Skadi's Jambeaux +1"}
-- Defense sets
sets.defense.Evasion = {ammo="Charis Feather",
head="Uk'uxkaj Cap",neck="Twilight Torque",
body="Iuitl Vest",hands="Maxixi Bangles +1",ring1="Dark Ring",ring2="Rajas Ring",
back="Toetapper Mantle",waist="Flume Belt",legs="Kaabnax Trousers",feet="Horos Toe Shoes +1"}
sets.defense.PDT = {ammo="",
head="Uk'uxkaj Cap",neck="Twilight Torque",
body="Iuitl Vest",hands="Maxixi Bangles +1",ring1="Vocane Ring",ring2=gear.DarkRing.physical,
back="Mollusca Mantle",waist="Flume Belt",legs="Iuitl Tights",feet="Horos Toe Shoes +1"}
sets.defense.MDT = {ammo="Demonry Stone",
head="Uk'uxkaj Cap",neck="Twilight Torque",ear1="Merman's Earring",ear2="Merman's Earring",
body="Avalon Breastplate",hands="Buremte Gloves",ring1="Minerva's Ring",ring2="Vocane Ring",
back="Mollusca Mantle",waist="Flume Belt",legs="Horos Tights +1",feet="Taeon Boots"}
sets.Kiting = {feet="Skadi's Jambeaux +1"}
-- Engaged sets
-- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
-- sets if more refined versions aren't defined.
-- If you create a set with both offense and defense modes, the offense mode should be first.
-- EG: sets.engaged.Dagger.Accuracy.Evasion
-- Normal melee group
sets.engaged = {ammo="Charis Feather",
head="Taeon chapeau",neck="Charis Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Maculele Casaque",hands="Taeon Gloves",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Horos Tights +1",feet="Horos Toe Shoes +1"}
sets.engaged.Tank = {ammo="Charis Feather",
head="Uk'uxkaj Cap",neck="Twilight Torque",
body="Iuitl Vest",hands="Maxixi Bangles +1",ring1="Vocane Ring",ring2="Dark Ring",
back="Mollusca Mantle",waist="Flume Belt",legs="Iuitl Tights",feet="Horos Toe Shoes +1"}
sets.engaged.Fodder = {ammo="Charis Feather",
head="Taeon Chapeau",neck="Charis Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Thaumas Coat",hands="Taeon Gloves",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Horos Tights +1",feet="Taeon Boots"}
sets.engaged.Solo = {ammo="Charis Feather",
head="Taeon Chapeau",neck="Charis Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Maculele Casaque",hands="Maxixi Bangles +1",ring1="Rajas Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Patentia Sash",legs="Horos tights +1",feet="Taeon Boots"}
sets.engaged.Acc = {ammo="Honed Tathlum",
head="Taeon Chapeau",neck="Charis Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Maculele Casaque",hands="Taeon Gloves",ring1="Rajas Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Anguinus Belt",legs="Horos Tights +1",feet="Horos Toe Shoes +1"}
sets.engaged.Evasion = {ammo="Charis Feather",
head="Felistris Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
sets.engaged.PDT = {ammo="Charis Feather",
head="Felistris Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Patricius Ring",ring2="Epona's Ring",
back="Shadow Mantle",waist="Patentia Sash",legs="Qaaxo Tights",feet="Iuitl Gaiters +1"}
sets.engaged.Acc.Evasion = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Hurch'lan Sash",legs="Qaaxo Tights",feet="Qaaxo Leggings"}
sets.engaged.Acc.PDT = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Patricius Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Hurch'lan Sash",legs="Qaaxo Tights",feet="Qaaxo Leggings"}
-- Custom melee group: High Haste (2x March or Haste)
sets.engaged.HighHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Maxixi Bangles",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Manibozho Boots"}
sets.engaged.Fodder.HighHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Charis Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Charis Casaque +2",hands="Maxixi Bangles",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs=gear.AugQuiahuiz,feet="Horos Toe Shoes"}
sets.engaged.Fodder.Evasion.HighHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Charis Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Maxixi Bangles",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
sets.engaged.Acc.HighHaste = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Hurch'lan Sash",legs="Qaaxo Tights",feet="Qaaxo Leggings"}
sets.engaged.Evasion.HighHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
sets.engaged.Acc.Evasion.HighHaste = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Hurch'lan Sash",legs="Qaaxo Tights",feet="Qaaxo Leggings"}
sets.engaged.PDT.HighHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Patricius Ring",ring2="Epona's Ring",
back="Shadow Mantle",waist="Patentia Sash",legs="Qaaxo Tights",feet="Iuitl Gaiters +1"}
sets.engaged.Acc.PDT.HighHaste = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Patricius Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Hurch'lan Sash",legs="Qaaxo Tights",feet="Qaaxo Leggings"}
-- Custom melee group: Max Haste (2x March + Haste)
sets.engaged.MaxHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Qaaxo Harness",hands="Maxixi Bangles",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs=gear.AugQuiahuiz,feet="Manibozho Boots"}
-- Getting Marches+Haste from Trust NPCs, doesn't cap delay.
sets.engaged.Fodder.MaxHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Thaumas Coat",hands="Maxixi Bangles",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs=gear.AugQuiahuiz,feet="Horos Toe Shoes"}
sets.engaged.Fodder.Evasion.MaxHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Qaaxo Harness",hands="Maxixi Bangles",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Manibozho Boots"}
sets.engaged.Acc.MaxHaste = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Hurch'lan Sash",legs="Qaaxo Tights",feet="Qaaxo Leggings"}
sets.engaged.Evasion.MaxHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Ej Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Windbuffet Belt",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
sets.engaged.Acc.Evasion.MaxHaste = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Ej Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Hurch'lan Sash",legs="Kaabnax Trousers",feet="Qaaxo Leggings"}
sets.engaged.PDT.MaxHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Twilight Torque",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Qaaxo Harness",hands="Iuitl Wristbands",ring1="Patricius Ring",ring2="Epona's Ring",
back="Shadow Mantle",waist="Windbuffet Belt",legs="Qaaxo Tights",feet="Iuitl Gaiters +1"}
sets.engaged.Acc.PDT.MaxHaste = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Twilight Torque",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Patricius Ring",ring2="Epona's Ring",
back="Toetapper Mantle",waist="Hurch'lan Sash",legs="Qaaxo Tights",feet="Qaaxo Leggings"}
-- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
sets.buff['Saber Dance'] = {legs="Horos Tights +1"}
sets.buff['Climactic Flourish'] = {head="Charis Tiara +2"}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
function job_precast(spell, action, spellMap, eventArgs)
--auto_presto(spell)
end
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.type == "WeaponSkill" then
if state.Buff['Climactic Flourish'] then
equip(sets.buff['Climactic Flourish'])
end
if state.SkillchainPending.value == true then
equip(sets.precast.Skillchain)
end
end
end
-- Return true if we handled the aftercast work. Otherwise it will fall back
-- to the general aftercast() code in Mote-Include.
function job_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted then
if spell.english == "Wild Flourish" then
state.SkillchainPending:set()
send_command('wait 5;gs c unset SkillchainPending')
elseif spell.type:lower() == "weaponskill" then
state.SkillchainPending:toggle()
send_command('wait 6;gs c unset SkillchainPending')
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff,gain)
-- If we gain or lose any haste buffs, adjust which gear set we target.
if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
determine_haste_group()
handle_equipping_gear(player.status)
elseif buff == 'Saber Dance' or buff == 'Climactic Flourish' then
handle_equipping_gear(player.status)
end
end
function job_status_change(new_status, old_status)
if new_status == 'Engaged' then
determine_haste_group()
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Called by the default 'update' self-command.
function job_update(cmdParams, eventArgs)
determine_haste_group()
end
function customize_idle_set(idleSet)
if player.hpp < 80 and not areas.Cities:contains(world.area) then
idleSet = set_combine(idleSet, sets.ExtraRegen)
end
return idleSet
end
function customize_melee_set(meleeSet)
if state.DefenseMode.value ~= 'None' then
if buffactive['saber dance'] then
meleeSet = set_combine(meleeSet, sets.buff['Saber Dance'])
end
if state.Buff['Climactic Flourish'] then
meleeSet = set_combine(meleeSet, sets.buff['Climactic Flourish'])
end
end
return meleeSet
end
-- Handle auto-targetting based on local setup.
function job_auto_change_target(spell, action, spellMap, eventArgs)
if spell.type == 'Step' then
if state.IgnoreTargetting.value == true then
state.IgnoreTargetting:reset()
eventArgs.handled = true
end
eventArgs.SelectNPCTargets = state.SelectStepTarget.value
end
end
-- Function to display the current relevant user state when doing an update.
-- Set eventArgs.handled to true if display was handled, and you don't want the default info shown.
function display_current_job_state(eventArgs)
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 then
msg = msg .. ', Kiting'
end
msg = msg .. ', ['..state.MainStep.current
if state.UseAltStep.value == true then
msg = msg .. '/'..state.AltStep.current
end
msg = msg .. ']'
if state.SelectStepTarget.value == true then
steps = steps..' (Targetted)'
end
add_to_chat(122, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- User self-commands.
-------------------------------------------------------------------------------------------------------------------
-- Called for custom player commands.
function job_self_command(cmdParams, eventArgs)
if cmdParams[1] == 'step' then
if cmdParams[2] == 't' then
state.IgnoreTargetting:set()
end
local doStep = ''
if state.UseAltStep.value == true then
doStep = state[state.CurrentStep.current..'Step'].current
state.CurrentStep:cycle()
else
doStep = state.MainStep.current
end
send_command('@input /ja "'..doStep..'" <t>')
end
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function determine_haste_group()
-- We have three groups of DW in gear: Charis body, Charis neck + DW earrings, and Patentia Sash.
-- For high haste, we want to be able to drop one of the 10% groups (body, preferably).
-- High haste buffs:
-- 2x Marches + Haste
-- 2x Marches + Haste Samba
-- 1x March + Haste + Haste Samba
-- Embrava + any other haste buff
-- For max haste, we probably need to consider dropping all DW gear.
-- Max haste buffs:
-- Embrava + Haste/March + Haste Samba
-- 2x March + Haste + Haste Samba
classes.CustomMeleeGroups:clear()
if buffactive.embrava and (buffactive.haste or buffactive.march) and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.march == 2 and buffactive.haste and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.embrava and (buffactive.haste or buffactive.march or buffactive['haste samba']) then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 2 and (buffactive.haste or buffactive['haste samba']) then
classes.CustomMeleeGroups:append('HighHaste')
end
end
-- Automatically use Presto for steps when it's available and we have less than 3 finishing moves
function auto_presto(spell)
if spell.type == 'Step' then
local allRecasts = windower.ffxi.get_ability_recasts()
local prestoCooldown = allRecasts[236]
local under3FMs = not buffactive['Finishing Move 3'] and not buffactive['Finishing Move 4'] and not buffactive['Finishing Move 5']
if player.main_job_level >= 77 and prestoCooldown < 1 and under3FMs then
cast_delay(1.1)
send_command('@input /ja "Presto" <me>')
end
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'WAR' then
set_macro_page(1, 16)
elseif player.sub_job == 'NIN' then
set_macro_page(1, 16)
elseif player.sub_job == 'SAM' then
set_macro_page(1, 16)
else
set_macro_page(1, 16)
end
end
Lakshmi.Rooks
Administrator
Serveur: Lakshmi
Game: FFXI
Posts: 1566
By Lakshmi.Rooks 2015-06-01 12:10:05
You don't define sets.engaged.Fodder.Evasion before attempting to define sets.engaged.Fodder.Evasion.HighHaste.
Seraph.Jacaut
Serveur: Seraph
Game: FFXI
Posts: 383
By Seraph.Jacaut 2015-06-01 12:19:01
thanks fixed! i turned that into my solo set, shoulda just made a new one instead of typing over it ill remember that next time, dont mess with the original! lol
Asura.Suteru
Serveur: Asura
Game: FFXI
Posts: 508
By Asura.Suteru 2015-06-01 17:30:46
Mote's libs don't seem to be detecting properly, my Obi code isn't working. Is there anyone that can help track down the issue in libs before I resort to trying to redo it entirely.
PB of my code:
http://pastebin.com/p4EBXVS1
e: Fixed it, mote-mappings.lua assumed I had the hachirin no obi, which was throwing everything else off.
Fenrir.Reece
Serveur: Fenrir
Game: FFXI
Posts: 339
By Fenrir.Reece 2015-06-02 17:07:30
Hey guys, having an issue with a LUA for GEO. It will stop working entirely and not do anything once it does.
It seems to happen when I cast anything outside of Geomancy (Elemental, healing etc)
Only way to fix is by relogging and it's the only job that it does it on. The reloading doesn't fix either.
Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
indi_timer = ''
indi_duration = 180
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.OffenseMode:options('None', 'Normal')
state.CastingMode:options('Normal', 'Resistant')
state.IdleMode:options('Normal', 'PDT')
--gear.default.weaponskill_waist = "Windbuffet Belt"
select_default_macro_book()
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Precast sets
--------------------------------------
-- Precast sets to enhance JAs
sets.precast.JA.Bolster = {body="Bagua Tunic"}
sets.precast.JA['Life cycle'] = {body="Geomancy Tunic"}
sets.precast.JA.Bolster = {body="Bagua Tunic"}
sets.precast.JA['Life cycle'] = {body="Geomancy Tunic",
head="Azimuth hood"
}
sets.precast.JA['Curative Recantation'] = {hands="Bagua Mitaines"}
sets.precast.JA['Mending Halation'] = {legs="Bagua Pants"}
sets.precast.JA['Radial Arcana'] = {feet="Bagua Sandals"}
sets.precast.JA['Primal Zeal'] = {head="Bagua galero"}
sets.precast.JA['Cardinal Chant'] = {head="geomancy galero"}
-- Fast cast sets for spells
sets.precast.FC = {range="Dunna",
head="Haruspex Hat",ear2="Loquacious Earring",
body="Helios Jacket",ring1="Shiva Ring",
back="Lifestream Cape",waist="Aswang sash",legs="Geomancy Pants",feet="Helios Boots",main="Marin staff",sub="Elder's grip"}
sets.precast.FC.Cure = set_combine(sets.precast.FC, {main="Tamaxchi",sub="Genbu's Shield",back="Lifestream Cape"})
sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {neck="Stoicheion Medal"})
sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {
head="Haruspex Hat",
hands="Carapacho Cuffs",
waist="Siegel Sash",
})
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
--------------------------------------
-- Midcast sets
--------------------------------------
-- Base fast recast for spells
sets.midcast.FastRecast = {
head="Haruspex Hat",
ear2="Loquacious Earring",
body="Helios Jacket",
hands="Helios Gloves",
ring1="Shiva Ring",
back="Lifestream Cape",
waist="Aswang sash",
legs="Assiduity Pants +1",
feet="Helios Boots",
range="Dunna"
}
sets.midcast.Geomancy = {range="Dunna",
head="Azimuth Hood",
body="Bagua Tunic",
legs="Bagua Pants",
feet="Azimuth Gaiters",
back="Lifestream Cape",
hands="Geomancy Mitaines +1",
right_ear="Magnetic Earring",
left_ear="Gifted Earring"
}
sets.midcast.Geomancy.Indi = {range="Dunna",legs="Bagua Pants",head="Azimuth Hood",body="Bagua Tunic",feet="Azimuth Gaiters",back="Lifestream Cape",hands="Geomancy Mitaines +1"}
sets.midcast.Cure = {
main="Tamaxchi",
sub="Genbu's Shield",
body="Helios Jacket",
hands="Telchine Gloves",
ring1="Shiva Ring",
ring2="Shiva Ring",
back="Tempered Cape",
legs="Assiduity Pants +1",
feet="Helios Boots",
neck="Fylgja Torque",
right_ear="Lifestorm earring",
left_ear="Magnetic Earring",
head="Helios band"
}
sets.midcast.Curaga = sets.midcast.Cure
sets.midcast.Protectra = {ring1="Sheltered Ring"}
sets.midcast.Shellra = {ring1="Sheltered Ring"}
sets.midcast.Aquaveil = set_combine(sets.midcast['Enhancing Magic'], {
waist="Emphatikos rope"
})
sets.midcast['Enfeebling Magic'] = {
main="Marin staff",
sub="Elder's Grip",
ammo="Ombre Tathlum",
head="Telchine Cap",
body="Helios Jacket",
hands="Azimuth gloves",
legs="Hagondes slacks +1",
feet="Uk'uxkaj boots",
neck="Stoicheion medal",
waist="Aswang Sash",
left_ear="Psystorm earring",
right_ear="Lifestorm earring",
left_ring="Shiva Ring",
right_ring="Shiva Ring",
back="lifestream Cape"
}
sets.midcast.Regen = set_combine(sets.midcast.fastcast, {
main="Bolelabunga",
body="Telchine Chas."
})
sets.midcast['Enhancing Magic']= {
main="Bolelabunga",
sub="Genbu's Shield",
head="Telchine cap",
hands="bagua mitaines",
body="Telchine Chas.",
legs="bagua Pants",
feet="Helios Boots",
neck="Stoicheion medal",
waist="Aswang Sash",
left_ear="Psystorm earring",
right_ear="Lifestorm earring",
back="Lifestream cape"
}
sets.midcast.Refresh = set_combine(sets.midcast['Enhancing Magic'], {
back="Lifestream cape"
})
-- Elemental Magic sets
sets.midcast['Elemental Magic']= {
main="Marin staff",
sub="Elder's Grip",
ammo="Ombre tathlum",
head="Hagondes Hat",
body="Azimuth Coat +1",
hands="Yaoyotl gloves",
legs="Hagondes Pants +1",
feet="Helios Boots",
neck="Stoicheion medal",
waist="Aswang Sash",
left_ear="Hecate's earring",
right_ear="Friomisi earring",
left_ring="Shiva ring",
right_ring="Shiva ring",
back="Toro Cape"
}
--------------------------------------
-- Idle/resting/defense/etc sets
--------------------------------------
-- Resting sets
sets.resting = {
head="Azimuth Hood",
neck="Wiglen Gorget",
body="Azimuth Coat +1",
hands="Bagua Mitaines",
ring1="Shiva Ring",
ring2="Paguroidea Ring",
waist="Aswang Sash",
legs="Assiduity Pants +1",
feet="Geomancy Sandals"
}
-- Idle sets
sets.idle = {
main="Bolelabunga",
sub="Genbu's Shield",
range="Dunna",
head="Azimuth Hood",
neck="Wiglen Gorget",
ear1="Psystorm Earring",
ear2="Loquacious Earring",
body="Azimuth Coat +1",
hands="Bagua Mitaines",
ring1="Shiva Ring",
ring2="Paguroidea Ring",
back="Lifestorm Cape",
waist="Aswang sash",
legs="Assiduity Pants +1",
feet="Geomancy Sandals"
}
sets.idle.PDT = {
main="Bolelabunga",
sub="Genbu's Shield",
range="Dunna",
head="Nahtirah Hat",
neck="Twilight Torque",
ear1="Bloodgem Earring",
ear2="Loquacious Earring",
body="Hagondes Coat",
hands="Yaoyotl Gloves",
ring1="Defending Ring",
ring2="Paguroidea Ring",
back="Lifestorm Cape",
waist="Goading Belt",
legs="Assiduity Pants +1",
feet="Herald's Gaiters"
}
-- .Pet sets are for when Luopan is present.
sets.idle.Pet = {
main="Bolelabunga",
sub="Genbu's Shield",
range="Dunna",
head="Azimuth Hood",
neck="Twilight Torque",
ear1="Psystorm Earring",
ear2="Loquacious Earring",
body="Azimuth Coat +1",
hands="Bagua Mitaines",
ring1="Shiva Ring",
ring2="Paguroidea Ring",
back="Lifestream Cape",
waist="Aswang sash",
legs="Assiduity Pants +1",
feet="Geomancy Sandals"
}
sets.idle.PDT.Pet = {
main="Bolelabunga",
sub="Genbu's Shield",
range="Dunna",
head="Azimuth Hood",
neck="Twilight Torque",
ear1="Psystorm Earring",
ear2="Loquacious Earring",
body="Azimuth Coat +1",
hands="Bagua Mitaines",
ring1="Shiva Ring",
ring2="Paguroidea Ring",
back="Lifestream Cape",
waist="Aswang sash",
legs="Assiduity Pants +1",
feet="Geomancy Sandals"
}
-- .Indi sets are for when an Indi-spell is active.
sets.idle.Indi = set_combine(sets.idle, {legs="Assiduity Pants +1"})
sets.idle.Pet.Indi = set_combine(sets.idle.Pet, {legs="Assiduity Pants +1"})
sets.idle.PDT.Indi = set_combine(sets.idle.PDT, {legs="Assiduity Pants +1"})
sets.idle.PDT.Pet.Indi = set_combine(sets.idle.PDT.Pet, {legs="Assiduity Pants +1"})
sets.idle.Town = {main="Bolelabunga",sub="Genbu's Shield",range="Dunna",
head="Azimuth Hood",
neck="Wiglen Gorget",
ear1="Psystorm Earring",
ear2="Loquacious Earring",
body="Azimuth Coat +1",
hands="Bagua Mitaines",
ring1="Shiva Ring",
ring2="Paguroidea Ring",
back="Lifestream Cape",
waist="Aswang sash",
legs="Assiduity Pants +1",
feet="Geomancy Sandals"
}
sets.idle.Weak = {
main="Bolelabunga",
sub="Genbu's Shield",
range="Dunna",
head="Azimuth Hood",
neck="Wiglen Gorget",
ear1="Psystorm Earring",
ear2="Loquacious Earring",
body="Azimuth Coat +1",
hands="Bagua Mitaines",
ring1="Shiva Ring",
ring2="Paguroidea Ring",
back="Lifestream Cape",
waist="Aswang sash",
legs="Assiduity Pants +1",
feet="Geomancy Sandals"
}
-- Defense sets
sets.defense.PDT = {
range="Dunna",
head="Hagondes Hat",
neck="Wiglen Gorget",
ear1="Bloodgem Earring",
ear2="Loquacious Earring",
body="Hagondes Coat",
hands="Yaoyotl Gloves",
ring1="Defending Ring",
--ring2=gear.DarkRing.physical,
back="Umbra Cape",
waist="Goading Belt",
legs="Hagondes Pants",
feet="Hagondes Sabots"
}
sets.defense.MDT = {
range="Dunna",
head="Nahtirah Hat",
neck="Wiglen Gorget",
ear1="Bloodgem Earring",
ear2="Loquacious Earring",
body="Vanir Cotehardie",
hands="Yaoyotl Gloves",
ring1="Defending Ring",
ring2="Shadow Ring",
back="Umbra Cape",
waist="Goading Belt",
legs="Bokwus Slops",
feet="Hagondes Sabots"
}
sets.Kiting = {back="Aptitude Mantle",feet="Geomancy Sandals",legs="Assiduity Pants +1"}
sets.latent_refresh = {waist="Fucho-no-obi"}
--------------------------------------
-- Engaged sets
--------------------------------------
-- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
-- sets if more refined versions aren't defined.
-- If you create a set with both offense and defense modes, the offense mode should be first.
-- EG: sets.engaged.Dagger.Accuracy.Evasion
-- Normal melee group
sets.engaged = {
range="Dunna",
head="Zelus Tiara",
neck="Peacock Charm",
ear1="Bladeborn Earring",
ear2="Steelflash Earring",
body="Vanir Cotehardie",
hands="Bokwus Gloves",
ring1="Rajas Ring",
ring2="Paguroidea Ring",
back="Umbra Cape",
waist="Goading Belt",
legs="Hagondes Pants",
feet="Hagondes Sabots"
}
--------------------------------------
-- Custom buff sets
--------------------------------------
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
function job_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted then
if spell.english:startswith('Indi') then
if not classes.CustomIdleGroups:contains('Indi') then
classes.CustomIdleGroups:append('Indi')
end
send_command('@timers d "'..indi_timer..'"')
indi_timer = spell.english
send_command('@timers c "'..indi_timer..'" '..indi_duration..' down spells/00136.png')
elseif spell.english == 'Sleep' or spell.english == 'Sleepga' then
send_command('@timers c "'..spell.english..' ['..spell.target.name..']" 60 down spells/00220.png')
elseif spell.english == 'Sleep II' or spell.english == 'Sleepga II' then
send_command('@timers c "'..spell.english..' ['..spell.target.name..']" 90 down spells/00220.png')
end
elseif not player.indi then
classes.CustomIdleGroups:clear()
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
if player.indi and not classes.CustomIdleGroups:contains('Indi')then
classes.CustomIdleGroups:append('Indi')
handle_equipping_gear(player.status)
elseif classes.CustomIdleGroups:contains('Indi') and not player.indi then
classes.CustomIdleGroups:clear()
handle_equipping_gear(player.status)
end
end
function job_state_change(stateField, newValue, oldValue)
if stateField == 'Offense Mode' then
if newValue == 'Normal' then
disable('main','sub','range')
else
enable('main','sub','range')
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
function job_get_spell_map(spell, default_spell_map)
if spell.action_type == 'Magic' then
if spell.skill == 'Enfeebling Magic' then
if spell.type == 'WhiteMagic' then
return 'MndEnfeebles'
else
return 'IntEnfeebles'
end
elseif spell.skill == 'Geomancy' then
if spell.english:startswith('Indi') then
return 'Indi'
end
end
end
end
function customize_idle_set(idleSet)
if player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
return idleSet
end
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
classes.CustomIdleGroups:clear()
if player.indi then
classes.CustomIdleGroups:append('Indi')
end
end
-- Function to display the current relevant user state when doing an update.
function display_current_job_state(eventArgs)
display_current_caster_state()
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
set_macro_page(1, 6)
end
Fenrir.Reece
Serveur: Fenrir
Game: FFXI
Posts: 339
By Fenrir.Reece 2015-06-02 20:21:10
Yep, it just stops swapping anything in Main, Sub, Ranged and Ammo slots.
No errors on console or anything and I can't find what's causing it. Have you tried turn on debugmode and showswaps and seeing what it outputs?
Bahamut.Malothar
Serveur: Bahamut
Game: FFXI
Posts: 396
By Bahamut.Malothar 2015-06-02 20:33:49
Yep, it just stops swapping anything in Main, Sub, Ranged and Ammo slots.
No errors on console or anything and I can't find what's causing it.
Are you hitting F9 for something? With Mote's include, this enables/disables Offense Mode which locks those 4 slots that you're having swapping issues with. I didn't look through your lua but it's possible something was changed in it on accident to cause this to be on by default.
Bahamut.Alkk
Serveur: Bahamut
Game: FFXI
Posts: 34
By Bahamut.Alkk 2015-06-03 11:08:53
I was on a long break and when I came back I wanted to use my Blue mage lua but keep getting errors when trying to cycle between modes
"Gearswap has detected an error in the user function self command:
xx/Gearswap/libs/Mote-Selfcommands.lua:341: attempt to concatenate field ´value´ (a table value)
and
xx/Gearswap/libs/Mote-Selfcommands.lua:162: attempt to concatenate field ´current´ (a table value)
BLU lua
http://pastebin.com/v7uLDHcR
I didn't write this file myself and my understanding of GS is very low so this is very confusing to me.
Bahamut.Flareon
Serveur: Bahamut
Game: FFXI
Posts: 96
By Bahamut.Flareon 2015-06-04 01:48:36
I would like to know if there is a way to determine our gear change based on our enemy target condition of Skillchain bind. I'll explain: DNC has some pieces of gear that have SC bonus on them, but are not necessarily the best options for a solo WS. This way i would like those SC bonus gear to be equiped only if my WS have the potential to make a SC whereas i would want other pieces to be equiped in the case there were not any WS preceeding mine. Maybe some kind of "chainbound" status on the target?
I can think about toggling , but i wanted something more, uh, automatic.
Just looking for someone to explain this addon a bit for me. It looks like it is an alternative to Spellcast.
Is it going to be replacing Spellcast? In which ways is it better or worse. I don't know any programming but I've slowly learned more and more about spellcast and the 'language' used in gearswap is confusing to me.
It says it uses packets so it potentially could be more detectable? but does that also eliminate any lag that spellcast may encounter?
I plan on redoing my PUP xml to include pet casting sets thanks to the new addon petschool. I'm just not sure if it's worth it to just wait until gearswap gets more popular or to go ahead and do it in spellcast.
If anyone could give me more info I'd greatly appreciate it.
|
|