|
Gearswap Support Thread
Server: Asura
Game: FFXI
Posts: 363
By Asura.Vafruvant 2014-09-07 23:15:56
I'm not really interested in getting deep into automating stuff like that, though. Anything further, you'll have to figure out yourself. I appreciate everything that you pointed out! The only reason I had the Code if spell.english == 'Lunge' or spell.english == 'Swipe' then
equip(sets.precast.JA['Lunge'])
end part was because it would never equip a Swipe set, constructed the same way. I'll admit, I may have misconstructed it, as this was some time ago. I appreciate all your help, Mote, thanks!
Server: Odin
Game: FFXI
Posts: 170
By Odin.Quixacotl 2014-09-08 03:08:52
Oops nvm me. Too fast on the submit button.
Quetzalcoatl.Guthrie
Server: Quetzalcoatl
Game: FFXI
Posts: 80
By Quetzalcoatl.Guthrie 2014-09-08 07:52:28
Having issues with Terp equipping for my dummy songs with the new GS Mote updates. I have put my LUA below (think I did this right) and have my macro in-game to read
/console gs c set ExtraSongsMode Dummy
/ma "xxx" <me>
Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
--[[
Custom commands:
ExtraSongsMode may take one of three values: None, Dummy, FullLength
You can set these via the standard 'set' and 'cycle' self-commands. EG:
gs c cycle ExtraSongsMode
gs c set ExtraSongsMode Dummy
The Dummy state will equip the bonus song instrument and ensure non-duration gear is equipped.
The FullLength state will simply equip the bonus song instrument on top of standard gear.
Simple macro to cast a dummy Daurdabla song:
/console gs c set ExtraSongsMode Dummy
/ma "Shining Fantasia" <me>
To use a Terpander rather than Daurdabla, set the info.ExtraSongInstrument variable to
'Terpander', and info.ExtraSongs to 1.
--]]
-- 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.ExtraSongsMode = M{['description']='Extra Songs', 'None', 'Dummy', 'FullLength'}
state.Buff['Pianissimo'] = buffactive['pianissimo'] or false
-- For tracking current recast timers via the Timers plugin.
custom_timers = {}
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')
brd_daggers = S{'Izhiikoh', 'Vanir Knife', 'Atoyac', 'Aphotic Kukri', 'Sabebus'}
pick_tp_weapon()
-- Adjust this if using the Terpander (new +song instrument)
info.ExtraSongInstrument = 'Terpander'
-- How many extra songs we can keep from Daurdabla/Terpander
info.ExtraSongs = 1
-- Set this to false if you don't want to use custom timers.
state.UseCustomTimers = M(true, 'Use Custom Timers')
-- Additional local binds
send_command('bind ^` gs c cycle ExtraSongsMode')
send_command('bind !` input /ma "Chocobo Mazurka" <me>')
select_default_macro_book(1,5)
end
-- Called when this job file is unloaded (eg: job change)
function user_unload()
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
-- Fast cast sets for spells
sets.precast.FC = {head="Nahtirah Hat",ear2="Loquac. Earring",
body="Anhur Robe",hands="Gendewitha Gages",ring1="Prolix Ring",
back="Swith Cape"}
sets.precast.FC.Cure = set_combine(sets.precast.FC, {body="Heka's Kalasiris"})
sets.precast.FC.Stoneskin = set_combine(sets.precast.FC, {head="Umuthi Hat"})
sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
sets.precast.FC.BardSong = {main="Felibre's Dague",range="Gjallarhorn",
head="Aoidos' Calot +2",neck="Aoidos' Matinee",ear1="Aoidos' Earring",ear2="Loquac. Earring",
body="Sha'ir Manteel",hands="Schellenband",ring1="Prolix Ring",
back="Swith Cape",legs="Gendewitha Spats",feet="Bihu Slippers"}
sets.precast.FC.Daurdabla = set_combine(sets.precast.FC.BardSong, {range=info.ExtraSongInstrument})
-- Precast sets to enhance JAs
sets.precast.JA.Nightingale = {feet="Bihu Slippers"}
sets.precast.JA.Troubadour = {body="Bihu Justaucorps"}
sets.precast.JA['Soul Voice'] = {legs="Bihu Cannions +1"}
-- Waltz set (chr and vit)
sets.precast.Waltz = {range="Gjallarhorn",
head="Nahtirah Hat",
body="Gendewitha Bliaut",hands="Buremte Gloves",
back="Kumbira Cape",legs="Gendewitha Spats",feet="Gendewitha Galoshes"}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {range="Gjallarhorn",
head="Nahtirah Hat",neck=gear.ElementalGorget,ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Bihu Justaucorps",hands="Buremte Gloves",ring1="Rajas Ring",ring2="K'ayres Ring",
back="Atheling Mantle",waist="Caudata Belt",legs="Brioso Cannions +1",feet="Gendewitha Galoshes"}
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS)
sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS)
sets.precast.WS['Mordant Rime'] = set_combine(sets.precast.WS)
-- Midcast Sets
-- General set for recast times.
sets.midcast.FastRecast = {head="Nahtirah Hat",ear2="Loquacious Earring",
body="Anhur Robe",hands="Gendewitha Gages",ring1="Prolix Ring",
back="Swith Cape",feet="Gendewitha Galoshes"}
-- Gear to enhance certain classes of songs. No instruments added here since Gjallarhorn is being used.
sets.midcast.Ballad = {range="Gjallarhorn",legs="Aoidos' Rhing. +2"}
sets.midcast.Lullaby = {range="Gjallarhorn",hands="Brioso Cuffs"}
sets.midcast.Madrigal = {range="Gjallarhorn",head="Aoidos' Calot +2"}
sets.midcast.March = {range="Gjallarhorn",hands="Aoidos' Manchettes +2"}
sets.midcast.Minuet = {range="Gjallarhorn",body="Aoidos' Hongreline +2"}
sets.midcast.Minne = {range="Gjallarhorn"}
sets.midcast.Paeon = {range="Gjallarhorn"}
sets.midcast.Carol = {head="Aoidos' Calot +2",
body="Aoidos' Hongreline +2",hands="Aoidos' Manchettes +2",
legs="Aoidos' Rhing. +2",feet="Aoidos' Cothrn. +2"}
sets.midcast["Sentinel's Scherzo"] = {range="Gjallarhorn",feet="Aoidos' Cothrn. +2"}
sets.midcast['Magic Finale'] = {range="Gjallarhorn"}
sets.midcast.Mazurka = {range=info.ExtraSongInstrument}
-- For song buffs (duration and AF3 set bonus)
sets.midcast.SongEffect = {main="Legato Dagger",range="Gjallarhorn",
head="Aoidos' Calot +2",neck="Aoidos' Matinee",ear2="Loquacious Earring",
body="Aoidos' Hongreline +2",hands="Aoidos' Manchettes +2",ring1="Prolix Ring",
back="Harmony Cape",waist="Corvax Sash",legs="Marduk's Shalwar +1",feet="Brioso Slippers +1"}
-- For song defbuffs (duration primary, accuracy secondary)
sets.midcast.SongDebuff = {main="Lehbrailg +2",sub="Mephitis Grip",range="Gjallarhorn",
head="Bihu Roundlet +1",neck="Aoidos' Matinee",ear1="Lifestorm Earring",ear2="Psystorm Earring",
body="Brioso Justaucorps +1",hands="Bihu Cuffs +1",ring1="Sangoma Ring",ring2="Balrahn's Ring",
back="Rhapsode's Cape",waist="Ovate Rope",legs="Bihu Cannions +1",feet="Brioso Slippers +1"}
-- For song defbuffs (accuracy primary, duration secondary)
sets.midcast.ResistantSongDebuff = {main="Lehbrailg +2",sub="Mephitis Grip",range="Gjallarhorn",
head="Bihu Roundlet +1",neck="Noetic Torque",ear1="Lifestorm Earring",ear2="Psystorm Earring",
body="Brioso Justaucorps +1",hands="Bihu Cuffs +1",ring1="Sangoma Ring",ring2="Balrahn's Ring",
back="Rhapsode's Cape",waist="Ovate Rope",legs="Bihu Cannions +1",feet="Artsieq Boots"}
-- Song-specific recast reduction
sets.midcast.SongRecast = {ear2="Loquacious Earring",
ring1="Prolix Ring",
legs="Aoidos' Rhing. +2"}
--sets.midcast.Daurdabla = set_combine(sets.midcast.FastRecast, sets.midcast.SongRecast, {range=info.ExtraSongInstrument})
-- Cast spell with normal gear, except using Daurdabla instead
sets.midcast.Daurdabla = {range=info.ExtraSongInstrument}
-- Dummy song with Daurdabla; minimize duration to make it easy to overwrite.
sets.midcast.DaurdablaDummy = {main="Felibre's Dague",range=info.DaurdablaInstrument,
head="Nahtirah Hat",neck="Noetic Torque",ear1="Moonshade Earring",ear2="Loquacious Earring",
body="Artsieq Jubbah",hands="Bihu Cuffs +1",ring1="Sangoma Ring",ring2="Dark Ring",
back="Swith Cape",waist="Goading Belt",legs="Bihu Cannions +1",feet="Bihu Slippers"}
-- Other general spells and classes.
sets.midcast.Cure = {main="Iridal Staff",sub='Achaq Grip',
head="Gendewitha Caubeen",
body="Gendewitha Bliaut",hands="Bokwus Gloves",ring1="Ephedra Ring",ring2="Sirona's Ring",
legs="Gendewitha Spats",feet="Gendewitha Galoshes"}
sets.midcast.Curaga = sets.midcast.Cure
sets.midcast.Stoneskin = {
head="Nahtirah Hat",
body="Gendewitha Bliaut",hands="Gendewitha Gages",
legs="Gendewitha Spats",feet="Gendewitha Galoshes"}
sets.midcast.Cursna = {
neck="Malison Medallion",
hands="Hieros Mittens",ring1="Ephedra Ring"}
-- Sets to return to when not performing an action.
-- Resting sets
sets.resting = {main=gear.Staff.HMP,
body="Gendewitha Bliaut",
legs="Nares Trews",feet="Chelona Boots +1"}
-- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
sets.idle = {main="Legato Dagger",sub="Genbu's Shield",range="Gjallarhorn",
head="Bihu Roundlet +1",neck="Twilight Torque",ear1="Moonshade Earring",ear2="Loquacious Earring",
body="Bokwus Robe",hands="Bihu Cuffs +1",ring1="Sangoma Ring",ring2="Dark Ring",
back="Iximulew Cape",legs="Nares Trews",feet="Aoidos' Cothurnes +2"}
sets.idle.PDT = {main=gear.Staff.PDT, sub="Mephitis Grip",range="Oneiros Harp",
head="Gendewitha Caubeen",neck="Wiglen Gorget",ear1="Bloodgem Earring",ear2="Loquacious Earring",
body="Gendewitha Bliaut",hands="Gendewitha Gages",ring1="Defending Ring",ring2="Sangoma Ring",
back="Umbra Cape",waist="Flume Belt",legs="Gendewitha Spats",feet="Aoidos' Cothurnes +2"}
sets.idle.Town = {main="Lehbrailg +2",sub="Mephitis Grip",range="Gjallarhorn",
head="Bihu Roundlet +1",neck="Aoidos' Matinee",ear1="Moonshade Esrring",ear2="Loquacious Earring",
body="Brioso Justaucorps +1",hands="Bihu Cuffs +1",ring1="Sangoma Ring",ring2="Balrahn's Ring",
back="Rhapsode's Cape",waist="Ovate Rope",legs="Marduk's Shalwar +1",feet="Aoidos' Cothurnes +2"}
sets.idle.Weak = {main=gear.Staff.PDT,sub="Mephitis Grip",range="Gjallarhorn",
head="Gendewitha Caubeen",neck="Twilight Torque",ear1="Moonshade Earring",
body="Brioso Justaucorps +1",hands="Gendewitha Gages",ring1="Sangoma Ring",ring2="Dark Ring",
back="Umbra Cape",waist="Flume Belt",legs="Bihu Cannions +1",feet="Gendewitha Galoshes"}
-- Defense sets
sets.defense.PDT = {main=gear.Staff.PDT,sub="Mephitis Grip",
head="Gendewitha Caubeen",neck="Twilight Torque",
body="Gendewitha Bliaut",hands="Gendewitha Gages",ring1='Dark Ring',
back="Umbra Cape",waist="Flume Belt",legs="Gendewitha Spats",feet="Gendewitha Galoshes"}
sets.defense.MDT = {main=gear.Staff.PDT,sub="Mephitis Grip",
head="Nahtirah Hat",neck="Twilight Torque",
body="Gendewitha Bliaut",hands="Gendewitha Gages",ring1='Dark Ring',ring2="Shadow Ring",
back="Rhapsode's Cape",waist="Flume Belt",legs="Bihu Cannions",feet="Gendewitha Galoshes"}
sets.Kiting = {feet="Aoidos' Cothurnes +2"}
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
-- Basic set for if no TP weapon is defined.
sets.engaged = {range="Angel Lyre",
head="Nahtirah Hat",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Bihu Justaucorps",hands="Buremte Gloves",ring1="Rajas Ring",ring2="K'ayres Ring",
back="Atheling Mantle",waist="Goading Belt",legs="Brioso Cannions +1",feet="Gendewitha Galoshes"}
-- Sets with weapons defined.
sets.engaged.Dagger = {range="Angel Lyre",
head="Nahtirah Hat",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Bihu Justaucorps",hands="Buremte Gloves",ring1="Rajas Ring",ring2="K'ayres Ring",
back="Atheling Mantle",waist="Goading Belt",legs="Brioso Cannions +1",feet="Gendewitha Galoshes"}
-- Set if dual-wielding
sets.engaged.DW = {range="Angel Lyre",
head="Nahtirah Hat",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Bihu Justaucorps",hands="Buremte Gloves",ring1="Rajas Ring",ring2="K'ayres Ring",
back="Atheling Mantle",waist="Goading Belt",legs="Brioso Cannions +1",feet="Gendewitha Galoshes"}
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)
if spell.type == 'BardSong' then
-- Auto-Pianissimo
if ((spell.target.type == 'PLAYER' and not spell.target.charmed) or (spell.target.type == 'NPC' and spell.target.in_party)) and
not state.Buff['Pianissimo'] then
local spell_recasts = windower.ffxi.get_spell_recasts()
if spell_recasts[spell.recast_id] < 2 then
send_command('@input /ja "Pianissimo" <me>; wait 1.5; input /ma "'..spell.name..'" '..spell.target.name)
eventArgs.cancel = true
return
end
end
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_midcast(spell, action, spellMap, eventArgs)
if spell.action_type == 'Magic' then
if spell.type == 'BardSong' then
-- layer general gear on first, then let default handler add song-specific gear.
local generalClass = get_song_class(spell)
if generalClass and sets.midcast[generalClass] then
equip(sets.midcast[generalClass])
end
end
end
end
function job_post_midcast(spell, action, spellMap, eventArgs)
if spell.type == 'BardSong' then
if state.ExtraSongsMode.value == 'FullLength' then
equip(sets.midcast.Daurdabla)
end
state.ExtraSongsMode:reset()
end
end
-- Set eventArgs.handled to true if we don't want automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
if spell.type == 'BardSong' and not spell.interrupted then
if spell.target and spell.target.type == 'SELF' then
adjust_timers(spell, spellMap)
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
if stateField == 'Offense Mode' then
if newValue == 'Normal' then
disable('main','sub','ammo')
else
enable('main','sub','ammo')
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
pick_tp_weapon()
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
return idleSet
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.
-------------------------------------------------------------------------------------------------------------------
-- Determine the custom class to use for the given song.
function get_song_class(spell)
-- Can't use spell.targets:contains() because this is being pulled from resources
if set.contains(spell.targets, 'Enemy') then
if state.CastingMode == 'Resistant' then
return 'ResistantSongDebuff'
else
return 'SongDebuff'
end
elseif state.ExtraSongsMode.value == 'Dummy' then
return 'DaurdablaDummy'
else
return 'SongEffect'
end
end
-- Function to create custom buff-remaining timers with the Timers plugin,
-- keeping only the actual valid songs rather than spamming the default
-- buff remaining timers.
function adjust_timers(spell, spellMap)
if state.UseCustomTimers.value == false then
return
end
local current_time = os.time()
-- custom_timers contains a table of song names, with the os time when they
-- will expire.
-- Eliminate songs that have already expired from our local list.
local temp_timer_list = {}
for song_name,expires in pairs(custom_timers) do
if expires < current_time then
temp_timer_list[song_name] = true
end
end
for song_name,expires in pairs(temp_timer_list) do
custom_timers[song_name] = nil
end
local dur = calculate_duration(spell.name, spellMap)
if custom_timers[spell.name] then
-- Songs always overwrite themselves now, unless the new song has
-- less duration than the old one (ie: old one was NT version, new
-- one has less duration than what's remaining).
-- If new song will outlast the one in our list, replace it.
if custom_timers[spell.name] < (current_time + dur) then
send_command('timers delete "'..spell.name..'"')
custom_timers[spell.name] = current_time + dur
send_command('timers create "'..spell.name..'" '..dur..' down')
end
else
-- Figure out how many songs we can maintain.
local maxsongs = 2
if player.equipment.range == info.ExtraSongInstrument then
maxsongs = maxsongs + info.ExtraSongs
end
if buffactive['Clarion Call'] then
maxsongs = maxsongs + 1
end
-- If we have more songs active than is currently apparent, we can still overwrite
-- them while they're active, even if not using appropriate gear bonuses (ie: Daur).
if maxsongs < table.length(custom_timers) then
maxsongs = table.length(custom_timers)
end
-- Create or update new song timers.
if table.length(custom_timers) < maxsongs then
custom_timers[spell.name] = current_time + dur
send_command('timers create "'..spell.name..'" '..dur..' down')
else
local rep,repsong
for song_name,expires in pairs(custom_timers) do
if current_time + dur > expires then
if not rep or rep > expires then
rep = expires
repsong = song_name
end
end
end
if repsong then
custom_timers[repsong] = nil
send_command('timers delete "'..repsong..'"')
custom_timers[spell.name] = current_time + dur
send_command('timers create "'..spell.name..'" '..dur..' down')
end
end
end
end
-- Function to calculate the duration of a song based on the equipment used to cast it.
-- Called from adjust_timers(), which is only called on aftercast().
function calculate_duration(spellName, spellMap)
local mult = 1
if player.equipment.range == 'Daurdabla' then mult = mult + 0.3 end -- change to 0.25 with 90 Daur
if player.equipment.range == "Gjallarhorn" then mult = mult + 0.4 end -- change to 0.3 with 95 Gjall
if player.equipment.main == "Carnwenhan" then mult = mult + 0.1 end -- 0.1 for 75, 0.4 for 95, 0.5 for 99/119
if player.equipment.main == "Legato Dagger" then mult = mult + 0.05 end
if player.equipment.sub == "Legato Dagger" then mult = mult + 0.05 end
if player.equipment.neck == "Aoidos' Matinee" then mult = mult + 0.1 end
if player.equipment.body == "Aoidos' Hngrln. +2" then mult = mult + 0.1 end
if player.equipment.legs == "Mdk. Shalwar +1" then mult = mult + 0.1 end
if player.equipment.feet == "Brioso Slippers" then mult = mult + 0.1 end
if player.equipment.feet == "Brioso Slippers +1" then mult = mult + 0.11 end
if spellMap == 'Paeon' and player.equipment.head == "Brioso Roundlet" then mult = mult + 0.1 end
if spellMap == 'Paeon' and player.equipment.head == "Brioso Roundlet +1" then mult = mult + 0.1 end
if spellMap == 'Madrigal' and player.equipment.head == "Aoidos' Calot +2" then mult = mult + 0.1 end
if spellMap == 'Minuet' and player.equipment.body == "Aoidos' Hngrln. +2" then mult = mult + 0.1 end
if spellMap == 'March' and player.equipment.hands == 'Ad. Mnchtte. +2' then mult = mult + 0.1 end
if spellMap == 'Ballad' and player.equipment.legs == "Aoidos' Rhing. +2" then mult = mult + 0.1 end
if spellName == "Sentinel's Scherzo" and player.equipment.feet == "Aoidos' Cothrn. +2" then mult = mult + 0.1 end
if buffactive.Troubadour then
mult = mult*2
end
if spellName == "Sentinel's Scherzo" then
if buffactive['Soul Voice'] then
mult = mult*2
elseif buffactive['Marcato'] then
mult = mult*1.5
end
end
local totalDuration = math.floor(mult*120)
return totalDuration
end
-- Examine equipment to determine what our current TP weapon is.
function pick_tp_weapon()
if brd_daggers:contains(player.equipment.main) then
state.CombatWeapon:set('Dagger')
if S{'NIN','DNC'}:contains(player.sub_job) and brd_daggers:contains(player.equipment.sub) then
state.CombatForm:set('DW')
else
state.CombatForm:reset()
end
else
state.CombatWeapon:reset()
state.CombatForm:reset()
end
end
-- Function to reset timers.
function reset_timers()
for i,v in pairs(custom_timers) do
send_command('timers delete "'..i..'"')
end
custom_timers = {}
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
set_macro_page(2, 18)
end
windower.raw_register_event('zone change',reset_timers)
windower.raw_register_event('logout',reset_timers)
Quetzalcoatl.Guthrie
Server: Quetzalcoatl
Game: FFXI
Posts: 80
By Quetzalcoatl.Guthrie 2014-09-08 09:35:57
nvm, figured it out.
Line 190 still said DurablaInstrument and not ExtraSongInstrument.
By Zubis 2014-09-08 09:38:49
Anyone encounter this issue with Mot's new SMN set using mote_include_version = 2?
1. Have an avatar out.
2. Reload GearSwap (//lua r gearswap).
3. Cast a cure spell on you.
The avatar idle set doesn't equip after the cure, but the regular idle set does.
You can fix it by manually setting the Idle mode (/console gs c cycle IdleMode).
I do like the new IdleModes though, gonna be using that a lot on PLD.
Sorry, I'm unable to duplicate this, either with a simple reload (//gs r), or a full addon reload (//lua r gearswap).
I should note that you should almost never be using //lua r gearswap unless you're actually editing/debugging the addon, and if you're doing that, I'd expect you to know enough to debug things on your own.
However if you -are- reloading that way, there's a slight chance that when you cast Cure, you've done so before GearSwap has had a chance to update pet information after the initial reload. You should never have that problem with the simple reload (//gs r).
Thanks for looking into it. I can confirm I experience the same issue with "//gs r" but if no-one else is experiencing this it might be just some quirk for me.
EDIT: Ok I've had the above issue happen to me in fights randomly sometimes without forcing //gs r. It seems to be an intermittent issue with detecting that a pet is out and not using the pet idle set. Just posting this in case anyone else has a similar issue.
EDIT2: Using a fresh copy of Windower + Gearswap + Mots SMN file and resetting everything, it seems to be working for now.
Server: Asura
Game: FFXI
Posts: 363
By Asura.Vafruvant 2014-09-13 13:08:10
Quick (well, maybe quick...) question:
Is it possible to have multiple different "gear.default.obi_back" for different spells?
e.g.
Low-tier nukes on SCH (Bookworm's Cape),
High-tier nukes (Toro Cape), and
Cure spells (Tempered Cape +1)
Server: Odin
Game: FFXI
Posts: 943
By Odin.Calipso 2014-09-13 15:12:48
How would you go about using something like Gavialas Helm on the appropriate days?
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2014-09-13 17:04:32
How would you go about using something like Gavialas Helm on the appropriate days?
Might be better ways (I think Mote includes may have some resources to make stuff like this easier), but I set up some tables (anywhere in or that will be called by get_sets)
Code elements = {}
elements.equip = {head="Gavialis Helm"}
elements["Tachi: Shoha"] = S{"Lightning","Dark","Wind"}
elements["Tachi: Fudo"] = S{"Light","Ice","Water"}
elements["Tachi: Rana"] = S{"Dark","Earth","Ice"}
elements["Tachi: Ageha"] = S{"Dark","Earth"}
elements["Tachi: Kasha"] = S{"Fire","Light","Dark"}
elements["Tachi: Gekko"] = S{"Water","Ice"}
etc.
then use this rule in WS section (change the body of the conditional to fit however you handle equipping gear)
Code if elements[spell.name] and elements[spell.name]:contains(world.day_element) then
localSet = set_combine(localSet,elements.equip)
end
[+]
Bismarck.Ihina
Server: Bismarck
Game: FFXI
Posts: 3187
By Bismarck.Ihina 2014-09-14 06:27:23
Not sure if this is the right place to put this, but it all falls under the Lua umbrella anyways.
I'm trying to write a script that equips your weapons back on after strip. To keep things simple, let's say I have a gear set(sets.full_equip) in gearswap that holds my weapons + regular regular tp set and we'll call it full_equip for the rest of this post.
My first attempt would be to use autoexec, upon losebuff, I'd send a command to gearswap and tell it to equip full_equip. That doesn't seem to work. I can do a /p on that event and it works as it should, so I know it's triggering.
My next attempt would be to write an addon that checks if my weapon slot is empty(in prerender), and if it is, equip full_equip. That also fails. I do a print statement and it prints when appropriate, so I know it's going into the if-statement when it should.
In town, I can manually unequip my weapons and the addon I wrote will automatically equip my weapons for me.
Next, I'll disable the addon and manually tell gearswap to equip full_equip, and it does so accordingly.
Everything is lovely so far. I take it for a test run down in Incursion.
Upon being stripped, the print statement that I placed in the if (main weapon slot == empty) statement fires off, and I put it in 'prerender' so I get a new print statement every frame or so. So far as good.
When Encumbrance wears off, my weapons do not get equipped back on. The print statement keeps going off, as it should, so windower realizes I don't have a main weapon on. The interesting part is that, if I were to unequip my head piece(or any other piece), my addon will automatically put it back on for me immediately. This tells me that windower/gearswap is actively equipping full_equip, except for the weapon slot.
Second interesting part. I'm a THF so I have my main and my offhand daggers. After strip wears off, if I were to manually equip my main weapon and then manually unequip my main, my addon will only put my main on. There will be no action on my offhand until I put on my offhand weapon manually.
After strip, upon manually equipping both my main and offhand weapon, the addon will reequip them if I were to manually remove them. If I am stripped again, my weapons won't automatically be equipped after it wears off and we're back to the beginning.
Please advise.
Server: Asura
Game: FFXI
Posts: 363
By Asura.Vafruvant 2014-09-14 07:21:06
I'm trying to write a script that equips your weapons back on after strip. You should be able to do this: Code function job_buff_change(buff, gain)
if 'Encumbrance' then
if gain then
add_to_chat(122, '***Encumbered!! Equipment lost!!***')
else
if player.status == 'Engaged' then
equip(meleeSet)
add_to_chat(122, '***No longer encumbered. Engaged set re-equipped.***')
elseif player.status == 'Idle' then
equip(idleSet)
add_to_chat(122, '***No longer encumbered. Idle set re-equipped.***')
end
end
end
end That should automatically detect if Encumbrance is getting applied (or falling off), and apply your current engaged set, if you're using Mote's includes to construct your melee set. If you're not using his includes, you can name your own set in the meleeSet spot for the same effect. Let me know if that doesn't work.
Server: Phoenix
Game: FFXI
Posts: 82
By Phoenix.Raistlinmaj 2014-09-14 07:47:38
I have a question about Mote-TreasureHunter, I wanted to set it up so that I could first hit TH tag mobs across all my jobs, tried putting in include into job file, and making chaac belt set according to what I had read, but it doesn't work, is there some kind of toggle to put it into that mode?
Also does it detect when you autotarget another mob you are fighting, once the previous is defeated?
Bismarck.Ihina
Server: Bismarck
Game: FFXI
Posts: 3187
By Bismarck.Ihina 2014-09-14 22:22:34
I'm trying to write a script that equips your weapons back on after strip. You should be able to do this: Code function job_buff_change(buff, gain)
if 'Encumbrance' then
if gain then
add_to_chat(122, '***Encumbered!! Equipment lost!!***')
else
if player.status == 'Engaged' then
equip(meleeSet)
add_to_chat(122, '***No longer encumbered. Engaged set re-equipped.***')
elseif player.status == 'Idle' then
equip(idleSet)
add_to_chat(122, '***No longer encumbered. Idle set re-equipped.***')
end
end
end
end That should automatically detect if Encumbrance is getting applied (or falling off), and apply your current engaged set, if you're using Mote's includes to construct your melee set. If you're not using his includes, you can name your own set in the meleeSet spot for the same effect. Let me know if that doesn't work.
That should work, but it doesn't work. It doesn't look like it can be done through gearswap.
I can't seem to get the normal macro to work either.
/equip main "Mandau"
...doesn't seem to do anything.
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2014-09-14 23:08:53
Not quite sure I understood the entirety of your situation, but that code should work. I have essentially the same thing in my GS. Is there something else that could be conflicting with it? Are you at least seeing the add_to_chat messages, or is the condition not being picked up at all?
Edit: Sorry, missed it but line 3 in his pasted code should be if buff=="Encumbrance"
Bismarck.Ihina
Server: Bismarck
Game: FFXI
Posts: 3187
By Bismarck.Ihina 2014-09-15 00:50:11
Well I stuck a print(1) line in there and it doesn't seem to be printing when I put on any buff or remove one.
It goes in the gearswap file outside of all the other functions, correct?
Bismarck.Inference
Server: Bismarck
Game: FFXI
Posts: 417
By Bismarck.Inference 2014-09-15 01:13:52
It goes in the gearswap file outside of all the other functions, correct?
The suggested code that was posted? Assuming you're using a custom GearSwap and not Mote, you should put it under :
function buff_change(name,gain)
Its called automatically similar to your precast/midcast/aftercast, the trigger being when your buff bar changes.
As Flippant said, you'd need to alter his if statement ever so slightly to say if name == "Encumbrance".
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-09-15 01:27:54
Right, job_buff_change is what you'd use if you're using one of my files. If you're not, just buff_change.
Quote: I have a question about Mote-TreasureHunter, I wanted to set it up so that I could first hit TH tag mobs across all my jobs, tried putting in include into job file, and making chaac belt set according to what I had read, but it doesn't work, is there some kind of toggle to put it into that mode?
Also does it detect when you autotarget another mob you are fighting, once the previous is defeated?
Yes, you'll need to toggle the TreasureMode value. The default value is 'None', so if you don't do anything else it will never work.
Add something like: Code
send_command('bind ^= gs c cycle treasuremode')
(this is from my thf file)
And yes, it detects autotargetting after a mob dies.
Server: Asura
Game: FFXI
Posts: 363
By Asura.Vafruvant 2014-09-15 07:08:52
So, the revised code, when tested with Protect and Shell, is: Code function job_buff_change(buff, gain)
if buff == 'Encumbrance' then
if gain then
add_to_chat(122, '***Encumbered!! Equipment lost!!***')
else
if player.status == 'Engaged' then
equip(meleeSet)
add_to_chat(122, '***No longer encumbered. Engaged set re-equipped.***')
elseif player.status == 'Idle' then
equip(idleSet)
add_to_chat(122, '***No longer encumbered. Idle set re-equipped.***')
end
end
end
end
Phoenix.Uzugami
Server: Phoenix
Game: FFXI
By Phoenix.Uzugami 2014-09-15 07:25:16
Havin' a bit of a problem with abilities using this gearswap thing (Just came back for free week and completely clueless about .lua) http://pastebin.com/NNnEUUTZ
Whenever I use this randomly I'm unable to use Waltz, any clue as to why? :s
By gdiShun 2014-09-15 16:56:43
Are you under level 90? I seem to remember having a similar problem with it then.
My own question: Is there a way to run a function upon zoning?
Phoenix.Uzugami
Server: Phoenix
Game: FFXI
By Phoenix.Uzugami 2014-09-15 16:58:56
Nope; I'm Lv.99 :s
Edit: Waltz works until I change gear it seems. Once I change gear my target turns into numbers, and I can't use any waltz below III
Asura.Velata
Server: Asura
Game: FFXI
Posts: 28
By Asura.Velata 2014-09-15 17:31:45
Having an issue with Fucho-no-Obi. The default kinematics BLU.lua isn't working even though it should be by all accounts, and every other example I've seen uses this.
Code sets.latent_refresh = {waist="Fucho-no-Obi"}
......
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if player.mpp < 51 then
set_combine(idleSet, sets.latent_refresh)
end
return idleSet
end
It isn't swapping out at all even when completely draining the MP pool dry to test and see if it was a weird % threshold. Kinematics BLU wasn't touched at all and double checked to make sure the set was in the sidecar file.
Idle/PDT/Town all work fine, I just can't get this rule to work.
Server: Phoenix
Game: FFXI
Posts: 82
By Phoenix.Raistlinmaj 2014-09-15 17:53:02
Eh... attempt to call global "m" a nil value. so still no auto-th tag,lol. What is the proper way to add includes to non-mote jobfiles? and what else would I needs to add to make it function properly...I can't seem to find any definitive answer.
Bismarck.Inference
Server: Bismarck
Game: FFXI
Posts: 417
By Bismarck.Inference 2014-09-15 18:19:57
Having an issue with Fucho-no-Obi. The default kinematics BLU.lua isn't working even though it should be by all accounts, and every other example I've seen uses this.
Not 100% sure how Mote is setup, but wouldn't you need line 8 to read:
Code
idleSet = set_combine(idleSet, sets.latent_refresh)
Since otherwise its just returning the idleSet that you fed to the function since its never being reassigned?
Asura.Velata
Server: Asura
Game: FFXI
Posts: 28
By Asura.Velata 2014-09-15 18:42:34
Bismarck.Inference said: »Having an issue with Fucho-no-Obi. The default kinematics BLU.lua isn't working even though it should be by all accounts, and every other example I've seen uses this.
Not 100% sure how Mote is setup, but wouldn't you need line 8 to read:
Code
idleSet = set_combine(idleSet, sets.latent_refresh)
Since otherwise its just returning the idleSet that you fed to the function since its never being reassigned?
My understanding from it is Mote has it so that it simply tries to attach the obi to whatever mode of Idle you're currently in (Idle, PDT, or Town).
I could be wrong, however.
EDIT: http://pastebin.com/3WFiCRTt Just in case it's useful (the sidecar file)
EDIT2: Your recommendation works wonderfully Inference, thank you very much! I'll leave this here in case Mote wants to take a note of it for his default (in case there was something I'm missing it wasn't working via default).
[+]
Phoenix.Cliamain
Server: Phoenix
Game: FFXI
Posts: 64
By Phoenix.Cliamain 2014-09-17 02:38:43
So i've been using my burtgang for a few months, manually changing and locking a AM3 set for it. I'd like to see peoples rules and what have ya for when you have AM3 up. Kinda like how a dark knights liborator rules would see that aftermath is active. Only thing is, is that the gear swap i use has its groups set around the shields i use. Any help would be nice.
Bismarck.Leneth
Server: Bismarck
Game: FFXI
By Bismarck.Leneth 2014-09-17 15:33:57
Good evening,
in Mote's SMN file there is a function for different modes. Code function user_setup()
state.OffenseMode:options('None', 'Normal', 'Acc')
state.CastingMode:options('Normal', 'Resistant')
state.IdleMode:options('Normal', 'PDT')
gear.perp_staff = {name=""}
end
How can I utilise these modes for equipment sets?
Also in which file are the key binds for these modes?
Thank you
By gdiShun 2014-09-17 15:59:21
None is none(it won't change your sets). Normal is just your usual 'sets.engaged' and Acc will be 'sets.engaged.Acc'.
The file is Motes-Globals.lua
I don't remember the defaults but they use F9-F12 w/ CTRL and ALT as modifiers.
[+]
Quetzalcoatl.Orestes
Server: Quetzalcoatl
Game: FFXI
Posts: 430
By Quetzalcoatl.Orestes 2014-09-17 16:03:05
So i've been using my burtgang for a few months, manually changing and locking a AM3 set for it. I'd like to see peoples rules and what have ya for when you have AM3 up. Kinda like how a dark knights liborator rules would see that aftermath is active. Only thing is, is that the gear swap i use has its groups set around the shields i use. Any help would be nice.
It's difficult to say without seeing your file, since there's a few different ways to approach this.
Are you using Mote's includes?
How can I utilise these modes for equipment sets?
Also in which file are the key binds for these modes?
Thank you This should help. https://github.com/Kinematics/GearSwap-Jobs/wiki
[+]
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.
|
|