Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------------------------------------------------------------------------------------------------------------
- -- Setup functions for this job. Generally should not be modified.
- -------------------------------------------------------------------------------------------------------------------
- --[[
- gs c toggle LuzafRing -- Toggles use of Luzaf Ring on and off
- Offense mode is melee or ranged. Used ranged offense mode if you are engaged
- for ranged weaponskills, but not actually meleeing.
- Weaponskill mode, if set to 'Normal', is handled separately for melee and ranged weaponskills.
- --]]
- -- Initialization function for this job file.
- function get_sets()
- mote_include_version = 2
- -- Load and initialize the include file.
- include('Mote-Include.lua')
- end
- -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
- function job_setup()
- -- Whether to use Luzaf's Ring
- state.LuzafRing = M(false, "Luzaf's Ring")
- -- Whether a warning has been given for low ammo
- state.warned = M(false)
- define_roll_values()
- end
- include('organizer-lib.lua')
- -------------------------------------------------------------------------------------------------------------------
- -- 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.HybridMode:options('Normal','DT')
- state.OffenseMode:options('Normal','SB','Ranged')
- state.IdleMode:options('Normal','SB','Ranged')
- send_command('bind f9 exec bind3.txt')
- send_command('bind F10 gs c cycle HybridMode')
- send_command('bind !f9 input /lockstyleset 5')
- send_command('unbind !f10')
- send_command('unbind ^f10')
- send_command('unbind f11')
- send_command('unbind !f11')
- send_command('bind f12 gs c update user')
- send_command('bind !f12 gs c reset defense')
- gear.RngHead = { name="Herculean Helm", augments={'Rng.Acc.+13 Rng.Atk.+13','Weapon skill damage +3%','Rng.Acc.+8','Rng.Atk.+12',}}
- gear.MagicHead = { name="Herculean Helm", augments={'"Mag.Atk.Bns."+15','Weapon skill damage +4%','STR+7','Mag. Acc.+14',}}
- gear.RngLegs= { name="Herculean Trousers", augments={'Rng.Acc.+14 Rng.Atk.+14','Weapon skill damage +4%','AGI+10','Rng.Atk.+13',}}
- gear.MagicLegs = { name="Herculean Trousers", augments={'Mag. Acc.+18 "Mag.Atk.Bns."+18','Weapon skill damage +3%','MND+8','Mag. Acc.+5','"Mag.Atk.Bns."+10',}}
- gear.CritLegs = { name="Herculean Trousers", augments={'Attack+12','Crit.hit rate+4','DEX+9','Accuracy+14',}}
- gear.SavageLegs = { name="Herculean Trousers", augments={'Attack+28','Weapon skill damage +4%','STR+14',}}
- gear.TPHands = { name="Herculean Gloves", augments={'Accuracy+11 Attack+11','"Triple Atk."+4','AGI+3','Accuracy+9',}}
- gear.DTHands = { name="Herculean Gloves", augments={'Accuracy+24','Damage taken-3%','DEX+3','Attack+7',}}
- gear.SavageBody = { name="Herculean Vest", augments={'Attack+28','Weapon skill damage +4%','STR+12',}}
- gear.TPFeet = { name="Herculean Boots", augments={'Accuracy+18 Attack+18','"Triple Atk."+4',}}
- gear.DTFeet = { name="Herculean Boots", augments={'Rng.Acc.+7','Damage taken-4%','DEX+9','Accuracy+15',}}
- gear.RngFeet = { name="Herculean Boots", augments={'Rng.Atk.+27','Weapon skill damage +3%','Rng.Acc.+11',}}
- gear.MagicFeet = { name="Herculean Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Weapon skill damage +3%','Mag. Acc.+13','"Mag.Atk.Bns."+15',}}
- gear.SavageFeet = { name="Herculean Boots", augments={'Accuracy+24','Weapon skill damage +4%','STR+8',}}
- gear.AgiBack = { name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','"Store TP"+10',}}
- gear.StrBack = { name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}}
- -- Additional local binds
- send_command('bind ^` input /ja "Double-up" <me>')
- send_command('bind !` input /ja "Bolter\'s Roll" <me>')
- select_default_macro_book()
- end
- -- Called when this job file is unloaded (eg: job change)
- function user_unload()
- send_command('unbind ^`')
- send_command('unbind !`')
- end
- -- Define sets and vars used by this job file.
- function init_gear_sets()
- --------------------------------------
- -- Start defining the sets
- --------------------------------------
- -- Precast Sets
- -- Precast sets to enhance JAs
- sets.precast.JA['Triple Shot'] = {body="Chasseur's Frac +1"}
- sets.precast.JA['Snake Eye'] = {legs="Lanun Culottes +1"}
- sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +1"}
- sets.precast.JA['Random Deal'] = {body="Lanun Frac +1"}
- sets.precast.JA['Double-Up'] = {ring1="luzaf's Ring"}
- sets.precast.CorsairRoll = {range="Compensator",head="Lanun Tricorne +1",hands="Chasseur's Gants +1",back="Camulus's Mantle",ring1="Luzaf's Ring",neck="Regal Necklace",legs="Desultor Tassets"}
- sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Chas. Culottes"})
- sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chasseur's Bottes"})
- sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +1"})
- sets.precast.LuzafRing = {ring2="Luzaf's Ring"}
- sets.precast.FoldDoubleBust = {hands="Lanun Gants +1"}
- sets.precast.CorsairShot = {
- head=gear.MagicHead,neck="Sanctity Necklace",ear1="Friomisi Earring",ear2="Hecate's Earring",
- body="Samnuha Coat",hands="Carmine Fin. Ga. +1",ring1="Arvina Ringlet +1",ring2="Dingir Ring",
- back=gear.AgiBack,waist="Eschan Stone",legs=gear.MagicLegs,feet=gear.MagicFeet}
- -- Waltz set (chr and vit)
- sets.precast.Waltz = {}
- -- Don't need any special gear for Healing Waltz.
- sets.precast.Waltz['Healing Waltz'] = {}
- -- Fast cast sets for spells
- sets.precast.FC = {
- head="",neck="Voltsurge Torque",ear1="Loquac. Earring",ear2="",
- body="Dread Jupon",hands="",ring1="Kishar Ring",ring2="Rahab Ring",
- back="",legs="Rawhide Trousers",feet="Carmine Greaves"}
- sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {})
- sets.precast.RA = {ammo="Chrono Bullet",
- head="Taeon Chapeau",
- body="Taeon Tabard",hands="Carmine Fin. Ga. +1",
- back=gear.SnapBack,waist="Yemaya Belt",legs="Adhemar Kecks",feet="Meg. Jam. +1"}
- -- Weaponskill sets
- -- Default set for any weaponskill that isn't any more specifically defined
- sets.precast.WS = {head=gear.RngHead,neck="Fotia Gorget",ear1="Ishvara Earring",ear2="Moonshade Earring",
- body="Laksa. Frac +3",hands="Meg. Gloves +1",ring1="Garuda Ring +1",ring2="Dingir Ring",
- back=gear.AgiBack,waist="Fotia Belt",legs=gear.RngLegs,feet=gear.RngFeet}
- -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
- sets.precast.WS['Evisceration'] = {
- head="Mummu Bonnet +1",neck="Fotia Gorget",ear1="Telos Earring",ear2="Moonshade Earring",
- body="Abnoba Kaftan",hands="Adhemar Wristbands",ring1="Begrudging Ring",ring2="Epona's Ring",
- back=gear.AgiBack,waist="Fotia Belt",legs=gear.CritLegs,feet=gear.TPFeet}
- sets.precast.WS['Savage Blade'] = {
- head="Lilitu Headpiece",neck="Fotia Gorget",ear1="Ishvara Earring",ear2="Moonshade Earring",
- body="Laksa. Frac +3",hands="Meg. Gloves +1",ring1="Ifrit Ring +1",ring2="Epona's Ring",
- back=gear.StrBack,waist="Fotia Belt",legs=gear.SavageLegs,feet=gear.SavageFeet}
- sets.precast.WS['Last Stand'] = {ammo="Chrono Bullet",
- head=gear.RngHead,neck="Fotia Gorget",ear1="Ishvara Earring",ear2="Moonshade Earring",
- body="Laksa. Frac +3",hands="Meg. Gloves +1",ring1="Garuda Ring +1",ring2="Dingir Ring",
- back=gear.AgiBack,waist="Fotia Belt",legs=gear.RngLegs,feet=gear.RngFeet}
- sets.precast.WS['Wildfire'] = {ammo="Chrono Bullet",
- head=gear.MagicHead,neck="Baetyl Pendant",ear1="Friomisi Earring",ear2="Moonshade Earring",
- body="Laksa. Frac +3",hands="Carmine Fin. Ga. +1",ring1="Arvina Ringlet +1",ring2="Dingir Ring",
- back=gear.AgiBack,waist="Eschan Stone",legs=gear.MagicLegs,feet=gear.MagicFeet}
- sets.precast.WS['Wildfire'].Brew = set_combine(sets.precast.WS['Wildfire'],{})
- sets.precast.WS['Leaden Salute'] = {ammo="Chrono Bullet",
- head=gear.MagicHead,neck="Baetyl Pendant",ear1="Friomisi Earring",ear2="Moonshade Earring",
- body="Laksa. Frac +3",hands="Carmine Fin. Ga. +1",ring1="Arvina Ringlet +1",ring2="Dingir Ring",
- back=gear.AgiBack,waist="Eschan Stone",legs=gear.MagicLegs,feet=gear.MagicFeet}
- -- Midcast Sets
- sets.midcast.FastRecast = {}
- -- Specific spells
- sets.midcast.Utsusemi = sets.midcast.FastRecast
- sets.midcast.Cure = {main="Chatoyant Staff",sub="Achaq Grip"}
- -- Ranged gear
- sets.buff['Triple Shot'] = {ammo=gear.RAbullet,
- head="Meghanada Visor +1",neck="Iskur Gorget",ear1="Telos Earring",ear2="Neritic Earring",
- body="Chasseur's Frac +1",hands="Adhemar Wristbands",ring1="Ilabrat Ring",ring2="Dingir Ring",
- back=gear.AgiBack,waist="Yemaya Belt",legs="Meg. Chausses +1",feet="Meg. Jam. +1"}
- sets.midcast.RA = {ammo=gear.RAbullet,
- head="Meghanada Visor +1",neck="Iskur Gorget",ear1="Telos Earring",ear2="Neritic Earring",
- body="Laksa. Frac +3",hands="Adhemar Wristbands",ring1="Ilabrat Ring",ring2="Dingir Ring",
- back=gear.AgiBack,waist="Yemaya Belt",legs="Meg. Chausses +1",feet="Meg. Jam. +1"}
- -- Sets to return to when not performing an action.
- -- Resting sets
- sets.resting = {}
- -- Idle sets
- sets.idle = {main="Fettering Blade",sub="Demers. Degen +1",Range="Fomalhaut",ammo="Chrono Bullet",
- head="Meghanada Visor +1",neck="Twilight Torque",ear1="Sanare Earring",ear2="Ethereal Earring",
- body="Meg. Cuirie +1",hands=gear.DTHands,ring1="Dark Ring",ring2="Defending Ring",
- back="Solemnity Cape",waist="Chaac Belt",legs="Meg. Chausses +1",feet="Skadi's Jambeaux +1"}
- sets.idle.SB = {main="Fettering Blade",sub="Demers. Degen +1",Range="Anarchy +2",ammo="Chrono Bullet",
- head="Meghanada Visor +1",neck="Twilight Torque",ear1="Sanare Earring",ear2="Ethereal Earring",
- body="Meg. Cuirie +1",hands=gear.DTHands,ring1="Dark Ring",ring2="Defending Ring",
- back="Solemnity Cape",waist="Chaac Belt",legs="Meg. Chausses +1",feet="Skadi's Jambeaux +1"}
- sets.ExtraRegen = {main="Fettering Blade",sub="Demers. Degen +1",
- head="Ocelomeh Headpiece +1",neck="Bathy Choker +1",ear1="Sanare Earring",ear2="Ethereal Earring",
- body="Meg. Cuirie +1",hands=gear.DTHands,ring1="Sheltered Ring",ring2="Paguroidea Ring",
- back="Solemnity Cape",waist="Chaac Belt",legs="Meg. Chausses +1",feet="Skadi's Jambeaux +1"}
- sets.idle.Ranged = {main="Fettering Blade",sub="Nusku Shield",Range="Fomalhaut",ammo="Chrono Bullet",
- head="Meghanada Visor +1",neck="Twilight Torque",ear1="Sanare Earring",ear2="Ethereal Earring",
- body="Meg. Cuirie +1",hands=gear.DTHands,ring1="Dark Ring",ring2="Defending Ring",
- back="Solemnity Cape",waist="Chaac Belt",legs="Meg. Chausses +1",feet="Skadi's Jambeaux +1"}
- sets.idle.Town = {main="Fettering Blade",sub="Demers. Degen +1",Range="Fomalhaut",ammo="Chrono Bullet",
- head="Meghanada Visor +1",neck="Twilight Torque",ear1="Sanare Earring",ear2="Ethereal Earring",
- body="Councilor's Garb",hands=gear.DTHands,ring1="Dark Ring",ring2="Defending Ring",
- back="Solemnity Cape",waist="Chaac Belt",legs="Meg. Chausses +1",feet="Skadi's Jambeaux +1"}
- -- Defense sets
- sets.Kiting = {}
- -- Engaged sets
- -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
- -- sets if more refined versions aren't defined.
- -- If you create a set with both offense and defense modes, the offense mode should be first.
- -- EG: sets.engaged.Dagger.Accuracy.Evasion
- -- Normal melee group
- sets.engaged = {main="Fettering Blade",sub="Demers. Degen +1",range="Fomalhaut",ammo="Chrono Bullet",
- head="Dampening Tam",neck="Combatant's Torque",ear1="Telos Earring",ear2="Zennaroi Earring",
- body="Adhemar Jacket",hands="Floral Gauntlets",ring1="Ilabrat Ring",ring2="Epona's Ring",
- back=gear.StrBack,waist="Windbuffet Belt +1",legs="Meg. Chausses +1",feet=gear.TPFeet}
- sets.engaged.DT = {main="Fettering Blade",sub="Demers. Degen +1",range="Fomalhaut",ammo="Chrono Bullet",
- head="Dampening Tam",neck="Twilight Torque",ear1="Telos Earring",ear2="Zennaroi Earring",
- body="Adhemar Jacket",hands=gear.DTHands,ring1="Dark Ring",ring2="Defending Ring",
- back="Solemnity Cape",waist="Windbuffet Belt +1",legs="Meg. Chausses +1",feet=gear.DTFeet}
- sets.engaged.SB = {main="Fettering Blade",sub="Demers. Degen +1",range="Anarchy +2",ammo="Chrono Bullet",
- head="Dampening Tam",neck="Combatant's Torque",ear1="Telos Earring",ear2="Zennaroi Earring",
- body="Adhemar Jacket",hands="Floral Gauntlets",ring1="Ilabrat Ring",ring2="Epona's Ring",
- back=gear.StrBack,waist="Windbuffet Belt +1",legs="Meg. Chausses +1",feet=gear.TPFeet}
- sets.engaged.SB.DT = {main="Fettering Blade",sub="Demers. Degen +1",range="Anarchy +2",ammo="Chrono Bullet",
- head="Dampening Tam",neck="Twilight Torque",ear1="Telos Earring",ear2="Zennaroi Earring",
- body="Adhemar Jacket",hands=gear.DTHands,ring1="Dark Ring",ring2="Defending Ring",
- back="Solemnity Cape",waist="Windbuffet Belt +1",legs="Meg. Chausses +1",feet=gear.DTFeet}
- sets.engaged.Ranged = {main="Fettering Blade",sub="Nusku Shield",range="Fomalhaut",ammo="Chrono Bullet",
- head="Meghanada Visor +1",neck="Twilight Torque",ear1="Sanare Earring",ear2="Ethereal Earring",
- body="Meg. Cuirie +1",hands=gear.DTHands,ring1="Dark Ring",ring2="Defending Ring",
- back="Solemnity Cape",waist="Windbuffet Belt +1",legs="Meg. Chausses +1",feet=gear.DTFeet}
- sets.engaged.Ranged.DT = {main="Fettering Blade",sub="Nusku Shield",range="Fomalhaut",ammo="Chrono Bullet",
- head="Meghanada Visor +1",neck="Twilight Torque",ear1="Sanare Earring",ear2="Ethereal Earring",
- body="Meg. Cuirie +1",hands=gear.DTHands,ring1="Dark Ring",ring2="Defending Ring",
- back="Solemnity Cape",waist="Windbuffet Belt +1",legs="Meg. Chausses +1",feet=gear.DTFeet}
- sets.engaged.Acc = {}
- organizer_items = {
- cards = "Trump Card"
- }
- sets.random = {neck="trump card", sub="trump card case",main="ad. bull. pouch"}
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Job-specific hooks for standard casting events.
- -------------------------------------------------------------------------------------------------------------------
- function job_post_midcast(spell, action, spellMap, eventArgs)
- if buffactive['Triple Shot'] then
- equip(sets.buff['Triple Shot'])
- end
- end
- function customize_idle_set(idleSet)
- if player.hpp < 95 then
- idleSet = set_combine(idleSet, sets.ExtraRegen)
- end
- return idleSet
- end
- -- 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)
- -- gear sets
- if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing.value then
- equip(sets.precast.LuzafRing)
- elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
- classes.CustomClass = 'Acc'
- elseif spell.english == 'Fold' and buffactive['Bust'] == 2 then
- if sets.precast.FoldDoubleBust then
- equip(sets.precast.FoldDoubleBust)
- eventArgs.handled = true
- end
- end
- end
- -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
- function job_aftercast(spell, action, spellMap, eventArgs)
- if spell.type == 'CorsairRoll' and not spell.interrupted then
- display_roll_info(spell)
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User code that supplements standard library decisions.
- -------------------------------------------------------------------------------------------------------------------
- -- Set eventArgs.handled to true if we don't want the automatic display to be run.
- function display_current_job_state(eventArgs)
- local msg = ''
- msg = msg .. 'Offense: '..state.OffenseMode.current
- msg = msg .. ', Idle: '..state.IdleMode.current
- msg = msg .. ', Def: '..state.HybridMode.current
- if state.DefenseMode.value ~= 'None' then
- local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
- msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
- end
- if state.Kiting.value then
- msg = msg .. ', Kiting'
- end
- if state.PCTargetMode.value ~= 'default' then
- msg = msg .. ', Target PC: '..state.PCTargetMode.value
- end
- if state.SelectNPCTargets.value then
- msg = msg .. ', Target NPCs'
- end
- add_to_chat(122, msg)
- eventArgs.handled = true
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Utility functions specific to this job.
- -------------------------------------------------------------------------------------------------------------------
- function define_roll_values()
- rolls = {
- ["Corsair's Roll"] = {lucky=5, unlucky=9, bonus="Experience Points"},
- ["Ninja Roll"] = {lucky=4, unlucky=8, bonus="Evasion"},
- ["Hunter's Roll"] = {lucky=4, unlucky=8, bonus="Accuracy"},
- ["Chaos Roll"] = {lucky=4, unlucky=8, bonus="Attack"},
- ["Magus's Roll"] = {lucky=2, unlucky=6, bonus="Magic Defense"},
- ["Healer's Roll"] = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
- ["Puppet Roll"] = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
- ["Choral Roll"] = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
- ["Monk's Roll"] = {lucky=3, unlucky=7, bonus="Subtle Blow"},
- ["Beast Roll"] = {lucky=4, unlucky=8, bonus="Pet Attack"},
- ["Samurai Roll"] = {lucky=2, unlucky=6, bonus="Store TP"},
- ["Evoker's Roll"] = {lucky=5, unlucky=9, bonus="Refresh"},
- ["Rogue's Roll"] = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
- ["Warlock's Roll"] = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
- ["Fighter's Roll"] = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
- ["Drachen Roll"] = {lucky=3, unlucky=7, bonus="Pet Accuracy"},
- ["Gallant's Roll"] = {lucky=3, unlucky=7, bonus="Defense"},
- ["Wizard's Roll"] = {lucky=5, unlucky=9, bonus="Magic Attack"},
- ["Dancer's Roll"] = {lucky=3, unlucky=7, bonus="Regen"},
- ["Scholar's Roll"] = {lucky=2, unlucky=6, bonus="Conserve MP"},
- ["Bolter's Roll"] = {lucky=3, unlucky=9, bonus="Movement Speed"},
- ["Caster's Roll"] = {lucky=2, unlucky=7, bonus="Fast Cast"},
- ["Courser's Roll"] = {lucky=3, unlucky=9, bonus="Snapshot"},
- ["Blitzer's Roll"] = {lucky=4, unlucky=9, bonus="Attack Delay"},
- ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
- ["Allies's Roll"] = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
- ["Miser's Roll"] = {lucky=5, unlucky=7, bonus="Save TP"},
- ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
- ["Avenger's Roll"] = {lucky=4, unlucky=8, bonus="Counter Rate"},
- }
- end
- function display_roll_info(spell)
- rollinfo = rolls[spell.english]
- local rollsize = (state.LuzafRing.value and 'Large') or 'Small'
- if rollinfo then
- add_to_chat(104, spell.english..' provides a bonus to '..rollinfo.bonus..'. Roll size: '..rollsize)
- add_to_chat(104, 'Lucky roll is '..tostring(rollinfo.lucky)..', Unlucky roll is '..tostring(rollinfo.unlucky)..'.')
- end
- end
- -- Select default macro book on initial load or subjob change.
- function select_default_macro_book()
- set_macro_page(1, 11)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement