|
COR Gear Swap Help
By Galkapryme 2019-02-21 13:29:04
All,
I used and modified an existing gear swap .lua for COR, and everything seems to work great except for the in-town idle set. The in-town idle set should include movement speed items but actually shows as the regular idle set. This has been confirmed when loading, changing zones, etc. I have included both components of the .lua file below for review. Someone please advise where I am messing up.
-- Idle sets
sets.idle = {main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Orichalc. Bullet",
head="Oshosi Mask",
body="Oshosi Vest",
hands="Oshosi Gloves",
legs="Oshosi Trousers",
feet="Oshosi Leggings",
neck="Sanctity Necklace",
waist="Flax Sash",
left_ear="Enchntr. Earring +1",
right_ear="Impreg. Earring",
left_ring="Sheltered Ring",
right_ring="Paguroidea Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
sets.idle.Town = {main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Orichalc. Bullet",
head="Oshosi Mask",
body="Councilor's Garb",
hands="Oshosi Gloves",
legs="Carmine Cuisses",
feet="Oshosi Leggings",
neck="Wiglen Gorget",
waist="Flax Sash",
left_ear="Enchntr. Earring +1",
right_ear="Impreg. Earring",
left_ring="Sheltered Ring",
right_ring="Paguroidea Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
Bismarck.Xurion
Serveur: Bismarck
Game: FFXI
Posts: 694
By Bismarck.Xurion 2019-02-21 14:02:42
The sets you posted seem fine. The issue will be with the logic that determines when/if to equip the set.
Asura.Byrne
Serveur: Asura
Game: FFXI
By Asura.Byrne 2019-02-21 14:06:29
just having the naming convention as stes.idle.Town generally works if your lua uses Mote-Includes, but if you're using the same COR lua that most people are, that probably won't work without specifying some logic to make it see when you're in a town.
By Galkapryme 2019-02-23 11:10:15
As I am not familiar with coding in ANY fashion (I just copied an existing file and replaced gear), how do I configure the if/when logic?
Serveur: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2019-02-23 13:06:09
You need to post your full lua. My first guess would be that you deleted too much of whatever you copied, thinking you were simplifying things.
Does the top of your lua have this: Code -- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
mote_include is what makes all of the idle sets work I believe.
mote_include has the line: Code if buffactive.weakness then
idleScope = 'Weak'
elseif areas.Cities:contains(world.area) then
idleScope = 'Town'
else
idleScope = 'Field'
end
which works in conjunction with Mote_mappings which leads you to: Code areas.Cities = S{
"Ru'Lude Gardens",
"Upper Jeuno",
"Lower Jeuno",
"Port Jeuno",
"Port Windurst",
"Windurst Waters",
"Windurst Woods",
"Windurst Walls",
"Heavens Tower",
"Port San d'Oria",
"Northern San d'Oria",
"Southern San d'Oria",
"Port Bastok",
"Bastok Markets",
"Bastok Mines",
"Metalworks",
"Aht Urhgan Whitegate",
"Tavnazian Safehold",
"Nashmau",
"Selbina",
"Mhaura",
"Norg",
"Eastern Adoulin",
"Western Adoulin",
"Kazham"
}
blah blah blah. Basically, we need the whole lua to see what you *** up, as the sets you posted appear to be correct.
Idk which base lua you began with, but this is where I started: Code -- Original: Motenten / Modified: Arislan
-- Haste/DW Detection Requires Gearinfo Addon
-------------------------------------------------------------------------------------------------------------------
-- Keybinds
-------------------------------------------------------------------------------------------------------------------
-- Modes: [ F9 ] Cycle Offense Modes
-- [ CTRL+F9 ] Cycle Hybrid Modes
-- [ ALT+F9 ] Cycle Ranged Modes
-- [ WIN+F9 ] Cycle Weapon Skill Modes
-- [ F10 ] Emergency -PDT Mode
-- [ ALT+F10 ] Toggle Kiting Mode
-- [ F11 ] Emergency -MDT Mode
-- [ F12 ] Update Current Gear / Report Current Status
-- [ CTRL+F12 ] Cycle Idle Modes
-- [ ALT+F12 ] Cancel Emergency -PDT/-MDT Mode
-- [ WIN+C ] Toggle Capacity Points Mode
-- [ WIN+` ] Toggle use of Luzaf Ring.
-- [ WIN+Q ] Quick Draw shot mode selector.
--
-- Abilities: [ CTRL+- ] Quick Draw primary shot element cycle forward.
-- [ CTRL+= ] Quick Draw primary shot element cycle backward.
-- [ ALT+- ] Quick Draw secondary shot element cycle forward.
-- [ ALT+= ] Quick Draw secondary shot element cycle backward.
-- [ CTRL+[ ] Quick Draw toggle target type.
-- [ CTRL+] ] Quick Draw toggle use secondary shot.
--
-- [ CTRL+C ] Crooked Cards
-- [ CTRL+` ] Double-Up
-- [ CTRL+X ] Fold
-- [ CTRL+S ] Snake Eye
-- [ CTRL+NumLock ] Triple Shot
-- [ CTRL+Numpad/ ] Berserk
-- [ CTRL+Numpad* ] Warcry
-- [ CTRL+Numpad- ] Aggressor
--
-- Spells: [ WIN+, ] Utsusemi: Ichi
-- [ WIN+. ] Utsusemi: Ni
--
-- Weapons: [ CTRL+G ] Cycles between available ranged weapons
-- [ CTRL+W ] Toggle Ranged Weapon Lock
--
-- WS: [ CTRL+Numpad7 ] Savage Blade
-- [ CTRL+Numpad8 ] Last Stand
-- [ CTRL+Numpad4 ] Leaden Salute
-- [ CTRL+Numpad6 ] Wildfire
-- [ CTRL+Numpad1 ] Requiescat
--
-- RA: [ Numpad0 ] Ranged Attack
--
--
-- (Global-Binds.lua contains additional non-job-related keybinds)
-------------------------------------------------------------------------------------------------------------------
-- Custom Commands (preface with /console to use these in macros)
-------------------------------------------------------------------------------------------------------------------
-- gs c qd Uses the currently configured shot on the target, with either <t> or
-- <stnpc> depending on setting.
-- gs c qd t Uses the currently configured shot on the target, but forces use of <t>.
--
-- gs c cycle mainqd Cycles through the available steps to use as the primary shot when using
-- one of the above commands.
-- gs c cycle altqd Cycles through the available steps to use for alternating with the
-- configured main shot.
-- gs c toggle usealtqd Toggles whether or not to use an alternate shot.
-- gs c toggle selectqdtarget Toggles whether or not to use <stnpc> (as opposed to <t>) when using a shot.
--
-- gs c toggle LuzafRing Toggles use of Luzaf Ring on and off
-------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
-- QuickDraw Selector
state.Mainqd = M{['description']='Primary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
state.Altqd = M{['description']='Secondary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
state.UseAltqd = M(false, 'Use Secondary Shot')
state.SelectqdTarget = M(false, 'Select Quick Draw Target')
state.IgnoreTargetting = M(false, 'Ignore Targetting')
state.DualWield = M(false, 'Dual Wield III')
state.QDMode = M{['description']='Quick Draw Mode', 'STP', 'Magic Enhance', 'Magic Attack'}
state.Currentqd = M{['description']='Current Quick Draw', 'Main', 'Alt'}
-- Whether to use Luzaf's Ring
state.LuzafRing = M(false, "Luzaf's Ring")
-- Whether a warning has been given for low ammo
state.warned = M(false)
define_roll_values()
lockstyleset = 1
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('STP', 'Normal', 'LowAcc', 'MidAcc', 'HighAcc')
state.HybridMode:options('Normal', 'DT')
state.RangedMode:options('STP', 'Normal', 'Acc', 'HighAcc', 'Critical')
state.WeaponskillMode:options('Normal', 'Acc')
state.CastingMode:options('Normal', 'Resistant')
state.IdleMode:options('Normal', 'DT', 'Refresh')
state.Gun = M{['description']='Current Gun', 'Death Penalty', 'Fomalhaut', 'Ataktos'}--, 'Armageddon'
state.CP = M(false, "Capacity Points Mode")
state.Warp = M(false, "Warp Mode")
state.WeaponLock = M(false, 'Weapon Lock')
state.Ring = M(false, "Warp Mode")
gear.RAbullet = "Chrono Bullet"
gear.WSbullet = "Chrono Bullet"
gear.MAbullet = "Living Bullet"
gear.QDbullet = "Living Bullet"
options.ammo_warning_limit = 10
-- Additional local binds
include('Global-Binds.lua') -- OK to remove this line
include('Global-GEO-Binds.lua') -- OK to remove this line
send_command('bind !` input /ja "Double-up" <me>')
send_command('bind ^c input /ja "Crooked Cards" <me>')
send_command('bind ^s input /ja "Snake Eye" <me>')
send_command('bind ^f input /ja "Fold" <me>')
send_command('bind ^` input /ja "Bolter\'s Roll" <me>')
send_command ('bind @` gs c toggle LuzafRing')
send_command('bind ^- gs c cycleback mainqd')
send_command('bind ^= gs c cycle mainqd')
send_command('bind !- gs c cycle altqd')
send_command('bind != gs c cycleback altqd')
send_command('bind ^[ gs c toggle selectqdtarget')
send_command('bind ^] gs c toggle usealtqd')
send_command('bind @r gs c toggle Warp') --Windowkey'R'
send_command('bind @c gs c toggle CP')
send_command('bind @q gs c cycle QDMode')
send_command('bind @e gs c cycle Gun')
send_command('bind @w gs c toggle WeaponLock')
send_command('bind @? gs c toggle WeaponLock')
select_default_macro_book()
set_lockstyle()
Haste = 0
DW_needed = 0
DW = false
moving = false
update_combat_form()
determine_haste_group()
end
-- Called when this job file is unloaded (eg: job change)
function user_unload()
send_command('unbind ^`')
send_command('unbind ^c')
send_command('unbind ^s')
send_command('unbind ^f')
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 @c')
send_command('unbind @q')
send_command('unbind @e')
send_command('unbind @w')
send_command('unbind #`')
send_command('unbind #1')
send_command('unbind #2')
send_command('unbind #3')
send_command('unbind #4')
send_command('unbind #5')
send_command('unbind #6')
send_command('unbind #7')
send_command('unbind #8')
send_command('unbind #9')
send_command('unbind #0')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
------------------------------------------------------------------------------------------------
---------------------------------------- Precast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.precast.JA['Snake Eye'] = {legs="Lanun Trews +1"}
sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +3"}
sets.precast.JA['Random Deal'] = {body="Lanun Frac +3"}
sets.precast.CorsairRoll = {
head="Lanun Tricorne",
hands="Navarch's Gants +2",
ring2="Barataria Ring",
back="Camulus's Mantle",
}
sets.precast.CorsairRoll.Gun = set_combine(sets.precast.CorsairRoll.Engaged, {range="Compensator"})
sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Chas. Culottes +1"})
sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chass. Bottes +1"})
sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chass. Tricorne +1"})
sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +1"})
sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants +1"})
sets.precast.LuzafRing = set_combine(sets.precast.CorsairRoll, {ring1="Luzaf's Ring"})
sets.precast.FoldDoubleBust = {hands="Lanun Gants +3"}
sets.precast.Waltz = {
head="Anwig Salade",
ring1="Asklepian Ring",
ring2="Carbuncle Ring",
waist="Aristo Belt",
feet="Rawhide Boots",
neck="Unmoving Collar +1",
hands={ name="Herculean Gloves", augments={'Accuracy+14','"Waltz" potency +11%','DEX+9','Attack+9',}},
legs="Dashing Subligar",
}
sets.precast.FC = {
head="Carmine Mask +1", --14
body=gear.Taeon_FC_body, --9
hands="Leyline Gloves", --8
legs="Rawhide Trousers", --5
feet="Carmine Greaves +1", --8
neck="Orunmila's Torque", --5
ear1="Loquacious Earring", --2
ear2="Enchntr. Earring +1", --2
ring1="Weather. Ring +1", --6(4)
ring2="Kishar Ring", --4
}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
body="Passion Jacket",
ring1="Lebeche Ring",
})
-- (10% Snapshot from JP Gifts)
sets.precast.RA = {
ammo=gear.RAbullet,
head=gear.Taeon_RA_head, --10/0
body="Oshosi Vest +1", --14/0
hands="Carmine Fin. Ga. +1", --8/11
legs=gear.Adhemar_D_legs, --9/10
feet="Meg. Jam. +2", --10/0
back=gear.COR_SNP_Cape, --10/0
waist="Yemaya Belt", --0/5
} --61/26
sets.precast.RA.Flurry1 = set_combine(sets.precast.RA, {
body="Laksa. Frac +3", --0/20
}) --47/46
sets.precast.RA.Flurry2 = set_combine(sets.precast.RA.Flurry1, {
head="Chass. Tricorne +1", --0/14
feet="Pursuer's Gaiters", --0/10
waist="Impulse Belt", --3/0
}) --30/65
------------------------------------------------------------------------------------------------
------------------------------------- Weapon Skill Sets ----------------------------------------
------------------------------------------------------------------------------------------------
sets.precast.WS = {}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {})
sets.precast.WS['Last Stand'] = {}
sets.precast.WS['Last Stand'].Acc = set_combine(sets.precast.WS['Last Stand'], {})
sets.precast.WS['Wildfire'] = {}
sets.precast.WS['Hot Shot'] = {}
sets.precast.WS['Leaden Salute'] = {}
sets.precast.WS['Leaden Salute'].FullTP = {}
sets.precast.WS['Evisceration'] = {}
sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {})
sets.precast.WS['Savage Blade'] = {}
sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {})
sets.precast.WS['Swift Blade'] = {})
sets.precast.WS['Swift Blade'].Acc = set_combine(sets.precast.WS['Swift Blade'], {})
sets.precast.WS['Requiescat'] = {}
sets.precast.WS['Requiescat'].Acc = set_combine(sets.precast.WS['Requiescat'], {})
sets.precast.WS['Aeolian Edge'] = {
ammo="Yamarang",
head={ name="Herculean Helm", augments={'"Mag.Atk.Bns."+23','"Store TP"+2','MND+9','Mag. Acc.+15',}},
body={ name="Samnuha Coat", augments={'Mag. Acc.+13','"Mag.Atk.Bns."+14','"Fast Cast"+3','"Dual Wield"+4',}},
hands="Leyline Gloves",
legs={ name="Herculean Trousers", augments={'"Mag.Atk.Bns."+23','Enmity-3','STR+13','Mag. Acc.+11',}},
feet={ name="Herculean Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Enmity-3','INT+1','Mag. Acc.+9','"Mag.Atk.Bns."+8',}},
neck="Sanctity Necklace",
waist="Eschan Stone",
left_ear="Friomisi Earring",
right_ear="Hecate's Earring",
left_ring="Acumen Ring",
right_ring="Ilabrat Ring",
back="",
}
------------------------------------------------------------------------------------------------
---------------------------------------- Midcast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.midcast.FastRecast = sets.precast.FC
sets.midcast.SpellInterrupt = {}
sets.midcast.Cure = {}
sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
-- Occult Acumen Set
sets.midcast['Dark Magic'] = {}
sets.midcast.CorsairShot = {
ammo=gear.QDbullet,
head=gear.Herc_MAB_head,
body="Lanun Frac +3",
hands="Carmine Fin. Ga. +1",
legs=gear.Herc_MAB_legs,
feet="Lanun Bottes +3",
neck="Baetyl Pendant",
ear1="Novio Earring",
ear2="Friomisi Earring",
ring1="Fenrir Ring +1",
ring2="Dingir Ring",
back="Gunslinger's Cape",
waist="Eschan Stone",
}
sets.midcast.CorsairShot.Resistant = set_combine(sets.midcast.CorsairShot, {
head="Laksa. Tricorne +3",
body="Mummu Jacket +2",
hands="Laksa. Gants +3",
legs="Mummu Kecks +2",
feet="Laksa. Boots +3",
neck="Sanctity Necklace",
ear1="Hermetic Earring",
ear2="Digni. Earring",
ring1="Regal Ring",
ring2="Weather. Ring +1",
back=gear.COR_WS1_Cape,
waist="Kwahu Kachina Belt",
})
sets.midcast.CorsairShot['Light Shot'] = sets.midcast.CorsairShot.Resistant
sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot.Resistant
sets.midcast.CorsairShot.Enhance = {body="Mirke Wardecors", feet="Chass. Bottes +1"}
-- Ranged gear
sets.midcast.RA = {
ammo=gear.RAbullet,
head="Lanun Tricorne +3",
body="Oshosi Vest +1",
hands=gear.Adhemar_C_hands,
legs=gear.Adhemar_C_legs,
feet="Meg. Jam. +2",
neck="Iskur Gorget",
ear1="Enervating Earring",
ear2="Telos Earring",
ring1="Ilabrat Ring",
ring2="Dingir Ring",
back=gear.COR_RA_Cape,
waist="Yemaya Belt",
}
sets.midcast.RA.Acc = set_combine(sets.midcast.RA, {
head="Meghanada Visor +2",
hands="Lanun Gants +3",
ring1="Regal Ring",
})
sets.midcast.RA.HighAcc = set_combine(sets.midcast.RA.Acc, {
body="Laksa. Frac +3",
legs="Laksa. Trews +3",
ring2="Hajduk Ring +1",
waist="Kwahu Kachina Belt",
})
sets.midcast.RA.Critical = set_combine(sets.midcast.RA, {
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Mummu Wrists +2",
legs="Mummu Kecks +2",
feet="Oshosi Leggings",
ring1="Begrudging Ring",
ring2="Mummu Ring",
waist="Kwahu Kachina Belt",
})
sets.TripleShot = {}
sets.TripleShotCritical = {}
------------------------------------------------------------------------------------------------
----------------------------------------- Idle Sets --------------------------------------------
------------------------------------------------------------------------------------------------
sets.idle = {
range="Molybdosis",
ammo=gear.QDbullet,
head={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}},
neck="Loricate Torque +1",
ear1="Loquacious Earring",
rear="Ethereal Earring",
body="Emet Harness +1",
hands={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}},
ring1="Vocane Ring",
ring2="Defending Ring",
back="Moonbeam Cape",
waist="",
legs="Mummu Kecks +1",
feet="Hermes' Sandals"
}
sets.idle.Refresh = set_combine(sets.idle, {})
sets.idle.Town = {
range="Molybdosis",
ammo=gear.QDbullet,
head={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}},
neck="Loricate Torque +1",
ear1="Loquacious Earring",
rear="Ethereal Earring",
body="Emet Harness +1",
hands="Adhemar Wrist. +1"
ring1="Vocane Ring",
ring2="Defending Ring",
back="Moonbeam Cape",
waist="Windbuffet Belt +1",
legs="Mummu Kecks +1",
feet="Hermes' Sandals"
}
------------------------------------------------------------------------------------------------
---------------------------------------- Engaged Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.engaged = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body,
hands=gear.Adhemar_B_hands,
legs="Samnuha Tights",
feet=gear.Herc_TA_feet,
neck="Iskur Gorget",
ear1="Cessance Earring",
ear2="Brutal Earring",
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Windbuffet Belt +1",
}
-- * DNC Subjob DW Trait: +15%
-- * NIN Subjob DW Trait: +25%
-- No Magic Haste (74% DW to cap)
sets.engaged.DW = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands="Floral Gauntlets", --5
legs="Carmine Cuisses +1", --6
feet=gear.Taeon_DW_feet, --9
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Brutal Earring",
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_DW_Cape, --10
waist="Reiki Yotai", --7
} -- 48%
-- 15% Magic Haste (67% DW to cap)
sets.engaged.DW.LowHaste = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands="Floral Gauntlets", --5
legs="Carmine Cuisses +1", --6
feet=gear.Taeon_DW_feet, --9
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Eabani Earring", --4
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Reiki Yotai", --7
} -- 42%
-- 30% Magic Haste (56% DW to cap)
sets.engaged.DW.MidHaste = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands=gear.Adhemar_B_hands,
legs="Samnuha Tights",
feet=gear.Taeon_DW_feet, --9
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Eabani Earring", --4
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Reiki Yotai", --7
} -- 31%
-- 35% Magic Haste (51% DW to cap)
sets.engaged.DW.HighHaste = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands=gear.Adhemar_B_hands,
legs="Samnuha Tights",
feet=gear.Herc_TA_feet,
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Eabani Earring", --4
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Reiki Yotai", --7
} -- 27%
-- 45% Magic Haste (36% DW to cap)
sets.engaged.DW.MaxHaste = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands=gear.Adhemar_B_hands,
legs="Samnuha Tights",
feet=gear.Herc_TA_feet,
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Telos Earring",
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Windbuffet Belt +1",
} -- 11%
-- Define three tiers of Accuracy. These sets are cycled with the F9 Button to increase accuracy in stages as desired.
sets.engaged.Acc1 = {}
sets.engaged.Acc2 = {}
sets.engaged.Acc3 = {}
-- Base Shield
sets.engaged.LowAcc = set_combine(sets.engaged, sets.engaged.Acc1)
sets.engaged.MidAcc = set_combine(sets.engaged, sets.engaged.Acc2)
sets.engaged.HighAcc = set_combine(sets.engaged, sets.engaged.Acc3)
-- Base DW
sets.engaged.DW.LowAcc = set_combine(sets.engaged.DW, sets.engaged.Acc1)
sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW, sets.engaged.Acc2)
sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW, sets.engaged.Acc3)
-- LowHaste DW
sets.engaged.DW.LowAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc1)
sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc2)
sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc3)
-- MidHaste DW
sets.engaged.DW.LowAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc1)
sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc2)
sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc3)
-- HighHaste DW
sets.engaged.DW.LowAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc1)
sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc2)
sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc3)
-- HighHaste DW
sets.engaged.DW.LowAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.LowAcc)
sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.MidAcc)
sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.HighAcc)
-- I don't know what this is
sets.engaged.DW.MaxHastePlus = set_combine(sets.engaged.DW.MaxHaste, {back=gear.COR_DW_Cape})
sets.engaged.DW.LowAcc.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHaste, {back=gear.COR_DW_Cape})
sets.engaged.DW.MidAcc.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHaste, {back=gear.COR_DW_Cape})
sets.engaged.DW.HighAcc.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHaste, {back=gear.COR_DW_Cape})
------------------------------------------------------------------------------------------------
---------------------------------------- Hybrid Sets -------------------------------------------
------------------------------------------------------------------------------------------------
-- Define three tiers of Defense Taken. These sets are cycled with the F10 Button. DT1-16%, DT2-28%, DT3-47%
sets.engaged.DT1 = {neck="Loricate Torque +1",ring1="Defending Ring"}
sets.engaged.DT2 = {neck="Loricate Torque +1",ring1="Defending Ring",ring2="Vocane Ring",back="Moonbeam Cape"}
sets.engaged.DT3 = {head={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}},neck="Loricate Torque +1",hands={ name="Herculean Gloves", augments={'Attack+15','Damage taken-3%','STR+2','Accuracy+15',}},ring1="Defending Ring",ring2="Vocane Ring",back="Moonbeam Cape",waist="Flume Belt",legs="Mummu Kecks +1",feet={ name="Herculean Boots", augments={'Accuracy+15','Damage taken-3%','Attack+4',}},ammo="Staunch Tathlum",body={ name="Herculean Vest", augments={'Damage taken-3%','AGI+9','Accuracy+13','Attack+9',}}}
-- Shield Base
sets.engaged.LOW = set_combine(sets.engaged, sets.engaged.DT1)
sets.engaged.LowAcc.LOW = set_combine(sets.engaged.LowAcc, sets.engaged.DT1)
sets.engaged.MidAcc.LOW = set_combine(sets.engaged.MidAcc, sets.engaged.DT1)
sets.engaged.HighAcc.LOW = set_combine(sets.engaged.HighAcc, sets.engaged.DT1)
sets.engaged.MID = set_combine(sets.engaged, sets.engaged.DT2)
sets.engaged.LowAcc.MID = set_combine(sets.engaged.LowAcc, sets.engaged.DT2)
sets.engaged.MidAcc.MID = set_combine(sets.engaged.MidAcc, sets.engaged.DT2)
sets.engaged.HighAcc.MID = set_combine(sets.engaged.HighAcc, sets.engaged.DT2)
sets.engaged.HIGH = set_combine(sets.engaged, sets.engaged.DT3)
sets.engaged.LowAcc.HIGH = set_combine(sets.engaged.LowAcc, sets.engaged.DT3)
sets.engaged.MidAcc.HIGH = set_combine(sets.engaged.MidAcc, sets.engaged.DT3)
sets.engaged.HighAcc.HIGH = set_combine(sets.engaged.HighAcc, sets.engaged.DT3)
-- No Haste DW
sets.engaged.DW.LOW = set_combine(sets.engaged.DW, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT1)
sets.engaged.DW.MID = set_combine(sets.engaged.DW, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT2)
sets.engaged.DW.HIGH = set_combine(sets.engaged.DW, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT3)
-- Low Haste DW
sets.engaged.DW.LOW.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT1)
sets.engaged.DW.MID.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT3)
-- Mid Haste
sets.engaged.DW.LOW.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT1)
sets.engaged.DW.MID.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT3)
-- High Haste
sets.engaged.DW.LOW.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT1)
sets.engaged.DW.MID.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT3)
-- Max Haste
sets.engaged.DW.LOW.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.MID.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT3)
-- I don't know what this is
sets.engaged.DW.DT.MaxHastePlus = set_combine(sets.engaged.DW.MaxHastePlus, sets.engaged.Hybrid)
sets.engaged.DW.LowAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHastePlus, sets.engaged.Hybrid)
sets.engaged.DW.MidAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHastePlus, sets.engaged.Hybrid)
sets.engaged.DW.HighAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHastePlus, sets.engaged.Hybrid)
------------------------------------------------------------------------------------------------
---------------------------------------- Special Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.buff.Doom = {
neck="Nicander's Necklace", --20
ring1="Eshmun's Ring", --20
ring2="Eshmun's Ring", --20
waist="Gishdubar Sash", --10
}
sets.Obi = {waist="Hachirin-no-Obi"}
sets.CP = {back="Mecisto. Mantle"}
sets.Warp = {}
-- sets.Reive = {neck="Ygnas's Resolve +1"}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
function job_precast(spell, action, spellMap, eventArgs)
-- Check that proper ammo is available if we're using ranged attacks or similar.
if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
do_bullet_checks(spell, spellMap, eventArgs)
end
-- Gear
if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") then
if player.status ~= 'Engaged' then
equip(sets.precast.CorsairRoll.Gun)
end
if state.LuzafRing.value then
equip(sets.precast.LuzafRing)
end
elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
classes.CustomClass = 'Acc'
end
if spell.english == 'Fold' and buffactive['Bust'] == 2 then
if sets.precast.FoldDoubleBust then
equip(sets.precast.FoldDoubleBust)
eventArgs.handled = true
end
end
if spellMap == 'Utsusemi' then
if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
cancel_spell()
add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
eventArgs.handled = true
return
elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
end
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") then
if player.status ~= 'Engaged' then
equip(sets.precast.CorsairRoll.Gun)
end
elseif spell.action_type == 'Ranged Attack' then
if flurry == 2 then
equip(sets.precast.RA.Flurry2)
elseif flurry == 1 then
equip(sets.precast.RA.Flurry1)
end
-- Equip obi if weather/day matches for WS.
elseif spell.type == 'WeaponSkill' then
if spell.english == 'Leaden Salute' then
if world.weather_element == 'Dark' or world.day_element == 'Dark' then
equip(sets.Obi)
end
if player.tp > 2900 then
equip(sets.precast.WS['Leaden Salute'].FullTP)
end
elseif spell.english == 'Wildfire' and (world.weather_element == 'Fire' or world.day_element == 'Fire') then
equip(sets.Obi)
end
end
end
function job_post_midcast(spell, action, spellMap, eventArgs)
-- Equip obi if weather/day matches for Quick Draw.
if spell.type == 'CorsairShot' then
if (spell.element == world.day_element or spell.element == world.weather_element) and
(spell.english ~= 'Light Shot' and spell.english ~= 'Dark Shot') then
equip(sets.Obi)
end
if state.QDMode.value == 'Magic Enhance' then
equip(sets.midcast.CorsairShot.Enhance)
elseif state.QDMode.value == 'STP' then
equip(sets.midcast.CorsairShot.STP)
end
elseif spell.action_type == 'Ranged Attack' then
if buffactive['Triple Shot'] then
equip(sets.TripleShot)
if buffactive['Aftermath: Lv.3'] and player.equipment.main == "Armageddon" then
equip(sets.TripleShotCritical)
end
elseif buffactive['Aftermath: Lv.3'] and player.equipment.main == "Armageddon" then
equip(sets.midcast.RA.Critical)
end
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 spell.type == 'CorsairRoll' and not spell.interrupted then
display_roll_info(spell)
end
if spell.english == "Light Shot" then
send_command('@timers c "Light Shot ['..spell.target.name..']" 60 down abilities/00195.png')
end
end
function job_buff_change(buff,gain)
-- If we gain or lose any flurry buffs, adjust gear.
if S{'flurry'}:contains(buff:lower()) then
if not gain then
flurry = nil
--add_to_chat(122, "Flurry status cleared.")
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
if buff == "doom" then
if gain then
equip(sets.buff.Doom)
send_command('@input /p Doomed.')
disable('ring1','ring2','waist')
else
enable('ring1','ring2','waist')
handle_equipping_gear(player.status)
end
end
end
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
if state.WeaponLock.value == true then
disable('ranged')
else
enable('ranged')
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- 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_handle_equipping_gear(playerStatus, eventArgs)
update_combat_form()
determine_haste_group()
end
function job_update(cmdParams, eventArgs)
handle_equipping_gear(player.status)
end
function update_combat_form()
if DW == true then
state.CombatForm:set('DW')
elseif DW == false then
state.CombatForm:reset()
end
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if state.Gun.current == 'Death Penalty' then
equip({ranged="Death Penalty"})
elseif state.Gun.current == 'Fomalhaut' then
equip({ranged="Fomalhaut"})
elseif state.Gun.current == 'Ataktos' then
equip({ranged="Ataktos"})
-- elseif state.Gun.current == 'Armageddon' then
-- equip({ranged="Armageddon"})
end
if state.CP.current == 'on' then
equip(sets.CP)
disable('back')
elseif state.Warp.current == 'on' then
disable('ring2')
else
enable('ring2')
enable('back')
end
return idleSet
end
-- Handle auto-targetting based on local setup.
function job_auto_change_target(spell, action, spellMap, eventArgs)
if spell.type == 'CorsairShot' then
if state.IgnoreTargetting.value == true then
state.IgnoreTargetting:reset()
eventArgs.handled = true
end
eventArgs.SelectNPCTargets = state.SelectqdTarget.value
end
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
local msg = ''
msg = msg .. '[ Offense/Ranged: '..state.OffenseMode.current
if state.HybridMode.value ~= 'Normal' then
msg = msg .. '/' .. state.HybridMode.value
end
msg = msg .. '/' ..state.RangedMode.current .. ' ]'
if state.WeaponskillMode.value ~= 'Normal' then
msg = msg .. '[ WS: '..state.WeaponskillMode.current .. ' ]'
end
if state.DefenseMode.value ~= 'None' then
msg = msg .. '[ Defense: ' .. state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ' ]'
end
if state.Kiting.value then
msg = msg .. '[ Kiting Mode: ON ]'
end
msg = msg .. '[ *'..state.Mainqd.current
if state.UseAltqd.value == true then
msg = msg .. '/'..state.Altqd.current
end
msg = msg .. ' ('
if state.QDMode.value then
msg = msg .. state.QDMode.current .. ') '
end
msg = msg .. ']'
add_to_chat(060, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
--Read incoming packet to differentiate between Haste/Flurry I and II
windower.register_event('action',
function(act)
--check if you are a target of spell
local actionTargets = act.targets
playerId = windower.ffxi.get_player().id
isTarget = false
for _, target in ipairs(actionTargets) do
if playerId == target.id then
isTarget = true
end
end
if isTarget == true then
if act.category == 4 then
local param = act.param
if param == 845 and flurry ~= 2 then
--add_to_chat(122, 'Flurry Status: Flurry I')
flurry = 1
elseif param == 846 then
--add_to_chat(122, 'Flurry Status: Flurry II')
flurry = 2
end
end
end
end)
function determine_haste_group()
classes.CustomMeleeGroups:clear()
if DW == true then
if DW_needed <= 11 then
classes.CustomMeleeGroups:append('MaxHaste')
elseif DW_needed > 11 and DW_needed <= 21 then
classes.CustomMeleeGroups:append('MaxHastePlus')
elseif DW_needed > 21 and DW_needed <= 27 then
classes.CustomMeleeGroups:append('HighHaste')
elseif DW_needed > 27 and DW_needed <= 31 then
classes.CustomMeleeGroups:append('MidHaste')
elseif DW_needed > 31 and DW_needed <= 42 then
classes.CustomMeleeGroups:append('LowHaste')
elseif DW_needed > 42 then
classes.CustomMeleeGroups:append('')
end
end
end
function job_self_command(cmdParams, eventArgs)
if cmdParams[1] == 'qd' then
if cmdParams[2] == 't' then
state.IgnoreTargetting:set()
end
local doqd = ''
if state.UseAltqd.value == true then
doqd = state[state.Currentqd.current..'qd'].current
state.Currentqd:cycle()
else
doqd = state.Mainqd.current
end
send_command('@input /ja "'..doqd..'" <t>')
end
gearinfo(cmdParams, eventArgs)
end
function gearinfo(cmdParams, eventArgs)
if cmdParams[1] == 'gearinfo' then
if type(tonumber(cmdParams[2])) == 'number' then
if tonumber(cmdParams[2]) ~= DW_needed then
DW_needed = tonumber(cmdParams[2])
DW = true
end
elseif type(cmdParams[2]) == 'string' then
if cmdParams[2] == 'false' then
DW_needed = 0
DW = false
end
end
if type(tonumber(cmdParams[3])) == 'number' then
if tonumber(cmdParams[3]) ~= Haste then
Haste = tonumber(cmdParams[3])
end
end
if type(cmdParams[4]) == 'string' then
if cmdParams[4] == 'true' then
moving = true
elseif cmdParams[4] == 'false' then
moving = false
end
end
if not midaction() then
job_update()
end
end
end
function define_roll_values()
rolls = {
["Corsair's Roll"] = {lucky=5, unlucky=9, bonus="Experience Points"},
["Ninja Roll"] = {lucky=4, unlucky=8, bonus="Evasion"},
["Hunter's Roll"] = {lucky=4, unlucky=8, bonus="Accuracy"},
["Chaos Roll"] = {lucky=4, unlucky=8, bonus="Attack"},
["Magus's Roll"] = {lucky=2, unlucky=6, bonus="Magic Defense"},
["Healer's Roll"] = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
["Drachen Roll"] = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
["Choral Roll"] = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
["Monk's Roll"] = {lucky=3, unlucky=7, bonus="Subtle Blow"},
["Beast Roll"] = {lucky=4, unlucky=8, bonus="Pet Attack"},
["Samurai Roll"] = {lucky=2, unlucky=6, bonus="Store TP"},
["Evoker's Roll"] = {lucky=5, unlucky=9, bonus="Refresh"},
["Rogue's Roll"] = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
["Warlock's Roll"] = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
["Fighter's Roll"] = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
["Puppet Roll"] = {lucky=3, unlucky=7, bonus="Pet Magic Attack/Accuracy"},
["Gallant's Roll"] = {lucky=3, unlucky=7, bonus="Defense"},
["Wizard's Roll"] = {lucky=5, unlucky=9, bonus="Magic Attack"},
["Dancer's Roll"] = {lucky=3, unlucky=7, bonus="Regen"},
["Scholar's Roll"] = {lucky=2, unlucky=6, bonus="Conserve MP"},
["Naturalist's Roll"] = {lucky=3, unlucky=7, bonus="Enh. Magic Duration"},
["Runeist's Roll"] = {lucky=4, unlucky=8, bonus="Magic Evasion"},
["Bolter's Roll"] = {lucky=3, unlucky=9, bonus="Movement Speed"},
["Caster's Roll"] = {lucky=2, unlucky=7, bonus="Fast Cast"},
["Courser's Roll"] = {lucky=3, unlucky=9, bonus="Snapshot"},
["Blitzer's Roll"] = {lucky=4, unlucky=9, bonus="Attack Delay"},
["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
["Allies' Roll"] = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
["Miser's Roll"] = {lucky=5, unlucky=7, bonus="Save TP"},
["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
["Avenger's Roll"] = {lucky=4, unlucky=8, bonus="Counter Rate"},
}
end
function display_roll_info(spell)
rollinfo = rolls[spell.english]
local rollsize = (state.LuzafRing.value and 'Large') or 'Small'
if rollinfo then
add_to_chat(104, '[ Lucky: '..tostring(rollinfo.lucky)..' / Unlucky: '..tostring(rollinfo.unlucky)..' ] '..spell.english..': '..rollinfo.bonus..' ('..rollsize..') ')
end
end
-- Determine whether we have sufficient ammo for the action being attempted.
function do_bullet_checks(spell, spellMap, eventArgs)
local bullet_name
local bullet_min_count = 1
if spell.type == 'WeaponSkill' then
if spell.skill == "Marksmanship" then
if spell.english == 'Wildfire' or spell.english == 'Leaden Salute' then
-- magical weaponskills
bullet_name = gear.MAbullet
else
-- physical weaponskills
bullet_name = gear.WSbullet
end
else
-- Ignore non-ranged weaponskills
return
end
elseif spell.type == 'CorsairShot' then
bullet_name = gear.QDbullet
elseif spell.action_type == 'Ranged Attack' then
bullet_name = gear.RAbullet
if buffactive['Triple Shot'] then
bullet_min_count = 3
end
end
local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
-- If no ammo is available, give appropriate warning and end.
if not available_bullets then
if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
add_to_chat(104, 'No Quick Draw ammo left. Using what\'s currently equipped ('..player.equipment.ammo..').')
return
elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
add_to_chat(104, 'No weaponskill ammo left. Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
return
else
add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
eventArgs.cancel = true
return
end
end
-- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
add_to_chat(104, 'No ammo will be left for Quick Draw. Cancelling.')
eventArgs.cancel = true
return
end
-- Low ammo warning.
if spell.type ~= 'CorsairShot' and state.warned.value == false
and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
local msg = '***** LOW AMMO WARNING: '..bullet_name..' *****'
--local border = string.repeat("*", #msg)
local border = ""
for i = 1, #msg do
border = border .. "*"
end
add_to_chat(104, border)
add_to_chat(104, msg)
add_to_chat(104, border)
state.warned:set()
elseif available_bullets.count > options.ammo_warning_limit and state.warned then
state.warned:reset()
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
if player.sub_job == 'DNC' then
set_macro_page(10, 4)
elseif player.sub_job == 'WHM' then
set_macro_page(1, 4)
else
set_macro_page(1, 4)
end
end
function set_lockstyle()
send_command('wait 2; input /lockstyleset ' .. lockstyleset)
end
Serveur: Shiva
Game: FFXI
Posts: 655
By Shiva.Zerowone 2019-02-23 15:47:00
worse case scenario/quick fix until you fix it:
make a macro call it "Movement" or "Town"
/console gs equip sets.Idle.Town
Asura.Byrne
Serveur: Asura
Game: FFXI
By Asura.Byrne 2019-02-23 19:11:08
the easiest way to tell if you need to do this is find what your TP set is called... If it's sets.engaged, it was originally motenten based and needs its includes, if it's called sets.MeleeTP.Standard, then it was never motenten based, and simply putting in sets.idle.Town won't work unless you specify when it needs to happen... I can go into showing you how to do it if that's the case, but we need to figure out which of these is the case.
By Galkapryme 2019-02-24 10:06:28
You need to post your full lua. My first guess would be that you deleted too much of whatever you copied, thinking you were simplifying things.
Does the top of your lua have this: Code -- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
mote_include is what makes all of the idle sets work I believe.
mote_include has the line: Code if buffactive.weakness then
idleScope = 'Weak'
elseif areas.Cities:contains(world.area) then
idleScope = 'Town'
else
idleScope = 'Field'
end
which works in conjunction with Mote_mappings which leads you to: Code areas.Cities = S{
"Ru'Lude Gardens",
"Upper Jeuno",
"Lower Jeuno",
"Port Jeuno",
"Port Windurst",
"Windurst Waters",
"Windurst Woods",
"Windurst Walls",
"Heavens Tower",
"Port San d'Oria",
"Northern San d'Oria",
"Southern San d'Oria",
"Port Bastok",
"Bastok Markets",
"Bastok Mines",
"Metalworks",
"Aht Urhgan Whitegate",
"Tavnazian Safehold",
"Nashmau",
"Selbina",
"Mhaura",
"Norg",
"Eastern Adoulin",
"Western Adoulin",
"Kazham"
}
blah blah blah. Basically, we need the whole lua to see what you *** up, as the sets you posted appear to be correct.
Idk which base lua you began with, but this is where I started: Code -- Original: Motenten / Modified: Arislan
-- Haste/DW Detection Requires Gearinfo Addon
-------------------------------------------------------------------------------------------------------------------
-- Keybinds
-------------------------------------------------------------------------------------------------------------------
-- Modes: [ F9 ] Cycle Offense Modes
-- [ CTRL+F9 ] Cycle Hybrid Modes
-- [ ALT+F9 ] Cycle Ranged Modes
-- [ WIN+F9 ] Cycle Weapon Skill Modes
-- [ F10 ] Emergency -PDT Mode
-- [ ALT+F10 ] Toggle Kiting Mode
-- [ F11 ] Emergency -MDT Mode
-- [ F12 ] Update Current Gear / Report Current Status
-- [ CTRL+F12 ] Cycle Idle Modes
-- [ ALT+F12 ] Cancel Emergency -PDT/-MDT Mode
-- [ WIN+C ] Toggle Capacity Points Mode
-- [ WIN+` ] Toggle use of Luzaf Ring.
-- [ WIN+Q ] Quick Draw shot mode selector.
--
-- Abilities: [ CTRL+- ] Quick Draw primary shot element cycle forward.
-- [ CTRL+= ] Quick Draw primary shot element cycle backward.
-- [ ALT+- ] Quick Draw secondary shot element cycle forward.
-- [ ALT+= ] Quick Draw secondary shot element cycle backward.
-- [ CTRL+[ ] Quick Draw toggle target type.
-- [ CTRL+] ] Quick Draw toggle use secondary shot.
--
-- [ CTRL+C ] Crooked Cards
-- [ CTRL+` ] Double-Up
-- [ CTRL+X ] Fold
-- [ CTRL+S ] Snake Eye
-- [ CTRL+NumLock ] Triple Shot
-- [ CTRL+Numpad/ ] Berserk
-- [ CTRL+Numpad* ] Warcry
-- [ CTRL+Numpad- ] Aggressor
--
-- Spells: [ WIN+, ] Utsusemi: Ichi
-- [ WIN+. ] Utsusemi: Ni
--
-- Weapons: [ CTRL+G ] Cycles between available ranged weapons
-- [ CTRL+W ] Toggle Ranged Weapon Lock
--
-- WS: [ CTRL+Numpad7 ] Savage Blade
-- [ CTRL+Numpad8 ] Last Stand
-- [ CTRL+Numpad4 ] Leaden Salute
-- [ CTRL+Numpad6 ] Wildfire
-- [ CTRL+Numpad1 ] Requiescat
--
-- RA: [ Numpad0 ] Ranged Attack
--
--
-- (Global-Binds.lua contains additional non-job-related keybinds)
-------------------------------------------------------------------------------------------------------------------
-- Custom Commands (preface with /console to use these in macros)
-------------------------------------------------------------------------------------------------------------------
-- gs c qd Uses the currently configured shot on the target, with either <t> or
-- <stnpc> depending on setting.
-- gs c qd t Uses the currently configured shot on the target, but forces use of <t>.
--
-- gs c cycle mainqd Cycles through the available steps to use as the primary shot when using
-- one of the above commands.
-- gs c cycle altqd Cycles through the available steps to use for alternating with the
-- configured main shot.
-- gs c toggle usealtqd Toggles whether or not to use an alternate shot.
-- gs c toggle selectqdtarget Toggles whether or not to use <stnpc> (as opposed to <t>) when using a shot.
--
-- gs c toggle LuzafRing Toggles use of Luzaf Ring on and off
-------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
-- QuickDraw Selector
state.Mainqd = M{['description']='Primary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
state.Altqd = M{['description']='Secondary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
state.UseAltqd = M(false, 'Use Secondary Shot')
state.SelectqdTarget = M(false, 'Select Quick Draw Target')
state.IgnoreTargetting = M(false, 'Ignore Targetting')
state.DualWield = M(false, 'Dual Wield III')
state.QDMode = M{['description']='Quick Draw Mode', 'STP', 'Magic Enhance', 'Magic Attack'}
state.Currentqd = M{['description']='Current Quick Draw', 'Main', 'Alt'}
-- Whether to use Luzaf's Ring
state.LuzafRing = M(false, "Luzaf's Ring")
-- Whether a warning has been given for low ammo
state.warned = M(false)
define_roll_values()
lockstyleset = 1
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('STP', 'Normal', 'LowAcc', 'MidAcc', 'HighAcc')
state.HybridMode:options('Normal', 'DT')
state.RangedMode:options('STP', 'Normal', 'Acc', 'HighAcc', 'Critical')
state.WeaponskillMode:options('Normal', 'Acc')
state.CastingMode:options('Normal', 'Resistant')
state.IdleMode:options('Normal', 'DT', 'Refresh')
state.Gun = M{['description']='Current Gun', 'Death Penalty', 'Fomalhaut', 'Ataktos'}--, 'Armageddon'
state.CP = M(false, "Capacity Points Mode")
state.Warp = M(false, "Warp Mode")
state.WeaponLock = M(false, 'Weapon Lock')
state.Ring = M(false, "Warp Mode")
gear.RAbullet = "Chrono Bullet"
gear.WSbullet = "Chrono Bullet"
gear.MAbullet = "Living Bullet"
gear.QDbullet = "Living Bullet"
options.ammo_warning_limit = 10
-- Additional local binds
include('Global-Binds.lua') -- OK to remove this line
include('Global-GEO-Binds.lua') -- OK to remove this line
send_command('bind !` input /ja "Double-up" <me>')
send_command('bind ^c input /ja "Crooked Cards" <me>')
send_command('bind ^s input /ja "Snake Eye" <me>')
send_command('bind ^f input /ja "Fold" <me>')
send_command('bind ^` input /ja "Bolter\'s Roll" <me>')
send_command ('bind @` gs c toggle LuzafRing')
send_command('bind ^- gs c cycleback mainqd')
send_command('bind ^= gs c cycle mainqd')
send_command('bind !- gs c cycle altqd')
send_command('bind != gs c cycleback altqd')
send_command('bind ^[ gs c toggle selectqdtarget')
send_command('bind ^] gs c toggle usealtqd')
send_command('bind @r gs c toggle Warp') --Windowkey'R'
send_command('bind @c gs c toggle CP')
send_command('bind @q gs c cycle QDMode')
send_command('bind @e gs c cycle Gun')
send_command('bind @w gs c toggle WeaponLock')
send_command('bind @? gs c toggle WeaponLock')
select_default_macro_book()
set_lockstyle()
Haste = 0
DW_needed = 0
DW = false
moving = false
update_combat_form()
determine_haste_group()
end
-- Called when this job file is unloaded (eg: job change)
function user_unload()
send_command('unbind ^`')
send_command('unbind ^c')
send_command('unbind ^s')
send_command('unbind ^f')
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 @c')
send_command('unbind @q')
send_command('unbind @e')
send_command('unbind @w')
send_command('unbind #`')
send_command('unbind #1')
send_command('unbind #2')
send_command('unbind #3')
send_command('unbind #4')
send_command('unbind #5')
send_command('unbind #6')
send_command('unbind #7')
send_command('unbind #8')
send_command('unbind #9')
send_command('unbind #0')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
------------------------------------------------------------------------------------------------
---------------------------------------- Precast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.precast.JA['Snake Eye'] = {legs="Lanun Trews +1"}
sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +3"}
sets.precast.JA['Random Deal'] = {body="Lanun Frac +3"}
sets.precast.CorsairRoll = {
head="Lanun Tricorne",
hands="Navarch's Gants +2",
ring2="Barataria Ring",
back="Camulus's Mantle",
}
sets.precast.CorsairRoll.Gun = set_combine(sets.precast.CorsairRoll.Engaged, {range="Compensator"})
sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Chas. Culottes +1"})
sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chass. Bottes +1"})
sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chass. Tricorne +1"})
sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +1"})
sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants +1"})
sets.precast.LuzafRing = set_combine(sets.precast.CorsairRoll, {ring1="Luzaf's Ring"})
sets.precast.FoldDoubleBust = {hands="Lanun Gants +3"}
sets.precast.Waltz = {
head="Anwig Salade",
ring1="Asklepian Ring",
ring2="Carbuncle Ring",
waist="Aristo Belt",
feet="Rawhide Boots",
neck="Unmoving Collar +1",
hands={ name="Herculean Gloves", augments={'Accuracy+14','"Waltz" potency +11%','DEX+9','Attack+9',}},
legs="Dashing Subligar",
}
sets.precast.FC = {
head="Carmine Mask +1", --14
body=gear.Taeon_FC_body, --9
hands="Leyline Gloves", --8
legs="Rawhide Trousers", --5
feet="Carmine Greaves +1", --8
neck="Orunmila's Torque", --5
ear1="Loquacious Earring", --2
ear2="Enchntr. Earring +1", --2
ring1="Weather. Ring +1", --6(4)
ring2="Kishar Ring", --4
}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
body="Passion Jacket",
ring1="Lebeche Ring",
})
-- (10% Snapshot from JP Gifts)
sets.precast.RA = {
ammo=gear.RAbullet,
head=gear.Taeon_RA_head, --10/0
body="Oshosi Vest +1", --14/0
hands="Carmine Fin. Ga. +1", --8/11
legs=gear.Adhemar_D_legs, --9/10
feet="Meg. Jam. +2", --10/0
back=gear.COR_SNP_Cape, --10/0
waist="Yemaya Belt", --0/5
} --61/26
sets.precast.RA.Flurry1 = set_combine(sets.precast.RA, {
body="Laksa. Frac +3", --0/20
}) --47/46
sets.precast.RA.Flurry2 = set_combine(sets.precast.RA.Flurry1, {
head="Chass. Tricorne +1", --0/14
feet="Pursuer's Gaiters", --0/10
waist="Impulse Belt", --3/0
}) --30/65
------------------------------------------------------------------------------------------------
------------------------------------- Weapon Skill Sets ----------------------------------------
------------------------------------------------------------------------------------------------
sets.precast.WS = {}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {})
sets.precast.WS['Last Stand'] = {}
sets.precast.WS['Last Stand'].Acc = set_combine(sets.precast.WS['Last Stand'], {})
sets.precast.WS['Wildfire'] = {}
sets.precast.WS['Hot Shot'] = {}
sets.precast.WS['Leaden Salute'] = {}
sets.precast.WS['Leaden Salute'].FullTP = {}
sets.precast.WS['Evisceration'] = {}
sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {})
sets.precast.WS['Savage Blade'] = {}
sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {})
sets.precast.WS['Swift Blade'] = {})
sets.precast.WS['Swift Blade'].Acc = set_combine(sets.precast.WS['Swift Blade'], {})
sets.precast.WS['Requiescat'] = {}
sets.precast.WS['Requiescat'].Acc = set_combine(sets.precast.WS['Requiescat'], {})
sets.precast.WS['Aeolian Edge'] = {
ammo="Yamarang",
head={ name="Herculean Helm", augments={'"Mag.Atk.Bns."+23','"Store TP"+2','MND+9','Mag. Acc.+15',}},
body={ name="Samnuha Coat", augments={'Mag. Acc.+13','"Mag.Atk.Bns."+14','"Fast Cast"+3','"Dual Wield"+4',}},
hands="Leyline Gloves",
legs={ name="Herculean Trousers", augments={'"Mag.Atk.Bns."+23','Enmity-3','STR+13','Mag. Acc.+11',}},
feet={ name="Herculean Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Enmity-3','INT+1','Mag. Acc.+9','"Mag.Atk.Bns."+8',}},
neck="Sanctity Necklace",
waist="Eschan Stone",
left_ear="Friomisi Earring",
right_ear="Hecate's Earring",
left_ring="Acumen Ring",
right_ring="Ilabrat Ring",
back="",
}
------------------------------------------------------------------------------------------------
---------------------------------------- Midcast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.midcast.FastRecast = sets.precast.FC
sets.midcast.SpellInterrupt = {}
sets.midcast.Cure = {}
sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
-- Occult Acumen Set
sets.midcast['Dark Magic'] = {}
sets.midcast.CorsairShot = {
ammo=gear.QDbullet,
head=gear.Herc_MAB_head,
body="Lanun Frac +3",
hands="Carmine Fin. Ga. +1",
legs=gear.Herc_MAB_legs,
feet="Lanun Bottes +3",
neck="Baetyl Pendant",
ear1="Novio Earring",
ear2="Friomisi Earring",
ring1="Fenrir Ring +1",
ring2="Dingir Ring",
back="Gunslinger's Cape",
waist="Eschan Stone",
}
sets.midcast.CorsairShot.Resistant = set_combine(sets.midcast.CorsairShot, {
head="Laksa. Tricorne +3",
body="Mummu Jacket +2",
hands="Laksa. Gants +3",
legs="Mummu Kecks +2",
feet="Laksa. Boots +3",
neck="Sanctity Necklace",
ear1="Hermetic Earring",
ear2="Digni. Earring",
ring1="Regal Ring",
ring2="Weather. Ring +1",
back=gear.COR_WS1_Cape,
waist="Kwahu Kachina Belt",
})
sets.midcast.CorsairShot['Light Shot'] = sets.midcast.CorsairShot.Resistant
sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot.Resistant
sets.midcast.CorsairShot.Enhance = {body="Mirke Wardecors", feet="Chass. Bottes +1"}
-- Ranged gear
sets.midcast.RA = {
ammo=gear.RAbullet,
head="Lanun Tricorne +3",
body="Oshosi Vest +1",
hands=gear.Adhemar_C_hands,
legs=gear.Adhemar_C_legs,
feet="Meg. Jam. +2",
neck="Iskur Gorget",
ear1="Enervating Earring",
ear2="Telos Earring",
ring1="Ilabrat Ring",
ring2="Dingir Ring",
back=gear.COR_RA_Cape,
waist="Yemaya Belt",
}
sets.midcast.RA.Acc = set_combine(sets.midcast.RA, {
head="Meghanada Visor +2",
hands="Lanun Gants +3",
ring1="Regal Ring",
})
sets.midcast.RA.HighAcc = set_combine(sets.midcast.RA.Acc, {
body="Laksa. Frac +3",
legs="Laksa. Trews +3",
ring2="Hajduk Ring +1",
waist="Kwahu Kachina Belt",
})
sets.midcast.RA.Critical = set_combine(sets.midcast.RA, {
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Mummu Wrists +2",
legs="Mummu Kecks +2",
feet="Oshosi Leggings",
ring1="Begrudging Ring",
ring2="Mummu Ring",
waist="Kwahu Kachina Belt",
})
sets.TripleShot = {}
sets.TripleShotCritical = {}
------------------------------------------------------------------------------------------------
----------------------------------------- Idle Sets --------------------------------------------
------------------------------------------------------------------------------------------------
sets.idle = {
range="Molybdosis",
ammo=gear.QDbullet,
head={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}},
neck="Loricate Torque +1",
ear1="Loquacious Earring",
rear="Ethereal Earring",
body="Emet Harness +1",
hands={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}},
ring1="Vocane Ring",
ring2="Defending Ring",
back="Moonbeam Cape",
waist="",
legs="Mummu Kecks +1",
feet="Hermes' Sandals"
}
sets.idle.Refresh = set_combine(sets.idle, {})
sets.idle.Town = {
range="Molybdosis",
ammo=gear.QDbullet,
head={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}},
neck="Loricate Torque +1",
ear1="Loquacious Earring",
rear="Ethereal Earring",
body="Emet Harness +1",
hands="Adhemar Wrist. +1"
ring1="Vocane Ring",
ring2="Defending Ring",
back="Moonbeam Cape",
waist="Windbuffet Belt +1",
legs="Mummu Kecks +1",
feet="Hermes' Sandals"
}
------------------------------------------------------------------------------------------------
---------------------------------------- Engaged Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.engaged = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body,
hands=gear.Adhemar_B_hands,
legs="Samnuha Tights",
feet=gear.Herc_TA_feet,
neck="Iskur Gorget",
ear1="Cessance Earring",
ear2="Brutal Earring",
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Windbuffet Belt +1",
}
-- * DNC Subjob DW Trait: +15%
-- * NIN Subjob DW Trait: +25%
-- No Magic Haste (74% DW to cap)
sets.engaged.DW = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands="Floral Gauntlets", --5
legs="Carmine Cuisses +1", --6
feet=gear.Taeon_DW_feet, --9
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Brutal Earring",
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_DW_Cape, --10
waist="Reiki Yotai", --7
} -- 48%
-- 15% Magic Haste (67% DW to cap)
sets.engaged.DW.LowHaste = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands="Floral Gauntlets", --5
legs="Carmine Cuisses +1", --6
feet=gear.Taeon_DW_feet, --9
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Eabani Earring", --4
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Reiki Yotai", --7
} -- 42%
-- 30% Magic Haste (56% DW to cap)
sets.engaged.DW.MidHaste = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands=gear.Adhemar_B_hands,
legs="Samnuha Tights",
feet=gear.Taeon_DW_feet, --9
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Eabani Earring", --4
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Reiki Yotai", --7
} -- 31%
-- 35% Magic Haste (51% DW to cap)
sets.engaged.DW.HighHaste = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands=gear.Adhemar_B_hands,
legs="Samnuha Tights",
feet=gear.Herc_TA_feet,
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Eabani Earring", --4
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Reiki Yotai", --7
} -- 27%
-- 45% Magic Haste (36% DW to cap)
sets.engaged.DW.MaxHaste = {
head=gear.Adhemar_B_head,
body=gear.Adhemar_B_body, --6
hands=gear.Adhemar_B_hands,
legs="Samnuha Tights",
feet=gear.Herc_TA_feet,
neck="Iskur Gorget",
ear1="Suppanomimi", --5
ear2="Telos Earring",
ring1="Petrov Ring",
ring2="Epona's Ring",
back=gear.COR_TP_Cape,
waist="Windbuffet Belt +1",
} -- 11%
-- Define three tiers of Accuracy. These sets are cycled with the F9 Button to increase accuracy in stages as desired.
sets.engaged.Acc1 = {}
sets.engaged.Acc2 = {}
sets.engaged.Acc3 = {}
-- Base Shield
sets.engaged.LowAcc = set_combine(sets.engaged, sets.engaged.Acc1)
sets.engaged.MidAcc = set_combine(sets.engaged, sets.engaged.Acc2)
sets.engaged.HighAcc = set_combine(sets.engaged, sets.engaged.Acc3)
-- Base DW
sets.engaged.DW.LowAcc = set_combine(sets.engaged.DW, sets.engaged.Acc1)
sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW, sets.engaged.Acc2)
sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW, sets.engaged.Acc3)
-- LowHaste DW
sets.engaged.DW.LowAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc1)
sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc2)
sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Acc3)
-- MidHaste DW
sets.engaged.DW.LowAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc1)
sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc2)
sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Acc3)
-- HighHaste DW
sets.engaged.DW.LowAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc1)
sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc2)
sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Acc3)
-- HighHaste DW
sets.engaged.DW.LowAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.LowAcc)
sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.MidAcc)
sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.HighAcc)
-- I don't know what this is
sets.engaged.DW.MaxHastePlus = set_combine(sets.engaged.DW.MaxHaste, {back=gear.COR_DW_Cape})
sets.engaged.DW.LowAcc.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHaste, {back=gear.COR_DW_Cape})
sets.engaged.DW.MidAcc.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHaste, {back=gear.COR_DW_Cape})
sets.engaged.DW.HighAcc.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHaste, {back=gear.COR_DW_Cape})
------------------------------------------------------------------------------------------------
---------------------------------------- Hybrid Sets -------------------------------------------
------------------------------------------------------------------------------------------------
-- Define three tiers of Defense Taken. These sets are cycled with the F10 Button. DT1-16%, DT2-28%, DT3-47%
sets.engaged.DT1 = {neck="Loricate Torque +1",ring1="Defending Ring"}
sets.engaged.DT2 = {neck="Loricate Torque +1",ring1="Defending Ring",ring2="Vocane Ring",back="Moonbeam Cape"}
sets.engaged.DT3 = {head={ name="Herculean Helm", augments={'Accuracy+24 Attack+24','Damage taken-3%',}},neck="Loricate Torque +1",hands={ name="Herculean Gloves", augments={'Attack+15','Damage taken-3%','STR+2','Accuracy+15',}},ring1="Defending Ring",ring2="Vocane Ring",back="Moonbeam Cape",waist="Flume Belt",legs="Mummu Kecks +1",feet={ name="Herculean Boots", augments={'Accuracy+15','Damage taken-3%','Attack+4',}},ammo="Staunch Tathlum",body={ name="Herculean Vest", augments={'Damage taken-3%','AGI+9','Accuracy+13','Attack+9',}}}
-- Shield Base
sets.engaged.LOW = set_combine(sets.engaged, sets.engaged.DT1)
sets.engaged.LowAcc.LOW = set_combine(sets.engaged.LowAcc, sets.engaged.DT1)
sets.engaged.MidAcc.LOW = set_combine(sets.engaged.MidAcc, sets.engaged.DT1)
sets.engaged.HighAcc.LOW = set_combine(sets.engaged.HighAcc, sets.engaged.DT1)
sets.engaged.MID = set_combine(sets.engaged, sets.engaged.DT2)
sets.engaged.LowAcc.MID = set_combine(sets.engaged.LowAcc, sets.engaged.DT2)
sets.engaged.MidAcc.MID = set_combine(sets.engaged.MidAcc, sets.engaged.DT2)
sets.engaged.HighAcc.MID = set_combine(sets.engaged.HighAcc, sets.engaged.DT2)
sets.engaged.HIGH = set_combine(sets.engaged, sets.engaged.DT3)
sets.engaged.LowAcc.HIGH = set_combine(sets.engaged.LowAcc, sets.engaged.DT3)
sets.engaged.MidAcc.HIGH = set_combine(sets.engaged.MidAcc, sets.engaged.DT3)
sets.engaged.HighAcc.HIGH = set_combine(sets.engaged.HighAcc, sets.engaged.DT3)
-- No Haste DW
sets.engaged.DW.LOW = set_combine(sets.engaged.DW, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT1)
sets.engaged.DW.MID = set_combine(sets.engaged.DW, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT2)
sets.engaged.DW.HIGH = set_combine(sets.engaged.DW, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH = set_combine(sets.engaged.DW.LowAcc, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH = set_combine(sets.engaged.DW.MidAcc, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH = set_combine(sets.engaged.DW.HighAcc, sets.engaged.DT3)
-- Low Haste DW
sets.engaged.DW.LOW.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT1)
sets.engaged.DW.MID.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.DT3)
-- Mid Haste
sets.engaged.DW.LOW.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT1)
sets.engaged.DW.MID.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.DT3)
-- High Haste
sets.engaged.DW.LOW.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT1)
sets.engaged.DW.MID.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.DT3)
-- Max Haste
sets.engaged.DW.LOW.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.LowAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.MidAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.HighAcc.LOW.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT1)
sets.engaged.DW.MID.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.LowAcc.MID.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.MidAcc.MID.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.HighAcc.MID.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT2)
sets.engaged.DW.HIGH.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.DT3)
sets.engaged.DW.LowAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.DT3)
sets.engaged.DW.MidAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.DT3)
sets.engaged.DW.HighAcc.HIGH.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.DT3)
-- I don't know what this is
sets.engaged.DW.DT.MaxHastePlus = set_combine(sets.engaged.DW.MaxHastePlus, sets.engaged.Hybrid)
sets.engaged.DW.LowAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHastePlus, sets.engaged.Hybrid)
sets.engaged.DW.MidAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHastePlus, sets.engaged.Hybrid)
sets.engaged.DW.HighAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHastePlus, sets.engaged.Hybrid)
------------------------------------------------------------------------------------------------
---------------------------------------- Special Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.buff.Doom = {
neck="Nicander's Necklace", --20
ring1="Eshmun's Ring", --20
ring2="Eshmun's Ring", --20
waist="Gishdubar Sash", --10
}
sets.Obi = {waist="Hachirin-no-Obi"}
sets.CP = {back="Mecisto. Mantle"}
sets.Warp = {}
-- sets.Reive = {neck="Ygnas's Resolve +1"}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
function job_precast(spell, action, spellMap, eventArgs)
-- Check that proper ammo is available if we're using ranged attacks or similar.
if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
do_bullet_checks(spell, spellMap, eventArgs)
end
-- Gear
if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") then
if player.status ~= 'Engaged' then
equip(sets.precast.CorsairRoll.Gun)
end
if state.LuzafRing.value then
equip(sets.precast.LuzafRing)
end
elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
classes.CustomClass = 'Acc'
end
if spell.english == 'Fold' and buffactive['Bust'] == 2 then
if sets.precast.FoldDoubleBust then
equip(sets.precast.FoldDoubleBust)
eventArgs.handled = true
end
end
if spellMap == 'Utsusemi' then
if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
cancel_spell()
add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
eventArgs.handled = true
return
elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
end
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") then
if player.status ~= 'Engaged' then
equip(sets.precast.CorsairRoll.Gun)
end
elseif spell.action_type == 'Ranged Attack' then
if flurry == 2 then
equip(sets.precast.RA.Flurry2)
elseif flurry == 1 then
equip(sets.precast.RA.Flurry1)
end
-- Equip obi if weather/day matches for WS.
elseif spell.type == 'WeaponSkill' then
if spell.english == 'Leaden Salute' then
if world.weather_element == 'Dark' or world.day_element == 'Dark' then
equip(sets.Obi)
end
if player.tp > 2900 then
equip(sets.precast.WS['Leaden Salute'].FullTP)
end
elseif spell.english == 'Wildfire' and (world.weather_element == 'Fire' or world.day_element == 'Fire') then
equip(sets.Obi)
end
end
end
function job_post_midcast(spell, action, spellMap, eventArgs)
-- Equip obi if weather/day matches for Quick Draw.
if spell.type == 'CorsairShot' then
if (spell.element == world.day_element or spell.element == world.weather_element) and
(spell.english ~= 'Light Shot' and spell.english ~= 'Dark Shot') then
equip(sets.Obi)
end
if state.QDMode.value == 'Magic Enhance' then
equip(sets.midcast.CorsairShot.Enhance)
elseif state.QDMode.value == 'STP' then
equip(sets.midcast.CorsairShot.STP)
end
elseif spell.action_type == 'Ranged Attack' then
if buffactive['Triple Shot'] then
equip(sets.TripleShot)
if buffactive['Aftermath: Lv.3'] and player.equipment.main == "Armageddon" then
equip(sets.TripleShotCritical)
end
elseif buffactive['Aftermath: Lv.3'] and player.equipment.main == "Armageddon" then
equip(sets.midcast.RA.Critical)
end
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 spell.type == 'CorsairRoll' and not spell.interrupted then
display_roll_info(spell)
end
if spell.english == "Light Shot" then
send_command('@timers c "Light Shot ['..spell.target.name..']" 60 down abilities/00195.png')
end
end
function job_buff_change(buff,gain)
-- If we gain or lose any flurry buffs, adjust gear.
if S{'flurry'}:contains(buff:lower()) then
if not gain then
flurry = nil
--add_to_chat(122, "Flurry status cleared.")
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
if buff == "doom" then
if gain then
equip(sets.buff.Doom)
send_command('@input /p Doomed.')
disable('ring1','ring2','waist')
else
enable('ring1','ring2','waist')
handle_equipping_gear(player.status)
end
end
end
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
if state.WeaponLock.value == true then
disable('ranged')
else
enable('ranged')
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- 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_handle_equipping_gear(playerStatus, eventArgs)
update_combat_form()
determine_haste_group()
end
function job_update(cmdParams, eventArgs)
handle_equipping_gear(player.status)
end
function update_combat_form()
if DW == true then
state.CombatForm:set('DW')
elseif DW == false then
state.CombatForm:reset()
end
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if state.Gun.current == 'Death Penalty' then
equip({ranged="Death Penalty"})
elseif state.Gun.current == 'Fomalhaut' then
equip({ranged="Fomalhaut"})
elseif state.Gun.current == 'Ataktos' then
equip({ranged="Ataktos"})
-- elseif state.Gun.current == 'Armageddon' then
-- equip({ranged="Armageddon"})
end
if state.CP.current == 'on' then
equip(sets.CP)
disable('back')
elseif state.Warp.current == 'on' then
disable('ring2')
else
enable('ring2')
enable('back')
end
return idleSet
end
-- Handle auto-targetting based on local setup.
function job_auto_change_target(spell, action, spellMap, eventArgs)
if spell.type == 'CorsairShot' then
if state.IgnoreTargetting.value == true then
state.IgnoreTargetting:reset()
eventArgs.handled = true
end
eventArgs.SelectNPCTargets = state.SelectqdTarget.value
end
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
local msg = ''
msg = msg .. '[ Offense/Ranged: '..state.OffenseMode.current
if state.HybridMode.value ~= 'Normal' then
msg = msg .. '/' .. state.HybridMode.value
end
msg = msg .. '/' ..state.RangedMode.current .. ' ]'
if state.WeaponskillMode.value ~= 'Normal' then
msg = msg .. '[ WS: '..state.WeaponskillMode.current .. ' ]'
end
if state.DefenseMode.value ~= 'None' then
msg = msg .. '[ Defense: ' .. state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ' ]'
end
if state.Kiting.value then
msg = msg .. '[ Kiting Mode: ON ]'
end
msg = msg .. '[ *'..state.Mainqd.current
if state.UseAltqd.value == true then
msg = msg .. '/'..state.Altqd.current
end
msg = msg .. ' ('
if state.QDMode.value then
msg = msg .. state.QDMode.current .. ') '
end
msg = msg .. ']'
add_to_chat(060, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
--Read incoming packet to differentiate between Haste/Flurry I and II
windower.register_event('action',
function(act)
--check if you are a target of spell
local actionTargets = act.targets
playerId = windower.ffxi.get_player().id
isTarget = false
for _, target in ipairs(actionTargets) do
if playerId == target.id then
isTarget = true
end
end
if isTarget == true then
if act.category == 4 then
local param = act.param
if param == 845 and flurry ~= 2 then
--add_to_chat(122, 'Flurry Status: Flurry I')
flurry = 1
elseif param == 846 then
--add_to_chat(122, 'Flurry Status: Flurry II')
flurry = 2
end
end
end
end)
function determine_haste_group()
classes.CustomMeleeGroups:clear()
if DW == true then
if DW_needed <= 11 then
classes.CustomMeleeGroups:append('MaxHaste')
elseif DW_needed > 11 and DW_needed <= 21 then
classes.CustomMeleeGroups:append('MaxHastePlus')
elseif DW_needed > 21 and DW_needed <= 27 then
classes.CustomMeleeGroups:append('HighHaste')
elseif DW_needed > 27 and DW_needed <= 31 then
classes.CustomMeleeGroups:append('MidHaste')
elseif DW_needed > 31 and DW_needed <= 42 then
classes.CustomMeleeGroups:append('LowHaste')
elseif DW_needed > 42 then
classes.CustomMeleeGroups:append('')
end
end
end
function job_self_command(cmdParams, eventArgs)
if cmdParams[1] == 'qd' then
if cmdParams[2] == 't' then
state.IgnoreTargetting:set()
end
local doqd = ''
if state.UseAltqd.value == true then
doqd = state[state.Currentqd.current..'qd'].current
state.Currentqd:cycle()
else
doqd = state.Mainqd.current
end
send_command('@input /ja "'..doqd..'" <t>')
end
gearinfo(cmdParams, eventArgs)
end
function gearinfo(cmdParams, eventArgs)
if cmdParams[1] == 'gearinfo' then
if type(tonumber(cmdParams[2])) == 'number' then
if tonumber(cmdParams[2]) ~= DW_needed then
DW_needed = tonumber(cmdParams[2])
DW = true
end
elseif type(cmdParams[2]) == 'string' then
if cmdParams[2] == 'false' then
DW_needed = 0
DW = false
end
end
if type(tonumber(cmdParams[3])) == 'number' then
if tonumber(cmdParams[3]) ~= Haste then
Haste = tonumber(cmdParams[3])
end
end
if type(cmdParams[4]) == 'string' then
if cmdParams[4] == 'true' then
moving = true
elseif cmdParams[4] == 'false' then
moving = false
end
end
if not midaction() then
job_update()
end
end
end
function define_roll_values()
rolls = {
["Corsair's Roll"] = {lucky=5, unlucky=9, bonus="Experience Points"},
["Ninja Roll"] = {lucky=4, unlucky=8, bonus="Evasion"},
["Hunter's Roll"] = {lucky=4, unlucky=8, bonus="Accuracy"},
["Chaos Roll"] = {lucky=4, unlucky=8, bonus="Attack"},
["Magus's Roll"] = {lucky=2, unlucky=6, bonus="Magic Defense"},
["Healer's Roll"] = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
["Drachen Roll"] = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
["Choral Roll"] = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
["Monk's Roll"] = {lucky=3, unlucky=7, bonus="Subtle Blow"},
["Beast Roll"] = {lucky=4, unlucky=8, bonus="Pet Attack"},
["Samurai Roll"] = {lucky=2, unlucky=6, bonus="Store TP"},
["Evoker's Roll"] = {lucky=5, unlucky=9, bonus="Refresh"},
["Rogue's Roll"] = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
["Warlock's Roll"] = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
["Fighter's Roll"] = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
["Puppet Roll"] = {lucky=3, unlucky=7, bonus="Pet Magic Attack/Accuracy"},
["Gallant's Roll"] = {lucky=3, unlucky=7, bonus="Defense"},
["Wizard's Roll"] = {lucky=5, unlucky=9, bonus="Magic Attack"},
["Dancer's Roll"] = {lucky=3, unlucky=7, bonus="Regen"},
["Scholar's Roll"] = {lucky=2, unlucky=6, bonus="Conserve MP"},
["Naturalist's Roll"] = {lucky=3, unlucky=7, bonus="Enh. Magic Duration"},
["Runeist's Roll"] = {lucky=4, unlucky=8, bonus="Magic Evasion"},
["Bolter's Roll"] = {lucky=3, unlucky=9, bonus="Movement Speed"},
["Caster's Roll"] = {lucky=2, unlucky=7, bonus="Fast Cast"},
["Courser's Roll"] = {lucky=3, unlucky=9, bonus="Snapshot"},
["Blitzer's Roll"] = {lucky=4, unlucky=9, bonus="Attack Delay"},
["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
["Allies' Roll"] = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
["Miser's Roll"] = {lucky=5, unlucky=7, bonus="Save TP"},
["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
["Avenger's Roll"] = {lucky=4, unlucky=8, bonus="Counter Rate"},
}
end
function display_roll_info(spell)
rollinfo = rolls[spell.english]
local rollsize = (state.LuzafRing.value and 'Large') or 'Small'
if rollinfo then
add_to_chat(104, '[ Lucky: '..tostring(rollinfo.lucky)..' / Unlucky: '..tostring(rollinfo.unlucky)..' ] '..spell.english..': '..rollinfo.bonus..' ('..rollsize..') ')
end
end
-- Determine whether we have sufficient ammo for the action being attempted.
function do_bullet_checks(spell, spellMap, eventArgs)
local bullet_name
local bullet_min_count = 1
if spell.type == 'WeaponSkill' then
if spell.skill == "Marksmanship" then
if spell.english == 'Wildfire' or spell.english == 'Leaden Salute' then
-- magical weaponskills
bullet_name = gear.MAbullet
else
-- physical weaponskills
bullet_name = gear.WSbullet
end
else
-- Ignore non-ranged weaponskills
return
end
elseif spell.type == 'CorsairShot' then
bullet_name = gear.QDbullet
elseif spell.action_type == 'Ranged Attack' then
bullet_name = gear.RAbullet
if buffactive['Triple Shot'] then
bullet_min_count = 3
end
end
local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
-- If no ammo is available, give appropriate warning and end.
if not available_bullets then
if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
add_to_chat(104, 'No Quick Draw ammo left. Using what\'s currently equipped ('..player.equipment.ammo..').')
return
elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
add_to_chat(104, 'No weaponskill ammo left. Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
return
else
add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
eventArgs.cancel = true
return
end
end
-- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
add_to_chat(104, 'No ammo will be left for Quick Draw. Cancelling.')
eventArgs.cancel = true
return
end
-- Low ammo warning.
if spell.type ~= 'CorsairShot' and state.warned.value == false
and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
local msg = '***** LOW AMMO WARNING: '..bullet_name..' *****'
--local border = string.repeat("*", #msg)
local border = ""
for i = 1, #msg do
border = border .. "*"
end
add_to_chat(104, border)
add_to_chat(104, msg)
add_to_chat(104, border)
state.warned:set()
elseif available_bullets.count > options.ammo_warning_limit and state.warned then
state.warned:reset()
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
if player.sub_job == 'DNC' then
set_macro_page(10, 4)
elseif player.sub_job == 'WHM' then
set_macro_page(1, 4)
else
set_macro_page(1, 4)
end
end
function set_lockstyle()
send_command('wait 2; input /lockstyleset ' .. lockstyleset)
end
Cambion
I think I see where I *** up...or rather, what I am missing. However, it was not in the original file that I downloaded, so I didn't delete it. But I am missing the argument/logic for when to equip the set and also the list of towns. I'm on a different computer, but I will try to upload the full lua shortly so someone can help me on where to insert the arguments you mentioned.
By Galkapryme 2019-02-24 10:09:34
The Full Lua:
-------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
--[[
gs c toggle LuzafRing -- Toggles use of Luzaf Ring on and off
Offense mode is melee or ranged. Used ranged offense mode if you are engaged
for ranged weaponskills, but not actually meleeing.
Weaponskill mode, if set to 'Normal', is handled separately for melee and ranged weaponskills.
--]]
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
-- Whether to use Luzaf's Ring
state.LuzafRing = M(false, "Luzaf's Ring")
-- Whether a warning has been given for low ammo
state.warned = M(false)
define_roll_values()
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('Ranged', 'Melee', 'Acc')
state.RangedMode:options('Normal', 'Acc')
state.WeaponskillMode:options('Normal', 'Acc', 'Att', 'Mod')
state.CastingMode:options('Normal', 'Resistant')
state.IdleMode:options('Normal', 'PDT', 'Refresh')
gear.RAbullet = "Decimating Bullet"
gear.WSbullet = "Orichalcum Bullet"
gear.MAbullet = "Orichalcum Bullet"
gear.QDbullet = "Animikii Bullet"
options.ammo_warning_limit = 15
-- Additional local binds
send_command('bind ^` input /ja "Double-up" <me>')
send_command('bind !` input /ja "Bolter\'s Roll" <me>')
select_default_macro_book()
end
-- Called when this job file is unloaded (eg: job change)
function user_unload()
send_command('unbind ^`')
send_command('unbind !`')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
-- Precast Sets
-- Precast sets to enhance JAs
sets.precast.JA['Triple Shot'] = {head="Oshosi Mask",body="Chasseur's Frac +1",hands="Oshosi Gloves",legs="Oshosi Trousers",
feet="Oshosi Leggings"}
sets.precast.JA['Snake Eye'] = {legs="Lanun Trews +3"}
sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +3"}
sets.precast.JA['Random Deal'] = {body="Lanun Frac +2"}
sets.precast.CorsairRoll = {head="Lanun Tricorne +3",hands="Chasseur's Gants +1"}
sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Chasseur's Culottes +1"})
sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chasseur's Bottes +1"})
sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chasseur's Tricorne +1"})
sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +1"})
sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants +1"})
sets.precast.LuzafRing = {ring1="Barataria Ring",ring2="Luzaf's Ring"}
sets.precast.FoldDoubleBust = {hands="Lanun Gants +2"}
sets.precast.CorsairShot = {
head={ name="Herculean Helm", augments={'Accuracy+14','"Triple Atk."+4','STR+10','Attack+8',}},
body={ name="Lanun Frac +2", augments={'Enhances "Loaded Deck" effect',}},
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs="Laksa. Trews +2",
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Comm. Charm +2",
waist="Kwahu Kachina Belt",
left_ear="Friomisi Earring",
right_ear="Hecate's Earring",
left_ring="Fenrir Ring +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
-- Waltz set (chr and vit)
sets.precast.Waltz = {
head="Mummu Bonnet +2",
body="Laksamana's Frac +3",
hands={ name="Buremte Gloves", augments={'Phys. dmg. taken -2%','Magic dmg. taken -2%','Rng.Atk.+10',}},
legs="Dashing Subligar",
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Sanctity Necklace",
waist="Chuq'aba Belt",
left_ear="Oneiros Earring",
right_ear="Enchntr. Earring +1",
left_ring="Kunaji Ring",
right_ring="Titan Ring +1",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+4','Weapon skill damage +10%',}}}
-- 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"}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
sets.precast.RA = {ammo=gear.RAbullet,
main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
head="Chass. Tricorne +1",
body="Laksamana's Frac +3",
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs={ name="Lanun Trews +3", augments={'Enhances "Snake Eye" effect',}},
feet="Meg. Jam. +2",
neck="Comm. Charm +2",
waist="Kwahu Kachina Belt",
left_ear="Clearview Earring",
right_ear="Volley Earring",
left_ring="Hajduk Ring +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {
main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Orichalc. Bullet",
head="Pixie Hairpin +1",
body="Laksamana's Frac +3",
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs="Laksa. Trews +2",
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Comm. Charm +2",
waist="Fotia Belt",
left_ear="Hecate's Earring",
right_ear="Friomisi Earring",
left_ring="Fenrir Ring +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+4','Weapon skill damage +10%',}}}
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Leaden Salute'] = sets.precast.WS
sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {legs="Nahtirah Trousers"})
sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {legs="Nahtirah Trousers"})
sets.precast.WS['Last Stand'] = {ammo=gear.RAbullet,
head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
body="Laksa. Frac +3",
hands="Meg. Gloves +2",
legs={ name="Lanun Trews +3", augments={'Enhances "Snake Eye" effect',}},
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Ishvara Earring",
right_ear="Clearview Earring",
left_ring="Hajduk Ring +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Store TP"+10','Evasion+9',}}}
sets.precast.WS['Savage Blade'] = {
main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Decimating Bullet",
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Ishvara Earring",
right_ear="Bladeborn Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+4','Weapon skill damage +10%',}}}
sets.precast.WS['Shining Blade'] = sets.precast.WS['Savage Blade']
sets.precast.WS['Wildfire'] = sets.precast.WS
sets.precast.WS['Leaden Salute'] = sets.precast.WS['Wildfire']
-- Midcast Sets
sets.midcast.FastRecast = {
head="Whirlpool Mask",
body="Iuitl Vest",hands="Iuitl Wristbands",
legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
-- Specific spells
sets.midcast.Utsusemi = sets.midcast.FastRecast
sets.midcast.CorsairShot = {ammo=gear.QDbullet,
head={ name="Herculean Helm", augments={'Accuracy+14','"Triple Atk."+4','STR+10','Attack+8',}},
body={ name="Lanun Frac +2", augments={'Enhances "Loaded Deck" effect',}},
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs="Laksa. Trews +2",
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Comm. Charm +2",
waist="Kwahu Kachina Belt",
left_ear="Friomisi Earring",
right_ear="Hecate's Earring",
left_ring="Fenrir Ring +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
sets.midcast.CorsairShot.Acc = {ammo=gear.QDbullet,
head="Laksa. Tricorne +2",
body="Mummu Jacket +2",
hands="Mummu Wrists +2",
legs={ name="Lanun Trews +3", augments={'Enhances "Snake Eye" effect',}},
feet="Chass. Bottes +1",
neck="Comm. Charm +2",
waist="Kwahu Kachina Belt",
left_ear="Hecate's Earring",
right_ear="Enchntr. Earring +1",
left_ring="Stikini Ring +1",
right_ring="Stikini Ring +1",
back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Store TP"+10','Evasion+9',}}}
sets.midcast.CorsairShot['Light Shot'] = sets.midcast.CorsairShot.Acc
sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
-- Ranged gear
sets.midcast.RA = {ammo=gear.RAbullet,
head="Meghanada Visor +2",
body="Laksa. Frac +3",
hands="Meg. Gloves +2",
legs={ name="Lanun Trews +3", augments={'Enhances "Snake Eye" effect',}},
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Kwahu Kachina Belt",
left_ear="Clearview Earring",
right_ear="Volley Earring",
left_ring="Hajduk Ring +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Store TP"+10','Evasion+9',}}}
sets.midcast.RA.Acc = {ammo=gear.RAbullet,
head="Meghanada Visor +2",
body="Laksa. Frac +3",
hands="Meg. Gloves +2",
legs={ name="Lanun Trews +3", augments={'Enhances "Snake Eye" effect',}},
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Kwahu Kachina Belt",
left_ear="Clearview Earring",
right_ear="Volley Earring",
left_ring="Hajduk Ring +1",
right_ring="Dingir Ring",
back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Store TP"+10','Evasion+9',}}}
-- Sets to return to when not performing an action.
-- Resting sets
sets.resting = {neck="Wiglen Gorget",ring1="Sheltered Ring",ring2="Paguroidea Ring"}
-- Idle sets
sets.idle = {main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Orichalc. Bullet",
head="Oshosi Mask",
body="Oshosi Vest",
hands="Oshosi Gloves",
legs="Carmine Cuisses",
feet="Oshosi Leggings",
neck="Sanctity Necklace",
waist="Flax Sash",
left_ear="Enchntr. Earring +1",
right_ear="Impreg. Earring",
left_ring="Sheltered Ring",
right_ring="Paguroidea Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
sets.idle.Town = {main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Orichalc. Bullet",
head="Oshosi Mask",
body="Councilor's Garb",
hands="Oshosi Gloves",
legs="Carmine Cuisses",
feet="Oshosi Leggings",
neck="Wiglen Gorget",
waist="Flax Sash",
left_ear="Enchntr. Earring +1",
right_ear="Impreg. Earring",
left_ring="Sheltered Ring",
right_ring="Paguroidea Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
-- Defense sets
sets.defense.PDT = {
head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
body={ name="Lanun Frac +2", augments={'Enhances "Loaded Deck" effect',}},
hands={ name="Lanun Gants +2", augments={'Enhances "Fold" effect',}},
legs={ name="Lanun Trews +3", augments={'Enhances "Snake Eye" effect',}},
feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
neck="Sanctity Necklace",
waist="Flume Belt +1",
left_ear="Thureous Earring",
right_ear="Impreg. Earring",
left_ring="Paguroidea Ring",
right_ring="Defending Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
sets.defense.MDT = {
head="Oshosi Mask",
body="Oshosi Vest",
hands="Oshosi Gloves",
legs="Oshosi Trousers",
feet="Oshosi Leggings",
neck="Sanctity Necklace",
waist="Flax Sash",
left_ear="Enchntr. Earring +1",
right_ear="Impreg. Earring",
left_ring="Paguroidea Ring",
right_ring="Defending Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
sets.Kiting = {feet="Skadi's Jambeaux +1"}
-- Engaged sets
-- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
-- sets if more refined versions aren't defined.
-- If you create a set with both offense and defense modes, the offense mode should be first.
-- EG: sets.engaged.Dagger.Accuracy.Evasion
-- Normal melee group
sets.engaged.Melee = {ammo=gear.RAbullet,
main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Decimating Bullet",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Herculean Vest", augments={'Accuracy+23 Attack+23','"Triple Atk."+2','AGI+1','Accuracy+5','Attack+10',}},
hands={ name="Herculean Gloves", augments={'Accuracy+25','"Triple Atk."+4','DEX+2','Attack+9',}},
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Sanctity Necklace",
waist="Chiner's Belt +1",
left_ear="Dudgeon Earring",
right_ear="Heartseeker Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Store TP"+10','Evasion+9',}}}
sets.engaged.Acc = {ammo=gear.RAbullet,
main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Decimating Bullet",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Herculean Vest", augments={'Accuracy+23 Attack+23','"Triple Atk."+2','AGI+1','Accuracy+5','Attack+10',}},
hands={ name="Herculean Gloves", augments={'Accuracy+25','"Triple Atk."+4','DEX+2','Attack+9',}},
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Sanctity Necklace",
waist="Chiner's Belt +1",
left_ear="Dudgeon Earring",
right_ear="Heartseeker Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Store TP"+10','Evasion+9',}}}
sets.engaged.Melee.DW = {ammo=gear.RAbullet,
main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Decimating Bullet",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Herculean Vest", augments={'Accuracy+23 Attack+23','"Triple Atk."+2','AGI+1','Accuracy+5','Attack+10',}},
hands={ name="Herculean Gloves", augments={'Accuracy+25','"Triple Atk."+4','DEX+2','Attack+9',}},
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Sanctity Necklace",
waist="Chiner's Belt +1",
left_ear="Dudgeon Earring",
right_ear="Heartseeker Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Store TP"+10','Evasion+9',}}}
sets.engaged.Acc.DW = {ammo=gear.RAbullet,
main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Decimating Bullet",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Herculean Vest", augments={'Accuracy+23 Attack+23','"Triple Atk."+2','AGI+1','Accuracy+5','Attack+10',}},
hands={ name="Herculean Gloves", augments={'Accuracy+25','"Triple Atk."+4','DEX+2','Attack+9',}},
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Sanctity Necklace",
waist="Chiner's Belt +1",
left_ear="Dudgeon Earring",
right_ear="Heartseeker Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Store TP"+10','Evasion+9',}}}
sets.engaged.Ranged = {
main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Decimating Bullet",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Herculean Vest", augments={'Accuracy+23 Attack+23','"Triple Atk."+2','AGI+1','Accuracy+5','Attack+10',}},
hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Sanctity Necklace",
waist="Chiner's Belt +1",
left_ear="Dudgeon Earring",
right_ear="Heartseeker Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Store TP"+10',}}}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
function job_precast(spell, action, spellMap, eventArgs)
-- Check that proper ammo is available if we're using ranged attacks or similar.
if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
do_bullet_checks(spell, spellMap, eventArgs)
end
-- gear sets
if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing.value then
equip(sets.precast.LuzafRing)
elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
classes.CustomClass = 'Acc'
elseif spell.english == 'Fold' and buffactive['Bust'] == 2 then
if sets.precast.FoldDoubleBust then
equip(sets.precast.FoldDoubleBust)
eventArgs.handled = true
end
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 spell.type == 'CorsairRoll' and not spell.interrupted then
display_roll_info(spell)
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Return a customized weaponskill mode to use for weaponskill sets.
-- Don't return anything if you're not overriding the default value.
function get_custom_wsmode(spell, spellMap, default_wsmode)
if buffactive['Transcendancy'] then
return 'Brew'
end
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)
if newStatus == 'Engaged' and player.equipment.main == 'Chatoyant Staff' then
state.OffenseMode:set('Ranged')
end
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
local msg = ''
msg = msg .. 'Off.: '..state.OffenseMode.current
msg = msg .. ', Rng.: '..state.RangedMode.current
msg = msg .. ', WS.: '..state.WeaponskillMode.current
msg = msg .. ', QD.: '..state.CastingMode.current
if state.DefenseMode.value ~= 'None' then
local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
end
if state.Kiting.value then
msg = msg .. ', Kiting'
end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value then
msg = msg .. ', Target NPCs'
end
msg = msg .. ', Roll Size: ' .. ((state.LuzafRing.value and 'Large') or 'Small')
add_to_chat(122, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function define_roll_values()
rolls = {
["Corsair's Roll"] = {lucky=5, unlucky=9, bonus="Experience Points"},
["Ninja Roll"] = {lucky=4, unlucky=8, bonus="Evasion"},
["Hunter's Roll"] = {lucky=4, unlucky=8, bonus="Accuracy"},
["Chaos Roll"] = {lucky=4, unlucky=8, bonus="Attack"},
["Magus's Roll"] = {lucky=2, unlucky=6, bonus="Magic Defense"},
["Healer's Roll"] = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
["Puppet Roll"] = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
["Choral Roll"] = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
["Monk's Roll"] = {lucky=3, unlucky=7, bonus="Subtle Blow"},
["Beast Roll"] = {lucky=4, unlucky=8, bonus="Pet Attack"},
["Samurai Roll"] = {lucky=2, unlucky=6, bonus="Store TP"},
["Evoker's Roll"] = {lucky=5, unlucky=9, bonus="Refresh"},
["Rogue's Roll"] = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
["Warlock's Roll"] = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
["Fighter's Roll"] = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
["Drachen Roll"] = {lucky=3, unlucky=7, bonus="Pet Accuracy"},
["Gallant's Roll"] = {lucky=3, unlucky=7, bonus="Defense"},
["Wizard's Roll"] = {lucky=5, unlucky=9, bonus="Magic Attack"},
["Dancer's Roll"] = {lucky=3, unlucky=7, bonus="Regen"},
["Scholar's Roll"] = {lucky=2, unlucky=6, bonus="Conserve MP"},
["Bolter's Roll"] = {lucky=3, unlucky=9, bonus="Movement Speed"},
["Caster's Roll"] = {lucky=2, unlucky=7, bonus="Fast Cast"},
["Courser's Roll"] = {lucky=3, unlucky=9, bonus="Snapshot"},
["Blitzer's Roll"] = {lucky=4, unlucky=9, bonus="Attack Delay"},
["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
["Allies's Roll"] = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
["Miser's Roll"] = {lucky=5, unlucky=7, bonus="Save TP"},
["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
["Avenger's Roll"] = {lucky=4, unlucky=8, bonus="Counter Rate"},
}
end
function display_roll_info(spell)
rollinfo = rolls[spell.english]
local rollsize = (state.LuzafRing.value and 'Large') or 'Small'
if rollinfo then
add_to_chat(104, spell.english..' provides a bonus to '..rollinfo.bonus..'. Roll size: '..rollsize)
add_to_chat(104, 'Lucky roll is '..tostring(rollinfo.lucky)..', Unlucky roll is '..tostring(rollinfo.unlucky)..'.')
end
end
-- Determine whether we have sufficient ammo for the action being attempted.
function do_bullet_checks(spell, spellMap, eventArgs)
local bullet_name
local bullet_min_count = 1
if spell.type == 'WeaponSkill' then
if spell.skill == "Marksmanship" then
if spell.element == 'None' then
-- physical weaponskills
bullet_name = gear.WSbullet
else
-- magical weaponskills
bullet_name = gear.MAbullet
end
else
-- Ignore non-ranged weaponskills
return
end
elseif spell.type == 'CorsairShot' then
bullet_name = gear.QDbullet
elseif spell.action_type == 'Ranged Attack' then
bullet_name = gear.RAbullet
if buffactive['Triple Shot'] then
bullet_min_count = 3
end
end
if spell.action_type == 'Ranged Attack' and buffactive['Triple Shot']
then sets.precast.JA['Triple Shot'] = sets.midcast.RA
end
local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
-- If no ammo is available, give appropriate warning and end.
if not available_bullets then
if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
add_to_chat(104, 'No Quick Draw ammo left. Using what\'s currently equipped ('..player.equipment.ammo..').')
return
elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
add_to_chat(104, 'No weaponskill ammo left. Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
return
else
add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
eventArgs.cancel = true
return
end
end
-- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
add_to_chat(104, 'No ammo will be left for Quick Draw. Cancelling.')
eventArgs.cancel = true
return
end
-- Low ammo warning.
if spell.type ~= 'CorsairShot' and state.warned.value == false
and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
local msg = '***** LOW AMMO WARNING: '..bullet_name..' *****'
--local border = string.repeat("*", #msg)
local border = ""
for i = 1, #msg do
border = border .. "*"
end
add_to_chat(104, border)
add_to_chat(104, msg)
add_to_chat(104, border)
state.warned:set()
elseif available_bullets.count > options.ammo_warning_limit and state.warned then
state.warned:reset()
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
set_macro_page(1, 19)
end
By Galkapryme 2019-02-24 10:10:35
Obviously I'm missing some staple Corsair gear...I'm working on it. Don't judge me too harshly.
By Galkapryme 2019-03-01 17:50:11
No Help? Nobody? Cambion, can you help me place those codes you showed me?
Serveur: Asura
Game: FFXI
Posts: 3
By Asura.Unholylilith 2019-03-03 13:22:34
Gearswap only triggers on ws, ja, ma. It does not trigger on zone change event which would be handled by windower event function.
TIL, perform a ja, ma, or ws in town. Your aftercast should move you into your town idle. Town in idle is a defined word in motes and you need it installed else you have to define it yourself.
Carbuncle.Hopefulki
Serveur: Carbuncle
Game: FFXI
Posts: 7
By Carbuncle.Hopefulki 2019-03-07 12:37:22
Adding onto this, even though it's not truly related, but this GS issue maybe comes from a similar place. Anytime i equip Kaja Knife, I get immediate GS errors and all swaps stop.
Specifically, If i equip it while GS is on, I get an error in equip_processing.lua, line 246:
name = res.items[items[to_bag_api(res.bags[cur_item.bag_id].english)][cur_item.slot].id][language]
I can't replicate it except with Kaja weapons. In fact, if i try to export w/ it equipped, it does not show up.
Is this an issue with GS updating?
By Galkapryme 2019-03-09 01:15:08
NOT SURE. I DON'T HAVE THAT ISSUE.
By Galkapryme 2019-03-09 01:15:59
All,
I figured out the town thing. As mentioned above, I DO have to activate a JA in order to change, but I at least figured out the GS .lua.
By kishr 2019-03-09 01:48:52
Learn to code
All,
I used and modified an existing gear swap .lua for COR, and everything seems to work great except for the in-town idle set. The in-town idle set should include movement speed items but actually shows as the regular idle set. This has been confirmed when loading, changing zones, etc. I have included both components of the .lua file below for review. Someone please advise where I am messing up.
-- Idle sets
sets.idle = {main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Orichalc. Bullet",
head="Oshosi Mask",
body="Oshosi Vest",
hands="Oshosi Gloves",
legs="Oshosi Trousers",
feet="Oshosi Leggings",
neck="Sanctity Necklace",
waist="Flax Sash",
left_ear="Enchntr. Earring +1",
right_ear="Impreg. Earring",
left_ring="Sheltered Ring",
right_ring="Paguroidea Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
sets.idle.Town = {main="Fettering Blade",
sub="Kaja Knife",
range={ name="Deathlocke", augments={'Magic damage+30','"Mag.Atk.Bns."+10','AGI+10',}},
ammo="Orichalc. Bullet",
head="Oshosi Mask",
body="Councilor's Garb",
hands="Oshosi Gloves",
legs="Carmine Cuisses",
feet="Oshosi Leggings",
neck="Wiglen Gorget",
waist="Flax Sash",
left_ear="Enchntr. Earring +1",
right_ear="Impreg. Earring",
left_ring="Sheltered Ring",
right_ring="Paguroidea Ring",
back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Rng.Acc.+10','"Mag.Atk.Bns."+10','Evasion+15',}}}
|
|