|
disable back
Server: Sylph
Game: FFXI
Posts: 305
By Sylph.Elgorian 2019-05-30 22:31:02
trying to figure out why this isn't working:
Code
if player.equipment.back == 'Aptitude Mantle' then disable('back') else enable('back') end
if player.equipment.back == 'Nexus Cape' then disable('back') else enable('back') end
Everything else is working, body, rings, head, just cannot get backs to work.
Bismarck.Xurion
Server: Bismarck
Game: FFXI
Posts: 694
By Bismarck.Xurion 2019-05-31 02:48:23
The context of this matters. How do you equip the back pieces? Your full Lua would probably be best.
Server: Asura
Game: FFXI
Posts: 576
By Asura.Meliorah 2019-05-31 07:25:56
Its honestly easier to just make a toggle for Capacity and makr sets.engaged.capacity and sets.precast.WS.capacity.
Bahamut.Ivebian
Server: Bahamut
Game: FFXI
Posts: 39
By Bahamut.Ivebian 2019-05-31 11:32:20
The second line overrides the first and unlocks the back slot if nexus is not equipped. Try this:
Code
if player.equipment.back == 'Aptitude Mantle' or player.equipment.back == 'Nexus Cape' then
disable('back')
else
enable('back')
end
[+]
Bahamut.Ivebian
Server: Bahamut
Game: FFXI
Posts: 39
By Bahamut.Ivebian 2019-05-31 11:40:11
To make adding items easier I put this in get_sets: Code
equip_lock = S{
"Warp Ring",
"Capacity Ring",
"Vocation Ring",
"Trizek Ring",
"Guide beret",
"Mecisto. Mantle",
"Aptitude Mantle",
"Aptitude Mantle +1",
}
And use this for locking different slots: Code
if equip_lock[player.equipment.left_ring] or equip_lock[player.equipment.right_ring] then
disable('ring1','ring2')
else
enable('ring1','ring2')
end
if equip_lock[player.equipment.back] then
disable('back')
else
enable('back')
end
if equip_lock[player.equipment.head] then
disable('head')
else
enable('head')
end
Server: Lakshmi
Game: FFXI
Posts: 97
By Lakshmi.Ashtopcat 2019-05-31 13:54:36
but if you can remember to hit capacity mode in a toggle, why can't you just //gs disable back?
Bahamut.Nebohh
Server: Bahamut
Game: FFXI
Posts: 156
By Bahamut.Nebohh 2019-05-31 15:28:40
The second line overrides the first and unlocks the back slot if nexus is not equipped. Try this:
Code
if player.equipment.back == 'Aptitude Mantle' or player.equipment.back == 'Nexus Cape' then
disable('back')
else
enable('back')
end This is exactly what I would've replied.
Server: Sylph
Game: FFXI
Posts: 305
By Sylph.Elgorian 2019-05-31 19:34:52
To make adding items easier I put this in get_sets: Code
equip_lock = S{
"Warp Ring",
"Capacity Ring",
"Vocation Ring",
"Trizek Ring",
"Guide beret",
"Mecisto. Mantle",
"Aptitude Mantle",
"Aptitude Mantle +1",
}
And use this for locking different slots: Code
if equip_lock[player.equipment.left_ring] or equip_lock[player.equipment.right_ring] then
disable('ring1','ring2')
else
enable('ring1','ring2')
end
if equip_lock[player.equipment.back] then
disable('back')
else
enable('back')
end
if equip_lock[player.equipment.head] then
disable('head')
else
enable('head')
end
Ooooooh, thanks!
EDIT: Where do you have the second piece at? It's disabling slots appropriately but it doesn't seem to be enabling them if the item is no longer in the slot.
I have the 2nd part in precast function.
Server: Sylph
Game: FFXI
Posts: 305
By Sylph.Elgorian 2019-05-31 19:35:56
The second line overrides the first and unlocks the back slot if nexus is not equipped. Try this:
Code
if player.equipment.back == 'Aptitude Mantle' or player.equipment.back == 'Nexus Cape' then
disable('back')
else
enable('back')
end
Gotcha. That makes sense now. Had been staring at it forever, overlooked that bit of logic. Thanks.
Bahamut.Ivebian
Server: Bahamut
Game: FFXI
Posts: 39
By Bahamut.Ivebian 2019-05-31 20:37:44
I switch to a different ring/back. I overlooked empty slots and sets.empty function. If you want to use that code block just use this format for the table. Code
equip_lock = {
["Warp Ring"] = true,
["Capacity Ring"] = true,
["Vocation Ring"] = true,
["Trizek Ring"] = true,
["Guide beret"] = true,
["Mecisto. Mantle"] = true,
["Aptitude Mantle"] = true,
["Aptitude Mantle +1"] = true,
}
By Mcdougall 2019-06-02 03:26:04
I want to add this to my lua so i dont have to disable it everytime to use a ring. Where exactly do i add it at? As of right now i have to disable gearswap use the ring. renable gearswap and change my settings... its anoying but working.
This is the full code i am currently using. Any help would be huge... Thank you.
Code
-- Original: Motenten / Modified: Arislan
-- Haste/DW Detection Requires Gearinfo Addon
-------------------------------------------------------------------------------------------------------------------
-- Keybinds
-------------------------------------------------------------------------------------------------------------------
-- Modes: [ F9 ] Cycle Offense Modes
-- [ CTRL+F9 ] Cycle Hybrid 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
--
-- Abilities: [ CTRL+- ] Chain Affinity
-- [ CTRL+= ] Burst Affinity
-- [ CTRL+[ ] Efflux
-- [ ALT+[ ] Diffusion
-- [ ALT+] ] Unbridled Learning
-- [ CTRL+Numpad/ ] Berserk
-- [ CTRL+Numpad* ] Warcry
-- [ CTRL+Numpad- ] Aggressor
--
-- Spells: [ CTRL+` ] Blank Gaze
-- [ ALT+Q ] Nature's Meditation/Fantod
-- [ ALT+W ] Cocoon/Reactor Cool
-- [ ALT+E ] Erratic Flutter
-- [ ALT+R ] Battery Charge/Refresh
-- [ ALT+T ] Occultation
-- [ ALT+Y ] Barrier Tusk/Phalanx
-- [ ALT+U ] Diamondhide/Stoneskin
-- [ ALT+P ] Mighty Guard/Carcharian Verve
-- [ WIN+, ] Utsusemi: Ichi
-- [ WIN+. ] Utsusemi: Ni
--
-- WS: [ CTRL+Numpad7 ] Savage Blade
-- [ CTRL+Numpad9 ] Chant Du Cygne
-- [ CTRL+Numpad4 ] Requiescat
-- [ CTRL+Numpad5 ] Expiacion
--
--
-- (Global-Binds.lua contains additional non-job-related keybinds)
--------------------------------------------------------------------------------------------------------------------
-- 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()
state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
state.Buff['Chain Affinity'] = buffactive['Chain Affinity'] or false
state.Buff.Convergence = buffactive.Convergence or false
state.Buff.Diffusion = buffactive.Diffusion or false
state.Buff.Efflux = buffactive.Efflux or false
state.Buff['Unbridled Learning'] = buffactive['Unbridled Learning'] or false
blue_magic_maps = {}
-- Mappings for gear sets to use for various blue magic spells.
-- While Str isn't listed for each, it's generally assumed as being at least
-- moderately signficant, even for spells with other mods.
-- Physical spells with no particular (or known) stat mods
blue_magic_maps.Physical = S{'Bilgestorm'}
-- Spells with heavy accuracy penalties, that need to prioritize accuracy first.
blue_magic_maps.PhysicalAcc = S{'Heavy Strike'}
-- Physical spells with Str stat mod
blue_magic_maps.PhysicalStr = S{'Battle Dance','Bloodrake','Death Scissors','Dimensional Death',
'Empty Thrash','Quadrastrike','Saurian Slide','Sinker Drill','Spinal Cleave','Sweeping Gouge',
'Uppercut','Vertical Cleave'}
-- Physical spells with Dex stat mod
blue_magic_maps.PhysicalDex = S{'Amorphic Spikes','Asuran Claws','Barbed Crescent','Claw Cyclone',
'Disseverment','Foot Kick','Frenetic Rip','Goblin Rush','Hysteric Barrage','Paralyzing Triad',
'Seedspray','Sickle Slash','Smite of Rage','Terror Touch','Thrashing Assault','Vanity Dive'}
-- Physical spells with Vit stat mod
blue_magic_maps.PhysicalVit = S{'Body Slam','Cannonball','Delta Thrust','Glutinous Dart','Grand Slam',
'Power Attack','Quad. Continuum','Sprout Smack','Sub-zero Smash'}
-- Physical spells with Agi stat mod
blue_magic_maps.PhysicalAgi = S{'Benthic Typhoon','Feather Storm','Helldive','Hydro Shot','Jet Stream',
'Pinecone Bomb','Spiral Spin','Wild Oats'}
-- Physical spells with Int stat mod
blue_magic_maps.PhysicalInt = S{'Mandibular Bite','Queasyshroom'}
-- Physical spells with Mnd stat mod
blue_magic_maps.PhysicalMnd = S{'Ram Charge','Screwdriver','Tourbillion'}
-- Physical spells with Chr stat mod
blue_magic_maps.PhysicalChr = S{'Bludgeon'}
-- Physical spells with HP stat mod
blue_magic_maps.PhysicalHP = S{'Final Sting'}
-- Magical spells with the typical Int mod
blue_magic_maps.Magical = S{'Anvil Lightning','Blastbomb','Blazing Bound','Bomb Toss','Cursed Sphere',
'Droning Whirlwind','Embalming Earth','Entomb','Firespit','Foul Waters','Ice Break','Leafstorm',
'Maelstrom','Molting Plumage','Nectarous Deluge','Regurgitation','Rending Deluge','Scouring Spate',
'Silent Storm','Spectral Floe','Subduction','Tem. Upheaval','Water Bomb'}
blue_magic_maps.MagicalDark = S{'Dark Orb','Death Ray','Eyes On Me','Evryone. Grudge','Palling Salvo',
'Tenebral Crush'}
blue_magic_maps.MagicalLight = S{'Blinding Fulgor','Diffusion Ray','Radiant Breath','Rail Cannon',
'Retinal Glare'}
-- Magical spells with a primary Mnd mod
blue_magic_maps.MagicalMnd = S{'Acrid Stream','Magic Hammer','Mind Blast'}
-- Magical spells with a primary Chr mod
blue_magic_maps.MagicalChr = S{'Mysterious Light'}
-- Magical spells with a Vit stat mod (on top of Int)
blue_magic_maps.MagicalVit = S{'Thermal Pulse'}
-- Magical spells with a Dex stat mod (on top of Int)
blue_magic_maps.MagicalDex = S{'Charged Whisker','Gates of Hades'}
-- Magical spells (generally debuffs) that we want to focus on magic accuracy over damage.
-- Add Int for damage where available, though.
blue_magic_maps.MagicAccuracy = S{'1000 Needles','Absolute Terror','Actinic Burst','Atra. Libations',
'Auroral Drape','Awful Eye', 'Blank Gaze','Blistering Roar','Blood Saber','Chaotic Eye',
'Cimicine Discharge','Cold Wave','Corrosive Ooze','Demoralizing Roar','Digest','Dream Flower',
'Enervation','Feather Tickle','Filamented Hold','Frightful Roar','Geist Wall','Hecatomb Wave',
'Infrasonics','Jettatura','Light of Penance','Lowing','Mind Blast','Mortal Ray','MP Drainkiss',
'Osmosis','Reaving Wind','Sandspin','Sandspray','Sheep Song','Soporific','Sound Blast',
'Stinking Gas','Sub-zero Smash','Venom Shell','Voracious Trunk','Yawn'}
-- Breath-based spells
blue_magic_maps.Breath = S{'Bad Breath','Flying Hip Press','Frost Breath','Heat Breath','Hecatomb Wave',
'Magnetite Cloud','Poison Breath','Self-Destruct','Thunder Breath','Vapor Spray','Wind Breath'}
-- Stun spells
blue_magic_maps.StunPhysical = S{'Frypan','Head Butt','Sudden Lunge','Tail slap','Whirl of Rage'}
blue_magic_maps.StunMagical = S{'Blitzstrahl','Temporal Shift','Thunderbolt'}
-- Healing spells
blue_magic_maps.Healing = S{'Healing Breeze','Magic Fruit','Plenilune Embrace','Pollen','Restoral',
'Wild Carrot'}
-- Buffs that depend on blue magic skill
blue_magic_maps.SkillBasedBuff = S{'Barrier Tusk','Diamondhide','Magic Barrier','Metallic Body',
'Plasma Charge','Pyric Bulwark','Reactor Cool','Occultation'}
-- Other general buffs
blue_magic_maps.Buff = S{'Amplification','Animating Wail','Carcharian Verve','Cocoon',
'Erratic Flutter','Exuviation','Fantod','Feather Barrier','Harden Shell','Memento Mori',
'Nat. Meditation','Orcish Counterstance','Refueling','Regeneration','Saline Coat','Triumphant Roar',
'Warm-Up','Winds of Promyvion','Zephyr Mantle'}
blue_magic_maps.Refresh = S{'Battery Charge'}
-- Spells that require Unbridled Learning to cast.
unbridled_spells = S{'Absolute Terror','Bilgestorm','Blistering Roar','Bloodrake','Carcharian Verve','Cesspool',
'Crashing Thunder','Cruel Joke','Droning Whirlwind','Gates of Hades','Harden Shell','Mighty Guard',
'Polar Roar','Pyric Bulwark','Tearing Gust','Thunderbolt','Tourbillion','Uproot'}
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}
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('Normal', 'Acc')
state.WeaponskillMode:options('Normal', 'Acc')
state.CastingMode:options('Normal', 'Resistant')
state.PhysicalDefenseMode:options('PDT', 'MDT')
state.IdleMode:options('Normal', 'DT')--, 'Learning')
state.MagicBurst = M(false, 'Magic Burst')
state.CP = M(false, "Capacity Points Mode")
send_command('lua l gearinfo')
send_command('lua l azuresets')
send_command('bind ^` gs c cycle treasuremode')
send_command('bind !` gs c toggle MagicBurst')
send_command('bind ^- input /ja "Chain Affinity" <me>')
send_command('bind ^[ input /ja "Efflux" <me>')
send_command('bind ^= input /ja "Burst Affinity" <me>')
send_command('bind ![ input /ja "Diffusion" <me>')
send_command('bind !] input /ja "Unbridled Learning" <me>')
send_command('bind !e input /ma "Erratic Flutter" <me>')
send_command('bind !t input /ma "Occultation" <me>')
if player.sub_job == "RDM" then
send_command('bind !q input /ma "Fantod" <me>')
send_command('bind !w input /ma "Reactor Cool" <me>')
send_command('bind !r input /ma "Refresh" <stpc>')
send_command('bind !y input /ma "Phalanx" <me>')
send_command('bind !u input /ma "Stoneskin" <me>')
send_command('bind !p input /ma "Carcharian Verve" <me>')
else
send_command('bind !q input /ma "Nat. Meditation" <me>')
send_command('bind !w input /ma "Cocoon" <me>')
send_command('bind !r input /ma "Battery Charge" <me>')
send_command('bind !y input /ma "Barrier Tusk" <me>')
send_command('bind !u input /ma "Diamondhide" <me>')
send_command('bind !p input /ma "Mighty Guard" <me>')
end
send_command('bind @c gs c toggle CP')
if player.sub_job == 'WAR' then
send_command('bind ^numpad/ input /ja "Berserk" <me>')
send_command('bind ^numpad* input /ja "Warcry" <me>')
send_command('bind ^numpad- input /ja "Aggressor" <me>')
end
send_command('bind ^numpad7 input /ws "Savage Blade" <t>')
send_command('bind ^numpad9 input /ws "Chant du Cygne" <t>')
send_command('bind ^numpad4 input /ws "Requiescat" <t>')
send_command('bind ^numpad5 input /ws "Expiacion" <t>')
send_command('bind ^numpad1 input /ws "Sanguine Blade" <t>')
send_command('bind ^numpad2 input /ws "Black Halo" <t>')
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 !`')
send_command('unbind ^-')
send_command('unbind ^=')
send_command('unbind ^[')
send_command('unbind ![')
send_command('unbind !]')
send_command('unbind !q')
send_command('unbind !w')
send_command('bind !e input /ma Haste <stpc>')
send_command('bind !t input /ma Blink <me>')
send_command('bind !r input /ma Refresh <stpc>')
send_command('bind !y input /ma Phalanx <me>')
send_command('bind !u input /ma Stoneskin <me>')
send_command('unbind !p')
send_command('unbind ^,')
send_command('unbind @c')
send_command('unbind ^numlock')
send_command('unbind ^numpad/')
send_command('unbind ^numpad*')
send_command('unbind ^numpad-')
send_command('unbind ^numpad7')
send_command('unbind ^numpad9')
send_command('unbind ^numpad4')
send_command('unbind ^numpad5')
send_command('unbind ^numpad1')
send_command('unbind ^numpad2')
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')
send_command('lua u gearinfo')
send_command('lua u azureSets')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
------------------------------------------------------------------------------------------------
---------------------------------------- Precast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
-- Precast sets to enhance JAs
-- Enmity set
sets.Enmity = {
ammo="Sapience Orb", --2
head="Halitus Helm", --8
body="Emet Harness +1", --10
hands="Kurys Gloves", --9
feet="Ahosi Leggings", --7
neck="Unmoving Collar +1", --10
ear1="Cryptic Earring", --4
ear2="Trux Earring", --5
ring1="Supershear Ring", --5
ring2="Eihwaz Ring", --5
waist="Kasiri Belt", --3
}
sets.precast.JA['Provoke'] = sets.Enmity
sets.buff['Burst Affinity'] = {legs="Assim. Shalwar +3", feet="Hashi. Basmak +1"}
sets.buff['Diffusion'] = {feet="Luhlaza Charuqs +3"}
sets.buff['Efflux'] = {legs="Hashishin Tayt +1"}
sets.precast.JA['Azure Lore'] = {hands="Luh. Bazubands +1"}
sets.precast.JA['Chain Affinity'] = {feet="Assim. Charuqs +1"}
sets.precast.JA['Convergence'] = {head="Luh. Keffiyeh +3"}
sets.precast.JA['Enchainment'] = {body="Luhlaza Jubbah +3"}
sets.precast.FC = {
-- Colada 4
}
sets.precast.FC['Blue Magic'] = set_combine(sets.precast.FC, {body="Hashishin Mintan +1"})
sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
sets.precast.FC.Cure = set_combine(sets.precast.FC, {ammo="Impatiens", ear1="Mendi. Earring"})
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
ammo="Impatiens",
ring1="Lebeche Ring",
waist="Rumination Sash",
})
------------------------------------------------------------------------------------------------
------------------------------------- Weapon Skill Sets ----------------------------------------
------------------------------------------------------------------------------------------------
sets.precast.WS = {
ammo = "Jukukik Feather",
head = "Shned. Chapeau +1",
neck = "Mirage Stole",
ear1 = "Ethreal Earring",
ear2 = "Suppanomimi",
body = "Shned. Tabard +1",
hands = "Shned. Gloves +1",
ring1 = "Epona's Ring",
ring2 = "Rajas Ring",
back = "Moondoe Mantle +1",
waist = "Cuchulain's Belt",
legs = "Shned. Tights +1",
feet = "Shned. Boots +1"
}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {
})
sets.precast.WS['Chant du Cygne'] = set_combine(sets.precast.WS, {
})
sets.precast.WS['Chant du Cygne'].Acc = set_combine(sets.precast.WS['Chant du Cygne'], {
})
sets.precast.WS['Vorpal Blade'] = sets.precast.WS['Chant du Cygne']
sets.precast.WS['Vorpal Blade'].Acc = sets.precast.WS['Chant du Cygne'].Acc
sets.precast.WS['Savage Blade'] = set_combine(sets.precast.WS, {
})
sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {
})
sets.precast.WS['Requiescat'] = {
}
sets.precast.WS['Requiescat'].Acc = set_combine(sets.precast.WS['Requiescat'], {
})
sets.precast.WS['Expiacion'] = sets.precast.WS['Savage Blade']
sets.precast.WS['Expiacion'].Acc = set_combine(sets.precast.WS['Expiacion'], {
})
sets.precast.WS['Sanguine Blade'] = {
}
sets.precast.WS['True Strike'] = sets.precast.WS['Savage Blade']
sets.precast.WS['True Strike'].Acc = sets.precast.WS['Savage Blade'].Acc
sets.precast.WS['Judgment'] = sets.precast.WS['True Strike']
sets.precast.WS['Judgment'].Acc = sets.precast.WS['True Strike'].Acc
sets.precast.WS['Black Halo'] = set_combine(sets.precast.WS['Savage Blade'], {
head="Luh. Keffiyeh +3",
ear2="Regal Earring",
waist="Luminary Sash",
})
sets.precast.WS['Black Halo'].Acc = set_combine(sets.precast.WS['Black Halo'], {
ammo="Falcon Eye",
feet=gear.Herc_STP_feet,
ear2="Telos Earring",
})
sets.precast.WS['Realmrazer'] = sets.precast.WS['Requiescat']
sets.precast.WS['Realmrazer'].Acc = sets.precast.WS['Requiescat'].Acc
sets.precast.WS['Flash Nova'] = set_combine(sets.precast.WS['Sanguine Blade'], {
head="Jhakri Coronal +2",
ring2="Weather. Ring +1",
})
------------------------------------------------------------------------------------------------
---------------------------------------- Midcast Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.midcast.FastRecast = sets.precast.FC
sets.midcast.SpellInterrupt = {
ammo="Impatiens", --10
ring1="Evanescence Ring", --5
waist="Rumination Sash", --10
}
sets.midcast['Blue Magic'] = {
ammo = "Jukukik Feather",
head = "Weath. Corona +1",
neck = "Stoicheion Medal",
ear1 = "Strophadic Earring",
ear2 = "Hecate's Earring",
body = "Weather. Robe +1",
hands = "Weath. Cuffs +1",
ring1 = "Strendu Ring",
ring2 = "Spiral Ring",
back = "Atheling Mantle",
waist = "Cuchulain's Belt",
legs = "Weath. Pants +1",
feet = "Weath. Souliers +1"
}
sets.midcast['Blue Magic'].Physical = {
ammo = "Jukukik Feather",
head = "Shned. Chapeau +1",
neck = "Mirage Stole",
ear1 = "Ethreal Earring",
ear2 = "Suppanomimi",
body = "Shned. Tabard +1",
hands = "Shned. Gloves +1",
ring1 = "Epona's Ring",
ring2 = "Rajas Ring",
back = "Moondoe Mantle +1",
waist = "Cuchulain's Belt",
legs = "Shned. Tights +1",
feet = "Shned. Boots +1"
}
sets.midcast['Blue Magic'].PhysicalAcc = set_combine(sets.midcast['Blue Magic'].Physical, {
})
sets.midcast['Blue Magic'].PhysicalStr = sets.midcast['Blue Magic'].Physical
sets.midcast['Blue Magic'].PhysicalDex = set_combine(sets.midcast['Blue Magic'].Physical, {
})
sets.midcast['Blue Magic'].PhysicalVit = sets.midcast['Blue Magic'].Physical
sets.midcast['Blue Magic'].PhysicalAgi = set_combine(sets.midcast['Blue Magic'].Physical, {
hands=gear.Adhemar_B_hands,
ring2="Ilabrat Ring",
})
sets.midcast['Blue Magic'].PhysicalInt = set_combine(sets.midcast['Blue Magic'].Physical, {
ammo = "Jukukik Feather",
head = "Weath. Corona +1",
neck = "Stoicheion Medal",
ear1 = "Strophadic Earring",
ear2 = "Hecate's Earring",
body = "Weather. Robe +1",
hands = "Weath. Cuffs +1",
ring1 = "Strendu Ring",
ring2 = "Spiral Ring",
back = "Atheling Mantle",
waist = "Cuchulain's Belt",
legs = "Weath. Pants +1",
feet = "Weath. Souliers +1"
})
sets.midcast['Blue Magic'].PhysicalMnd = set_combine(sets.midcast['Blue Magic'].Physical, {
ammo = "Jukukik Feather",
head = "Weath. Corona +1",
neck = "Stoicheion Medal",
ear1 = "Strophadic Earring",
ear2 = "Hecate's Earring",
body = "Weather. Robe +1",
hands = "Weath. Cuffs +1",
ring1 = "Strendu Ring",
ring2 = "Spiral Ring",
back = "Atheling Mantle",
waist = "Cuchulain's Belt",
legs = "Weath. Pants +1",
feet = "Weath. Souliers +1"
})
sets.midcast['Blue Magic'].PhysicalChr = set_combine(sets.midcast['Blue Magic'].Physical, {ear1="Regal Earring", ear2="Enchntr. Earring +1"})
sets.midcast['Blue Magic'].Magical = {
ammo = "Jukukik Feather",
head = "Weath. Corona +1",
neck = "Stoicheion Medal",
ear1 = "Strophadic Earring",
ear2 = "Hecate's Earring",
body = "Weather. Robe +1",
hands = "Weath. Cuffs +1",
ring1 = "Strendu Ring",
ring2 = "Spiral Ring",
back = "Atheling Mantle",
waist = "Cuchulain's Belt",
legs = "Weath. Pants +1",
feet = "Weath. Souliers +1"
}
sets.midcast['Blue Magic'].Magical.Resistant = set_combine(sets.midcast['Blue Magic'].Magical, {
})
sets.midcast['Blue Magic'].MagicalDark = set_combine(sets.midcast['Blue Magic'].Magical, {
})
sets.midcast['Blue Magic'].MagicalLight = set_combine(sets.midcast['Blue Magic'].Magical, {
})
sets.midcast['Blue Magic'].MagicalMnd = set_combine(sets.midcast['Blue Magic'].Magical, {
})
sets.midcast['Blue Magic'].MagicalDex = set_combine(sets.midcast['Blue Magic'].Magical, {
})
sets.midcast['Blue Magic'].MagicalVit = set_combine(sets.midcast['Blue Magic'].Magical, {})
sets.midcast['Blue Magic'].MagicalChr = set_combine(sets.midcast['Blue Magic'].Magical, {ear1="Regal Earring", ear2="Enchntr. Earring +1"})
sets.midcast['Blue Magic'].MagicAccuracy = {
}
sets.midcast['Blue Magic'].Breath = set_combine(sets.midcast['Blue Magic'].Magical, {head="Luh. Keffiyeh +3"})
sets.midcast['Blue Magic'].StunPhysical = set_combine(sets.midcast['Blue Magic'].MagicAccuracy, {
})
sets.midcast['Blue Magic'].StunMagical = sets.midcast['Blue Magic'].MagicAccuracy
sets.midcast['Blue Magic'].Healing = {
ammo="Staunch Tathlum +1",
head="Carmine Mask +1",
body="Vrikodara Jupon", -- 13
hands="Telchine Gloves", -- 17
legs="Assim. Shalwar +3",
feet="Medium's Sabots", -- 12
neck="Nuna Gorget +1",
ear1="Mendi. Earring", -- 5
ear2="Regal Earring",
ring1="Lebeche Ring", -- 3
ring2={name="Stikini Ring +1", bag="wardrobe4"},
waist="Luminary Sash",
back="Aurist's Cape +1",
}
sets.midcast['Blue Magic'].HealingSelf = set_combine(sets.midcast['Blue Magic'].Healing, {
})
sets.midcast['Blue Magic']['White Wind'] = set_combine(sets.midcast['Blue Magic'].Healing, {
})
sets.midcast['Blue Magic'].Buff = sets.midcast['Blue Magic']
sets.midcast['Blue Magic'].Refresh = set_combine(sets.midcast['Blue Magic'], {head="Amalric Coif +1", waist="Gishdubar Sash", back="Grapevine Cape"})
sets.midcast['Blue Magic'].SkillBasedBuff = sets.midcast['Blue Magic']
sets.midcast['Blue Magic']['Occultation'] = set_combine(sets.midcast['Blue Magic'], {
}) -- 1 shadow per 50 skill
sets.midcast['Blue Magic']['Carcharian Verve'] = set_combine(sets.midcast['Blue Magic'].Buff, {
})
sets.midcast['Enhancing Magic'] = {
}
sets.midcast.EnhancingDuration = {
}
sets.midcast.Refresh = set_combine(sets.midcast.EnhancingDuration, {head="Amalric Coif +1", waist="Gishdubar Sash", back="Grapevine Cape"})
sets.midcast.Stoneskin = set_combine(sets.midcast.EnhancingDuration, {waist="Siegel Sash"})
sets.midcast.Phalanx = set_combine(sets.midcast.EnhancingDuration, {
body=gear.Taeon_Phalanx_body, --3(10)
hands=gear.Taeon_Phalanx_hands, --3(10)
legs=gear.Taeon_Phalanx_legs, --3(10)
feet=gear.Taeon_Phalanx_feet, --3(10)
})
sets.midcast.Aquaveil = set_combine(sets.midcast.EnhancingDuration, {head="Amalric Coif +1", waist="Emphatikos Rope"})
sets.midcast.Protect = set_combine(sets.midcast.EnhancingDuration, {ring1="Sheltered Ring"})
sets.midcast.Protectra = sets.midcast.Protect
sets.midcast.Shell = sets.midcast.Protect
sets.midcast.Shellra = sets.midcast.Protect
sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
------------------------------------------------------------------------------------------------
----------------------------------------- Idle Sets --------------------------------------------
------------------------------------------------------------------------------------------------
-- Resting sets
sets.resting = {}
-- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
sets.idle = {
ammo = "Jukukik Feather",
head = "Shned. Chapeau +1",
neck = "Mirage Stole",
ear1 = "Brutal Earring",
ear2 = "Suppanomimi",
body = "Assim. Jubbah +1",
hands = "Shned. Gloves +1",
ring1 = "Epona's Ring",
ring2 = "Rajas Ring",
back = "Atheling Mantle",
waist = "Twilight Belt",
legs = "Shned. Tights +1",
feet = "Shned. Boots +1",
}
sets.idle.DT = set_combine(sets.idle, {
ammo="Staunch Tathlum +1", --3/3
head="Volte Cap",
body="Ayanmo Corazza +2", --6/6
hands=gear.Herc_DT_hands, --7/5
feet="Ahosi Leggings", --4/0
neck="Loricate Torque +1", --6/6
ear1="Genmei Earring", --2/0
ear2="Etiolation Earring", --0/3
ring1="Gelatinous Ring +1", --7/(-1)
ring2="Defending Ring", --10/10
back="Moonlight Cape", --6/6
waist="Flume Belt +1", --4/0
})
sets.idle.Town = set_combine(sets.idle, {
ammo = "Jukukik Feather",
head = "Shned. Chapeau +1",
neck = "Mirage Stole",
ear1 = "Brutal Earring",
ear2 = "Suppanomimi",
body = "Assim. Jubbah +1",
hands = "Shned. Gloves +1",
ring1 = "Epona's Ring",
ring2 = "Rajas Ring",
back = "Atheling Mantle",
waist = "Twilight Belt",
legs = "Shned. Tights +1",
feet = "Shned. Boots +1",
})
sets.idle.Weak = sets.idle.DT
--sets.idle.Learning = set_combine(sets.idle, sets.Learning)
------------------------------------------------------------------------------------------------
---------------------------------------- Defense Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.defense.PDT = sets.idle.DT
sets.defense.MDT = sets.idle.DT
------------------------------------------------------------------------------------------------
---------------------------------------- Engaged Sets ------------------------------------------
------------------------------------------------------------------------------------------------
-- 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
sets.engaged = {
ammo = "Jukukik Feather",
head = "Shned. Chapeau +1",
neck = "Mirage Stole",
ear1 = "Brutal Earring",
ear2 = "Suppanomimi",
body = "Shned. Tabard +1",
hands = "Shned. Gloves +1",
ring1 = "Epona's Ring",
ring2 = "Rajas Ring",
back = "Atheling Mantle",
waist = "Twilight Belt",
legs = "Shned. Tights +1",
feet = "Shned. Boots +1",
}
sets.engaged.LowAcc = set_combine(sets.engaged, {
ammo = "Jukukik Feather",
head = "Shned. Chapeau +1",
neck = "Mirage Stole",
ear1 = "Brutal Earring",
ear2 = "Suppanomimi",
body = "Shned. Tabard +1",
hands = "Shned. Gloves +1",
ring1 = "Epona's Ring",
ring2 = "Rajas Ring",
back = "Atheling Mantle",
waist = "Twilight Belt",
legs = "Shned. Tights +1",
feet = "Shned. Boots +1",
})
sets.engaged.MidAcc = set_combine(sets.engaged.LowAcc, {
})
sets.engaged.HighAcc = set_combine(sets.engaged.MidAcc, {
head = "Thur. Chapeau +1",
ring1 = "Ulthalam's Ring",
back = "Moondoe Mantle +1",
waist = "Dynamic Belt +1",
})
sets.engaged.STP = set_combine(sets.engaged, {
})
-- Base Dual-Wield Values:
-- * DW6: +37%
-- * DW5: +35%
-- * DW4: +30%
-- * DW3: +25% (NIN Subjob)
-- * DW2: +15% (DNC Subjob)
-- * DW1: +10%
-- No Magic Haste (74% DW to cap)
sets.engaged.DW = {
ammo = "Jukukik Feather",
head = "Shned. Chapeau +1",
neck = "Mirage Stole",
ear1 = "Brutal Earring",
ear2 = "Suppanomimi",
body = "Shned. Tabard +1",
hands = "Shned. Gloves +1",
ring1 = "Epona's Ring",
ring2 = "Rajas Ring",
back = "Atheling Mantle",
waist = "Twilight Belt",
legs = "Shned. Tights +1",
feet = "Shned. Boots +1",
} -- 37%
sets.engaged.DW.LowAcc = set_combine(sets.engaged.DW, {
})
sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW.LowAcc, {
})
sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW.MidAcc, {
head = "Thur. Chapeau +1",
ring1 = "Ulthalam's Ring",
back = "Moondoe Mantle +1",
waist = "Dynamic Belt +1",
})
sets.engaged.DW.STP = set_combine(sets.engaged.DW, {
})
-- 15% Magic Haste (67% DW to cap)
sets.engaged.DW.LowHaste = set_combine(sets.engaged.DW, {
}) -- 37%
sets.engaged.DW.LowAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, {
})
sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, {
})
sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, {
})
sets.engaged.DW.STP.LowHaste = set_combine(sets.engaged.DW.LowHaste, {
})
-- 30% Magic Haste (56% DW to cap)
sets.engaged.DW.MidHaste = {
}
sets.engaged.DW.LowAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, {
})
sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, {
})
sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, {
})
sets.engaged.DW.STP.MidHaste = set_combine(sets.engaged.DW.MidHaste, {
ear1="Dedition Earring",
ring1={name="Chirich Ring +1", bag="wardrobe3"},
ring2={name="Chirich Ring +1", bag="wardrobe4"},
})
-- 35% Magic Haste (51% DW to cap)
sets.engaged.DW.HighHaste = {
} -- 22%
sets.engaged.DW.LowAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, {
})
sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, {
})
sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, {
})
sets.engaged.DW.STP.HighHaste = set_combine(sets.engaged.DW.HighHaste, {
})
-- 45% Magic Haste (36% DW to cap)
sets.engaged.DW.MaxHaste = {
} -- 6%
sets.engaged.DW.LowAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, {
})
sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, {
})
sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, {
})
sets.engaged.DW.STP.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, {
})
------------------------------------------------------------------------------------------------
---------------------------------------- Hybrid Sets -------------------------------------------
------------------------------------------------------------------------------------------------
sets.engaged.Hybrid = {
}
sets.engaged.DT = set_combine(sets.engaged, sets.engaged.Hybrid)
sets.engaged.LowAcc.DT = set_combine(sets.engaged.LowAcc, sets.engaged.Hybrid)
sets.engaged.MidAcc.DT = set_combine(sets.engaged.MidAcc, sets.engaged.Hybrid)
sets.engaged.HighAcc.DT = set_combine(sets.engaged.HighAcc, sets.engaged.Hybrid)
sets.engaged.STP.DT = set_combine(sets.engaged.STP, sets.engaged.Hybrid)
sets.engaged.DW.DT = set_combine(sets.engaged.DW, sets.engaged.Hybrid)
sets.engaged.DW.LowAcc.DT = set_combine(sets.engaged.DW.LowAcc, sets.engaged.Hybrid)
sets.engaged.DW.MidAcc.DT = set_combine(sets.engaged.DW.MidAcc, sets.engaged.Hybrid)
sets.engaged.DW.HighAcc.DT = set_combine(sets.engaged.DW.HighAcc, sets.engaged.Hybrid)
sets.engaged.DW.STP.DT = set_combine(sets.engaged.DW.STP, sets.engaged.Hybrid)
sets.engaged.DW.DT.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Hybrid)
sets.engaged.DW.LowAcc.DT.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.Hybrid)
sets.engaged.DW.MidAcc.DT.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.Hybrid)
sets.engaged.DW.HighAcc.DT.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.Hybrid)
sets.engaged.DW.STP.DT.LowHaste = set_combine(sets.engaged.DW.STP.LowHaste, sets.engaged.Hybrid)
sets.engaged.DW.DT.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Hybrid)
sets.engaged.DW.LowAcc.DT.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.Hybrid)
sets.engaged.DW.MidAcc.DT.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.Hybrid)
sets.engaged.DW.HighAcc.DT.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.Hybrid)
sets.engaged.DW.STP.DT.MidHaste = set_combine(sets.engaged.DW.STP.MidHaste, sets.engaged.Hybrid)
sets.engaged.DW.DT.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Hybrid)
sets.engaged.DW.LowAcc.DT.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.Hybrid)
sets.engaged.DW.MidAcc.DT.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.Hybrid)
sets.engaged.DW.HighAcc.DT.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.Hybrid)
sets.engaged.DW.STP.DT.HighHaste = set_combine(sets.engaged.DW.HighHaste.STP, sets.engaged.Hybrid)
sets.engaged.DW.DT.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.Hybrid)
sets.engaged.DW.LowAcc.DT.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.Hybrid)
sets.engaged.DW.MidAcc.DT.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.Hybrid)
sets.engaged.DW.HighAcc.DT.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.Hybrid)
sets.engaged.DW.STP.DT.MaxHaste = set_combine(sets.engaged.DW.STP.MaxHaste, sets.engaged.Hybrid)
------------------------------------------------------------------------------------------------
---------------------------------------- Special Sets ------------------------------------------
------------------------------------------------------------------------------------------------
sets.magic_burst = set_combine(sets.midcast['Blue Magic'].Magical, {
})
sets.Kiting = {legs="Carmine Cuisses +1"}
--sets.Learning = {hands="Assim. Bazu. +1"}
sets.latent_refresh = {waist="Fucho-no-obi"}
sets.buff.Doom = {
ring1 = "Saida Ring",
ring2 = "Purity Ring",
waist = "Gishdubar Sash",
}
sets.CP = {back="Mecisto. Mantle"}
sets.TreasureHunter = {head="Volte Cap", hands=gear.Herc_TH_hands, waist="Chaac Belt"}
sets.midcast.Dia = sets.TreasureHunter
sets.midcast.Diaga = sets.TreasureHunter
sets.midcast.Bio = sets.TreasureHunter
--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)
if unbridled_spells:contains(spell.english) and not state.Buff['Unbridled Learning'] then
eventArgs.cancel = true
windower.send_command('@input /ja "Unbridled Learning" <me>; wait 1.5; input /ma "'..spell.name..'" '..spell.target.name)
end
if 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
-- Run after the default midcast() is done.
-- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
function job_post_midcast(spell, action, spellMap, eventArgs)
-- Add enhancement gear for Chain Affinity, etc.
if spell.skill == 'Blue Magic' then
for buff,active in pairs(state.Buff) do
if active and sets.buff[buff] then
equip(sets.buff[buff])
end
end
if spellMap == 'Healing' and spell.target.type == 'SELF' then
equip(sets.midcast['Blue Magic'].HealingSelf)
end
end
if spell.skill == 'Enhancing Magic' and classes.NoSkillSpells:contains(spell.english) then
equip(sets.midcast.EnhancingDuration)
if spellMap == 'Refresh' then
equip(sets.midcast.Refresh)
end
end
end
function job_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted then
if spell.english == "Dream Flower" then
send_command('@timers c "Dream Flower ['..spell.target.name..']" 90 down spells/00098.png')
elseif spell.english == "Soporific" then
send_command('@timers c "Sleep ['..spell.target.name..']" 90 down spells/00259.png')
elseif spell.english == "Sheep Song" then
send_command('@timers c "Sheep Song ['..spell.target.name..']" 60 down spells/00098.png')
elseif spell.english == "Yawn" then
send_command('@timers c "Yawn ['..spell.target.name..']" 60 down spells/00098.png')
elseif spell.english == "Entomb" then
send_command('@timers c "Entomb ['..spell.target.name..']" 60 down spells/00547.png')
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff,gain)
-- if buffactive['Reive Mark'] then
-- if gain then
-- equip(sets.Reive)
-- disable('neck')
-- else
-- enable('neck')
-- 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
-------------------------------------------------------------------------------------------------------------------
-- 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)
th_update(cmdParams, eventArgs)
end
function update_combat_form()
if DW == true then
state.CombatForm:set('DW')
elseif DW == false then
state.CombatForm:reset()
end
end
-- Custom spell mapping.
-- Return custom spellMap value that can override the default spell mapping.
-- Don't return anything to allow default spell mapping to be used.
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Blue Magic' then
for category,spell_list in pairs(blue_magic_maps) do
if spell_list:contains(spell.english) then
return category
end
end
end
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
if state.CP.current == 'on' then
equip(sets.CP)
disable('back')
else
enable('back')
end
--if state.IdleMode.value == 'Learning' then
-- equip(sets.Learning)
-- disable('hands')
--else
-- enable('hands')
--end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
return meleeSet
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 cf_msg = ''
if state.CombatForm.has_value then
cf_msg = ' (' ..state.CombatForm.value.. ')'
end
local m_msg = state.OffenseMode.value
if state.HybridMode.value ~= 'Normal' then
m_msg = m_msg .. '/' ..state.HybridMode.value
end
local ws_msg = state.WeaponskillMode.value
local c_msg = state.CastingMode.value
local d_msg = 'None'
if state.DefenseMode.value ~= 'None' then
d_msg = state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value
end
local i_msg = state.IdleMode.value
local msg = ''
if state.TreasureMode.value == 'Tag' then
msg = msg .. ' TH: Tag |'
end
if state.MagicBurst.value then
msg = ' Burst: On |'
end
if state.Kiting.value then
msg = msg .. ' Kiting: On |'
end
add_to_chat(002, '| ' ..string.char(31,210).. 'Melee' ..cf_msg.. ': ' ..string.char(31,001)..m_msg.. string.char(31,002).. ' |'
..string.char(31,207).. ' WS: ' ..string.char(31,001)..ws_msg.. string.char(31,002).. ' |'
..string.char(31,060).. ' Magic: ' ..string.char(31,001)..c_msg.. string.char(31,002).. ' |'
..string.char(31,004).. ' Defense: ' ..string.char(31,001)..d_msg.. string.char(31,002).. ' |'
..string.char(31,008).. ' Idle: ' ..string.char(31,001)..i_msg.. string.char(31,002).. ' |'
..string.char(31,002)..msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
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('HighHaste')
elseif DW_needed > 21 and DW_needed <= 27 then
classes.CustomMeleeGroups:append('MidHaste')
elseif DW_needed > 27 and DW_needed <= 37 then
classes.CustomMeleeGroups:append('LowHaste')
elseif DW_needed > 37 then
classes.CustomMeleeGroups:append('')
end
end
end
function job_self_command(cmdParams, eventArgs)
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 update_active_abilities()
state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
state.Buff['Efflux'] = buffactive['Efflux'] or false
state.Buff['Diffusion'] = buffactive['Diffusion'] or false
end
-- State buff checks that will equip buff gear and mark the event as handled.
function apply_ability_bonuses(spell, action, spellMap)
if state.Buff['Burst Affinity'] and (spellMap == 'Magical' or spellMap == 'MagicalLight' or spellMap == 'MagicalDark' or spellMap == 'Breath') then
if state.MagicBurst.value then
equip(sets.magic_burst)
end
equip(sets.buff['Burst Affinity'])
end
if state.Buff.Efflux and spellMap == 'Physical' then
equip(sets.buff['Efflux'])
end
if state.Buff.Diffusion and (spellMap == 'Buffs' or spellMap == 'BlueSkill') then
equip(sets.buff['Diffusion'])
end
if state.Buff['Burst Affinity'] then equip (sets.buff['Burst Affinity']) end
if state.Buff['Efflux'] then equip (sets.buff['Efflux']) end
if state.Buff['Diffusion'] then equip (sets.buff['Diffusion']) end
end
-- Check for various actions that we've specified in user code as being used with TH gear.
-- This will only ever be called if TreasureMode is not 'None'.
-- Category and Param are as specified in the action event packet.
function th_action_check(category, param)
if category == 2 or -- any ranged attack
--category == 4 or -- any magic action
(category == 3 and param == 30) or -- Aeolian Edge
(category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
(category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
then return true
end
end
windower.register_event('zone change',
function()
send_command('gi ugs true')
end
)
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'WAR' then
set_macro_page(1, 15)
elseif player.sub_job == 'RDM' then
set_macro_page(2, 15)
else
set_macro_page(1, 15)
end
end
function set_lockstyle()
end
Server: Siren
Game: FFXI
Posts: 1028
By Siren.Demetreos 2019-06-02 07:20:13
Lakshmi.Ashtopcat said: »but if you can remember to hit capacity mode in a toggle, why can't you just //gs disable back? I basically just added //gs disable back to the toggle command so I don't have to remember.
Code function customize_idle_set(idleSet) --Equip CP cape then disable back slot.
if state.CP.current == 'on' then
equip(sets.CP)
disable('back')
else
enable('back')
end
return idleSet
end
@Mcdougall Depends on which way you want to do it.
By Mcdougall 2019-06-02 15:19:39
I just want to be able to manually equip it and the gearswap to not automatically take it off. At least until the item is used.
Server: Sylph
Game: FFXI
Posts: 305
By Sylph.Elgorian 2019-06-04 21:18:12
Followup:
Got everything working, but I was trying to create an include file of my own to use with my jobs so I don't have to add/update the code across multiple files.
Code
--Lock Certain Gear based on Equipped Items
function precast(spell)
--Disable Head Slot
if player.equipment.head == 'Reraise Hairpin'
then disable('head') else enable('head') end
--Disable Earring Slot
if player.equipment.left_ear == 'Reraise Earring'
then disable('ear1') else enable('ear1') end
--Disable Ring Slot
--Teleport Rings
if player.equipment.left_ring == 'Warp Ring'
or player.equipment.left_ring == 'Dim. Ring (Dem)'
or player.equipment.left_ring == 'Dim. Ring (Holla)'
or player.equipment.left_ring == 'Pashhow Ring'
or player.equipment.left_ring == 'Olduum Ring'
--XP Rings
or player.equipment.left_ring == 'Caliber Ring'
or player.equipment.left_ring == 'Echad Ring'
or player.equipment.left_ring == 'Undecennial Ring'
or player.equipment.left_ring == 'Duodec. Ring'
--CP Rings
or player.equipment.left_ring == 'Facility Ring'
or player.equipment.left_ring == 'Trizek Ring'
or player.equipment.left_ring == 'Capacity Ring'
or player.equipment.left_ring == 'Vocation Ring'
--Other Rings
or player.equipment.left_ring == "Craftmaster's Ring"
then disable('ring1') else enable('ring1') end
--Disable Back Slot
if player.equipment.back == 'Aptitude Mantle'
or player.equipment.back == 'Nexus Cape'
then disable('back') else enable('back') end
--Disable Body Slot
if player.equipment.body == "Carpenter's Apron"
then disable('body') else enable('body') end
end
--Lock Certain Gear based on Equipped Items
function status_change(new,old)
--Disable Head Slot
if player.equipment.head == 'Reraise Hairpin'
then disable('head') else enable('head') end
--Disable Earring Slot
if player.equipment.left_ear == 'Reraise Earring'
then disable('ear1') else enable('ear1') end
--Disable Ring Slot
--Teleport Rings
if player.equipment.left_ring == 'Warp Ring'
or player.equipment.left_ring == 'Dim. Ring (Dem)'
or player.equipment.left_ring == 'Dim. Ring (Holla)'
or player.equipment.left_ring == 'Pashhow Ring'
or player.equipment.left_ring == 'Olduum Ring'
--XP Rings
or player.equipment.left_ring == 'Caliber Ring'
or player.equipment.left_ring == 'Echad Ring'
or player.equipment.left_ring == 'Undecennial Ring'
or player.equipment.left_ring == 'Duodec. Ring'
--CP Rings
or player.equipment.left_ring == 'Facility Ring'
or player.equipment.left_ring == 'Trizek Ring'
or player.equipment.left_ring == 'Capacity Ring'
or player.equipment.left_ring == 'Vocation Ring'
--Other Rings
or player.equipment.left_ring == "Craftmaster's Ring"
then disable('ring1') else enable('ring1') end
--Disable Back Slot
if player.equipment.back == 'Aptitude Mantle'
or player.equipment.back == 'Nexus Cape'
then disable('back') else enable('back') end
--Disable Body Slot
if player.equipment.body == "Carpenter's Apron"
then disable('body') else enable('body') end
end
The above is what I have in the include file I'm trying to use, which is what I had in my indivdual job files and it worked.
The only thing I can figure is that when it pulls from the include file it can't have two function precast etc in the same file.
Bismarck.Xurion
Server: Bismarck
Game: FFXI
Posts: 694
By Bismarck.Xurion 2019-06-05 02:43:11
You'd need to reference this function from each of your job precast functions.
You can do this nicely by simply returning a table of functions from that file instead of defining them globally:
Code
return {
precast = function (spell)
--logic here
end,
status_change = function (new, old)
--logic here
end
}
When you require it in your Gearswap file, you can reference it:
Code
common_funcs = require('common') --assuming it is called common.lua
common_funcs.precast(spell) --in your precast func
common_funcs.status_change(old, new) --in your status change event
trying to figure out why this isn't working:
Code
if player.equipment.back == 'Aptitude Mantle' then disable('back') else enable('back') end
if player.equipment.back == 'Nexus Cape' then disable('back') else enable('back') end
Everything else is working, body, rings, head, just cannot get backs to work.
|
|