midash

Orangebear_COR

Jan 4th, 2014
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
XML 24.77 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Initialization function that defines sets and variables to be used.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- IMPORTANT: Make sure to also get the Mote-Include.lua file to go with this.
  6.  
  7. --[[
  8.     gs c toggle luzaf -- Toggles use of Luzaf Ring on and off
  9.    
  10.     Offense mode is melee or ranged.  Used ranged offense mode if you are engaged
  11.     for ranged weaponskills, but not actually meleeing.
  12.     Acc on offense mode (which is intended for melee) will currently use .Acc weaponskill
  13.     mode for both melee and ranged weaponskills.  Need to fix that in core.
  14. --]]
  15.  
  16.  
  17. -- Initialization function for this job file.
  18. function get_sets()
  19.     -- Load and initialize the include file.
  20.     mote_include_version = 2
  21.     include('Mote-Include.lua')
  22.     include('organizer-lib')
  23. end
  24.  
  25. -- Setup vars that are user-independent.
  26. function job_setup()
  27.     -- Whether to use Luzaf's Ring
  28.     state.LuzafRing = M(false, "Luzaf's Ring")
  29.     state.warned = M(false)
  30.     state.CapacityMode = M(false, 'Capacity Point Mantle')
  31.  
  32.     define_roll_values()
  33. end
  34.  
  35.  
  36. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  37. function user_setup()
  38.     state.OffenseMode:options('Normal', 'Melee', 'Acc')
  39.     state.RangedMode:options('Normal', 'Acc')
  40.     state.WeaponskillMode:options('Normal', 'Acc')
  41.     state.PhysicalDefenseMode:options('PDT')   
  42.    
  43.     gear.RAbullet = "Decimating Bullet"
  44.     gear.WSbullet = "Decimating Bullet"
  45.     gear.MAbullet = "Decimating Bullet"
  46.     gear.QDbullet = "Animikii Bullet"
  47.     --gear.QDbullet = "Adlivun Bullet"
  48.     options.ammo_warning_limit = 15
  49.  
  50.     state.AutoRA = M{['description']='Auto RA', 'Normal', 'Shoot', 'WS' }
  51.  
  52.     cor_sub_weapons = S{"Fettering Blade", "Vanir Knife", "Sabebus", "Aphotic Kukri", "Atoyac", "Surcouf's Jambiya"}
  53.     auto_gun_ws = "Wildfire"
  54.  
  55.     get_combat_form()
  56.     -- Additional local binds
  57.     -- Cor doesn't use hybrid Defense mode; using that for ranged mode adjustments.
  58.     send_command('bind ^` input /ja "Double-up" <me>')
  59.     send_command('bind !` input /ja "Bolter\'s Roll" <me>')
  60.     send_command('bind != gs c toggle CapacityMode')
  61.    
  62.     send_command('bind ^- gs c cycle AutoRA')
  63.     select_default_macro_book()
  64. end
  65.  
  66.  
  67. -- Called when this job file is unloaded (eg: job change)
  68. function job_file_unload()
  69.     send_command('unbind ^`')
  70.     send_command('unbind !=')
  71.     send_command('unbind !`')
  72.     send_command('unbind ^-')
  73. end
  74.  
  75. -- Define sets and vars used by this job file.
  76. function init_gear_sets()
  77.     --------------------------------------
  78.     -- Start defining the sets
  79.     --------------------------------------
  80.    
  81.     -- Precast Sets
  82.  
  83.     -- Precast sets to enhance JAs
  84.    
  85.     sets.precast.JA['Triple Shot'] = {body="Navarch's Frac +2"}
  86.     sets.precast.JA['Snake Eye'] = {legs="Commodore Culottes +1"}
  87.     sets.precast.JA['Wild Card'] = {feet="Lanun Bottes"}
  88.     sets.precast.JA['Random Deal'] = {body="Lanun Frac +1"}
  89.     sets.precast.JA['Fold'] = {hands="Commodore Gants +2"}
  90.     sets.CapacityMantle = {back="Mecistopins Mantle"}
  91.    
  92.     sets.precast.CorsairRoll = {
  93.         head="Commodore Tricorne",
  94.         hands="Navarch's Gants +2",
  95.         body="Lanun Frac +1",
  96.         ring1="Barataria Ring",
  97.         back="Gunslinger's Cape",
  98.         feet="Lanun Bottes"
  99.     }
  100.  
  101.    
  102.     sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Navarch's Culottes +2"})
  103.     sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Navarch's Bottes +2"})
  104.     sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Navarch's Tricorne +2"})
  105.     sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Navarch's Frac +2"})
  106.     sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Navarch's Gants +2"})
  107.    
  108.     sets.precast.LuzafRing = {ring2="Luzaf's Ring"}
  109.     --sets.precast.FoldDoubleBust = {hands="Lanun Gants"}
  110.    
  111.     sets.precast.CorsairShot = {}
  112.    
  113.  
  114.     -- Waltz set (chr and vit)
  115.     sets.precast.Waltz = {
  116.         head="Whirlpool Mask",
  117.         hands="Iuitl Wristbands +1",
  118.         legs="Adhemar Kecks",
  119.     }
  120.  
  121.     sets.Organizer = {
  122.         main="Fettering Blade",
  123.         sub="Demersal Degan +1",
  124.         range="Holliday",
  125.         hands="Compensator",
  126.         ammo="Legion Scutum"
  127.     }
  128.        
  129.     -- Don't need any special gear for Healing Waltz.
  130.     sets.precast.Waltz['Healing Waltz'] = {}
  131.  
  132.     -- Fast cast sets for spells
  133.    
  134.     sets.precast.FC = {
  135.         --ammo="Impatiens",
  136.         head="Taeon Chapeau",ear2="Loquacious Earring",ring1="Prolix Ring",ring2="Weather. Ring",
  137.         hands="Leyline Gloves"
  138.     }
  139.  
  140.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  141.  
  142.     sets.precast.RA = {
  143.         ammo=gear.RAbullet,
  144.         hands="Iuitl Wristbands +1",
  145.         back="Navarch's Mantle",
  146.         body="Pursuer's Doublet",
  147.         waist="Impulse Belt",
  148.         legs="Adhemar Kecks",
  149.         feet="Wurrukatte Boots"
  150.  
  151.     }
  152.  
  153.     -- Weaponskill sets
  154.     -- Default set for any weaponskill that isn't any more specifically defined
  155.     sets.precast.WS = {
  156.         head="Lanun Tricorne +1",
  157.         neck="Fotia Gorget",
  158.         ear1="Flame Pearl",
  159.         ear2="Flame Pearl",
  160.         body="Pursuer's Doublet",
  161.         hands="Pursuer's Cuffs",
  162.         ring1="Karieyh Ring",
  163.         ring2="Ifrit Ring",
  164.         back="Buquwik Cape",
  165.         waist="Fotia Belt",
  166.         legs="Adhemar Kecks",
  167.         feet="Lanun Bottes"
  168.     }
  169.  
  170.  
  171.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  172.     sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, { ear2="Moonshade Earring"})
  173.  
  174.     sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {legs="Samnuha Tights"})
  175.  
  176.     sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {ear2="Moonshade Earring", legs="Samnuha Tights"})
  177.  
  178.     sets.precast.WS['Last Stand'] = set_combine(sets.precast.WS, {
  179.         ammo=gear.WSbullet,
  180.         ear1="Flame Pearl",
  181.         ear2="Moonshade Earring",
  182.     })
  183.     sets.precast.WS['Last Stand'].Acc = set_combine(sets.precast.WS['Last Stand'], {
  184.         ammo=gear.WSbullet,
  185.         ear1="Enervating Earring",
  186.         ear2="Moonshade Earring",
  187.         back="Buquwik Cape",
  188.         ring1="Karieyh Ring",
  189.         ring2="Garuda Ring"
  190.     })
  191.  
  192.     sets.precast.WS['Wildfire'] = {
  193.         ammo=gear.MAbullet,
  194.         head="Lanun Tricorne +1",
  195.         neck="Stoicheion Medal",
  196.         ear1="Crematio Earring",
  197.         ear2="Friomisi Earring",
  198.         body="Samnuha Coat",
  199.         hands="Leyline Gloves",
  200.         ring1="Karieyh Ring",
  201.         ring2="Garuda Ring",
  202.         back="Gunslinger's Cape",
  203.         waist="Aquiline Belt",
  204.         legs="Shneddick Tights +1",
  205.         feet="Lanun Bottes"
  206.     }
  207.  
  208.     sets.precast.WS['Leaden Salute'] = set_combine(sets.precast.WS['Wildfire'], { ear2="Moonshade Earring"})
  209.    
  210.     -- Midcast Sets
  211.     sets.midcast.FastRecast = {
  212.         head="Uk'uxkaj Cap",
  213.         neck="Stoicheion Medal",
  214.         hands="Iuitl Wristbands +1",
  215.         ear1="Psystorm Earring",
  216.         ear2="Lifestorm Earring",
  217.         body="Pursuer's Doublet",
  218.         back="Gunslinger's Cape",
  219.         ring1="Globidonta Ring",
  220.         ring2="Sangoma Ring",
  221.         legs="Adhemar Kecks",
  222.         waist="Aquiline Belt",
  223.     }
  224.        
  225.     -- Specific spells
  226.     sets.midcast.Utsusemi = sets.midcast.FastRecast
  227.  
  228.     sets.midcast.CorsairShot = {
  229.         ammo=gear.QDbullet,
  230.         head="Umbani Cap",
  231.         neck="Stoicheion Medal",
  232.         ear1="Friomisi Earring",
  233.         ear2="Crematio Earring",
  234.         body="Samnhua Coat",
  235.         hands="Leyline Gloves",
  236.         ring1="Acumen Ring",
  237.         ring2="Garuda Ring",
  238.         back="Gunslinger's Cape",
  239.         waist="Aquiline Belt",
  240.         legs="Shneddick Tights +1",
  241.         feet="Lanun Bottes"
  242.     }
  243.  
  244.     sets.midcast.CorsairShot.Acc = set_combine(sets.midcast.CorsairShot, {
  245.         body="Mekosuchinae Harness",
  246.         ear1="Lifestorm Earring",
  247.         ear2="Psystorm Earring",
  248.         ring1="Weather. Ring",
  249.         ring2="Sangoma Ring",
  250.         feet="Navarch's Bottes +2"
  251.     })
  252.  
  253.     sets.midcast.CorsairShot['Light Shot'] = sets.midcast.CorsairShot.Acc
  254.     sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
  255.  
  256.     -- Ranged gear
  257.     sets.midcast.RA = {
  258.         ammo=gear.RAbullet,
  259.         head="Umbani Cap",
  260.         neck="Iqabi Necklace",
  261.         ear1="Enervating Earring",
  262.         ear2="Volley Earring",
  263.         body="Pursuer's Doublet",
  264.         hands="Alruna's Gloves +1",
  265.         ring1="Rajas Ring",
  266.         ring2="Hajduk Ring",
  267.         back="Gunslinger's Cape",
  268.         waist="Elanid Belt",
  269.         legs="Adhemar Kecks",
  270.         feet="Scopuli Nails +1"
  271.     }
  272.  
  273.     sets.midcast.RA.Acc = set_combine(sets.midcast.RA, {
  274.         body="Pursuer's Doublet",
  275.         ring1="Paqichikaji Ring",
  276.         hands="Floral Gauntlets",
  277.         waist="Elanid Belt"
  278.     })
  279.    
  280.     -- Sets to return to when not performing an action.
  281.    
  282.     -- Resting sets
  283.     sets.resting = {ring2="Paguroidea Ring"}
  284.  
  285.     -- Idle sets
  286.     sets.idle = {
  287.         ammo=gear.RAbullet,
  288.         head="Ocelomeh Headpiece +1",
  289.         neck="Loricate Torque +1",
  290.         ear1="Zennaroi Earring",
  291.         ear2="Crematio Earring",
  292.         body="Kheper Jacket",
  293.         hands="Iuitl Wristbands +1",
  294.         ring1="Karieyh Ring",
  295.         ring2="Paguroidea Ring",
  296.         waist="Flume Belt",
  297.         legs="Crimson Cuisses",
  298.         feet="Skadi's Jambeaux +1"
  299.     }
  300.     sets.idle.Regen = set_combine(sets.idle, {
  301.         head="Ocelomeh Headpiece +1",
  302.         body="Kheper jacket",
  303.     })
  304.  
  305.     sets.idle.Town = {
  306.         ammo=gear.RAbullet,
  307.         head="Lanun Tricorne +1",
  308.         neck="Loricate Torque +1",
  309.         ear1="Enervating Earring",
  310.         ear2="Crematio Earring",
  311.         body="Pursuer's Doublet",
  312.         hands="Alruna's Gloves +1",
  313.         ring1="Ifrit Ring",
  314.         ring2="Karieyh Ring",
  315.         back="Gunslinger's Cape",
  316.         waist="Flume Belt",
  317.         legs="Adhemar Kecks",
  318.         feet="Skadi's Jambeaux +1"
  319.     }
  320.    
  321.     -- Defense sets
  322.     sets.defense.PDT = set_combine(sets.idle, {
  323.         head="Lithelimb Cap",
  324.         neck="Loricate Torque +1",
  325.         hands="Iuitl Wristbands +1",
  326.         body="Emet Harness +1",
  327.         ring1="Patricius Ring",
  328.         ring2="Dark Ring",
  329.         back="Solemnity Cape",
  330.         waist="Flume Belt",
  331.         legs="Iuitl Tights +1",
  332.         feet="Lanun Bottes"
  333.     })
  334.  
  335.     sets.defense.MDT = sets.defense.PDT
  336.  
  337.     sets.Kiting = {feet="Skadi's Jambeaux +1"}
  338.  
  339.     -- Engaged sets
  340.  
  341.     -- Variations for TP weapon and (optional) offense/Defense modes.  Code will fall back on previous
  342.     -- sets if more refined versions aren't defined.
  343.     -- If you create a set with both offense and Defense modes, the offense mode should be first.
  344.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  345.    
  346.     sets.engaged = {
  347.         ammo=gear.RAbullet,
  348.         head="Dampening Tam",
  349.         neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  350.         body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}},
  351.         hands={ name="Herculean Gloves", augments={'"Triple Atk."+4','DEX+4',}},
  352.         ring1="Hetairoi Ring",ring2="Epona's Ring",
  353.         back="Atheling Mantle",waist="Windbuffet Belt +1",
  354.         legs="Samnuha Tights",
  355.         feet="Taeon Boots"}
  356.        
  357.     -- Normal melee group
  358.     sets.engaged.Melee = {
  359.         ammo=gear.RAbullet,
  360.         head="Dampening Tam",
  361.         neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  362.         body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}},
  363.         hands={ name="Herculean Gloves", augments={'"Triple Atk."+4','DEX+4',}},
  364.         ring1="Hetairoi Ring",ring2="Epona's Ring",
  365.         back="Atheling Mantle",waist="Windbuffet Belt +1",
  366.         legs="Samnuha Tights",
  367.         feet="Taeon Boots"}
  368.  
  369.     sets.engaged.DW = set_combine(sets.engaged.Melee, {
  370.         head="Dampening Tam",
  371.         neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  372.         body={ name="Herculean Vest", augments={'Accuracy+20 Attack+20','"Triple Atk."+3','AGI+8','Accuracy+14','Attack+11',}},
  373.         hands={ name="Herculean Gloves", augments={'"Triple Atk."+4','DEX+4',}},
  374.         ring1="Hetairoi Ring",ring2="Epona's Ring",
  375.         back="Atheling Mantle",waist="Windbuffet Belt +1",
  376.         legs="Samnuha Tights",
  377.         feet="Taeon Boots"
  378.     })
  379.    
  380.     sets.engaged.Acc = set_combine(sets.engaged.Melee, {
  381.         ring1="Mars's Ring",
  382.         ear1="Zennaroi Earring",
  383.         neck="Iqabi Necklace",
  384.         hands="Floral Gauntlets",
  385.         waist="Reiki Yotai",
  386.     })
  387.        
  388.     sets.engaged.Acc.DW = set_combine(sets.engaged.Melee.DW, {
  389.         ring1="Mars's Ring",
  390.         waist="Reiki Yotai",
  391.     })
  392. end
  393.  
  394. -------------------------------------------------------------------------------------------------------------------
  395. -- Job-specific hooks that are called to process player actions at specific points in time.
  396. -------------------------------------------------------------------------------------------------------------------
  397. function job_pretarget(spell, action, spellMap, eventArgs)
  398.     -- If autora enabled, use WS automatically at 100+ TP
  399.     if spell.action_type == 'Ranged Attack' then
  400.         if player.tp >= 1000 and state.AutoRA.value == 'WS' and not buffactive.amnesia then
  401.             cancel_spell()
  402.             use_weaponskill()
  403.         end
  404.     end
  405. end
  406.  
  407. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  408. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  409. function job_precast(spell, action, spellMap, eventArgs)
  410.     -- Check that proper ammo is available if we're using ranged attacks or similar.
  411.     if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
  412.         do_bullet_checks(spell, spellMap, eventArgs)
  413.     end
  414.  
  415.     -- gear sets
  416.     if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing.value then
  417.         equip(sets.precast.LuzafRing)
  418.     elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
  419.         classes.CustomClass = 'Acc'
  420.     elseif spell.english == 'Fold' and buffactive['Bust'] == 2 then
  421.         if sets.precast.FoldDoubleBust then
  422.             equip(sets.precast.FoldDoubleBust)
  423.             eventArgs.handled = true
  424.         end
  425.     end
  426. end
  427.  
  428. function job_post_precast(spell, action, spellMap, eventArgs)
  429.     if spell.type == 'WeaponSkill' then
  430.         if state.CapacityMode.value then
  431.             equip(sets.CapacityMantle)
  432.         end
  433.     end
  434. end
  435.  
  436. function job_midcast(spell, action, spellMap, eventArgs)
  437.     if spell.type == 'CorsairShot' or spell.action_type == 'Ranged Attack' then
  438.         if state.CapacityMode.value then
  439.             equip(sets.CapacityMantle)
  440.         end
  441.     end
  442. end
  443. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  444. function job_aftercast(spell, action, spellMap, eventArgs)
  445.     if spell.type == 'CorsairRoll' and not spell.interrupted then
  446.         display_roll_info(spell)
  447.     end
  448.     if state.AutoRA.value ~= 'Normal' then
  449.         use_ra(spell)
  450.     end
  451. end
  452.  
  453.  
  454. -------------------------------------------------------------------------------------------------------------------
  455. -- Customization hooks for idle and melee sets, after they've been automatically constructed.
  456. -------------------------------------------------------------------------------------------------------------------
  457.  
  458. -- Return a customized weaponskill mode to use for weaponskill sets.
  459. -- Don't return anything if you're not overriding the default value.
  460. function get_custom_wsmode(spell, action, default_wsmode)
  461.     --if buffactive['Transcendancy'] then
  462.     --  return 'Brew'
  463.     --end
  464. end
  465. function customize_idle_set(idleSet)
  466.     if player.hpp < 90 then
  467.        idleSet = set_combine(idleSet, sets.idle.Regen)
  468.    end
  469.    return idleSet
  470. end
  471. function customize_melee_set(meleeSet)
  472.    if state.CapacityMode.value then
  473.        meleeSet = set_combine(meleeSet, sets.CapacityMantle)
  474.    end
  475.     return meleeSet
  476. end
  477.  
  478. -------------------------------------------------------------------------------------------------------------------
  479. -- General hooks for other events.
  480. -------------------------------------------------------------------------------------------------------------------
  481.  
  482. -- Called when the player's status changes.
  483. function job_status_change(newStatus, oldStatus, eventArgs)
  484. end
  485. -- Called when a player gains or loses a buff.
  486. -- buff == buff gained or lost
  487. -- gain == true if the buff was gained, false if it was lost.
  488. function job_buff_change(buff, gain)
  489. end
  490. -------------------------------------------------------------------------------------------------------------------
  491. -- User code that supplements self-commands.
  492. -------------------------------------------------------------------------------------------------------------------
  493. -- Called by the 'update' self-command, for common needs.
  494. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  495. function job_update(cmdParams, eventArgs)
  496.    get_combat_form()
  497. end
  498.  
  499. -- Job-specific toggles.
  500. function job_toggle_state(field)
  501.     if field:lower() == 'luzaf' then
  502.         state.LuzafRing:toggle()
  503.         return "Use of Luzaf Ring", state.LuzafRing.value
  504.     end
  505. end
  506.  
  507. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  508. function display_current_job_state(eventArgs)
  509.    local msg = ''
  510.    msg = msg .. 'Off.: '..state.OffenseMode.current
  511.    msg = msg .. ', Rng.: '..state.RangedMode.current
  512.    msg = msg .. ', WS.: '..state.WeaponskillMode.current
  513.    msg = msg .. ', QD.: '..state.CastingMode.current
  514.    if state.AutoRA.value ~= 'Normal' then
  515.        msg = '[Auto RA: ON]['..state.AutoRA.value..']'
  516.    else
  517.        msg = msg .. '[Auto RA: OFF]'
  518.    end
  519.    if state.DefenseMode.value ~= 'None' then
  520.        local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
  521.        msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
  522.    end
  523.    if state.Kiting.value then
  524.        msg = msg .. ', Kiting'
  525.    end
  526.    if state.PCTargetMode.value ~= 'default' then
  527.        msg = msg .. ', Target PC: '..state.PCTargetMode.value
  528.    end
  529.    if state.SelectNPCTargets.value then
  530.        msg = msg .. ', Target NPCs'
  531.    end
  532.    msg = msg .. ', Roll Size: ' .. ((state.LuzafRing.value and 'Large') or 'Small')
  533.    add_to_chat(122, msg)
  534.    eventArgs.handled = true
  535. end
  536. -------------------------------------------------------------------------------------------------------------------
  537. -- Utility functions specific to this job.
  538. -------------------------------------------------------------------------------------------------------------------
  539. function get_combat_form()
  540.    if cor_sub_weapons:contains(player.equipment.main) then
  541.    --if player.equipment.main == gear.Stave then
  542.        if S{'NIN', 'DNC'}:contains(player.sub_job) and cor_sub_weapons:contains(player.equipment.sub) then
  543.            state.CombatForm:set("DW")
  544.        else
  545.            state.CombatForm:reset()
  546.        end
  547.    else
  548.        state.CombatForm:set('Stave')
  549.    end
  550. end
  551. function define_roll_values()
  552.     rolls = {
  553.         ["Corsair's Roll"]   = {lucky=5, unlucky=9, bonus="Experience Points"},
  554.         ["Ninja Roll"]       = {lucky=4, unlucky=8, bonus="Evasion"},
  555.         ["Hunter's Roll"]    = {lucky=4, unlucky=8, bonus="Accuracy"},
  556.         ["Chaos Roll"]       = {lucky=4, unlucky=8, bonus="Attack"},
  557.         ["Magus's Roll"]     = {lucky=2, unlucky=6, bonus="Magic Defense"},
  558.         ["Healer's Roll"]    = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
  559.         ["Puppet Roll"]      = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
  560.         ["Choral Roll"]      = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
  561.         ["Monk's Roll"]      = {lucky=3, unlucky=7, bonus="Subtle Blow"},
  562.         ["Beast Roll"]       = {lucky=4, unlucky=8, bonus="Pet Attack"},
  563.         ["Samurai Roll"]     = {lucky=2, unlucky=6, bonus="Store TP"},
  564.         ["Evoker's Roll"]    = {lucky=5, unlucky=9, bonus="Refresh"},
  565.         ["Rogue's Roll"]     = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
  566.         ["Warlock's Roll"]   = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
  567.         ["Fighter's Roll"]   = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
  568.         ["Drachen Roll"]     = {lucky=3, unlucky=7, bonus="Pet Accuracy"},
  569.         ["Gallant's Roll"]   = {lucky=3, unlucky=7, bonus="Defense"},
  570.         ["Wizard's Roll"]    = {lucky=5, unlucky=9, bonus="Magic Attack"},
  571.         ["Dancer's Roll"]    = {lucky=3, unlucky=7, bonus="Regen"},
  572.         ["Scholar's Roll"]   = {lucky=2, unlucky=6, bonus="Conserve MP"},
  573.         ["Bolter's Roll"]    = {lucky=3, unlucky=9, bonus="Movement Speed"},
  574.         ["Caster's Roll"]    = {lucky=2, unlucky=7, bonus="Fast Cast"},
  575.         ["Courser's Roll"]   = {lucky=3, unlucky=9, bonus="Snapshot"},
  576.         ["Blitzer's Roll"]   = {lucky=4, unlucky=9, bonus="Attack Delay"},
  577.         ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
  578.         ["Allies's Roll"]    = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
  579.         ["Miser's Roll"]     = {lucky=5, unlucky=7, bonus="Save TP"},
  580.         ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
  581.         ["Avenger's Roll"]   = {lucky=4, unlucky=8, bonus="Counter Rate"},
  582.     }
  583. end
  584. function display_roll_info(spell)
  585.     rollinfo = rolls[spell.english]
  586.     local rollsize = 'Small'
  587.     if state.LuzafRing then
  588.         rollsize = 'Large'
  589.     end
  590.     if rollinfo then
  591.         add_to_chat(104, spell.english..' provides a bonus to '..rollinfo.bonus..'.  Roll size: '..rollsize)
  592.         add_to_chat(104, 'Lucky roll is '..tostring(rollinfo.lucky)..', Unlucky roll is '..tostring(rollinfo.unlucky)..'.')
  593.     end
  594. end
  595. -- Determine whether we have sufficient ammo for the action being attempted.
  596. function do_bullet_checks(spell, spellMap, eventArgs)
  597.     local bullet_name
  598.     local bullet_min_count = 1
  599.    
  600.     if spell.type == 'WeaponSkill' then
  601.         if spell.skill == "Marksmanship" then
  602.             if spell.element == 'None' then
  603.                 -- physical weaponskills
  604.                 bullet_name = gear.WSbullet
  605.             else
  606.                 -- magical weaponskills
  607.                 bullet_name = gear.MAbullet
  608.             end
  609.         else
  610.             -- Ignore non-ranged weaponskills
  611.             return
  612.         end
  613.     elseif spell.type == 'CorsairShot' then
  614.         bullet_name = gear.QDbullet
  615.     elseif spell.action_type == 'Ranged Attack' then
  616.         bullet_name = gear.RAbullet
  617.         if buffactive['Triple Shot'] then
  618.             bullet_min_count = 3
  619.         end
  620.     end
  621.    
  622.     local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
  623.    
  624.     -- If no ammo is available, give appropriate warning and end.
  625.     if not available_bullets then
  626.         if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
  627.             add_to_chat(104, 'No Quick Draw ammo left.  Using what\'s currently equipped ('..player.equipment.ammo..').')
  628.             return
  629.         elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
  630.             add_to_chat(104, 'No weaponskill ammo left.  Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
  631.             return
  632.         else
  633.             add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
  634.             eventArgs.cancel = true
  635.             return
  636.         end
  637.     end
  638.    
  639.     -- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
  640.     if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
  641.         add_to_chat(104, 'No ammo will be left for Quick Draw.  Cancelling.')
  642.         eventArgs.cancel = true
  643.         return
  644.     end
  645.    
  646.     -- Low ammo warning.
  647.     if spell.type ~= 'CorsairShot' and not state.warned
  648.         and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
  649.        local msg = '**** LOW AMMO WARNING: '..bullet_name..' ****'
  650.        local border = ""
  651.        for i = 1, #msg do
  652.            border = border .. "*"
  653.        end
  654.  
  655.        add_to_chat(104, border)
  656.        add_to_chat(104, msg)
  657.        add_to_chat(104, border)
  658.         state.warned = true
  659.     elseif available_bullets.count > options.ammo_warning_limit and state.warned then
  660.         state.warned = false
  661.     end
  662. end
  663.  
  664. function use_weaponskill()
  665.     send_command('input /ws "'..auto_gun_ws..'" <t>')
  666. end
  667.  
  668. function job_state_change(stateField, newValue, oldValue)
  669.     if stateField == 'Auto RA' then
  670.         if newValue ~= 'Normal' then
  671.             send_command('@wait 2.5; input /ra <t>')
  672.         end
  673.     end
  674. end
  675.  
  676. function use_ra(spell)
  677.    
  678.     local delay = '2.2'
  679.     -- GUN
  680.     if spell.type:lower() == 'weaponskill' then
  681.         delay = '2.25'
  682.     else
  683.         if buffactive["Courser's Roll"] then
  684.             delay = '0.7' -- MAKE ADJUSTMENT HERE
  685.         elseif buffactive['Flurry II'] then
  686.             delay = '0.5'
  687.         else
  688.             delay = '1.05' -- MAKE ADJUSTMENT HERE
  689.         end
  690.     end
  691.     send_command('@wait '..delay..'; input /ra <t>')
  692. end
  693.  
  694. function select_default_macro_book()
  695.     set_macro_page(1, 16)
  696. end
Advertisement
Add Comment
Please, Sign In to add comment