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
- -------------------------------------------------------------------------------------------------------------------
- -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
- -------------------------------------------------------------------------------------------------------------------
- -- Setup vars that are user-dependent. Can override this function in a sidecar file.
- function user_setup()
- state.OffenseMode:options('Ranged', 'Melee', 'Acc','Capacity')
- state.RangedMode:options('Normal', 'Acc')
- state.WeaponskillMode:options('Normal', 'Acc', 'Att', 'Mod')
- state.CastingMode:options('Normal', 'Resistant')
- state.IdleMode:options('Normal', 'PDT', 'Refresh','Capacity')
- gear.RAbullet = "Chrono bullet"
- gear.WSbullet = "Chrono Bullet"
- gear.MAbullet = "Chrono Bullet"
- gear.QDbullet = "Animikii Bullet"
- options.ammo_warning_limit = 10
- -- Additional local binds
- --^ ctrl key
- --! alt key
- --@ windows key
- --# apps key
- --COR JA--
- send_command('bind !space input /map')
- send_command('bind !- gs c toggle LuzafRing')
- send_command('bind !` input /ja "Double-up" <me>')
- send_command('bind ^` input /ja "Bolter\'s Roll" <me>')
- send_command('bind @` input /ja "Snake eye" <me>')
- send_command('bind #^f input /ja "Fold" <me>')
- send_command('bind !c input /ra <t>')
- --COR WS--
- send_command('bind !a input /ws "Requiescat" <t>')
- send_command('bind !f input /ws "Leaden Salute" <t>')
- send_command('bind !n input /ws "Last stand" <t>')
- send_command('bind ` input /ja "Spectral Jig" <me>')
- send_command('bind [ input /ja "Healing Waltz" <me>')
- send_command('bind !; input /ja "Curing Waltz III" <stpt>')
- send_command('bind ^h input /ja "Haste samba" <me>')
- send_command('bind ^m input /ja "Quickstep" <t>')
- send_command('bind ^, input /ja "Box step" <t>')
- send_command('bind ^. input /ja "Stutter step" <t>')
- send_command('bind ^o input /ja "Reverse flourish" <me>')
- send_command('bind !/ input /checkparam <me>')
- --Lara spellbinds offensive--
- send_command('bind ^#q input //send larael geofrailty <bt>')
- send_command('bind ^#w input //send larael geotorpor <bt>')
- send_command('bind ^#a input //send larael geomalaise <bt>')
- send_command('bind ^#s input //send larael geolanguor <bt>')
- send_command('bind #q input //send larael indifury')
- send_command('bind #w input //send larael indiprecision')
- send_command('bind #a input //send larael indiacumen')
- send_command('bind #s input //send larael indifocus')
- send_command('bind #f input //send larael indihaste')
- send_command('bind #v input //send larael cure4 icewell')
- --Lara tagging--
- send_command('bind ^space input //send larael frazzle <bt>')
- send_command('bind #v input //send larael dia2 <bt>')
- send_command('bind ^@o input //send larael aspir2 <bt>')
- --Lara spellbinds defensive--
- send_command('bind @^u input //send larael geowilt <bt>')
- send_command('bind @^i input //send larael geoslip <bt>')
- send_command('bind @^j input //send larael geofade <bt>')
- send_command('bind @^k input //send larael geovex <bt>')
- send_command('bind @u input //send larael indibarrier')
- send_command('bind @i input //send larael indivoidance')
- send_command('bind @j input //send larael indifend')
- send_command('bind @k input //send larael indiattunement')
- --Lara JA
- send_command('bind ^#` input //send larael fullcircle')
- send_command('bind ^#b input //send larael blazeofglory')
- send_command('bind ^#d input //send larael dematerialize')
- send_command('bind #d input //send larael lifecycle')
- --Lara following commands
- send_command('bind #delete input //send larael /fe')
- send_command('bind #end input //send larael follow icewell')
- send_command('bind #pagedown input //send larael /dismount')
- -- select_default_macro_book()
- 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 @`')
- 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"}
- sets.precast.JA['Wild Card'] = {feet="Lanun Bottes"}
- sets.precast.JA['Random Deal'] = {body="Lanun Frac"}
- sets.precast.CorsairRoll = {head="Lanun Tricorne",hands="Chasseur's gants +1",
- ring1="Barataria ring",back="Gunslinger's cape",legs="Desultor tassets"}
- sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Chasseur's Culottes"})
- sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Navarch's Bottes +2"})
- sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chasseur's Tricorne"})
- sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +1"})
- sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's gants +1"})
- sets.precast.LuzafRing = {ring2="Luzaf's Ring"}
- sets.precast.FoldDoubleBust = {hands="Lanun Gants"}
- sets.precast.CorsairShot = {ammo=gear.QDbullet}
- -- Waltz set (chr and vit)
- sets.precast.Waltz = {
- head="Haruspex hat",
- body="Lak. frac +1",hands={ name="Herculean Gloves", augments={'Attack+24','"Waltz" potency +9%','STR+13',}},ring1="Kunaji Ring",ring2="Asklepian Ring",
- feet="Rawhide boots"}
- -- Don't need any special gear for Healing Waltz.
- sets.precast.Waltz['Healing Waltz'] = {}
- -- Fast cast sets for spells
- sets.precast.FC = {head="Herculean helm",neck="Orunmila's torque",
- ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring"}
- sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Orunmila's torque"})
- sets.precast.RA = {ammo=gear.RAbullet,
- head="Chasseur's tricorne",neck="Marked gorget",ear1="Clearview earring",ear2="Enervating Earring",
- body="Laksamana's Frac +1",hands="Carmine finger gauntlets",ring1="Hajduk ring",ring2="Hajduk ring",
- back="Gunslinger's cape",waist="Impulse belt",legs="Meghanada chausses +1",feet="Meghanada jambeaux +1"}
- -- Put recycle gear in here
- sets.midcast.RA.Acc = {ammo=gear.RAbullet,
- head="Meghanada visor +1",neck="Marked gorget",ear1="Clearview earring",ear2="Enervating Earring",
- body="Meghanada cuirie +1",hands="Meghanada gloves +1",ring1="Hajduk Ring",ring2="Hajduk Ring",
- back="Gunslinger's cape",waist="Eschan stone",legs="Meghanada chausses +1",feet="Meghanada jambeaux +1"}
- -- Weaponskill sets
- -- Default set for any weaponskill that isn't any more specifically defined
- sets.precast.WS = {
- head="Herculean helm",neck="Fotia gorget",ear1="Friomisi Earring",ear2="Hecate's Earring",
- body="Samnuha coat",ring1="Rajas Ring",ring2="Hajduk Ring",
- back="Camulus's mantle",waist="Fotia belt",feet="Herculean boots"}
- -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
- sets.precast.WS['Evisceration'] = sets.precast.WS
- sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {legs="Nahtirah Trousers"})
- sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {
- head="Laksamana's hat +1",neck="Fotia gorget",ear1="Brutal earring",ear2="Moonshade earring",
- body="Samnuha coat",hands="Rawhide gloves",
- back="Vespid mantle",waist="Fotia belt",legs="Nahtirah Trousers",feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+3','AGI+10','Attack+3',}}})
- sets.precast.WS['Last Stand'] = {ammo=gear.WSbullet,
- head="Meghanada visor +1",neck="Fotia gorget",ear1="Clearview Earring",ear2="Moonshade earring",
- body="Meghanada cuirie +1",hands="Meghanada gloves +1",ring1="Garuda Ring",ring2="Garuda Ring",
- back="Gunslinger's cape",waist="Fotia belt",legs="Meghanada chausses +1",feet="Meghanada jambeaux +1"}
- sets.precast.WS['Last Stand'].Acc = {ammo=gear.WSbullet,
- head="Laksamana's hat +1",neck=gear.ElementalGorget,ear1="Clearview Earring",ear2="",
- body="Laksamana's Frac",hands="Buremte Gloves",ring1="Hajduk Ring",ring2="Stormsoul Ring",
- back="Gunslinger's cape",waist="Fotia belt",legs="Thurandaut Tights +1",feet="Laksamana's Bottes"}
- sets.precast.WS['Wildfire'] = {ammo=gear.MAbullet,
- head="Herculean helm",neck="Sanctity necklace",ear1="Friomisi Earring",ear2="Hecate's Earring",
- body="Samnuha coat",hands={ name="Herculean Gloves", augments={'"Mag.Atk.Bns."+23','Rng.Atk.+23','Accuracy+5 Attack+5','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},ring1="Garuda Ring",ring2="Garuda Ring",
- back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Weapon skill damage +10%',}},waist="Eschan stone",
- legs={ name="Herculean Trousers", augments={'"Mag.Atk.Bns."+29','"Fast Cast"+3','Accuracy+8 Attack+8','Mag. Acc.+12 "Mag.Atk.Bns."+12',}},feet={ name="Herculean Boots", augments={'Mag. Acc.+16 "Mag.Atk.Bns."+16','Mag. Acc.+7','"Mag.Atk.Bns."+13',}}}
- sets.precast.WS['Wildfire'].Brew = {ammo=gear.MAbullet,
- head="Lak. hat+1",neck="Sanctity necklace",ear1="Moldavite Earring",ear2="Hecate's Earring",
- body="Samnuha coat",hands={ name="Herculean Gloves", augments={'"Mag.Atk.Bns."+23','Rng.Atk.+23','Accuracy+5 Attack+5','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},ring1="Garuda Ring",ring2="Garuda Ring",
- back="Camulus's mantle",waist="Fotia belt",legs="Ta'lab trousers",feet="Herculean boots"}
- sets.precast.WS['Leaden Salute'] = set_combine(sets.precast.WS['Wildfire'],
- {head="Pixie hairpin +1",ring2="Archon ring"})
- sets.precast.WS['Leaden Salute'].Mod = set_combine(sets.precast.WS['Wildfire'],
- {head="Pixie hairpin +1",ring1="Garuda ring",ring2="Archon ring",waist="Hachirin-no-obi"})
- --set_combine(sets.precast.WS['Exenterator'].Mod, {ammo="Qirmiz Tathlum"})
- -- Midcast Sets
- sets.midcast.FastRecast = {}
- -- Specific f
- sets.midcast.Utsusemi = sets.midcast.FastRecast
- sets.midcast.CorsairRoll = {back="Camulus's mantle"}
- sets.midcast.CorsairShot = {ammo=gear.QDbullet,
- head="Laksamana's hat +1",neck="Sanctity necklace",ear1="Friomisi Earring",ear2="Hecate's Earring",
- body="Samnuha coat",hands="Leyline gloves",ring1="Garuda Ring",ring2="Garuda Ring",
- back="Gunslinger's Cape",waist="Eschan stone",legs="Feast hose",feet="Pursuer's gaiters"}
- sets.midcast.CorsairShot.Acc = {ammo=gear.QDbullet,
- head="Laksamana's hat +1",neck="Sanctity necklace",ear1="Lifestorm Earring",ear2="Psystorm Earring",
- body="Samnuha coat",hands="Leyline gloves",ring1="Garuda Ring",ring2="Garuda Ring",
- back="Gunslinger's Mantle",waist="Eschan stone",legs="Chasseur's culottes",feet="Chasseur's bottes"}
- sets.midcast.CorsairShot['Light Shot'] = {ammo=gear.QDbullet,
- head="Laksamana's hat +1",neck="Sanctity necklace",ear1="Lifestorm Earring",ear2="Psystorm Earring",
- body="Samnuha coat",hands="Leyline gloves",ring1="Garuda Ring",ring2="Garuda Ring",
- back="Gunslinger's Mantle",waist="Eschan stone",legs="Chasseur's culottes",feet="Chasseur's bottes"}
- sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
- -- Ranged gear
- sets.midcast.RA = {ammo=gear.RAbullet,
- head="Meghanada visor +1",neck="Marked gorget",ear1="Clearview Earring",ear2="Matanki Earring",
- body="Meghanada cuirie +1",hands="Meghanada gloves +1",ring1="Hajduk Ring",ring2="Hajduk Ring",
- back="Gunslinger's cape",waist="Eschan stone",legs="Feast hose",feet="Meghanada jambeaux +1"}
- sets.midcast.RA.Acc = {ammo=gear.RAbullet,
- head="Chasseur's tricorne",neck="Marked gorget",ear1="Clearview Earring",ear2="Matanki Earring",
- body="Laksamana's Frac +1",hands="Floral gauntlets",ring1="Hajduk Ring",ring2="Hajduk Ring",
- back="Gunslinger's cape",waist="Eschan stone",legs="Samnuha tights",feet="Pursuer's gaiters"}
- -- Sets to return to when not performing an action.
- -- Resting sets
- sets.resting = {ring2="Paguroidea Ring"}
- -- Idle sets
- sets.idle = {range="",ammo=gear.RAbullet,
- head="Chasseur's tricorne",neck="Loricate torque",ear1="Clearview Earring",ear2="Matanki Earring",
- body="Samnuha coat",hands={ name="Herculean Gloves", augments={'"Mag.Atk.Bns."+23','Rng.Atk.+23','Accuracy+5 Attack+5','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},ring1="Rajas Ring",
- back="Gunslinger's cape",waist="Eschan stone",legs="Crimson cuisses"}
- sets.idle.Capacity = set_combine(sets.idle, {back="Aptitude mantle"})
- sets.idle.Town = {main="Fettering blade",sub="Odium",ammo=gear.RAbullet,
- head="Chasseur's tricorne",neck="Loricate torque",ear1="Clearview Earring",ear2="Matanki Earring",
- body="Samnuha coat",hands={ name="Herculean Gloves", augments={'"Mag.Atk.Bns."+23','Rng.Atk.+23','Accuracy+5 Attack+5','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},ring1="Rajas Ring",
- back="Gunslinger's cape",waist="Eschan stone",legs="Crimson cuisses"}
- -- Defense sets
- sets.defense.PDT = {
- neck="Loricate torque",ear1="Clearview Earring",ear2="Matanki Earring",
- ring2="Dark ring",
- waist="Flume Belt"}
- sets.defense.MDT = {
- neck="Loricate torque",ear1="Clearview Earring",ear2="Matanki Earring",
- ring2="Dark Ring",
- waist="Flume Belt"}
- sets.Kiting = {legs="Lanun culottes"}
- -- Engaged sets
- -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
- -- sets if more refined versions aren't defined.
- -- If you create a set with both offense and defense modes, the offense mode should be first.
- -- EG: sets.engaged.Dagger.Accuracy.Evasion
- -- Normal melee group
- sets.engaged.Melee = {main="Fettering blade",sub="Atoyac",ammo=gear.RAbullet,
- head="Adhemar bonnet",neck="Ej necklace",ear1="Bladeborn earring",ear2="Steelflash Earring",
- body="Adhemar Jacket",hands="Adhemar wristbands",ring1="Cacoethic Ring",ring2="Enlivened Ring",
- waist="Kentarch belt +1",legs="Samnuha tights"}
- sets.engaged.Acc = {main="Fettering blade",ammo=gear.RAbullet,
- head="Meghanada visor +1",neck="Ej necklace",ear1="Tati earring",ear2="Steelflash Earring",
- body="Meg. cuirie +1",hands="Meg. gloves +1",ring1="Cacoethic Ring",ring2="Enlivened Ring",
- back="Kayapa cape",waist="Eschan stone",legs="Meghanada chausses +1",feet="Meghanada jambeaux +1"}
- sets.engaged.Melee.DW = {main="Fettering blade",sub="Odium",ammo=gear.RAbullet,
- head="Adhemar bonnet",neck="Ej necklace",ear1="Tati earring",ear2="Steelflash Earring",
- body="Adhemar Jacket",hands="Rawhide gloves",ring1="Cacoethic Ring",ring2="Enlivened Ring",
- back="Kayapa cape",waist="Kentarch belt",legs="Samnuha tights"}
- sets.engaged.Acc.DW = {main="Fettering blade",sub="Odium",ammo=gear.RAbullet,
- head="Adhemar bonnet",neck="Ej necklace",ear1="Tati earring",ear2="Steelflash Earring",
- body="Adhemar Jacket",hands="Rawhide gloves",ring1="Cacoethic Ring",ring2="Enlivened Ring",
- back="Kayapa cape",waist="Eschan stone",legs="Samnuha tights"}
- sets.engaged.Ranged = {ammo=gear.RAbullet,
- head="Umbani cap",neck="Ej necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
- hands="Floral gauntlets",ring1="Hajduk Ring",ring2="Hajduk ring",
- back="Gunslinger's cape",waist="Eschan stone",legs="Feast hose",feet="Pursuer's gaiters"}
- sets.engaged.Capacity = set_combine(sets.engaged.Ranged, {back="Aptitude mantle"})
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Job-specific hooks for standard casting events.
- -------------------------------------------------------------------------------------------------------------------
- -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
- -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
- function job_precast(spell, action, spellMap, eventArgs)
- -- Check that proper ammo is available if we're using ranged attacks or similar.
- if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
- do_bullet_checks(spell, spellMap, eventArgs)
- end
- if spell.skill == "Leaden salute" and spell.element == world.weather_element
- then equipSet = set_combine(equipSet,{waist="Hachirin-no-Obi"})
- end
- -- gear sets
- if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing.value then
- equip(sets.precast.LuzafRing)
- elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
- classes.CustomClass = 'Acc'
- elseif spell.english == 'Fold' and buffactive['Bust'] == 2 then
- if sets.precast.FoldDoubleBust then
- equip(sets.precast.FoldDoubleBust)
- eventArgs.handled = true
- end
- end
- end
- -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
- function job_aftercast(spell, action, spellMap, eventArgs)
- if spell.type == 'CorsairRoll' and not spell.interrupted then
- display_roll_info(spell)
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User code that supplements standard library decisions.
- -------------------------------------------------------------------------------------------------------------------
- -- Return a customized weaponskill mode to use for weaponskill sets.
- -- Don't return anything if you're not overriding the default value.
- function get_custom_wsmode(spell, spellMap, default_wsmode)
- if buffactive['Transcendancy'] then
- return 'Brew'
- end
- end
- -- Called by the 'update' self-command, for common needs.
- -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
- function job_update(cmdParams, eventArgs)
- if newStatus == 'Engaged' and player.equipment.main == 'Chatoyant Staff' then
- state.OffenseMode:set('Ranged')
- end
- end
- -- Set eventArgs.handled to true if we don't want the automatic display to be run.
- function display_current_job_state(eventArgs)
- local msg = ''
- msg = msg .. 'Off.: '..state.OffenseMode.current
- msg = msg .. ', Rng.: '..state.RangedMode.current
- msg = msg .. ', WS.: '..state.WeaponskillMode.current
- msg = msg .. ', QD.: '..state.CastingMode.current
- if state.DefenseMode.value ~= 'None' then
- local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
- msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
- end
- if state.Kiting.value then
- msg = msg .. ', Kiting'
- end
- if state.PCTargetMode.value ~= 'default' then
- msg = msg .. ', Target PC: '..state.PCTargetMode.value
- end
- if state.SelectNPCTargets.value then
- msg = msg .. ', Target NPCs'
- end
- msg = msg .. ', Roll Size: ' .. ((state.LuzafRing.value and 'Large') or 'Small')
- add_to_chat(122, msg)
- eventArgs.handled = true
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Utility functions specific to this job.
- -------------------------------------------------------------------------------------------------------------------
- function define_roll_values()
- rolls = {
- ["Corsair's Roll"] = {lucky=5, unlucky=9, bonus="Experience Points"},
- ["Ninja Roll"] = {lucky=4, unlucky=8, bonus="Evasion"},
- ["Hunter's Roll"] = {lucky=4, unlucky=8, bonus="Accuracy"},
- ["Chaos Roll"] = {lucky=4, unlucky=8, bonus="Attack"},
- ["Magus's Roll"] = {lucky=2, unlucky=6, bonus="Magic Defense"},
- ["Healer's Roll"] = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
- ["Puppet Roll"] = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
- ["Choral Roll"] = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
- ["Monk's Roll"] = {lucky=3, unlucky=7, bonus="Subtle Blow"},
- ["Beast Roll"] = {lucky=4, unlucky=8, bonus="Pet Attack"},
- ["Samurai Roll"] = {lucky=2, unlucky=6, bonus="Store TP"},
- ["Evoker's Roll"] = {lucky=5, unlucky=9, bonus="Refresh"},
- ["Rogue's Roll"] = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
- ["Warlock's Roll"] = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
- ["Fighter's Roll"] = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
- ["Drachen Roll"] = {lucky=3, unlucky=8, 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, spell.english..' >> '..rollinfo.bonus..'. Roll size: '..rollsize)
- add_to_chat(104, 'Lucky '..tostring(rollinfo.lucky)..', Unlucky '..tostring(rollinfo.unlucky)..'.')
- end
- end
- -- Determine whether we have sufficient ammo for the action being attempted.
- function do_bullet_checks(spell, spellMap, eventArgs)
- local bullet_name
- local bullet_min_count = 1
- if spell.type == 'WeaponSkill' then
- if spell.skill == "Marksmanship" then
- if spell.element == 'None' then
- -- physical weaponskills
- bullet_name = gear.WSbullet
- else
- -- magical weaponskills
- bullet_name = gear.MAbullet
- end
- else
- -- Ignore non-ranged weaponskills
- return
- end
- elseif spell.type == 'CorsairShot' then
- bullet_name = gear.QDbullet
- elseif spell.action_type == 'Ranged Attack' then
- bullet_name = gear.RAbullet
- if buffactive['Triple Shot'] then
- bullet_min_count = 3
- end
- end
- local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
- -- If no ammo is available, give appropriate warning and end.
- if not available_bullets then
- if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
- add_to_chat(104, 'No Quick Draw ammo left. Using what\'s currently equipped ('..player.equipment.ammo..').')
- return
- elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
- add_to_chat(104, 'No weaponskill ammo left. Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
- return
- else
- add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
- eventArgs.cancel = true
- return
- end
- end
- -- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
- if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
- add_to_chat(104, 'No ammo will be left for Quick Draw. Cancelling.')
- eventArgs.cancel = true
- return
- end
- -- Low ammo warning.
- if spell.type ~= 'CorsairShot' and state.warned.value == false
- and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
- local msg = '***** Low ammo warning: '..bullet_name..' *****'
- --local border = string.repeat("*", #msg)
- local border = ""
- for i = 1, #msg do
- border = border .. "="
- end
- --add_to_chat(104, border)
- add_to_chat(104, msg)
- --add_to_chat(104, border)
- state.warned:set()
- elseif available_bullets.count > options.ammo_warning_limit and state.warned then
- state.warned:reset()
- end
- end
- -- Select default macro book on initial load or subjob change.
- --function select_default_macro_book()
- -- set_macro_page(1, 19)
- --end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement