|
Situational Quad Attack Lua
By Galkapryme 2019-08-11 07:35:05
I'm looking to add something to the below code that switches my THF to Quad attack gear when in Abyssea. Something similar to when you create in-town gear. I want it to recognize that I'm in an Abyssea zone, and swap in Quad attack gear (Thaumus Coat, Twilight Knife, Windbuffet Belt +1). Please assist.
Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
--[[
Custom commands:
gs c cycle treasuremode (set on ctrl-= by default): Cycles through the available treasure hunter modes.
Treasure hunter modes:
None - Will never equip TH gear
Tag - Will equip TH gear sufficient for initial contact with a mob (either melee, ranged hit, or Aeolian Edge AOE)
SATA - Will equip TH gear sufficient for initial contact with a mob, and when using SATA
Fulltime - Will keep TH gear equipped fulltime
--]]
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
state.Buff['Trick Attack'] = buffactive['trick attack'] or false
state.Buff['Feint'] = buffactive['feint'] or false
include('Mote-TreasureHunter')
-- For th_action_check():
-- JA IDs for actions that always have TH: Provoke, Animated Flourish
info.default_ja_ids = S{35, 204}
-- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
info.default_u_ja_ids = S{201, 202, 203, 205, 207}
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.OffenseMode:options('Normal', 'Acc', 'RA', 'Mod')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.RangedMode:options('Normal', 'Acc')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
state.PhysicalDefenseMode:options('Evasion', 'PDT')
gear.default.weaponskill_neck = "Fotia Gorget"
gear.default.weaponskill_waist = "Fotia Belt"
gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
-- Additional local binds
send_command('bind f10 input /ja "Flee" <me>')
send_command('bind f1 gs c cycle OffenseMode')
send_command('bind f2 gs c cycle RangedMode')
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
--------------------------------------
TaeonHands = {}
TaeonHands.TA = {name="Taeon Gloves", augments={'DEX+6','Accuracy+17 Attack+17','"Triple Atk."+2'}}
TaeonHands.Snap = {name="Taeon Gloves", augments={'Attack+22','"Snapshot"+8'}}
TaeonHead = {}
TaeonHead.Snap = { name="Taeon Chapeau", augments={'Accuracy+20 Attack+20','"Snapshot"+5','"Snapshot"+4',}}
HercFeet = {}
HercHead = {}
HercLegs = {}
HercVest = {}
HercFeet.MAB={ name="Herculean Boots", augments={'Mag. Acc.+14 "Mag.Atk.Bns."+14','Weapon skill damage +4%','Mag. Acc.+6','"Mag.Atk.Bns."+6',}}
HercFeet.TP = { name="Herculean Boots", augments={'Accuracy+22 Attack+22','"Triple Atk."+3','STR+5','Attack+11',}}
--HercFeet.TH = { name="Herculean Boots", augments={'AGI+1','Weapon Skill Acc.+3','"Treasure Hunter"+1','Accuracy+19 Attack+19','Mag. Acc.+7 "Mag.Atk.Bns."+7',}}
HercHead.MAB = {name="Herculean Helm", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Weapon skill damage +3%','INT+1','Mag. Acc.+3','"Mag.Atk.Bns."+8',}}
HercHead.TP = { name="Herculean Helm", augments={'Accuracy+25','"Triple Atk."+4','AGI+6','Attack+14',}}
HercLegs.TH = { name="Herculean Trousers", augments={'INT+8','Attack+3','"Treasure Hunter"+1','Accuracy+6 Attack+6','Mag. Acc.+13 "Mag.Atk.Bns."+13',}}
HercLegs.MAB = { name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Weapon skill damage +2%','STR+8','Mag. Acc.+5','"Mag.Atk.Bns."+6',}}
HercVest.TH = { name="Herculean Vest", augments={'Magic dmg. taken -2%','Accuracy+5','"Treasure Hunter"+1','Mag. Acc.+9 "Mag.Atk.Bns."+9',}}
Toutatis = {}
Toutatis.STP = { name="Toutatis's Cape", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10','Phys. dmg. taken-10%',}}
Toutatis.WSD = { name="Toutatis's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%',}}
Toutatis.DEX = { name="Toutatis's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Evasion+5','"Dual Wield"+10','Evasion+15',}}
Toutatis.AGI = { name="Toutatis's Cape", augments={'AGI+15','Accuracy+20 Attack+20','Enmity +8',}}
Toutatis.RA = { name="Toutatis's Cape", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Atk.+10','Weapon skill damage +10%',}}
Toutatis.WSD = { name="Toutatis's Cape", augments={'DEX+20','Accuracy+15 Attack+15','Weapon skill damage +10%',}}
sets.TreasureHunter = {
head="Meghanada Visor +2",
body=HercVest.TH,
hands={ name="Plun. Armlets +1", augments={'Enhances "Perfect Dodge" effect',}},
legs=HercLegs.TH,
feet="Skulk. Poulaines +1",
neck="Asn. Gorget +2",
waist="Chaac Belt",
left_ear="Heartseeker Earring",
right_ear="Dudgeon Earring",
left_ring="Epona's Ring",
right_ring="Demonry Ring",
back=Toutatis.DEX,
}
sets.TreasureHunterRA = set_combine(sets.TreasureHunter, {neck="Sanctity Necklace",left_ring="Hajduk Ring +1",
right_ring="Hajduk Ring +1"})
sets.ExtraRegen = {neck="Wiglen Gorget",left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1"}
sets.Kiting = {feet="Pillager's Poulaines +1"}
sets.CapacityMantle = {back="Mecistopins Mantle"}
sets.Organizer = {
main="Odium",
sub="Jugo Kukri",
ammo="Izhiikoh",
range="Raider's Boomerang"
}
sets.buff['Sneak Attack'] = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Mummu Bonnet +2",
body="Mummu Jacket +2",
hands="Skulker's Armlets +1",
legs="Mummu Kecks +2",
feet="Mummu Gamash. +2",
neck="Asn. Gorget +2",
waist="Chiner's Belt +1",
left_ear="Sherida Earring",
right_ear="Heartseeker Earring",
left_ring="Ramuh Ring +1",
right_ring="Ramuh Ring +1",
back=Toutatis.DEX
}
sets.buff['Trick Attack'] = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Mummu Bonnet +2",
body="Mummu Jacket +2",
hands="Pillager's Armlets +1",
legs="Mummu Kecks +2",
feet="Mummu Gamash. +2",
neck="Asn. Gorget +2",
waist="Chaac Belt",
left_ear="Dudgeon Earring",
right_ear="Heartseeker Earring",
left_ring="Garuda Ring +1",
right_ring="Garuda Ring +1",
back=Toutatis.AGI
}
-- Actions we want to use to tag TH.
sets.precast.Step = sets.TreasureHunter
sets.precast.Flourish1 = sets.TreasureHunter
sets.precast.JA.Provoke = sets.TreasureHunter
--------------------------------------
-- Precast sets
--------------------------------------
-- Precast sets to enhance JAs
sets.precast.JA['Collaborator'] = {head="Skulker's's Bonnet +1"}
sets.precast.JA['Accomplice'] = {head="Skulker's's Bonnet +1"}
sets.precast.JA['Flee'] = {feet="Pillager's Poulaines +1"}
sets.precast.JA['Hide'] = {body="Pillager's Vest"}
sets.precast.JA['Conspirator'] = {"Skulker's Vest +1"} -- {body="Raider's Vest +2"}
sets.precast.JA['Steal'] = {neck="Pentalagus Charm",hands="Thief's Kote",legs="Pillager's Culottes +1",feet="Pillager's Poulaines +1"}
sets.precast.JA['Despoil'] = {legs="Skulker's Culottes +1",feet="Skulker's Poulaines +1"}
sets.precast.JA['Perfect Dodge'] = {hands="Plunderer's Armlets +1"}
sets.precast.JA['Feint'] = {"Plunderer's Culottes +3"} -- {legs="Assassin's Culottes +2"}
sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
-- Waltz set (chr and vit)
sets.precast.Waltz = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Mummu Bonnet +2",
body="Meg. Cuirie +2",
hands={ name="Buremte Gloves", augments={'Phys. dmg. taken -2%','Magic dmg. taken -2%','Rng.Atk.+10',}},
legs="Dashing Subligar",
feet={ name="Rawhide Boots", augments={'HP+50','Accuracy+15','Evasion+20',}},
neck="Wiglen Gorget",
waist="Chuq'aba Belt",
left_ear="Impreg. Earring",
right_ear="Oneiros Earring",
left_ring="Epona's Ring",
right_ring="Kunaji Ring",
back="Solemnity Cape",
}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
-- Fast cast sets for spells
sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring",legs="Enif Cosciales"}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
-- Ranged snapshot gear
sets.precast.RA = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
range="Exalted C.bow +1",
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Flax Sash",
left_ear="Clearview Earring",
right_ear="Volley Earring",
left_ring="Hajduk Ring +1",
right_ring="Hajduk Ring +1",
back="Moondoe Mantle +1",
}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Plunderer's Culottes +3",
feet="Meg. Jam. +2",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Sherida Earring",
right_ear="Ishvara Earring",
left_ring="Ramuh Ring +1",
right_ring="Ramuh Ring +1",
back={ name="Toutatis's Cape", augments={'DEX+20','Accuracy+15 Attack+15','Weapon skill damage +10%',}},
}
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
--------------------------------------
-- Midcast sets
--------------------------------------
sets.midcast.FastRecast = {
head="Whirlpool Mask",ear2="Loquacious Earring",
body="Pillager's Vest",hands="Pillager's Armlets +1",
back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
-- Specific spells
sets.midcast.Utsusemi = {
head="Whirlpool Mask",neck="Magoraga Beads",ear2="Loquacious Earring",
body="Pillager's Vest",hands="Pillager's Armlets +1",ring1="Beeline Ring",
back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
-- Ranged gear
sets.midcast.RA = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
range="Exalted C.bow +1",
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Flax Sash",
left_ear="Clearview Earring",
right_ear="Volley Earring",
left_ring="Hajduk Ring +1",
right_ring="Hajduk Ring +1",
back="Moondoe Mantle +1",}
sets.midcast.RA.Acc = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
range="Exalted C.bow +1",
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Flax Sash",
left_ear="Clearview Earring",
right_ear="Volley Earring",
left_ring="Hajduk Ring +1",
right_ring="Hajduk Ring +1",
back="Moondoe Mantle +1",}
--------------------------------------
-- Idle/resting/defense sets
--------------------------------------
-- Resting sets
sets.resting = {head="Ocelomeh Headpiece +1",neck="Wiglen Gorget",
ring1="Sheltered Ring",ring2="Paguroidea Ring"}
-- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
sets.idle = {ammo="Thew Bomblet",
head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
sets.idle.Town = {main="Izhiikoh", sub="Sabebus",ammo="Thew Bomblet",
head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest",hands="Pill. Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Shadow Mantle",waist="Patentia Sash",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
sets.idle.Weak = {ammo="Thew Bomblet",
head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
-- Defense sets
sets.defense.Evasion = {
head="Pillager's Bonnet +1",neck="Ej Necklace",
body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Beeline Ring",
back="Canny Cape",waist="Flume Belt",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
sets.defense.PDT = {ammo="Iron Gobbet",
head="Pillager's Bonnet +1",neck="Twilight Torque",
body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2=gear.DarkRing.physical,
back="Iximulew Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Iuitl Gaiters +1"}
sets.defense.MDT = {ammo="Demonry Stone",
head="Pillager's Bonnet +1",neck="Twilight Torque",
body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Shadow Ring",
back="Engulfer Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Iuitl Gaiters +1"}
--------------------------------------
-- Melee sets
--------------------------------------
-- Normal melee group
-- Triple Attack 35%, Triple Attack Damage 42%, ACC 1173, Attack 1129
sets.engaged = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}}, -- Trip.Attk. 3%
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}}, -- Trip.Attk. 3%
ammo="Yamarang",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}}, -- Trip.Attk. 4%
body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}}, -- Trip.Attk. 4%
hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}}, -- Trip.Attk. 4%
legs="Meg. Chausses +2", -- Trip.Attk. 5%
feet="Plun. Poulaines +1", -- Trip.Attk. 3%
neck="Asn. Gorget +2", -- Trip.Attk. 4%
waist="Chiner's Belt +1", -- Trip.Attk. 2%
left_ear="Sherida Earring",
right_ear="Cessance Earring",
left_ring="Demonry Ring",
right_ring="Epona's Ring", -- Trip.Attk. 3%
back=Toutatis.DEX,
}
sets.engaged.Acc = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Meghanada Visor +2",
body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Asn. Gorget +2",
waist="Kentarch Belt +1",
left_ear="Steelflash Earring",
right_ear="Heartseeker Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Toutatis.DEX,
}
sets.engaged.RA = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
range="Exalted C.bow +1",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}}, -- Trip.Attk. 4%
body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}}, -- Trip.Attk. 4%
hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}}, -- Trip.Attk. 4%
legs="Meg. Chausses +2", -- Trip.Attk. 5%
feet="Plun. Poulaines +1", -- Trip.Attk. 3%
neck="Asn. Gorget +2", -- Trip.Attk. 4%
waist="Chiner's Belt +1", -- Trip.Attk. 2%
left_ear="Sherida Earring",
right_ear="Cessance Earring",
left_ring="Demonry Ring",
right_ring="Epona's Ring", -- Trip.Attk. 3%
back=Toutatis.DEX,
}
sets.engaged.Evasion = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Mummu Bonnet +2",
body="Mummu Jacket +2",
hands="Mummu Wrists +2",
legs="Mummu Kecks +2",
feet="Mummu Gamash. +2",
neck="Asn. Gorget +2",
waist="Kentarch Belt +1",
left_ear="Steelflash Earring",
right_ear="Heartseeker Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Toutatis.DEX,
}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Run after the general precast() is done.
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.english == 'Aeolian Edge' and state.TreasureMode.value ~= 'None' then
equip(sets.TreasureHunter)
elseif spell.english=='Sneak Attack' or spell.english=='Trick Attack' or spell.type == 'WeaponSkill' then
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
end
end
-- Run after the general midcast() set is constructed.
function job_post_midcast(spell, action, spellMap, eventArgs)
if state.TreasureMode.value ~= 'None' and spell.action_type == 'Ranged Attack' then
equip(sets.TreasureHunter)
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
-- Weaponskills wipe SATA/Feint. Turn those state vars off before default gearing is attempted.
if spell.type == 'WeaponSkill' and not spell.interrupted then
state.Buff['Sneak Attack'] = false
state.Buff['Trick Attack'] = false
state.Buff['Feint'] = false
end
end
-- Called after the default aftercast handling is complete.
function job_post_aftercast(spell, action, spellMap, eventArgs)
-- If Feint is active, put that gear set on on top of regular gear.
-- This includes overlaying SATA gear.
check_buff('Feint', eventArgs)
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
function get_custom_wsmode(spell, spellMap, defaut_wsmode)
local wsmode
if state.Buff['Sneak Attack'] then
wsmode = 'SA'
end
if state.Buff['Trick Attack'] then
wsmode = (wsmode or '') .. 'TA'
end
return wsmode
end
-- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
function job_handle_equipping_gear(playerStatus, eventArgs)
-- Check that ranged slot is locked, if necessary
check_range_lock()
-- Check for SATA when equipping gear. If either is active, equip
-- that gear specifically, and block equipping default gear.
check_buff('Sneak Attack', eventArgs)
check_buff('Trick Attack', eventArgs)
end
function customize_idle_set(idleSet)
if player.hpp < 80 then
idleSet = set_combine(idleSet, sets.ExtraRegen)
end
return idleSet
end
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
return meleeSet
end
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
th_update(cmdParams, eventArgs)
end
-- Function to display the current relevant user state when doing an update.
-- Return true if display was handled, and you don't want the default info shown.
function display_current_job_state(eventArgs)
local msg = 'Melee'
if state.CombatForm.has_value then
msg = msg .. ' (' .. state.CombatForm.value .. ')'
end
msg = msg .. ': '
msg = msg .. state.OffenseMode.value
if state.HybridMode.value ~= 'Normal' then
msg = msg .. '/' .. state.HybridMode.value
end
msg = msg .. ', WS: ' .. state.WeaponskillMode.value
if state.DefenseMode.value ~= 'None' then
msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
end
if state.Kiting.value == true then
msg = msg .. ', Kiting'
end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value == true then
msg = msg .. ', Target NPCs'
end
msg = msg .. ', TH: ' .. state.TreasureMode.value
add_to_chat(122, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- State buff checks that will equip buff gear and mark the event as handled.
function check_buff(buff_name, eventArgs)
if state.Buff[buff_name] then
equip(sets.buff[buff_name] or {})
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
eventArgs.handled = true
end
end
-- Function to lock the ranged slot if we have a ranged weapon equipped.
function check_range_lock()
if player.equipment.range ~= 'empty' then
disable('range', 'ammo')
else
enable('range', 'ammo')
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(1, 6)
elseif player.sub_job == 'WAR' then
set_macro_page(3, 6)
elseif player.sub_job == 'NIN' then
set_macro_page(4, 6)
else
set_macro_page(1, 6)
end
end
Bismarck.Xurion
サーバ: Bismarck
Game: FFXI
Posts: 694
By Bismarck.Xurion 2019-08-11 08:29:04
First you'll want to define the set. Let's call it sets.engaged.abyssea.
Second, extend the customize_melee_set function to include the check for zone:
Code
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
local AbysseaZones = S{
'Abyssea - La Theine',
'Abyssea - Konschtat',
'Abyssea - Tahrongi',
'Abyssea - Attohwa',
'Abyssea - Misareaux',
'Abyssea - Vunkerl',
'Abyssea - Altepa',
'Abyssea - Uleguerand',
'Abyssea - Grauberg',
}
if AbysseaZones:contains(world.area) then
meleeSet = set_combine(meleeSet, sets.engaged.abyssea)
end
return meleeSet
end
IIRC, Gearswap automatically executes the customize_melee_set function. I can't test this right now, but that should get you heading in the right direction.
By Galkapryme 2019-08-11 11:58:39
Thanks so much. I look forward to trying this out. It appears Windower is a bit broken after the update, though.
First you'll want to define the set. Let's call it sets.engaged.abyssea.
Second, extend the customize_melee_set function to include the check for zone:
Code
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
local AbysseaZones = S{
'Abyssea - La Theine',
'Abyssea - Konschtat',
'Abyssea - Tahrongi',
'Abyssea - Attohwa',
'Abyssea - Misareaux',
'Abyssea - Vunkerl',
'Abyssea - Altepa',
'Abyssea - Uleguerand',
'Abyssea - Grauberg',
}
if AbysseaZones:contains(world.area) then
meleeSet = set_combine(meleeSet, sets.engaged.abyssea)
end
return meleeSet
end
IIRC, Gearswap automatically executes the customize_melee_set function. I can't test this right now, but that should get you heading in the right direction.
By Galkapryme 2019-08-11 13:01:39
New Problem. These are lines 236-257 in the gearswap/equip_processing.lua. The error I got after applying your Abyssea code and reloading the THF gs lua was that there was a Gearswap lua runtime error. "GearSwap/equip_processing.lua:246: attempt to index field '?' (a nil value)." Sorry to be a bother.
Code -----------------------------------------------------------------------------------
function to_names_set(equipment)
local equip_package = {}
for ind,cur_item in pairs(equipment) do
local name = 'empty'
if type(cur_item) == 'table' and cur_item.slot ~= empty then
if items[to_bag_api(res.bags[cur_item.bag_id].english)][cur_item.slot].id == 0 then return {} end
-- refresh_player() can run after equip packets arrive but before the item array is fully loaded,
-- which results in the id still being the initialization value.
name = res.items[items[to_bag_api(res.bags[cur_item.bag_id].english)][cur_item.slot].id][language]
end
if tonumber(ind) and ind >= 0 and ind <= 15 and math.floor(ind) == ind then
equip_package[toslotname(ind)] = name
else
equip_package[tostring(ind)] = name
end
end
return equip_package
end
By Galkapryme 2019-08-11 13:19:07
Looks like with or without that add, there may be a problem with that equip_processing lua.
By Galkapryme 2019-08-23 06:23:41
I figured it out, and I was able to get it working, but it simply isn't worth the effort, unless trying to proc an NM. Quad attack is nice, but the gear offers such low attack, I'm better off sticking with high-end triple attack gear.
I'm looking to add something to the below code that switches my THF to Quad attack gear when in Abyssea. Something similar to when you create in-town gear. I want it to recognize that I'm in an Abyssea zone, and swap in Quad attack gear (Thaumus Coat, Twilight Knife, Windbuffet Belt +1). Please assist.
Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
--[[
Custom commands:
gs c cycle treasuremode (set on ctrl-= by default): Cycles through the available treasure hunter modes.
Treasure hunter modes:
None - Will never equip TH gear
Tag - Will equip TH gear sufficient for initial contact with a mob (either melee, ranged hit, or Aeolian Edge AOE)
SATA - Will equip TH gear sufficient for initial contact with a mob, and when using SATA
Fulltime - Will keep TH gear equipped fulltime
--]]
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
state.Buff['Trick Attack'] = buffactive['trick attack'] or false
state.Buff['Feint'] = buffactive['feint'] or false
include('Mote-TreasureHunter')
-- For th_action_check():
-- JA IDs for actions that always have TH: Provoke, Animated Flourish
info.default_ja_ids = S{35, 204}
-- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
info.default_u_ja_ids = S{201, 202, 203, 205, 207}
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.OffenseMode:options('Normal', 'Acc', 'RA', 'Mod')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.RangedMode:options('Normal', 'Acc')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
state.PhysicalDefenseMode:options('Evasion', 'PDT')
gear.default.weaponskill_neck = "Fotia Gorget"
gear.default.weaponskill_waist = "Fotia Belt"
gear.AugQuiahuiz = {name="Quiahuiz Trousers", augments={'Haste+2','"Snapshot"+2','STR+8'}}
-- Additional local binds
send_command('bind f10 input /ja "Flee" <me>')
send_command('bind f1 gs c cycle OffenseMode')
send_command('bind f2 gs c cycle RangedMode')
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
--------------------------------------
TaeonHands = {}
TaeonHands.TA = {name="Taeon Gloves", augments={'DEX+6','Accuracy+17 Attack+17','"Triple Atk."+2'}}
TaeonHands.Snap = {name="Taeon Gloves", augments={'Attack+22','"Snapshot"+8'}}
TaeonHead = {}
TaeonHead.Snap = { name="Taeon Chapeau", augments={'Accuracy+20 Attack+20','"Snapshot"+5','"Snapshot"+4',}}
HercFeet = {}
HercHead = {}
HercLegs = {}
HercVest = {}
HercFeet.MAB={ name="Herculean Boots", augments={'Mag. Acc.+14 "Mag.Atk.Bns."+14','Weapon skill damage +4%','Mag. Acc.+6','"Mag.Atk.Bns."+6',}}
HercFeet.TP = { name="Herculean Boots", augments={'Accuracy+22 Attack+22','"Triple Atk."+3','STR+5','Attack+11',}}
--HercFeet.TH = { name="Herculean Boots", augments={'AGI+1','Weapon Skill Acc.+3','"Treasure Hunter"+1','Accuracy+19 Attack+19','Mag. Acc.+7 "Mag.Atk.Bns."+7',}}
HercHead.MAB = {name="Herculean Helm", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Weapon skill damage +3%','INT+1','Mag. Acc.+3','"Mag.Atk.Bns."+8',}}
HercHead.TP = { name="Herculean Helm", augments={'Accuracy+25','"Triple Atk."+4','AGI+6','Attack+14',}}
HercLegs.TH = { name="Herculean Trousers", augments={'INT+8','Attack+3','"Treasure Hunter"+1','Accuracy+6 Attack+6','Mag. Acc.+13 "Mag.Atk.Bns."+13',}}
HercLegs.MAB = { name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Weapon skill damage +2%','STR+8','Mag. Acc.+5','"Mag.Atk.Bns."+6',}}
HercVest.TH = { name="Herculean Vest", augments={'Magic dmg. taken -2%','Accuracy+5','"Treasure Hunter"+1','Mag. Acc.+9 "Mag.Atk.Bns."+9',}}
Toutatis = {}
Toutatis.STP = { name="Toutatis's Cape", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10','Phys. dmg. taken-10%',}}
Toutatis.WSD = { name="Toutatis's Cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%',}}
Toutatis.DEX = { name="Toutatis's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Evasion+5','"Dual Wield"+10','Evasion+15',}}
Toutatis.AGI = { name="Toutatis's Cape", augments={'AGI+15','Accuracy+20 Attack+20','Enmity +8',}}
Toutatis.RA = { name="Toutatis's Cape", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Atk.+10','Weapon skill damage +10%',}}
Toutatis.WSD = { name="Toutatis's Cape", augments={'DEX+20','Accuracy+15 Attack+15','Weapon skill damage +10%',}}
sets.TreasureHunter = {
head="Meghanada Visor +2",
body=HercVest.TH,
hands={ name="Plun. Armlets +1", augments={'Enhances "Perfect Dodge" effect',}},
legs=HercLegs.TH,
feet="Skulk. Poulaines +1",
neck="Asn. Gorget +2",
waist="Chaac Belt",
left_ear="Heartseeker Earring",
right_ear="Dudgeon Earring",
left_ring="Epona's Ring",
right_ring="Demonry Ring",
back=Toutatis.DEX,
}
sets.TreasureHunterRA = set_combine(sets.TreasureHunter, {neck="Sanctity Necklace",left_ring="Hajduk Ring +1",
right_ring="Hajduk Ring +1"})
sets.ExtraRegen = {neck="Wiglen Gorget",left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1"}
sets.Kiting = {feet="Pillager's Poulaines +1"}
sets.CapacityMantle = {back="Mecistopins Mantle"}
sets.Organizer = {
main="Odium",
sub="Jugo Kukri",
ammo="Izhiikoh",
range="Raider's Boomerang"
}
sets.buff['Sneak Attack'] = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Mummu Bonnet +2",
body="Mummu Jacket +2",
hands="Skulker's Armlets +1",
legs="Mummu Kecks +2",
feet="Mummu Gamash. +2",
neck="Asn. Gorget +2",
waist="Chiner's Belt +1",
left_ear="Sherida Earring",
right_ear="Heartseeker Earring",
left_ring="Ramuh Ring +1",
right_ring="Ramuh Ring +1",
back=Toutatis.DEX
}
sets.buff['Trick Attack'] = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Mummu Bonnet +2",
body="Mummu Jacket +2",
hands="Pillager's Armlets +1",
legs="Mummu Kecks +2",
feet="Mummu Gamash. +2",
neck="Asn. Gorget +2",
waist="Chaac Belt",
left_ear="Dudgeon Earring",
right_ear="Heartseeker Earring",
left_ring="Garuda Ring +1",
right_ring="Garuda Ring +1",
back=Toutatis.AGI
}
-- Actions we want to use to tag TH.
sets.precast.Step = sets.TreasureHunter
sets.precast.Flourish1 = sets.TreasureHunter
sets.precast.JA.Provoke = sets.TreasureHunter
--------------------------------------
-- Precast sets
--------------------------------------
-- Precast sets to enhance JAs
sets.precast.JA['Collaborator'] = {head="Skulker's's Bonnet +1"}
sets.precast.JA['Accomplice'] = {head="Skulker's's Bonnet +1"}
sets.precast.JA['Flee'] = {feet="Pillager's Poulaines +1"}
sets.precast.JA['Hide'] = {body="Pillager's Vest"}
sets.precast.JA['Conspirator'] = {"Skulker's Vest +1"} -- {body="Raider's Vest +2"}
sets.precast.JA['Steal'] = {neck="Pentalagus Charm",hands="Thief's Kote",legs="Pillager's Culottes +1",feet="Pillager's Poulaines +1"}
sets.precast.JA['Despoil'] = {legs="Skulker's Culottes +1",feet="Skulker's Poulaines +1"}
sets.precast.JA['Perfect Dodge'] = {hands="Plunderer's Armlets +1"}
sets.precast.JA['Feint'] = {"Plunderer's Culottes +3"} -- {legs="Assassin's Culottes +2"}
sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
-- Waltz set (chr and vit)
sets.precast.Waltz = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Mummu Bonnet +2",
body="Meg. Cuirie +2",
hands={ name="Buremte Gloves", augments={'Phys. dmg. taken -2%','Magic dmg. taken -2%','Rng.Atk.+10',}},
legs="Dashing Subligar",
feet={ name="Rawhide Boots", augments={'HP+50','Accuracy+15','Evasion+20',}},
neck="Wiglen Gorget",
waist="Chuq'aba Belt",
left_ear="Impreg. Earring",
right_ear="Oneiros Earring",
left_ring="Epona's Ring",
right_ring="Kunaji Ring",
back="Solemnity Cape",
}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
-- Fast cast sets for spells
sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring",legs="Enif Cosciales"}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
-- Ranged snapshot gear
sets.precast.RA = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
range="Exalted C.bow +1",
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Flax Sash",
left_ear="Clearview Earring",
right_ear="Volley Earring",
left_ring="Hajduk Ring +1",
right_ring="Hajduk Ring +1",
back="Moondoe Mantle +1",
}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Plunderer's Culottes +3",
feet="Meg. Jam. +2",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Sherida Earring",
right_ear="Ishvara Earring",
left_ring="Ramuh Ring +1",
right_ring="Ramuh Ring +1",
back={ name="Toutatis's Cape", augments={'DEX+20','Accuracy+15 Attack+15','Weapon skill damage +10%',}},
}
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
--------------------------------------
-- Midcast sets
--------------------------------------
sets.midcast.FastRecast = {
head="Whirlpool Mask",ear2="Loquacious Earring",
body="Pillager's Vest",hands="Pillager's Armlets +1",
back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
-- Specific spells
sets.midcast.Utsusemi = {
head="Whirlpool Mask",neck="Magoraga Beads",ear2="Loquacious Earring",
body="Pillager's Vest",hands="Pillager's Armlets +1",ring1="Beeline Ring",
back="Canny Cape",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
-- Ranged gear
sets.midcast.RA = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
range="Exalted C.bow +1",
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Flax Sash",
left_ear="Clearview Earring",
right_ear="Volley Earring",
left_ring="Hajduk Ring +1",
right_ring="Hajduk Ring +1",
back="Moondoe Mantle +1",}
sets.midcast.RA.Acc = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
range="Exalted C.bow +1",
head="Meghanada Visor +2",
body="Meg. Cuirie +2",
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Iskur Gorget",
waist="Flax Sash",
left_ear="Clearview Earring",
right_ear="Volley Earring",
left_ring="Hajduk Ring +1",
right_ring="Hajduk Ring +1",
back="Moondoe Mantle +1",}
--------------------------------------
-- Idle/resting/defense sets
--------------------------------------
-- Resting sets
sets.resting = {head="Ocelomeh Headpiece +1",neck="Wiglen Gorget",
ring1="Sheltered Ring",ring2="Paguroidea Ring"}
-- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
sets.idle = {ammo="Thew Bomblet",
head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
sets.idle.Town = {main="Izhiikoh", sub="Sabebus",ammo="Thew Bomblet",
head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest",hands="Pill. Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Shadow Mantle",waist="Patentia Sash",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
sets.idle.Weak = {ammo="Thew Bomblet",
head="Pillager's Bonnet +1",neck="Wiglen Gorget",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Shadow Mantle",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Skadi's Jambeaux +1"}
-- Defense sets
sets.defense.Evasion = {
head="Pillager's Bonnet +1",neck="Ej Necklace",
body="Qaaxo Harness",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Beeline Ring",
back="Canny Cape",waist="Flume Belt",legs="Kaabnax Trousers",feet="Iuitl Gaiters +1"}
sets.defense.PDT = {ammo="Iron Gobbet",
head="Pillager's Bonnet +1",neck="Twilight Torque",
body="Iuitl Vest",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2=gear.DarkRing.physical,
back="Iximulew Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Iuitl Gaiters +1"}
sets.defense.MDT = {ammo="Demonry Stone",
head="Pillager's Bonnet +1",neck="Twilight Torque",
body="Pillager's Vest +1",hands="Pillager's Armlets +1",ring1="Defending Ring",ring2="Shadow Ring",
back="Engulfer Cape",waist="Flume Belt",legs="Pillager's Culottes +1",feet="Iuitl Gaiters +1"}
--------------------------------------
-- Melee sets
--------------------------------------
-- Normal melee group
-- Triple Attack 35%, Triple Attack Damage 42%, ACC 1173, Attack 1129
sets.engaged = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}}, -- Trip.Attk. 3%
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}}, -- Trip.Attk. 3%
ammo="Yamarang",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}}, -- Trip.Attk. 4%
body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}}, -- Trip.Attk. 4%
hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}}, -- Trip.Attk. 4%
legs="Meg. Chausses +2", -- Trip.Attk. 5%
feet="Plun. Poulaines +1", -- Trip.Attk. 3%
neck="Asn. Gorget +2", -- Trip.Attk. 4%
waist="Chiner's Belt +1", -- Trip.Attk. 2%
left_ear="Sherida Earring",
right_ear="Cessance Earring",
left_ring="Demonry Ring",
right_ring="Epona's Ring", -- Trip.Attk. 3%
back=Toutatis.DEX,
}
sets.engaged.Acc = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Meghanada Visor +2",
body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
hands="Meg. Gloves +2",
legs="Meg. Chausses +2",
feet="Meg. Jam. +2",
neck="Asn. Gorget +2",
waist="Kentarch Belt +1",
left_ear="Steelflash Earring",
right_ear="Heartseeker Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Toutatis.DEX,
}
sets.engaged.RA = {main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
range="Exalted C.bow +1",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}}, -- Trip.Attk. 4%
body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}}, -- Trip.Attk. 4%
hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}}, -- Trip.Attk. 4%
legs="Meg. Chausses +2", -- Trip.Attk. 5%
feet="Plun. Poulaines +1", -- Trip.Attk. 3%
neck="Asn. Gorget +2", -- Trip.Attk. 4%
waist="Chiner's Belt +1", -- Trip.Attk. 2%
left_ear="Sherida Earring",
right_ear="Cessance Earring",
left_ring="Demonry Ring",
right_ring="Epona's Ring", -- Trip.Attk. 3%
back=Toutatis.DEX,
}
sets.engaged.Evasion = {
main={ name="Sandung", augments={'Accuracy+50','Crit. hit rate+5%','"Triple Atk."+3',}},
sub={ name="Taming Sari", augments={'STR+6','DEX+9','DMG:+9',}},
ammo="Yamarang",
head="Mummu Bonnet +2",
body="Mummu Jacket +2",
hands="Mummu Wrists +2",
legs="Mummu Kecks +2",
feet="Mummu Gamash. +2",
neck="Asn. Gorget +2",
waist="Kentarch Belt +1",
left_ear="Steelflash Earring",
right_ear="Heartseeker Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Toutatis.DEX,
}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Run after the general precast() is done.
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.english == 'Aeolian Edge' and state.TreasureMode.value ~= 'None' then
equip(sets.TreasureHunter)
elseif spell.english=='Sneak Attack' or spell.english=='Trick Attack' or spell.type == 'WeaponSkill' then
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
end
end
-- Run after the general midcast() set is constructed.
function job_post_midcast(spell, action, spellMap, eventArgs)
if state.TreasureMode.value ~= 'None' and spell.action_type == 'Ranged Attack' then
equip(sets.TreasureHunter)
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
-- Weaponskills wipe SATA/Feint. Turn those state vars off before default gearing is attempted.
if spell.type == 'WeaponSkill' and not spell.interrupted then
state.Buff['Sneak Attack'] = false
state.Buff['Trick Attack'] = false
state.Buff['Feint'] = false
end
end
-- Called after the default aftercast handling is complete.
function job_post_aftercast(spell, action, spellMap, eventArgs)
-- If Feint is active, put that gear set on on top of regular gear.
-- This includes overlaying SATA gear.
check_buff('Feint', eventArgs)
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
function get_custom_wsmode(spell, spellMap, defaut_wsmode)
local wsmode
if state.Buff['Sneak Attack'] then
wsmode = 'SA'
end
if state.Buff['Trick Attack'] then
wsmode = (wsmode or '') .. 'TA'
end
return wsmode
end
-- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
function job_handle_equipping_gear(playerStatus, eventArgs)
-- Check that ranged slot is locked, if necessary
check_range_lock()
-- Check for SATA when equipping gear. If either is active, equip
-- that gear specifically, and block equipping default gear.
check_buff('Sneak Attack', eventArgs)
check_buff('Trick Attack', eventArgs)
end
function customize_idle_set(idleSet)
if player.hpp < 80 then
idleSet = set_combine(idleSet, sets.ExtraRegen)
end
return idleSet
end
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
return meleeSet
end
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
th_update(cmdParams, eventArgs)
end
-- Function to display the current relevant user state when doing an update.
-- Return true if display was handled, and you don't want the default info shown.
function display_current_job_state(eventArgs)
local msg = 'Melee'
if state.CombatForm.has_value then
msg = msg .. ' (' .. state.CombatForm.value .. ')'
end
msg = msg .. ': '
msg = msg .. state.OffenseMode.value
if state.HybridMode.value ~= 'Normal' then
msg = msg .. '/' .. state.HybridMode.value
end
msg = msg .. ', WS: ' .. state.WeaponskillMode.value
if state.DefenseMode.value ~= 'None' then
msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
end
if state.Kiting.value == true then
msg = msg .. ', Kiting'
end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value == true then
msg = msg .. ', Target NPCs'
end
msg = msg .. ', TH: ' .. state.TreasureMode.value
add_to_chat(122, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- State buff checks that will equip buff gear and mark the event as handled.
function check_buff(buff_name, eventArgs)
if state.Buff[buff_name] then
equip(sets.buff[buff_name] or {})
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
eventArgs.handled = true
end
end
-- Function to lock the ranged slot if we have a ranged weapon equipped.
function check_range_lock()
if player.equipment.range ~= 'empty' then
disable('range', 'ammo')
else
enable('range', 'ammo')
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(1, 6)
elseif player.sub_job == 'WAR' then
set_macro_page(3, 6)
elseif player.sub_job == 'NIN' then
set_macro_page(4, 6)
else
set_macro_page(1, 6)
end
end
|
|