|
Gearswap Support Thread
By Echodiz 2016-05-24 03:21:45
So random but I cannot, for whatever reason, get my ranged/ammo slots to obey!!!
For instance:
When engaged in normal mode, my THF should be equipping Ginsen-- instead it equips Raider's Boomerang. If I switch to Acc mode for Honed Tathlum, same failure and Boomerang reigns supreme....I don't know what going on. Help and thank you!
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-24 10:15:19
Bismarck.Speedyjim said: »Thanks, that worked. Add_to_chat is a bit late to actually add to the chat, sometimes appearing 20secs after the buff wore. That's...strange. Is it only late when the buff wears, or also when it is received? Either way, I'm fairly certain it's not an issue on your side.
So random but I cannot, for whatever reason, get my ranged/ammo slots to obey!!!
For instance:
When engaged in normal mode, my THF should be equipping Ginsen-- instead it equips Raider's Boomerang. If I switch to Acc mode for Honed Tathlum, same failure and Boomerang reigns supreme....I don't know what going on. Help and thank you! I'd need to see your code. You can use pastebin.com or the code tags on here.
By Echodiz 2016-05-24 12:28:03
Here's the bloody thing Code
-------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
--[[
Custom commands:
gs c cycle treasuremode (set on ctrl-= by default): Cycles through the available treasure hunter modes.
Treasure hunter modes:
None - Will never equip TH gear
Tag - Will equip TH gear sufficient for initial contact with a mob (either melee, ranged hit, or Aeolian Edge AOE)
SATA - Will equip TH gear sufficient for initial contact with a mob, and when using SATA
Fulltime - Will keep TH gear equipped fulltime
--]]
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
include('organizer-lib')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
state.Buff['Trick Attack'] = buffactive['trick attack'] or false
state.Buff['Feint'] = buffactive['feint'] or false
include('Mote-TreasureHunter')
-- For th_action_check():
-- JA IDs for actions that always have TH: Provoke, Animated Flourish
info.default_ja_ids = S{35, 204}
-- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
info.default_u_ja_ids = S{201, 202, 203, 205, 207}
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
organizer_items = {
"Echo Drops",
"Holy Water",
"Capacity Ring",
"Trizek Ring",
"Mecisto. Mantle",
"Sole Sushi",
"Reraise Earring",
"Sole Sushi +1",
"Jugo kukri +1",
"Ipetam",
"Samba Sushi",
item="Riverfin Soup",
item="Reraise Earring",
item="Red Curry Bun"
}
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.OffenseMode:options('Normal', 'Acc', 'Mod')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.RangedMode:options('Normal', 'Acc')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
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 ^` input /ja "Flee" <me>')
send_command('bind ^= gs c cycle treasuremode')
send_command('bind !- gs c cycle targetmode')
select_default_macro_book()
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()
--------------------------------------
-- Special sets (required by rules)
--------------------------------------
sets.TreasureHunter = {hands="Plunderer's Armlets +1", waist="Chaac Belt", feet="Skulker's Poulaines"}
sets.ExtraRegen = {head="Ocelomeh Headpiece +1"}
sets.Kiting = {feet="Skadi's Jambeaux +1"}
sets.buff['Sneak Attack'] = {ammo="Qirmiz Tathlum",
head="Pillager's Bonnet +1",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest +1",hands="Plunderer's Armlet's +1",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
sets.buff['Trick Attack'] = {ammo="Qirmiz Tathlum",
head="Pillager's Bonnet +1",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest +1",hands="Plunderer's Armlet's +1",ring1="Stormsoul Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Pillager's Culottes +1",feet="Plunderer's Poulaines +1"}
-- Actions we want to use to tag TH.
sets.precast.Step = sets.TreasureHunter
sets.precast.Flourish1 = sets.TreasureHunter
sets.precast.JA.Provoke = sets.TreasureHunter
--------------------------------------
-- Precast sets
--------------------------------------
-- Precast sets to enhance JAs
sets.precast.JA['Collaborator'] = {head="Skulker's Bonnet +1"}
sets.precast.JA['Accomplice'] = {head="Skulker's Bonnet +1"}
sets.precast.JA['Flee'] = {feet="Pillager's Poulaines +1"}
sets.precast.JA['Hide'] = {body="Pillager's Vest +1"}
sets.precast.JA['Conspirator'] = {body="Raider's Vest +2"}
sets.precast.JA['Steal'] = {head="Plunderer's Bonnet",hands="Plunderer's Armlet's +1",legs="Pillager's Culottes +1",feet="Pillager's Poulaines +1"}
sets.precast.JA['Despoil'] = {legs="Raider's Culottes +2",feet="Raider's Poulaines +2"}
sets.precast.JA['Perfect Dodge'] = {hands="Plunderer's Armlets +1"}
sets.precast.JA['Feint'] = {legs="Plunderer's Culottes"}
sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
-- Waltz set (chr and vit)
sets.precast.Waltz = {
ammo="Sonia's Plectrum",
head="Skulker's Bonnet +1",
body="Pillager's Vest +1",
hands="Plunderer's Armlet's +1",
ring1="Asklepian Ring",
back="Iximulew Cape",
waist="Caudata Belt",
legs="Pillager's Culottes +1",
feet="Plunderer's Poulaines +1"}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
-- Fast cast sets for spells
sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring",legs="Enif Cosciales"}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
-- Ranged snapshot gear
sets.precast.RA = {head="Aurore Beret",hands="Iuitl Wristbands",legs="Nahtirah Trousers",feet="Wurrukatte Boots"}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {
head="Skulker's Bonnet +1",
neck="Fotia Gorget",
ear1="Jupiter's Pearl",
ear2="Jupiter's Pearl",
body="Pillager's Vest +1",
hands="Herculean Gloves",
ring1="Ramuh Ring",
ring2="Ramuh Ring",
back="Atheling Mantle",
waist="Prosilio Belt +1",
legs="Samnuha Tights",
feet="Taeon Boots"}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {ammo="Honed Tathlum", back="Letalis 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, {ring1="Stormsoul Ring",legs="Nahtirah Trousers"})
sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Exenterator'].Mod = set_combine(sets.precast.WS['Exenterator'], {head="Felistris Mask",waist=gear.ElementalBelt})
sets.precast.WS['Exenterator'].SA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Exenterator'].TA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Exenterator'].SATA = set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Dancing Edge'] = set_combine(sets.precast.WS, {})
sets.precast.WS['Dancing Edge'].Acc = set_combine(sets.precast.WS['Dancing Edge'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Dancing Edge'].Mod = set_combine(sets.precast.WS['Dancing Edge'], {waist=gear.ElementalBelt})
sets.precast.WS['Dancing Edge'].SA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Dancing Edge'].TA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Dancing Edge'].SATA = set_combine(sets.precast.WS['Dancing Edge'].Mod, {ammo="Qirmiz Tathlum"})
sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, { head="Whirlpool Mask",
neck="Rancor Collar",
body="Pillager's Vest +1",
hands="Pillager's Armlet's +1",
ear1="Brutal Earring",
ear2="Moonshade Earring"})
sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Evisceration'].Mod = set_combine(sets.precast.WS['Evisceration'], {back="Kayapa Cape",waist=gear.ElementalBelt})
sets.precast.WS['Evisceration'].SA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
sets.precast.WS['Evisceration'].TA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
sets.precast.WS['Evisceration'].SATA = set_combine(sets.precast.WS['Evisceration'].Mod, {})
sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",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="Letalis Mantle"})
sets.precast.WS["Rudra's Storm"].Mod = set_combine(sets.precast.WS["Rudra's Storm"], {back="Kayapa Cape",waist=gear.ElementalBelt})
sets.precast.WS["Rudra's Storm"].SA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS["Rudra's Storm"].TA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS["Rudra's Storm"].SATA = set_combine(sets.precast.WS["Rudra's Storm"].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS["Shark Bite"] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
sets.precast.WS['Shark Bite'].Acc = set_combine(sets.precast.WS['Shark Bite'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Shark Bite'].Mod = set_combine(sets.precast.WS['Shark Bite'], {back="Kayapa Cape",waist=gear.ElementalBelt})
sets.precast.WS['Shark Bite'].SA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Shark Bite'].TA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Shark Bite'].SATA = set_combine(sets.precast.WS['Shark Bite'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Mandalic Stab'] = set_combine(sets.precast.WS, {head="Pillager's Bonnet +1",ear1="Brutal Earring",ear2="Moonshade Earring"})
sets.precast.WS['Mandalic Stab'].Acc = set_combine(sets.precast.WS['Mandalic Stab'], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Mandalic Stab'].Mod = set_combine(sets.precast.WS['Mandalic Stab'], {back="Kayapa Cape",waist=gear.ElementalBelt})
sets.precast.WS['Mandalic Stab'].SA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Mandalic Stab'].TA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Mandalic Stab'].SATA = set_combine(sets.precast.WS['Mandalic Stab'].Mod, {ammo="Qirmiz Tathlum",
body="Pillager's Vest +1",legs="Pillager's Culottes +1"})
sets.precast.WS['Aeolian Edge'] = { neck="Fotia Gorget",
ear1="Friomisi Earring",
ear2="Moonshade Earring",
body="Samnuha coat",
hands="Leyline Gloves",
ring1="Acumen Ring",
ring2="Demon's Ring",
back="Toro Cape",
waist=gear.ElementalBelt,
legs="Shneddick Tights +1",
feet="Wayfarer Clogs"}
sets.precast.WS['Aeolian Edge'].TH = set_combine(sets.precast.WS['Aeolian Edge'], sets.TreasureHunter)
--------------------------------------
-- Midcast sets
--------------------------------------
sets.midcast.FastRecast = {
head="Whirlpool Mask",ear2="Loquacious Earring",
body="Pillager's Vest +1",hands="Plunderer's Armlets +1",
back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
-- Specific spells
sets.midcast.Utsusemi = {
head="Whirlpool Mask",neck="Ej Necklace",ear2="Loquacious Earring",
body="Pillager's Vest +1",hands="Plunderer's Armlets +1",ring1="Beeline Ring",
back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
-- Ranged gear
sets.midcast.RA = {
head="Whirlpool Mask",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Beeline Ring",ring2="Hajduk Ring",
back="Libeccio Mantle",waist="Aquiline Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
sets.midcast.RA.Acc = {
head="Pillager's Bonnet +1",neck="Ej Necklace",ear1="Clearview Earring",ear2="Volley Earring",
body="Iuitl Vest",hands="Buremte Gloves",ring1="Beeline Ring",ring2="Hajduk Ring",
back="Libeccio Mantle",waist="Aquiline Belt",legs="Thurandaut Tights +1",feet="Pillager's Poulaines +1"}
--------------------------------------
-- Idle/resting/defense sets
--------------------------------------
-- Resting sets
-- sets.resting = {
ranged="Raider's boomerang",
head="Skulker's Bonnet +1",
neck="Asperity Necklace",
ear1="Dudgeon Earring",
ear2="Heartseeker Earring",
body="Pillager's Vest +1",
hands="Plunderer's Armlets +1",
ring1="Epona's Ring",
ring2="Rajas Ring",
back="Canny Cape",
waist="Flume Belt +1",
legs="Pillager's Culottes +1",
feet="Fajin boots"}
-- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
sets.idle = {
ammo="Ginsen",
head="Skulker's Bonnet +1",
neck="Twilight Torque",
ear1="Dudgeon Earring",
ear2="Infused Earring",
body="Pillager's Vest +1",
hands="Plunderer's Armlets +1",
ring1="Dark Ring",
ring2="Dark Ring",
back="Repulse Mantle",
waist="Flume Belt +1",
legs="Taeon Tights",
feet="Fajin boots"}
sets.idle.Town = {
main="Odium",
sub="Ternion Dagger +1",
ammo="Ginsen",
head="Skulker's Bonnet +1",
neck="Asperity Necklace",
ear1="Infused Earring",
ear2="Heartseeker Earring",
body="Councilor's garb",
hands="Plunderer's Armlets +1",
ring1="Craftmaster's Ring",
ring2="Artificer's Ring",
back="Canny Cape",
waist="Windbuffet Belt +1",
legs="Samnuha Tights",
feet="Fajin boots"}
-- sets.idle.Weak = {ammo="Thew Bomblet",
head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest +1",hands="Plunderer's Armlet's +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
-- Defense sets
-- sets.defense.Evasion = {
head="Pillager's Bonnet +1",neck="Ej Necklace",
body="Qaaxo Harness",hands="Plunderer's Armlet's +1",ring1="Defending Ring",ring2="Beeline Ring",
back="Canny Cape",waist="Flume Belt",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
-- sets.defense.PDT = {
ranged="Raider's Boomerang",
head="Felistris Mask",
neck="Twilight Torque",
ear1="Dudgeon Earring",
ear2="Heartseeker Earring",
body="Taeon Tabard",
hands="Plunderer's Armlets +1",
ring1="Dark Ring",
ring2="Dark Ring",
back="Repulse Mantle",
waist="Flume Belt +1",
legs="Taeon Tights",
feet="Fajin Boots"}
-- sets.defense.MDT = {ammo="Demonry Stone",
-- head="Pillager's Bonnet +1",neck="Twilight Torque",
-- body="Pillager's Vest +1",hands="Plunderer's Armlet's +1",ring1="Defending Ring",ring2="Shadow Ring",
-- back="Engulfer Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Iuitl Gaiters +1"}
--------------------------------------
-- Melee sets
--------------------------------------
-- Normal melee group
sets.engaged = {
ammo="Ginsen",
head="Skulker's Bonnet +1",
neck="Asperity Necklace",
ear1="Dudgeon Earring",
ear2="Heartseeker Earring",
body="Taeon Tabard",
hands="Herculean Gloves",
ring1="Rajas Ring",
ring2="Epona's Ring",
back="Canny Cape",
waist="Windbuffet Belt +1",
legs="Taeon Tights",
feet="Taeon Boots"}
sets.engaged.Acc = {
ammo="Honed Tathlum",
head="Skulker's Bonnet +1",
neck="Ej Necklace",
ear1="Zennaroi Earring",
ear2="Heartseeker Earring",
body="Taeon Tabard",
hands="Herculean Gloves",
ring1="Oneiros Ring",
ring2="Rajas Ring",
back="Canny Cape",
waist="Hurch'lan sash",
legs="Taeon Tights",
feet="Taeon Boots"}
-- Mod set for trivial mobs (Skadi+1)
-- sets.engaged.Mod = {ammo="Thew Bomblet",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Skadi's Cuirie +1",hands="Plunderer's Armlet's +1",ring1="Rajas Ring",ring2="Epona's Ring",
back="Atheling Mantle",waist="Patentia Sash",legs=gear.AugQuiahuiz,feet="Plunderer's Poulaines +1"}
-- Mod set for trivial mobs (Thaumas)
-- sets.engaged.Mod2 = {
ammo="Thew Bomblet",
head="Felistris Mask",
neck="Asperity Necklace",
ear1="Dudgeon Earring",
ear2="Heartseeker Earring",
body="Thaumas Coat",
hands="Plunderer's Armlet's +1",
ring1="Rajas Ring",
ring2="Epona's Ring",
back="Atheling Mantle",
waist="Patentia Sash",
legs="Pillager's Culottes +1",
feet="Plunderer's Poulaines +1"}
sets.engaged.Evasion = {ammo="Thew Bomblet",
head="Imperial Wing Hairpin",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Taeon Tabard",hands="Plunderer's Armlets +1",ring1="Rajas Ring",ring2="Epona's Ring",
back="Canny Cape",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Qaaxo Leggings"}
sets.engaged.Acc.Evasion = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest +1",hands="Plunderer's Armlet's +1",ring1="Beeline Ring",ring2="Epona's Ring",
back="Canny Cape",waist="Hurch'lan Sash",legs="Kaabnax Trousers",feet="Qaaxo Leggings"}
sets.engaged.PDT = {
ranged="Raider's Boomerang",
head="Skulker's Bonnet +1",
neck="Twilight Torque",
ranged="Raider's Boomerang",
ear1="Dudgeon Earring",
ear2="Heartseeker Earring",
body="Taeon Tabard",
hands="Herculean Gloves",
ring1="Dark Ring",
ring2="Dark Ring",
back="Repulse Mantle",
waist="Flume Belt +1",
legs="Taeon Tights",
feet="Taeon Boots"}
sets.engaged.Acc.PDT = {ammo="Honed Tathlum",
head="Whirlpool Mask",neck="Ej Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Iuitl Vest",hands="Plunderer's Armlet's +1",ring1="Dark Ring",ring2="Dark Ring",
back="Canny Cape",waist="Hurch'lan Sash",legs="Iuitl Tights",feet="Qaaxo Leggings"}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Run after the general precast() is done.
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.english == 'Aeolian Edge' and state.TreasureMode.value ~= 'None' then
equip(sets.TreasureHunter)
elseif spell.english=='Sneak Attack' or spell.english=='Trick Attack' or spell.type == 'WeaponSkill' then
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
end
end
-- Run after the general midcast() set is constructed.
function job_post_midcast(spell, action, spellMap, eventArgs)
if state.TreasureMode.value ~= 'None' and spell.action_type == 'Ranged Attack' then
equip(sets.TreasureHunter)
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
-- Weaponskills wipe SATA/Feint. Turn those state vars off before default gearing is attempted.
if spell.type == 'WeaponSkill' and not spell.interrupted then
state.Buff['Sneak Attack'] = false
state.Buff['Trick Attack'] = false
state.Buff['Feint'] = false
end
end
-- Called after the default aftercast handling is complete.
function job_post_aftercast(spell, action, spellMap, eventArgs)
-- If Feint is active, put that gear set on on top of regular gear.
-- This includes overlaying SATA gear.
check_buff('Feint', eventArgs)
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 state.Buff[buff] ~= nil then
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
function get_custom_wsmode(spell, spellMap, defaut_wsmode)
local wsmode
if state.Buff['Sneak Attack'] then
wsmode = 'SA'
end
if state.Buff['Trick Attack'] then
wsmode = (wsmode or '') .. 'TA'
end
return wsmode
end
-- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
function job_handle_equipping_gear(playerStatus, eventArgs)
-- Check that ranged slot is locked, if necessary
check_range_lock()
-- Check for SATA when equipping gear. If either is active, equip
-- that gear specifically, and block equipping default gear.
check_buff('Sneak Attack', eventArgs)
check_buff('Trick Attack', eventArgs)
end
function customize_idle_set(idleSet)
if player.hpp < 80 then
idleSet = set_combine(idleSet, sets.ExtraRegen)
end
return idleSet
end
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
return meleeSet
end
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
th_update(cmdParams, eventArgs)
end
-- Function to display the current relevant user state when doing an update.
-- Return 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 == true then
msg = msg .. ', Kiting'
end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value == true then
msg = msg .. ', Target NPCs'
end
msg = msg .. ', TH: ' .. state.TreasureMode.value
add_to_chat(122, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- State buff checks that will equip buff gear and mark the event as handled.
function check_buff(buff_name, eventArgs)
if state.Buff[buff_name] then
equip(sets.buff[buff_name] or {})
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
eventArgs.handled = true
end
end
-- Check for various actions that we've specified in user code as being used with TH gear.
-- This will only ever be called if TreasureMode is not 'None'.
-- Category and Param are as specified in the action event packet.
function th_action_check(category, param)
if category == 2 or -- any ranged attack
--category == 4 or -- any magic action
(category == 3 and param == 30) or -- Aeolian Edge
(category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
(category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
then return true
end
end
-- Function to lock the ranged slot if we have a ranged weapon equipped.
function check_range_lock()
if player.equipment.range ~= 'empty' then
disable('range', 'ammo')
else
enable('range', 'ammo')
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 == 'DNC' then
set_macro_page(2, 9)
elseif player.sub_job == 'WAR' then
set_macro_page(3, 5)
elseif player.sub_job == 'NIN' then
set_macro_page(2, 8)
else
set_macro_page(2, 5)
end
end
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-24 13:25:15
Any time you equip a ranged weapon (for example, if you put it on manually, or use your 'resting' set or PDT sets), your rules are disabling the range/ammo slots. The boomerang will stay equipped unless you manually remove the weapon yourself.
You could either remove the call to check_range_lock() on line 540, or reevaluate the sets that you put boomerang in.
Gilgamesh.Pulsahr
Server: Gilgamesh
Game: FFXI
Posts: 4
By Gilgamesh.Pulsahr 2016-05-25 10:15:42
Hi !
I'm trying to customize my gearswap to my liking, but am having hard times figuring out how modes work.
I am a (web) developper with 8 years experience, so I have enough programming logic and vocabulary to understand most of lua files. However my knowledge regarding gearswap specifics is very limited, and the lack of exhaustive documentation prevents me to go forward in my needs.
Specific case question
Here is my need :
I'm trying to get some skills about the modes (DefenseMode, OffenseMode, ...). I managed to customize the options list, and how to cycle them. This is an example for my SMN :
Code state.PetMode = M{['description']='Avatar mode', 'DD', 'Tank'}
send_command('bind f11 gs c cycle PetMode')
I'm stuck at the next step : where can I define sets regarding this options ? Or maybe I can't do this ?
I'd like to cycle between 2 sets regarding my avatar situation : need to tank (set will prioritize pet pdt, regen, ...), or can go full dd (prioritizing haste, tp, ...).
I have no idea where (in the SMN.lua) I have to define this.
sets.idle.Pet doesn't exist so no sets.idle.Pet.DD.
More in-depth understanding questions
The following questions are really technical, but these are the most important to me. If you have the knowledge, or you know where I should look, please help me :)
I have opened the Mote-included.lua file looking for answers regarding modes stuff, and I saw a lot of sets I never heard of. Here is the complete list I found :
OffenseMode, HybridMode, RangedMode, WeaponskillMode, CastingMode, IdleMode, RestingMode, DefenseMode, PhysicalDefenseMode, MagicalDefenseMode, Kiting, SelectNPCTargets, PCTargetMode, EquipStop, CombatWeapon, CombatForm
All properties are bound to the "state" object (state.OffenseMode, ...). My main problem is I have no clue on what property is attached to what. Let me show an example that rips me some hair :
A friend SMN's file contains : Code state.OffenseMode:options('None', 'Normal', 'Acc')
and somewhere in init_gear_set function : Code sets.midcast.Pet.PhysicalBloodPactRage.Acc = {stuff}
My issue is I found nowhere (documentation) to look to understand that the OffenseMode value is a property of the sets.midcast.Pet.MagicalBloodPactRage, which is a customised value returned by job_get_spell_map.
How or where can I get these informations ?
Like what is a property to what ?
You know, something like :
- job_get_spell_map returns an object that has the properties xxx, yyy, ... theses properties can be used in sets.midcast.Pet and [...].
- state.DefenseMode has options that can be used in sets.Idle to alter your idle set according to your option.
Etc..
Did I miss the right place to look ?
Is there maybe someone to contact ?
A dedicated forum to Gearswap devs ?
An IRC chan ?
Thanks for any help !
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-25 11:34:39
Lua's syntax isn't really the same as, say, Javascript, so I think it might help a little to think of these as associative arrays ("tables" in Lua) and children, not objects and properties. Tables can be used like objects, but that's not really relevant to making equip sets.
In case you weren't aware, the documentation for Mote's files is here: https://github.com/Kinematics/GearSwap-Jobs/wiki. The 'Sets' section will explain the gist of the logic behind the set construction.
However, he doesn't have instructions for constructing pet gear sets, so looking at the Mote-Include file:
Code function get_pet_midcast_set(spell, spellMap)
-- If there are no midcast sets defined, bail out.
if not sets.midcast or not sets.midcast.Pet then
return {}
end
local equipSet = sets.midcast.Pet
mote_vars.set_breadcrumbs:append('sets')
mote_vars.set_breadcrumbs:append('midcast')
mote_vars.set_breadcrumbs:append('Pet')
if sets.midcast and sets.midcast.Pet then
classes.SkipSkillCheck = false
equipSet = select_specific_set(equipSet, spell, spellMap)
-- We can only generally be certain about whether the pet's action is
-- Magic (ie: it cast a spell of its own volition) or Ability (it performed
-- an action at the request of the player). Allow CastinMode and
-- OffenseMode to refine whatever set was selected above.
if spell.action_type == 'Magic' then
if equipSet[state.CastingMode.current] then
equipSet = equipSet[state.CastingMode.current]
mote_vars.set_breadcrumbs:append(state.CastingMode.current)
end
elseif spell.action_type == 'Ability' then
if equipSet[state.OffenseMode.current] then
equipSet = equipSet[state.OffenseMode.current]
mote_vars.set_breadcrumbs:append(state.OffenseMode.current)
end
end
end
return equipSet
end
First it will look for sets.midcast.Pet, then the select_specific_set function will look for a child of that set that is indexed by spell.name, or else the spellmap name. If neither of those children are found, then it will look for a child indexed by spell.skill, or else spell.type, then again look for spell.name, or else spellmap.
Then it will look for a child that is indexed either by the current casting mode if the pet initiated the action, or the current offense mode if the player initiated the action.
So:
1. sets.midcast.Pet
2. [spell.name] or [spellMap]
2b. OR [spell.skill] or [spell.type], then [spell.name] or [spellMap]
3. [CastingMode.current] or [OffenseMode.current]
Each step past #1 is optional. If the child doesn't exist, it will skip that and look for the next part. For example, if you just have sets.midcast.Pet.Acc, it'd still work (but of course having some of the children before that will help you refine your sets better).
In your friend's case, "PhysicalBloodPactRage" is a custom spellMap, using this function, which is provided by default in Mote's SMN lua: Code function job_get_spell_map(spell)
if spell.type == 'BloodPactRage' then
if magicalRagePacts:contains(spell.english) then
return 'MagicalBloodPactRage'
else
return 'PhysicalBloodPactRage'
end
elseif spell.type == 'BloodPactWard' and spell.target.type == 'MONSTER' then
return 'DebuffBloodPactWard'
end
end
Gilgamesh.Pulsahr
Server: Gilgamesh
Game: FFXI
Posts: 4
By Gilgamesh.Pulsahr 2016-05-26 03:25:16
Thank you very much !
That is a really helpful answer. I will study the ressources at Kinematics, those links looks really what I needed to find.
Thanks for the vocabulary update too, really helpful, once more (no sarcasm !).
If I understood correctly, I can't make my own options like I tried with "PetMode", because it won't be looked after in the gearswap equip process. The only way to exploit a custom Idle option would be to use the "state.CustomIdleGroups" and check the value "state.CustomIdleGroups.value" somewhere.
Thanks again for your answer, I have all the keys to do what I want to do now. Have a nice day :)
By Dsuza 2016-05-27 20:12:12
Hey guys, I'm pretty new to GearSwap in general, but have been learning pretty quickly (Well a lot more quickly that I was expecting to)
Anyway I can't figure out why certain/different gear isn't equiping in different Casting modes on BRD for song buffs. But it is working for Song Debuffs just fine in the different casting modes. I have a feeling it is the way it is defined and needs to be differently.
First I will post how it is worded for Song Debuffs (The one that is currently working)
The 2 Casting modes I have are 'Normal' and 'Resistant'
So I have:
sets.midcast.SongDebuff = (This is what equips when in Normal casting mode)
and
sets.midcast.ResistantSongDebuff = (This is what equips in Resistant casting mode.
So for Song buffs it is worded like:
sets.midcast.SongEffect = (This is the set that equips in Normal AND Resistant Casting modes even though I have another midcast set for Resistant, and here are the ways I've tried to word it)
sets.midcast.ResistantSongEffect =
sets.midcast.SongEffect.Resistant =
sets.midcast.SongEffectResistant =
The LUA loads fine, but for some reason when I'm in Resistant Casting mode, and cast a song buff, it will only equip the gear from the Normal casting mode in the sets.midcast.SongEffect line.
Anyone have any idea what's going on or how to make it so it works?
What I found odd is that I have another LUA for BLM, that has 4 different casting modes, and when I word/define a set for w/e specific casting mode like I did above, it works. Also I find it strange that it works for the Song Debuffs worded the way it is, just not the Buffs.
Thank you very much in advance for whoever takes the time to read/try to help.
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-27 21:02:10
I'm going to assume you are using Mote/Kinematic's GS files. The names of those sets are being determined by the get_song_class(spell) function (within the BRD.lua file). If you want to change the logic by which it determines which set to use for songs, you should do it within that function.
But I have to ask why you would want a different set for song effect. This is for march, madrigal, etc...I can't think of any reason you'd ever want to wear different gear for buff songs.
Gilgamesh.Pulsahr said: »If I understood correctly, I can't make my own options like I tried with "PetMode", because it won't be looked after in the gearswap equip process. The only way to exploit a custom Idle option would be to use the "state.CustomIdleGroups" and check the value "state.CustomIdleGroups.value" somewhere. Those are probably what he set them up for, so yes. Also note that these are just Mote/Kinematic's files, which are generally set up for people who just want to put their gear in, and maybe have a little bit of customization here and there. You are absolutely free to make your own files from scratch, if you feel comfortable doing that and need more control.
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2016-05-27 22:32:48
Unless you grabbed somebody's modified Mote LUA, the original one only has 5 real sets:
Code sets.midcast.SongEffect
sets.midcast.SongDebuff
sets.midcast.ResistantSongDebuff
sets.midcast.DaurdablaDummy
sets.midcast.SongRecast
Bismarck.Dunigs
Server: Bismarck
Game: FFXI
Posts: 83
By Bismarck.Dunigs 2016-05-30 13:22:07
Anyone having issues with priority tags? Have been trying to iron out some issues with Death swaps in order to not lose MP as a result of non-ideal swap orders but it doesn't behave as expected at all, two sets I've been testing with:
Code
function get_sets()
sets.set1 = {
hands={name="Otomi Gloves",priority=1},
head={name="Merlinic Hood",priority=2},
neck={name="Voltsurge Torque",priority=3},
ear1={name="Loquacious Earring",priority=4},
body={name="Anhur Robe",priority=5},}
sets.set2 = {
body={name="Amalric Doublet",priority=1},
head={name="Pixie Hairpin +1",priority=2},
hands={name="Amalric Gages",priority=3},
neck={name="Mizukage-no-Kubikazari",priority=4},
ear1={name="Static Earring",priority=5},
waist=empty}
end
I believe this syntax is correct? My math says going from set1 > set2 I should be 101 undercap and going set2 > set1 I should end 41 over cap, assuming I start from max MP in both instances. This checks out if I use windower scripts in the proper order(same as outlined in the priority tags), but letting gearswap handle the above puts me something like ~70 under when ending in set1 and more like ~200 under in set2.
I'm not sure if showswaps literally shows the order or just prints out table contents randomized but if it is supposed to print in order, again it shows that its not functioning properly.
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-30 14:14:14
Priority works from highest to lowest and, without doing the math, it looks like you have it going the other way around.
[+]
Bismarck.Dunigs
Server: Bismarck
Game: FFXI
Posts: 83
By Bismarck.Dunigs 2016-05-30 14:32:44
Damnit, now I feel stupid. Thanks!
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2016-05-30 16:37:29
Unable to implement this into my Mote_blu.LUA. Stolen from my Mote_thf.LUA. Any help is appreciated.
Code function determine_haste_group()
classes.CustomMeleeGroups:clear()
if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.march == 2 and buffactive.haste then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive['Mighty Guard'] and buffactive.haste == 2 then
classes.CustomMeleeGroups:append('MaxHaste')
end
end
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-30 17:10:05
I can't find that in Mote's original THF file, so I can't make very specific suggestions without seeing how it's being implemented in your file. Did you also copy where that function is being called?
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2016-05-30 17:20:29
Mmm, it's possible I stole it from the Nin.lua instead. I don't believe I copied where the function is being called.
Just added it here: Code function job_update(cmdParams, eventArgs)
determine_haste_group()
end
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-30 17:31:21
Okay, I see it in the NIN file. Are you calling that function somewhere regularly too? Otherwise it seems that function is only called by Mote when you use a 'gs c' command that he handles.
In the NIN file, he also calls the function when you first load the file, and when you receive or lose any of those buffs.
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2016-05-30 17:43:17
I've now added it to the job_setup & job_buff_change functions. This should do it, I suppose?
Bahamut.Gorion
Server: Bahamut
Game: FFXI
Posts: 30
By Bahamut.Gorion 2016-05-30 18:56:13
I would like to auto equip purity ring and Gishdubar sash when Cursed or doomed to make it easier for removal when i'm using holy waters or being cursna. not sure where or how to add these functions any help is appreciated
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-30 19:11:25
Multitude of ways you can handle that, but the least effort method would be to use the buff_change function to track when you gain/lose Doom.
Code function buff_change(buff,gain,buff_table)
if buff=="Doom" then
if gain then
equip({waist="whatever",ring1="whatever"})
disable('waist','ring1')
else
enable('waist','ring1')
end
end
end
If you're using Mote, then you would need to add the inside lines to the job_buff_change function in your file.
Bahamut.Gorion
Server: Bahamut
Game: FFXI
Posts: 30
By Bahamut.Gorion 2016-05-30 19:26:10
thanks
By Ineeedmoney 2016-05-30 19:26:27
Would someone be able to explain to me why my GS keeps putting me back into DW set after I use Lunge.
Even when I have it set to Reg mode it puts me back into DW set
Spoiler Alert! Click to view.
Thanks for your help
function get_sets()
send_command('bind !f9 gs c toggle TP set')
send_command('bind ^f9 gs c toggle DW set')
send_command('bind !f10 gs c toggle Weaponskill sets')
send_command('bind ^f10 gs c toggle Idle set')
send_command('bind f9 input /ja "Gambit" <t>')
send_command('bind f10 input /ja "Lunge" <t>')
send_command('bind f11 input /ja "Swipe" <t>')
send_command('bind f12 input /ma "Flash" <t>')
send_command('bind !f12 input /ws "Dimidiation" <t>')
function file_unload()
send_command('unbind ^f9')
send_command('unbind ^f10')
send_command('unbind !f9')
send_command('unbind !f10')
send_command('unbind !f12')
send_command('unbind f9')
send_command('unbind f10')
send_command('unbind f11')
send_command('unbind f12')
end
-- JA Sets for Precast Function --
sets.JA = {}
sets.JA['Elemental Sforzo'] = {body="Futhark Coat +1"}
sets.JA['Vallation'] = {body="Runeist Coat +1",legs="Futhark Trousers"}
sets.JA['Valiance'] = {body="Runeist Coat +1",legs="Futhark Trousers"}
sets.JA['Pflug'] = {feet="Runeist Bottes"}
sets.JA['Swordplay'] = {hands="Futhark Mitons +1"}
sets.JA['Gambit'] = {hands="Runeist Mitons"}
sets.JA['Liement'] = {body="Futhark Coat +1"}
sets.JA['Battuta'] = {head="Futhark Bandeau +1"}
sets.JA['Lunge'] = {
ammo="Ghastly tathlum",
head={ name="Taeon Chapeau", augments={'"Mag.Atk.Bns."+17','Crit.hit rate+3','AGI+6',}},
body="Samnuha coat",
hands="Leyline gloves",
legs={ name="Taeon Tights", augments={'"Mag.Atk.Bns."+20','"Recycle"+8',}},
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Eddy necklace",
waist="Yamabuki-no-Obi",
left_ear="Friomisi earring",
right_ear="Hecate's earring",
left_ring="Acumen ring",
right_ring="",
back="Evasionist's cape"}
sets.JA['Embolden'] = {back="Evasionist's Cape"}
sets.JA['Vivacious Pulse'] = {legs="Runeist Trousers +1",head="Erilaz galea"}
-- TP/Engaged sets --
sets.TP = {'Reg'}
sets.TP.index = {'Reg', 'MAcc', 'HAcc', 'PDT', 'PDTA','DW','DWA','DWP','DWPA','JP','Multi','Mag'}
TP_index = 1
sets.TP.Reg = {
main="",
sub="",
ammo="Hagneia Stone",
head={ name="Taeon Chapeau", augments={'Attack+22','"Triple Atk."+2','STR+2 DEX+2',}},
body="Rawhide vest",
hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +3%',}},
legs="Samnuha tights",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Asperity Necklace",
waist="Windbuffet Belt +1",
left_ear="Steelflash earring",
right_ear="Bladeborn earring",
left_ring="Epona's ring",
right_ring="Rajas Ring",
back="Evasionist's cape",}
sets.TP.MAcc = set_combine(sets.TP.Reg,{hands=""})
sets.TP.HAcc = {{
ammo="Honed tathlum",
head={ name="Taeon Chapeau", augments={'Attack+22','"Triple Atk."+2','STR+2 DEX+2',}},
body="Rawhide vest",
hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +3%',}},
legs="Samnuha tights",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Asperity Necklace",
waist="Windbuffet Belt +1",
left_ear="Steelflash earring",
right_ear="Bladeborn earring",
left_ring="Epona's ring",
right_ring="Rajas Ring",
back="Evasionist's cape"}}
sets.TP.PDT = {ammo="Honed Tathlum",
head="Futhark bandeau +1",neck="Twilight Torque",ear1="Ethereal Earring",ear2="Brutal Earring",
body="Futhark coat +1",hands="Umuthi gloves",ring1="Defending Ring",ring2="Dark ring",
back="Evasionist's cape",waist="Flume Belt",legs="Erilaz leg guards",feet="Erilaz greaves"}
sets.TP.PDTA ={ammo="Honed Tathlum",
head="Futhark bandeau +1",neck="Twilight Torque",ear1="Ethereal Earring",ear2="Brutal Earring",
body="Erilaz surcoat",hands="Umuthi gloves",ring1="Defending Ring",ring2="Dark ring",
back="Evasionist's cape",waist="Flume Belt",legs="Erilaz leg guards",feet="Erilaz greaves"}
sets.TP.DW = set_combine(sets.TP.Reg,{ear1="Dudgeon earring",ear2="Heartseeker earring"})
sets.TP.DWA = set_combine(sets.TP.Acc,{ear1="Dudgeon earring",ear2="Heartseeker earring"})
sets.TP.DWP = set_combine(sets.TP.PDT,{ear1="Dudgeon earring",ear2="Heartseeker earring"})
sets.TP.DWPA = set_combine(sets.TP.PDTA,{ear1="Dudgeon earring",ear2="Heartseeker earring"})
sets.TP.JP = set_combine(sets.TP.Reg,{back="Mecistopins Mantle"})
sets.TP.Multi = set_combine(sets.TP.Reg,{body="Thaumas Coat"})
sets.TP.Mag = set_combine(sets.TP.PDTA,{back=""})
-- Idle Sets --
sets.Idle = {}
sets.Idle.index = {'Regen','Refresh'}
Idle_index = 1
sets.Idle.Regen = {head="",
neck="Wiglen Gorget",ear1="Ethereal Earring",body="Respite cloak",hands="Umuthi gloves",
ring1="Paguroidea Ring",ring2="Sheltered ring",back="Shadow Mantle",waist="Flume Belt",
legs="Runeist Trousers +1",Feet="Hermes' sandals"}
sets.Idle.Refresh = {ammo="Honed Tathlum",
head="Futhark bandeau +1",neck="Twilight Torque",ear1="Ethereal Earring",ear2="Brutal Earring",
body="Futhark coat +1",hands="Umuthi gloves",ring1="Defending Ring",ring2="Dark ring",
back="Evasionist's cape",waist="Flume Belt",legs="Erilaz leg guards",feet="Erilaz greaves"}
--WS Resolution Set --
sets.WS = {{
ammo="Aqreqaq bomblet",
head="Rabid visor",
body={ name="Taeon Tabard", augments={'Accuracy+10 Attack+10','"Triple Atk."+2','Weapon skill damage +2%',}},
hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +3%',}},
legs="Samnuha tights",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Thunder gorget",
waist="Thunder belt",
left_ear="Brutal earring",
right_ear="Flame pearl",
left_ring="Ifrit ring",
right_ring="Rajas Ring",
back="Buquwik cape"}}
sets.Resolution = {}
sets.Resolution.index = {'Normal','Accuracy'}
Resolution_index = 1
sets.Resolution.Normal = {
ammo="Aqreqaq bomblet",
head="Rabid visor",
body={ name="Taeon Tabard", augments={'Accuracy+10 Attack+10','"Triple Atk."+2','Weapon skill damage +2%',}},
hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +3%',}},
legs="Samnuha tights",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Thunder gorget",
waist="Thunder belt",
left_ear="Brutal earring",
right_ear="Flame pearl",
left_ring="Ifrit ring",
right_ring="Rajas Ring",
back="Buquwik cape"}
sets.Resolution.Accuracy = {
ammo="Aqreqaq bomblet",
head="Rabid visor",
body={ name="Taeon Tabard", augments={'Accuracy+10 Attack+10','"Triple Atk."+2','Weapon skill damage +2%',}},
hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +3%',}},
legs="Samnuha tights",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Thunder gorget",
waist="Thunder belt",
left_ear="Brutal earring",
right_ear="Flame pearl",
left_ring="Ifrit ring",
right_ring="Rajas Ring",
back="Buquwik cape"}
sets.Resolution.R = set_combine(sets.Resolution.Normal,{neck="Ygnas's Resolve +1"})
sets.Dimidiation = {}
sets.Dimidiation.index = {'Normal','Accuracy'}
Dimidiation_index = 1
sets.Dimidiation.Normal = {
ammo="Honed tathlum",
head="Rabid visor",
body="Rawhide vest",
hands="Leyline gloves",
legs="Samnuha tights",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Flame gorget",
waist="Light belt",
left_ear="Light earring",
right_ear="Thunder pearl",
left_ring="Ramuh ring",
right_ring="Rajas Ring",
back="Kayapa cape"}
sets.Dimidiation.Accuracy = {
ammo="Honed tathlum",
head="Rabid visor",
body="Rawhide vest",
hands="Leyline gloves",
legs="Samnuha tights",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Flame gorget",
waist="Light belt",
left_ear="Light earring",
right_ear="Thunder pearl",
left_ring="Ramuh ring",
right_ring="Rajas Ring",
back="Kayapa cape"}
sets.Dimidiation.R = set_combine(sets.Dimidiation.Normal,{neck="Ygnas's Resolve +1"})
-- WS Requiescat Set --
sets.Requiescat = {}
sets.Requiescat.index = {'Normal','Accuracy'}
Requiescat_index = 1
sets.Requiescat.Normal = {
ammo="Honed tathlum",
head={ name="Taeon Chapeau", augments={'Attack+22','"Triple Atk."+2','STR+2 DEX+2',}},
body="Rawhide vest",
hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +3%',}},
legs="Samnuha tights",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Flame gorget",
waist="Light belt",
left_ear="Light earring",
right_ear="Thunder pearl",
left_ring="Ramuh ring",
right_ring="Rajas Ring",
back="Kayapa cape"}
sets.Requiescat.Accuracy = {
ammo="Honed tathlum",
head={ name="Taeon Chapeau", augments={'Attack+22','"Triple Atk."+2','STR+2 DEX+2',}},
body="Rawhide vest",
hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +3%',}},
legs="Samnuha tights",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Flame gorget",
waist="Light belt",
left_ear="Light earring",
right_ear="Thunder pearl",
left_ring="Ramuh ring",
right_ring="Rajas Ring",
back="Kayapa cape"}
-- WS Savage Blade Set --
sets.SavageBlade ={}
sets.SavageBlade.index = {'Normal','Accuracy'}
SavageBlade_index = 1
sets.SavageBlade.Normal = {
ammo="Hagneia Stone",
head="Rabid visor",
body={ name="Rawhide Vest", augments={'HP+50','"Subtle Blow"+7','"Triple Atk."+2',}},
hands="Rawhide Gloves",
legs={ name="Samnuha Tights", augments={'STR+9','DEX+8','"Dbl.Atk."+2','"Triple Atk."+2',}},
feet={ name="Futhark Boots +1", augments={'Enhances "Rayke" effect',}},
neck="Flame Gorget",
waist="Shadow Belt",
left_ear="Flame Pearl",
right_ear="Brutal Earring",
left_ring="Ifrit Ring",
right_ring="Ifrit Ring",
back="Buquwik Cape"}
sets.SavageBlade.Accuracy = {
ammo="Hagneia Stone",
head="Rabid visor",
body={ name="Rawhide Vest", augments={'HP+50','"Subtle Blow"+7','"Triple Atk."+2',}},
hands="Rawhide Gloves",
legs={ name="Samnuha Tights", augments={'STR+9','DEX+8','"Dbl.Atk."+2','"Triple Atk."+2',}},
feet={ name="Futhark Boots +1", augments={'Enhances "Rayke" effect',}},
neck="Flame Gorget",
waist="Shadow Belt",
left_ear="Flame Pearl",
right_ear="Brutal Earring",
left_ring="Ifrit Ring",
right_ring="Ifrit Ring",
back="Buquwik Cape"}
-- WS Ruinator Set --
sets.Ruinator = {}
sets.Ruinator.index = {'Normal','Accuracy'}
Ruinator_index = 1
sets.Ruinator.Normal = {
ammo="Hagneia Stone",
head="Rabid visor",
body={ name="Rawhide Vest", augments={'HP+50','"Subtle Blow"+7','"Triple Atk."+2',}},
hands="Rawhide Gloves",
legs={ name="Samnuha Tights", augments={'STR+9','DEX+8','"Dbl.Atk."+2','"Triple Atk."+2',}},
feet={ name="Futhark Boots +1", augments={'Enhances "Rayke" effect',}},
neck="Flame Gorget",
waist="Shadow Belt",
left_ear="Flame Pearl",
right_ear="Brutal Earring",
left_ring="Ifrit Ring",
right_ring="Ifrit Ring",
back="Buquwik Cape"}
sets.Ruinator.Accuracy = {
ammo="Hagneia Stone",
head="Rabid visor",
body={ name="Rawhide Vest", augments={'HP+50','"Subtle Blow"+7','"Triple Atk."+2',}},
hands="Rawhide Gloves",
legs={ name="Samnuha Tights", augments={'STR+9','DEX+8','"Dbl.Atk."+2','"Triple Atk."+2',}},
feet={ name="Futhark Boots +1", augments={'Enhances "Rayke" effect',}},
neck="Flame Gorget",
waist="Shadow Belt",
left_ear="Flame Pearl",
right_ear="Brutal Earring",
left_ring="Ifrit Ring",
right_ring="Ifrit Ring",
back="Buquwik Cape"}
-- Precast Spell sets --
sets.precast = {}
sets.precast.FC = {}
sets.precast.FC = {ammo="Aqreqaq bomblet",
head="Runeist bandeau +1",
body="Futhark coat +1",
hands="Leyline gloves",
legs="Futhark trousers",
feet={ name="Taeon Boots", augments={'Attack+20','"Triple Atk."+2','Pet: Damage taken -2%',}},
neck="Jeweled collar",
waist="Flume belt",
left_ear="Laquacious earring",
right_ear="Ethereal earring",
left_ring="Defendign ring",
right_ring="Shadow ring",
back="Evasionist's cape"}
sets.precast.FC.Enhancing = set_combine(sets.precast.FC,{hands="Runeist Mitons",legs="Futhark Trousers"})
sets.precast.FC.Divine = set_combine(sets.precast.FC,{legs="Runeist Trousers"})
--Phalanx Utility--
sets.Utility = {}
sets.Utility.Phalanx = set_combine(sets.precast.FC.Enhancing,{
head="Futhark Bandeau +1"})
--Copy and pasted set from Snprphnx_SCH example--
--Obis--
sets.Obi = {}
sets.Obi.Fire = {waist='Karin Obi',ring2='Zodiac Ring'}
sets.Obi.Earth = {waist='Dorin Obi',ring2='Zodiac Ring'}
sets.Obi.Water = {waist='Suirin Obi',ring2='Zodiac Ring'}
sets.Obi.Wind = {waist='Furin Obi',ring2='Zodiac Ring'}
sets.Obi.Ice = {waist='Hyorin Obi',ring2='Zodiac Ring'}
sets.Obi.Thunder = {waist='Rairin Obi',ring2='Zodiac Ring'}
sets.Obi.Light = {waist='Korin Obi',ring2='Zodiac Ring'}
sets.Obi.Dark = {waist='Anrin Obi',ring2='Zodiac Ring'}
-----Tengu
sets.tengu = {ammo="Tengu-No-Hane"}
end
--Precast Actions--
function precast(spell,act)
if spell.type == 'JobAbility' then
if sets.JA[spell.english] then
equip(sets.JA[spell.english])
end
end
if spell.action_type == 'Enhancing' then
equip(sets.precast.FC.Enhancing)
end
if spell.action_type == 'Divine' then
equip(sets.precast.FC.Divine)
end
if spell.action_type == 'Magic' then
equip(sets.precast.FC)
end
if spell.action_type == 'Ninjutsu' then
equip(sets.precast.FC)
end
if spell.english == 'Lunge' or spell.english == 'Swipe' then
equip(sets.JA['Lunge'])
if spell.element == world.weather_element or spell_element == world.day_element then
equip(sets.JA['Lunge'],sets.Obi[spell.element])
end
end
if spell.english == "Resolution" then
equip(sets.Resolution[sets.Resolution.index[Resolution_index]])
end
if spell.english == "Requiescat" then
equip(sets.Requiescat[sets.Requiescat.index[Requiescat_index]])
end
if spell.english == 'Savage Blade' then
equip(sets.SavageBlade[sets.SavageBlade.index[SavageBlade_index]])
end
if spell.english == "Ruinator" then
equip(sets.Ruinator[sets.Ruinator.index[Ruinator_index]])
end
if spell.english == "Dimidiation" then
equip(sets.Dimidiation[sets.Dimidiation.index[Dimidiation_index]])
end
if spell.english == "Herculean Slash" then
equip(sets.JA['Lunge'])
end
if buffactive['Reive Mark'] and spell.type == 'WeaponSkill' then
equip(sets.Resolution.R)
end
if buffactive['Reive Mark'] and spell.english == 'Dimidiation' then
equip(sets.Dimidiation.R)
end
if buffactive['Reive Mark'] and spell.english == 'Resolution' then
equip(sets.Resolution.R)
end
if buffactive['Tenebrae'] and spell.english == 'Lunge' then
equip(sets.JA.Lunge,{head="Pixie Hairpin +1"})
end
if buffactive['Tenebrae'] and spell.english == 'Swipe' then
equip(sets.JA.Lunge,{head="Pixie Hairpin +1"})
end
if buffactive['Lux'] and spell.english == 'Lunge' then
equip(sets.JA.Lunge,{ring2="Weatherspoon Ring"})
end
if buffactive['Lux'] and spell.english == 'Swipe' then
equip(sets.JA.Lunge,{ring2="Weatherspoon Ring"})
end
end
--Midcast functions for spells--
function midcast(spell,act)
if spell.english == 'Phalanx' then
equip(sets.Utility.Phalanx)
end
if spell.english == 'Flash' then
equip(sets.precast.FC.Divine)
end
if spell.english == 'Regen IV' then
equip(sets.precast.FC.Enhancing)
end
if spell.type == 'JobAbility' then
if sets.JA[spell.english] then
equip(sets.JA[spell.english])
end
end
if spell.english == 'Lunge' or spell.english == 'Swipe' then
equip(sets.JA['Lunge'])
if spell.element == world.weather_element or spell_element == world.day_element then
equip(sets.JA['Lunge'],sets.Obi[spell.element])
end
end
if spell.english == "Resolution" then
equip(sets.Resolution[sets.Resolution.index[Resolution_index]])
end
if spell.english == 'Savage Blade' then
equip(sets.SavageBlade[sets.SavageBlade.index[SavageBlade_index]])
end
if spell.english == "Ruinator" then
equip(sets.Ruinator[sets.Ruinator.index[Ruinator_index]])
end
if spell.english == "Dimidiation" then
equip(sets.Dimidiation[sets.Dimidiation.index[Dimidiation_index]])
end
if spell.english == "Herculean Slash" then
equip(sets.JA['Lunge'])
end
if buffactive['Reive Mark'] and spell.type == 'WeaponSkill' then
equip(sets.Resolution.R)
end
if buffactive['Reive Mark'] and spell.english == 'Dimidiation' then
equip(sets.Dimidiation.R)
end
if buffactive['Reive Mark'] and spell.english == 'Resolution' then
equip(sets.Resolution.R)
end
if buffactive['Tenebrae'] and spell.english == 'Lunge' then
equip(sets.JA.Lunge,{head="Pixie Hairpin +1"})
end
if buffactive['Tenebrae'] and spell.english == 'Swipe' then
equip(sets.JA.Lunge,{head="Pixie Hairpin +1"})
end
if spell.name == 'Resolution' or spell.name == "Dimidiation" then
tengu_handler()
end
end
function tengu_handler()
if world.time >= 360 and world.time < 1080 then -- 6~18
equip(sets.tengu)
end
end
--Aftercast function, returns user to TP set after actions/spells--
function aftercast(spell,act)
if player.status == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_index]])
else
equip(sets.Idle[sets.Idle.index[Idle_index]])
end
if player.status == 'Engaged' and buffactive['Battuta'] then
equip{feet="Futhark Boots +1"}
end
if player.status == 'Engaged' and buffactive['Reive Mark'] then
equip{neck="Ygnas's Resolve +1"}
end
end
function buff_change(new,old)
if buffactive['Battuta'] then
equip{feet="Futhark Boots +1"}
end
if buffactive['Embolden'] then
equip{back="Evasionist's Cape"}
end
if player.status == 'Engaged' and buffactive['Reive Mark'] then
equip{neck="Ygnas's Resolve +1"}
end
end
--Status Change function, switches user to TP set upon engaging--
function status_change(new,old)
if player.status == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_index]])
else
equip(sets.Idle[sets.Idle.index[Idle_index]])
end
if buffactive['Battuta'] and new == 'Engaged' then
equip{feet="Futhark Boots +1"}
end
if player.status == 'Engaged' and buffactive['Reive Mark'] then
equip{neck="Ygnas's Resolve +1"}
end
end
--Toggle Command functions--
--Gearswap direct command = //gs c toggle 'x' set
--Macro line = console gs c toggle x set
--ex: console gs c toggle TP set
-- Index is set to 1 or 'Reg', press button once to switch to 'Acc', and so on.
function self_command(command)
if command == 'toggle TP set' then
if TP_index < 5 then
TP_index = TP_index +1
else TP_index = 1 end
send_command('@ input /echo >>> TP set changed to '..sets.TP.index[TP_index]..' ')
equip(sets.TP[sets.TP.index[TP_index]])
elseif command == 'toggle DW set' then
if TP_index < 9 and TP_index > 5 then
TP_index = TP_index +1
else TP_index = 6 end
send_command('@ input /echo >>> DW set changed to '..sets.TP.index[TP_index]..' ')
equip(sets.TP[sets.TP.index[TP_index]])
elseif command == 'toggle dTP set' then
if TP_index < 6 and TP_index > 1 then
TP_index = TP_index -1
else TP_index = 5 end
send_command('@ input /echo >>> DW set changed to '..sets.TP.index[TP_index]..' ')
equip(sets.TP[sets.TP.index[TP_index]])
elseif command == 'toggle Weaponskill sets' then
Resolution_index = Resolution_index +1
if Resolution_index > #sets.Resolution.index then Resolution_index = 1 end
Requiescat_index = Requiescat_index +1
SavageBlade_index = SavageBlade_index +1
if SavageBlade_index > #sets.SavageBlade.index then SavageBlade_index = 1 end
if Ruinator_index > #sets.Ruinator.index then Ruinator_index = 1 end
Dimidiation_index = Dimidiation_index +1
if Dimidiation_index > #sets.Dimidiation.index then Dimidiation_index = 1 end
send_command('@ input /echo >>> All Weaponskill sets changed to '..sets.Dimidiation.index[Dimidiation_index]..' ')
elseif command == 'toggle JP set' then
if TP_index < 10 and TP_index > 0 then
TP_index = 10 end
send_command('@ input /echo >>> TP set changed to '..sets.TP.index[TP_index]..' ')
equip(sets.TP[sets.TP.index[TP_index]])
elseif command == 'toggle Multi set' then
if TP_index < 11 and TP_index > 0 then
TP_index = 11 end
send_command('@ input /echo >>> TP set change to '..sets.TP.index[TP_index]..' ')
equip(sets.TP[sets.TP.index[TP_index]])
elseif command == 'toggle Magic set' then
if TP_index < 12 and TP_index > 0 then
TP_index = 12 end
send_command('@ input /echo >>> Defense set changed to '..sets.TP.index[TP_index]..' ')
equip(sets.TP[sets.TP.index[TP_index]])
elseif command == 'toggle Idle set' then
Idle_index = Idle_index +1
if Idle_index > #sets.Idle.index then Idle_index = 1 end
send_command('@ input /echo >>> Idle set changed to '..sets.Idle.index[Idle_index]..' ')
equip(sets.Idle[sets.Idle.index[Idle_index]])
end
end
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-30 20:12:44
I cannot replicate this issue, nor do I see anything in the code that stands out to me. Can you start with a refreshed file (//gs r) and tell me step-by-step what you are doing?
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2016-05-30 20:18:39
Flippant, I'm unsure what else I'm missing to get the haste_group working. Please take a look if you can spot it.
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')
include('organizer-lib')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
state.Buff['Chain Affinity'] = buffactive['Chain Affinity'] or false
state.Buff.Convergence = buffactive.Convergence or false
state.Buff.Diffusion = buffactive.Diffusion or false
state.Buff.Efflux = buffactive.Efflux or false
determine_haste_group()
state.Buff['Unbridled Learning'] = buffactive['Unbridled Learning'] or false
blue_magic_maps = {}
-- Mappings for gear sets to use for various blue magic spells.
-- While Str isn't listed for each, it's generally assumed as being at least
-- moderately signficant, even for spells with other mods.
-- Physical Spells --
-- Physical spells with no particular (or known) stat mods
blue_magic_maps.Physical = S{
'Bilgestorm'
}
-- Spells with heavy accuracy penalties, that need to prioritize accuracy first.
blue_magic_maps.PhysicalAcc = S{
'Heavy Strike',
}
-- Physical spells with Str stat mod
blue_magic_maps.PhysicalStr = S{
'Battle Dance','Bloodrake','Death Scissors','Dimensional Death',
'Empty Thrash','Quadrastrike','Sinker Drill','Spinal Cleave',
'Uppercut','Vertical Cleave'
}
-- Physical spells with Dex stat mod
blue_magic_maps.PhysicalDex = S{
'Amorphic Spikes','Asuran Claws','Barbed Crescent','Claw Cyclone','Disseverment',
'Foot Kick','Frenetic Rip','Goblin Rush','Hysteric Barrage','Paralyzing Triad',
'Seedspray','Sickle Slash','Smite of Rage','Terror Touch','Thrashing Assault',
'Vanity Dive'
}
-- Physical spells with Vit stat mod
blue_magic_maps.PhysicalVit = S{
'Body Slam','Cannonball','Delta Thrust','Glutinous Dart','Grand Slam',
'Power Attack','Quad. Continuum','Sprout Smack','Sub-zero Smash'
}
-- Physical spells with Agi stat mod
blue_magic_maps.PhysicalAgi = S{
'Benthic Typhoon','Feather Storm','Helldive','Hydro Shot','Jet Stream',
'Pinecone Bomb','Spiral Spin','Wild Oats'
}
-- Physical spells with Int stat mod
blue_magic_maps.PhysicalInt = S{
'Mandibular Bite','Queasyshroom'
}
-- Physical spells with Mnd stat mod
blue_magic_maps.PhysicalMnd = S{
'Ram Charge','Screwdriver','Tourbillion'
}
-- Physical spells with Chr stat mod
blue_magic_maps.PhysicalChr = S{
'Bludgeon'
}
-- Physical spells with HP stat mod
blue_magic_maps.PhysicalHP = S{
'Final Sting'
}
-- Magical Spells --
-- Magical spells with the typical Int mod
blue_magic_maps.Magical = S{
'Blastbomb','Blazing Bound','Bomb Toss','Cursed Sphere','Dark Orb','Death Ray',
'Diffusion Ray','Droning Whirlwind','Embalming Earth','Firespit','Foul Waters',
'Ice Break','Leafstorm','Maelstrom','Rail Cannon','Regurgitation','Rending Deluge',
'Retinal Glare','Subduction','Tem. Upheaval','Water Bomb', 'Searing Tempest', 'Blinding Fulgor',
'Spectral Floe', 'Scouring Spate', 'Anvil Lightning', 'Silent Storm', 'Entomb', 'Tenebral Crush'
}
-- Magical spells with a primary Mnd mod
blue_magic_maps.MagicalMnd = S{
'Acrid Stream','Evryone. Grudge','Magic Hammer','Mind Blast'
}
-- Magical spells with a primary Chr mod
blue_magic_maps.MagicalChr = S{
'Eyes On Me','Mysterious Light'
}
-- Magical spells with a Vit stat mod (on top of Int)
blue_magic_maps.MagicalVit = S{
'Thermal Pulse'
}
-- Magical spells with a Dex stat mod (on top of Int)
blue_magic_maps.MagicalDex = S{
'Charged Whisker','Gates of Hades'
}
-- Magical spells (generally debuffs) that we want to focus on magic accuracy over damage.
-- Add Int for damage where available, though.
blue_magic_maps.MagicAccuracy = S{
'1000 Needles','Absolute Terror','Actinic Burst','Auroral Drape','Awful Eye',
'Blank Gaze','Blistering Roar','Blood Drain','Blood Saber','Chaotic Eye',
'Cimicine Discharge','Cold Wave','Corrosive Ooze','Demoralizing Roar','Digest',
'Dream Flower','Enervation','Feather Tickle','Filamented Hold','Frightful Roar',
'Geist Wall','Hecatomb Wave','Infrasonics','Jettatura','Light of Penance',
'Lowing','Mind Blast','Mortal Ray','MP Drainkiss','Osmosis','Reaving Wind',
'Sandspin','Sandspray','Sheep Song','Soporific','Sound Blast','Stinking Gas',
'Sub-zero Smash','Venom Shell','Voracious Trunk','Yawn'
}
-- Breath-based spells
blue_magic_maps.Breath = S{
'Bad Breath','Flying Hip Press','Frost Breath','Heat Breath',
'Hecatomb Wave','Magnetite Cloud','Poison Breath','Radiant Breath','Self-Destruct',
'Thunder Breath','Vapor Spray','Wind Breath'
}
-- Stun spells
blue_magic_maps.Stun = S{
'Blitzstrahl','Frypan','Head Butt','Sudden Lunge','Tail slap','Temporal Shift',
'Thunderbolt','Whirl of Rage'
}
-- Healing spells
blue_magic_maps.Healing = S{
'Healing Breeze','Magic Fruit','Plenilune Embrace','Pollen','Restoral','White Wind',
'Wild Carrot'
}
-- Buffs that depend on blue magic skill
blue_magic_maps.SkillBasedBuff = S{
'Barrier Tusk','Diamondhide','Magic Barrier','Metallic Body','Plasma Charge',
'Pyric Bulwark','Reactor Cool',
}
-- Other general buffs
blue_magic_maps.Buff = S{
'Amplification','Animating Wail','Battery Charge','Carcharian Verve','Cocoon',
'Erratic Flutter','Exuviation','Fantod','Feather Barrier','Harden Shell',
'Memento Mori','Nat. Meditation','Occultation','Orcish Counterstance','Refueling',
'Regeneration','Saline Coat','Triumphant Roar','Warm-Up','Winds of Promyvion',
'Zephyr Mantle'
}
-- Spells that require Unbridled Learning to cast.
unbridled_spells = S{
'Absolute Terror','Bilgestorm','Blistering Roar','Bloodrake','Carcharian Verve',
'Crashing Thunder','Droning Whirlwind','Gates of Hades','Harden Shell','Polar Roar',
'Pyric Bulwark','Thunderbolt','Tourbillion','Uproot','Mighty Guard','Cruel Joke','Cesspool','Tearing Gust'
}
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', 'SomeAcc', 'HighAcc', 'FullAcc', 'Learning')
state.WeaponskillMode:options('Normal', 'Acc')
state.CastingMode:options('Normal', 'Resistant')
state.IdleMode:options('Normal', 'PDT', 'Refresh', 'Learning')
state.HybridMode:options('Normal', 'PDT')
state.MagicBurst = M(false, 'Magic Burst')
-- Additional local binds
send_command('bind ^` input /ja "Chain Affinity" <me>')
send_command('bind !` input /ja "Burst Affinity" <me>')
send_command('bind @` input /ja "Efflux" <me>')
send_command('bind ` input /ma "Sudden Lunge" <t>')
send_command('bind delete input /ws "Chant du Cygne" <t>')
send_command('bind end input /ws "Savage Blade" <t>')
send_command('bind home input /ja "Diffusion" <me>')
send_command('bind ^- input /ma "Carcharian Verve" <me>')
send_command('bind !- input /ma "Absolute Terror" <t>')
send_command('bind ^= input /ma "Mighty Guard" <me>')
send_command('bind != input /ja "Unbridled Wisdom" <me>')
--update_combat_form()
select_default_macro_book()
target_distance = 5.5 -- Set Default Distance Here --
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 !-')
send_command('unbind !=')
send_command('unbind @`')
send_command('unbind @-')
send_command('unbind @=')
send_command('unbind delete')
send_command('unbind end')
send_command('unbind home')
end
-- Set up gear sets.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
sets.buff['Burst Affinity'] = {hands="Amalric Gages",back="Seshaw Cape",ring1="Mujin Band",ring2="Locus Ring",feet="Hashishin Basmak +1"}
sets.buff['Chain Affinity'] = {head="Hashishin Kavuk", feet="Assimilator's Charuqs +1"}
sets.buff.Convergence = {}
sets.buff.Enchainment = {}
sets.buff.Diffusion = {feet="Luhlaza Charuqs +1"}
sets.buff.Efflux = {back=rose_crit,legs="Hashishin Tayt +1"}
-- Precast Sets
organizer_items = {
colada="Colada",
tanmo="Tanmogayi +1",
seq="Sequence"}
-- Precast sets to enhance JAs
sets.precast.JA['Azure Lore'] = {hands="Luhlaza Bazubands"}
-- Waltz set (chr and vit)
sets.precast.Waltz = {}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
-- Fast cast sets for spells
-- Quick Magic 10%, FC 67~70%
sets.precast.FC = {
head="Carmine Mask",neck="Orunmila's Torque",ear1="Enchanter Earring +1",ear2="Loquacious Earring",
body="Luhlaza Jubbah +1",hands="Leyline Gloves",ring1="Weatherspoon Ring",ring2="Prolix Ring",
back="Perimede Cape",waist="Witful Belt",legs="Psycloth Lappas",feet="Carmine Greaves"}
sets.precast.FC['Blue Magic'] = set_combine(sets.precast.FC, {body="Hashishin Mintan +1"})
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {ammo="Jukukik Feather",
head="Adhemar Bonnet",neck=gear.ElementalGorget,ear1="Cessance Earring",ear2="Brutal Earring",
body="Abnoba Kaftan",hands="Adhemar Wristbands",ring1="Hetairoi Ring",ring2="Epona's Ring",
back=rose_crit,waist=gear.ElementalBelt,legs="Samnuha Tights",feet="Thereoid Greaves"}
sets.precast.WS.acc = set_combine(sets.precast.WS, {})
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Chant du Cygne'] = set_combine(sets.precast.WS, {ear1="Moonshade Earring",hands=herc_hands_DEX,ring1="Begrudging Ring",legs=herc_legs_DEX})
sets.precast.WS['Chant du Cygne'].Acc = set_combine(sets.precast.WS['Chant du Cygne'], {ammo="Falcon Eye",neck="Combatant's Torque",ear2="Cessance Earring",
ring1="Ramuh Ring +1",ring2="Ramuh Ring +1",waist="Grunfeld Rope",feet=herc_feet_STR})
sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {ammo="Hydrocera",
head="Carmine Mask",ear1="Moonshade Earring",ring1="Rufescent Ring",back="Bleating Mantle",hands="Carmine Finger Gauntlets",feet="Carmine Greaves"})
sets.precast.WS['Savage Blade'] = set_combine(sets.precast.WS, {ammo="Floestone",
head=herc_head_STR,neck="Caro Necklace",ear1="Moonshade Earring",ear2="Ishvara Earring",
body="Herculean Vest",hands=herc_hands_STR,ring1="Rufescent Ring",ring2="Ifrit Ring",
back=rose_TP,waist="Prosilio Belt +1",legs=herc_legs_STR,feet=herc_feet_STR})
sets.precast.WS['Sanguine Blade'] = {
head="Pixie Hairpin +1",neck="Eddy Necklace",ear1="Friomisi Earring",ear2="Novio Earring",
body="Amalric Doublet",hands="Amalric Gages",ring1="Shiva Ring +1",ring2="Shiva Ring +1",
back="Cornflower Cape",waist="Eschan Stone",legs="Hagondes Pants +1",feet="Hashishin Basmak +1"}
sets.precast.WS['Vorpal Blade'] = set_combine(sets.precast.WS, {ammo="Floestone",ear1="Moonshade Earring"})
sets.precast.WS['Flash Nova'] = set_combine(sets.precast.WS['Sanguine Blade'], {ring1="Weatherspoon Ring"})
sets.precast.WS['Realmrazer'] = sets.precast.WS['Requiescat']
-- Midcast Sets
sets.midcast.FastRecast = {back="Swith Cape +1"}
sets.midcast['Blue Magic'] = {}
-- Physical Spells --
sets.midcast['Blue Magic'].Physical = {ammo="Floestone",
head=herc_head_STR,neck="Caro Necklace",ear1="Kuwunga Earring",ear2="Vulcan's Pearl",
body="Adhemar Jacket",hands="Adhemar Wristbands",ring1="Ifrit Ring",ring2="Ifrit Ring",
back=rose_TP,waist="Grunfeld Rope",legs=herc_legs_STR,feet=herc_feet_STR}
sets.midcast['Blue Magic'].PhysicalAcc = set_combine(sets.midcast['Blue Magic'].Physical, {
neck="Lissome Necklace",hands="Leyline Gloves",waist="Olseni Belt",feet=herc_feet_TP})
sets.midcast['Blue Magic'].PhysicalStr = set_combine(sets.midcast['Blue Magic'].Physical, {})
sets.midcast['Blue Magic'].PhysicalDex = set_combine(sets.midcast['Blue Magic'].Physical, {ring1="Ramuh Ring +1"})
sets.midcast['Blue Magic'].PhysicalVit = set_combine(sets.midcast['Blue Magic'].Physical, {})
sets.midcast['Blue Magic'].PhysicalAgi = set_combine(sets.midcast['Blue Magic'].Physical, {})
sets.midcast['Blue Magic'].PhysicalInt = set_combine(sets.midcast['Blue Magic'].Physical, {})
sets.midcast['Blue Magic'].PhysicalMnd = set_combine(sets.midcast['Blue Magic'].Physical, {})
sets.midcast['Blue Magic'].PhysicalChr = set_combine(sets.midcast['Blue Magic'].Physical, {})
sets.midcast['Blue Magic'].PhysicalHP = set_combine(sets.midcast['Blue Magic'].Physical, {})
-- Magical Spells --
sets.midcast['Blue Magic'].Magical = {ammo="Pemphredo Tathlum",
head=herc_head_MAB,neck="Sanctity Necklace",ear1="Friomisi Earring",ear2="Novio Earring",
body="Amalric Doublet",hands="Amalric Gages",ring1="Shiva Ring +1",ring2="Shiva Ring +1",
back="Cornflower Cape",waist="Eschan Stone",legs="Amalric Slops",feet="Amalric Nails"}
sets.midcast['Blue Magic'].Magical.Resistant = set_combine(sets.midcast['Blue Magic'].Magical,
{ammo="Mavi Tathlum",ear1="Enchanter Earring +1",ear2="Gwati Earring",head="Carmine Mask",body="Hashishin Mintan +1",
hands="Leyline Gloves",ring1="Weatherspoon Ring",legs="Psycloth Lappas",feet="Hashishin Basmak +1"})
sets.midcast['Blue Magic'].MagicAccuracy = set_combine(sets.midcast['Blue Magic'].Magical, {ammo="Mavi Tathlum",
head="Carmine Mask",ear1="Enchanter Earring +1",ear2="Gwati Earring",body="Hashishin Mintan +1",ring1="Weatherspoon Ring",legs="Psycloth Lappas"})
sets.midcast['Blue Magic'].MagicalMnd = set_combine(sets.midcast['Blue Magic'].Magical,
{hands="Telchine Gloves",ring1="Leviathan Ring",ring2="Rufescent Ring",legs="Telchine Braconi",feet="Medium's Sabots"})
sets.midcast['Blue Magic'].MagicalChr = set_combine(sets.midcast['Blue Magic'].Magical)
sets.midcast['Blue Magic'].MagicalVit = set_combine(sets.midcast['Blue Magic'].Magical, {})
sets.midcast['Blue Magic'].MagicalDex = set_combine(sets.midcast['Blue Magic'].Magical, {})
sets.midcast['Blue Magic']['Tenebral Crush'] = set_combine(sets.midcast['Blue Magic'].Magical, {head="Pixie Hairpin +1"})
-- Breath Spells --
sets.midcast['Blue Magic'].Breath = {ammo="Mavi Tathlum",
neck="Sanctity Necklace",ear1="Enchanter Earring +1",ear2="Gwati Earring",
hands="Amalric Gages",back="Cornflower Cape",legs="Psycloth Lappas",feet="Medium's Sabots"}
-- Other Types --
sets.midcast['Blue Magic'].Stun = set_combine(sets.midcast['Blue Magic'].MagicAccuracy, {ammo="Falcon Eye",
neck="Sanctity Necklace",ear1="Gwati Earring",ear2="Dignitary's Earring",
hands="Leyline Gloves",ring2="Etana Ring",waist="Olseni Belt",legs="Miasmic Pants",feet=herc_feet_TP})
sets.midcast['Blue Magic'].Healing = {ammo="Hydrocera",
head="Telchine Cap",neck="Incanter's Torque",ear1="Lifestorm Earring",ear2="Mendicant's Earring",
body="Hashishin Mintan +1",hands="Telchine Gloves",ring1="Leviathan Ring",ring2="Rufescent Ring",
back="Tempered Cape +1",waist="Bishop's Sash",legs="Telchine Braconi",feet="Medium's Sabots"}
sets.midcast['Blue Magic']['White Wind'] = set_combine(sets.midcast['Blue Magic'].Healing, {ammo="Egoist's Tathlum",neck="Dualism Collar +1",ear1="Etiolation Earring",ear2="Eabani Earring",
body="Assimilator's Jubbah +1",ring1="Etana Ring",ring2="Meridian Ring",back="Reiki Cloak",waist="Oneiros Belt"})
sets.midcast['Blue Magic'].SkillBasedBuff = {ammo="Mavi Tathlum",
neck="Incanter's Torque",body="Assimilator's Jubbah +1",back="Cornflower Cape",legs="Hashishin Tayt +1",feet="Luhlaza Charuqs +1"}
sets.midcast['Blue Magic'].Buff = set_combine(sets.midcast['Blue Magic'].SkillBasedBuff, {})
sets.midcast['Blue Magic']['Mighty Guard'] = set_combine(sets.midcast['Blue Magic'].Buff, {ammo="Pemphredo Tathlum",
head="Telchine Cap",neck="Incanter's Torque",ear1="Mendicant's Earring",ear2="Gwati Earring",
body="Amalric Doublet",back="Solemnity Cape",waist="Luminary Sash",legs="Lengo Pants",feet="Carmine Greaves"})
sets.midcast.Protect = {ring1="Sheltered Ring"}
sets.midcast.Protectra = {ring1="Sheltered Ring"}
sets.midcast.Shell = {ring1="Sheltered Ring"}
sets.midcast.Shellra = {ring1="Sheltered Ring"}
sets.midcast.Refresh = {waist="Gishdubar Sash"}
-- Sets to return to when not performing an action.
-- Gear for learning spells: +skill and AF hands.
sets.Learning = {ammo="Mavi Tathlum",body="Assimilator's Jubbah +1",hands="Assimilator's Bazubands",
neck="Incanter's Torque",back="Cornflower Cape",legs="Hashishin Tayt +1",feet="Luhlaza Charuqs +1"}
--head="Luhlaza Keffiyeh"
sets.latent_refresh = {}
-- Resting sets
sets.resting = {
head="Rawhide Mask",neck="Wiglen Gorget",
body="Assimilator's Jubbah +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",legs="Lengo Pants"}
-- Idle sets
sets.idle = {ammo="Iron Gobbet",
head=herc_head_PDT,neck="Loricate Torque +1",ear1="Ethereal Earring",ear2="Etiolation Earring",
body="Emet Harness +1",hands=herc_hands_DT,ring1="Defending Ring",ring2=gear.DarkRing.physical,
back="Solemnity Cape",waist="Flume Belt",legs="Carmine Cuisses",feet=herc_feet_PDT}
sets.idle.PDT = sets.idle
sets.idle.Town = {ammo="Ginsen",
head="Adhemar Bonnet",neck="Combatant's Torque",ear1="Cessance Earring",ear2="Eabani Earring",
body="Herculean Vest",hands=herc_hands_TP,ring1="Hetairoi Ring",ring2="Matrimony Ring",
back=rose_crit,waist="Reiki Yotai",legs="Carmine Cuisses",feet=herc_feet_TP}
sets.idle.Refresh = set_combine(sets.idle, {head="Rawhide Mask",neck="Wiglen Gorget",
body="Assimilator's Jubbah +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",legs="Lengo Pants"})
sets.idle.Learning = set_combine(sets.idle, sets.Learning)
-- Defense sets
-- DT: -24%, PDT: -30%
sets.defense.PDT = {ammo="Iron Gobbet",
head=herc_head_PDT,neck="Loricate Torque +1",ear1="Ethereal Earring",ear2="Etiolation Earring",
body="Emet Harness +1",hands=herc_hands_DT,ring1="Defending Ring",ring2=gear.DarkRing.physical,
back="Solemnity Cape",waist="Flume Belt",legs="Hagondes Pants +1",feet=herc_feet_PDT}
sets.defense.MDT = {ammo="Demonry Stone",
head="Telchine Cap",neck="Loricate Torque +1",ear1="Sanare Earring",ear2="Etiolation Earring",
body="Amalric Doublet",hands="Amalric Gages",ring1="Defending Ring",ring2="Shadow Ring",
back="Reiki Cloak",waist="Flume Belt",legs="Amalric Slops",feet="Amalric Nails"}
sets.Kiting = {legs="Carmine Cuisses"}
-- 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="Ginsen",
head="Adhemar Bonnet",neck="Asperity Necklace",ear1="Cessance Earring",ear2="Suppanomimi",
body="Adhemar Jacket",hands=herc_hands_TP,ring1="Hetairoi Ring",ring2="Epona's Ring",
back=rose_TP,waist="Reiki Yotai",legs="Samnuha Tights",feet=herc_feet_TP}
sets.engaged.SomeAcc = set_combine(sets.engaged, {neck="Combatant's Torque",hands="Adhemar Wristbands"})
sets.engaged.HighAcc = set_combine(sets.engaged.SomeAcc, {ammo="Falcon Eye",ring1="Ramuh Ring +1",ring2="Ramuh Ring +1"})
sets.engaged.FullAcc = set_combine(sets.engaged.HighAcc, {
head="Carmine Mask",ear1="Telos Earring",ear2="Dignitary's Earring",
back=rose_crit,waist="Olseni Belt",legs="Carmine Cuisses"})
sets.engaged.MaxHaste = {ammo="Ginsen",
head="Adhemar Bonnet",neck="Asperity Necklace",ear1="Cessance Earring",ear2="Brutal Earring",
body="Adhemar Jacket",hands=herc_hands_TP,ring1="Hetairoi Ring",ring2="Epona's Ring",
back=rose_TP,waist="Windbuffet Belt +1",legs="Samnuha Tights",feet=herc_feet_TP}
sets.engaged.MaxHaste.SomeAcc = set_combine(sets.engaged.MaxHaste, {neck="Combatant's Torque",hands="Adhemar Wristbands"})
sets.engaged.MaxHaste.HighAcc = set_combine(sets.engaged.MaxHaste.SomeAcc, {ammo="Falcon Eye",ring1="Ramuh Ring +1",ring2="Ramuh Ring +1"})
sets.engaged.MaxHaste.FullAcc = set_combine(sets.engaged.MaxHaste.SomeAcc, {
head="Carmine Mask",ear1="Telos Earring",ear2="Dignitary's Earring",
back=rose_crit,waist="Olseni Belt",legs="Carmine Cuisses"})
sets.engaged.PDT = {ammo="Ginsen",
head=herc_helm_PDT,neck="Loricate Torque +1",ear1="Telos Earring",ear2="Suppanomimi",
body="Emet Harness +1",hands=herc_hands_DT,ring1="Defending Ring",ring2="Epona's Ring",
back="Agema Cape",waist="Windbuffet Belt +1",legs="Samnuha Tights",feet=herc_feet_PDT}
-- DT/PDT: -37%
sets.engaged.Refresh = set_combine(sets.engaged, {head="Rawhide Mask",body="Assimilator's Jubbah +1",legs="Lengo Pants"})
sets.engaged.Learning = set_combine(sets.engaged, sets.Learning)
--[[sets.engaged.DW = set_combine(sets.engaged, {})
sets.engaged.DW.SomeAcc = set_combine(sets.engaged.SomeAcc, {})
sets.engaged.DW.FullAcc = set_combine(sets.engaged.FullAcc, {})
sets.engaged.DW.MaxHaste = set_combine(sets.engaged.MaxHaste, {})
sets.engaged.DW.MaxHaste.SomeAcc = set_combine(sets.engaged.MaxHaste.SomeAcc, {})
sets.engaged.DW.MaxHaste.FullAcc = set_combine(sets.engaged.MaxHaste.FullAcc, {})
sets.engaged.DW.Refresh = set_combine(sets.engaged.Refresh, {})
sets.engaged.DW.Learning = set_combine(sets.engaged.DW, sets.Learning)]]--
sets.self_healing = {hands="Buremte Gloves",ring1="Kunaji Ring",waist="Gishdubar Sash"}
sets.MagicBurst = {ring1="Locus Ring",ring2="Mujin Band",back="Seshaw Cape"}
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_pretarget(spell,action)
if spell.type == "WeaponSkill" and player.status == 'Engaged' and spell.target.distance > target_distance then -- Cancel WS If You Are Out Of Range --
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
end
function job_precast(spell, action, spellMap, eventArgs)
if unbridled_spells:contains(spell.english) and not state.Buff['Unbridled Learning'] then
eventArgs.cancel = true
windower.send_command('@input /ja "Unbridled Learning" <me>; wait 1.5; input /ma "'..spell.name..'" '..spell.target.name)
end
if (spell.type:endswith('Magic') or spell.type == "Ninjutsu") and buffactive.silence then -- Auto Use Echo Drops If You Are Silenced --
cancel_spell()
send_command('input /item "Echo Drops" <me>')
end
if spell.english == 'Berserk' then
if buffactive.Berserk then -- Change Berserk To Aggressor If Berserk Is On --
cancel_spell()
send_command('input /ja Aggressor <me>')
end
end
if spell.type == 'WeaponSkill' then
if (spell.english == "Chant Du Cygne" or spell.english == "Savage Blade") and player.tp > 2900 then
equip({ear1="Ishvara Earring",ear2="Brutal Earring"})
end
end
end
-- Run after the general precast() is done.
function job_post_precast(spell, action, spellMap, eventArgs)
end
-- Run after the default midcast() is done.
-- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
function job_post_midcast(spell, action, spellMap, eventArgs)
-- Add enhancement gear for Chain Affinity, etc.
if spell.skill == 'Blue Magic' then
for buff,active in pairs(state.Buff) do
if active and sets.buff[buff] then
print(buff) equip(sets.buff[buff])
end
end
if spellMap == 'Healing' and spell.target.type == 'SELF' and sets.self_healing then
equip(sets.self_healing)
end
end
-- If in learning mode, keep on gear intended to help with that, regardless of action.
if state.OffenseMode.value == 'Learning' then
equip(sets.Learning)
end
if buffactive['Burst Affinity'] or buffactive['Azure Lore'] then
if state.MagicBurst.value then
equip(sets.MagicBurst)
end
end
if world.day_element == spell.element or world.weather_element == spell.element then
equip ({waist="Hachirin-no-Obi"})
end
--if (buffactive.March and (buffactive.Embrava or buffactive.Haste or buffactive['Mighty Guard']) or (buffactive.Haste == 2) or (buffactive['Mighty Guard']) and (buffactive.Embrava or buffactive.Haste)) and equipSet["HighHaste"] then
-- equip(sets.engaged.HighHaste)
--end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
if not (buffactive['Burst Affinity'] or buffactive['Azure Lore']) then
state.MagicBurst:reset()
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, buff_table)
buff = string.lower(buff)
if buff_table['id'] == 15 then -- Doom Party Chat --
if gain then
send_command('input /party Doomed')
else
send_command('input /party Doom off')
add_to_chat(158,'Doom: [OFF]')
end
elseif buff_table['id'] == 9 then -- Curse Party Chat --
if gain then
send_command('input /party Cursed')
else
add_to_chat(158,'Curse: [OFF]')
end
elseif buff_table['id'] == 14 or buff_table['id'] == 17 then -- Charm Party Chat --
if gain then
send_command('input /party Charmed')
else
send_command('input /party Charm off')
add_to_chat(158,'Charm: [OFF]')
end
elseif buff_table['id'] == 4 then -- Paralysis Party Chat --
if gain then
add_to_chat(123,'Paralyzed')
else
add_to_chat(158,'Paralysis: [OFF]')
end
elseif buff_table['id'] == 91 then -- Nat. Meditation --
if not gain then
add_to_chat(123,'Nat. Meditation: [OFF]')
end
elseif buff_table['id'] == 550 then -- Cocoon Notification --
if not gain then
add_to_chat(123,'Cocoon: [OFF]')
end
elseif buff_table['id'] == 33 then -- Haste --
if not gain then
add_to_chat(123,'Haste: [OFF]')
end
elseif buff_table['id'] == 147 then -- Attack Down --
if not gain then
add_to_chat(158,'Attack Down: [OFF]')
end
elseif buff_table['id'] == 149 then -- Defense Down --
if not gain then
add_to_chat(158,'Defense Down: [OFF]')
end
elseif buff_table['id'] == 13 then -- Slow --
if gain then
add_to_chat(123,'Slowed!')
else
add_to_chat(158,'Slow: [OFF]')
end
elseif buff_table['id'] == 42 then -- Regen --
if not gain then
add_to_chat(123,'Regen: [OFF]')
end
elseif buff_table['id'] == 43 then -- Refresh --
if not gain then
add_to_chat(123,'Refresh: [OFF]')
end
elseif buff_table['id'] == 152 then -- Magic Barrier --
if not gain then
add_to_chat(123,'Magic Barrier: [OFF]')
end
elseif buff_table['id'] == 116 then -- Phalanx/Barrier Tusk --
if not gain then
add_to_chat(123,'Phalanx: [OFF]')
end
elseif buff_table['id'] == 36 then -- Blink/Occultation --
if not gain then
add_to_chat(123,'Blink: [OFF]')
end
elseif buff_table['id'] == 604 then -- Mighty Guard --
if not gain then
add_to_chat(123,'Mighty Guard: [OFF]')
end
elseif buff_table['id'] == 251 then -- Food --
if not gain then
add_to_chat(123,'Food: [OFF]')
end
elseif buff_table['id'] == 28 then -- Terror --
if not gain then
add_to_chat(158,'Terror: [OFF]')
end
elseif buff_table['id'] == 10 then -- Stun --
if not gain then
add_to_chat(158,'Stun: [OFF]')
end
elseif buff_table['id'] == 16 then -- Amnesia --
if not gain then
add_to_chat(158,'Amnesia: [OFF]')
end
elseif buff_table['id'] == 2 or buff_table['id'] == 19 then -- Sleep --
if gain then
send_command('input /party zzz')
else
add_to_chat(158,'Sleep: [OFF]')
end
end
-- 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 state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
if buff=="Doom" then
if gain then
equip({waist="Gishbudar Sash",ring1="Purity Ring"})
disable('waist','ring1')
else
enable('waist','ring1')
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Custom spell mapping.
-- Return custom spellMap value that can override the default spell mapping.
-- Don't return anything to allow default spell mapping to be used.
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Blue Magic' then
for category,spell_list in pairs(blue_magic_maps) do
if spell_list:contains(spell.english) then
return category
end
end
end
end
-- 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
if world.area:contains('Adoulin') then
idleSet = set_combine(sets.idle.Town, {body="Councilor's Garb"})
end
return idleSet
end
-- Called by the 'update' self-command, for common needs.
-- Set eventArgs.handled to true if we don't want automatic equipping of gear.
function job_update(cmdParams, eventArgs)
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
--function update_combat_form()
-- Check for H2H or single-wielding
-- if player.equipment.sub == "Genbu's Shield" or player.equipment.sub == 'empty' then
-- state.CombatForm:reset()
--else
--state.CombatForm:set('DW')
--end
--end
function determine_haste_group()
-- Haste 1: 15%
-- Haste 2: 30%
-- Advancing March:
-- Victory March:
-- Mighty Guard: 15%
-- Embrava: 25%
-- Standard gear set reaches near capped delay with just Haste (77%-78%, depending on HQs)
-- For high haste, we want to be able to drop one of the 10% groups.
-- Basic gear hits capped delay (roughly) with:
-- 1 March + Haste
-- 2 March
-- Haste + Haste Samba
-- 1 March + Haste Samba
-- Embrava
-- High haste buffs:
-- 2x Marches + Haste Samba == 19% DW in gear
-- 1x March + Haste + Haste Samba == 22% DW in gear
-- Embrava + Haste or 1x March == 7% DW in gear
-- For max haste (capped magic haste + 25% gear haste), we can drop all DW gear.
-- Max haste buffs:
-- Embrava + Haste+March or 2x March
-- 2x Marches + Haste
-- So we want four tiers:
-- Normal DW
-- 20% DW -- High Haste
-- 7% DW (earrings) - Embrava Haste (specialized situation with embrava and haste, but no marches)
-- 0 DW - Max Haste
classes.CustomMeleeGroups:clear()
if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.march == 2 and buffactive.haste then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive['Mighty Guard'] and buffactive.haste == 2 then
classes.CustomMeleeGroups:append('MaxHaste')
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' or 'NIN' then
set_macro_page(2, 9)
else
set_macro_page(1, 9)
end
end
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-05-30 20:27:46
I'm fairly certain that custom classes come last in the set, so your equip sets would need to be named 'sets.engaged.SomeAcc.MaxHaste', etc. But if even your 'normal' set isn't working, then I'm not sure and I'll need to test out the file myself.
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2016-05-30 20:52:45
You're right, it does come last. I've adjusted, though still not working. I'm wondering if it's buffactive['Mighty Guard'] and buffactive.haste == 2 the issue?
Quetzalcoatl.Orestes
Server: Quetzalcoatl
Game: FFXI
Posts: 430
By Quetzalcoatl.Orestes 2016-05-30 20:55:57
Bismarck.Speedyjim said: »You're right, it does come last. I've adjusted, though still not working. I'm wondering if it's buffactive['Mighty Guard'] and buffactive.haste == 2 the issue?
edit: It could be the buffactive.haste == 2. (not sure on that.. it could work for geo + regular haste, etc.)
Only other thing I can see, is you're referencing a few variables for agumented gear, and I couldn't see where they're being defined.
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2016-05-30 21:00:49
Quetzalcoatl.Orestes said: »Only other thing I can see, is you're referencing a few variables for agumented gear, and I couldn't see where they're being defined. They're in my Globals file.
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2016-05-30 21:02:25
Quetzalcoatl.Orestes said: »Bismarck.Speedyjim said: »You're right, it does come last. I've adjusted, though still not working. I'm wondering if it's buffactive['Mighty Guard'] and buffactive.haste == 2 the issue?
edit: It could be the buffactive.haste == 2. (not sure on that.. it could work for geo + regular haste, etc.) OK so there's no way to differentiate between Haste 1 and 2?
Bismarck.Speedyjim
Server: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2016-05-30 21:16:05
Thanks Orestes and Flippant for your help, it's all working now. Issue was indeed the haste == 2 part.
Edit: Issue appears to be it not auto-updating sets based on haste rules. I have to hit F12 everytime. Fix?
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.
|
|