Advertisement
Guest User

Boposhopo COR Lua

a guest
Feb 15th, 2023
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 26.79 KB | Gaming | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job.  Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. --[[
  6.     gs c toggle LuzafRing -- Toggles use of Luzaf Ring on and off
  7.    
  8.     Offense mode is melee or ranged.  Used ranged offense mode if you are engaged
  9.     for ranged weaponskills, but not actually meleeing.
  10.    
  11.     Weaponskill mode, if set to 'Normal', is handled separately for melee and ranged weaponskills.
  12. --]]
  13.  
  14.  
  15. -- Initialization function for this job file.
  16. function get_sets()
  17.     mote_include_version = 2
  18.    
  19.     -- Load and initialize the include file.
  20.     include('Mote-Include.lua')
  21. end
  22.  
  23. -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  24. function job_setup()
  25.     -- Whether to use Luzaf's Ring
  26.     state.LuzafRing = M(false, "Luzaf's Ring")
  27.     -- Whether a warning has been given for low ammo
  28.     state.warned = M(false)
  29.  
  30.     define_roll_values()
  31.    
  32.     send_command('wait 6;input /lockstyleset 6')
  33. end
  34.  
  35. -------------------------------------------------------------------------------------------------------------------
  36. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  37. -------------------------------------------------------------------------------------------------------------------
  38.  
  39. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  40. function user_setup()
  41.     state.OffenseMode:options('Normal', 'DT')
  42.     state.RangedMode:options('Normal', 'Acc')
  43.     state.WeaponskillMode:options('Normal', 'Att')
  44.     state.CastingMode:options('Normal', 'Resistant')
  45.     state.IdleMode:options('Normal', 'PDT', 'Refresh')
  46.  
  47.     gear.RAbullet = "Chrono Bullet"
  48.     gear.WSbullet = "Chrono Bullet"
  49.     gear.MAbullet = "Living Bullet"
  50.     gear.QDbullet = "Living Bullet"
  51.     options.ammo_warning_limit = 15
  52.  
  53.     select_default_macro_book()
  54. end
  55.  
  56.  
  57. -- Called when this job file is unloaded (eg: job change)
  58. function user_unload()
  59.  
  60. end
  61.  
  62. -- Define sets and vars used by this job file.
  63. function init_gear_sets()
  64.     --------------------------------------
  65.     -- Start defining the sets
  66.     --------------------------------------
  67.    
  68.     -- Precast Sets
  69.  
  70.     -- Precast sets to enhance JAs
  71.    
  72.     sets.precast.JA['Triple Shot'] = {body="Chasseur's Frac +2"}
  73.     sets.precast.JA['Snake Eye'] = {legs="Lanun Trews +1"}
  74.     sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +3"}
  75.     sets.precast.JA['Random Deal'] = {body="Lanun Frac +3"}
  76.  
  77.    
  78.     sets.precast.CorsairRoll = {head="Lanun Tricorne +1",
  79.         hands="Chasseur's Gants +2",
  80.         ring2="Luzaf's Ring",
  81.         neck="Regal Necklace",
  82.         back="Camulus's Mantle",}
  83.    
  84.     sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Chasseur's Culottes"})
  85.     sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chasseur's Bottes +2"})
  86.     sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chass. Tricorne"})
  87.     sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +2"})
  88.     sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants +2"})
  89.  
  90.     sets.precast.FoldDoubleBust = {hands="Lanun Gants +3"}
  91.    
  92.     sets.precast.CorsairShot = {ammo=gear.QDbullet,
  93.         head="Nyame Helm",
  94.         body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  95.         hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  96.         legs="Nyame Flanchard",
  97.         feet="Chasseur's Bottes +2",
  98.         neck={ name="Comm. Charm +1", augments={'Path: A',}},
  99.         waist="Eschan Stone",
  100.         left_ear="Friomisi Earring",
  101.         right_ear="Enervating Earring",
  102.         left_ring="Dingir Ring",
  103.         right_ring="Regal Ring",
  104.         back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
  105.    
  106.  
  107.     -- Waltz set (chr and vit)
  108.     sets.precast.Waltz = {}
  109.        
  110.     -- Don't need any special gear for Healing Waltz.
  111.     sets.precast.Waltz['Healing Waltz'] = {}
  112.  
  113.     -- Fast cast sets for spells
  114.    
  115.     sets.precast.FC = {head="Carmine Mask +1",
  116.         hands="Leyline Gloves",
  117.         feet="Carmine Greaves +1",
  118.         left_ring="Kishar Ring",
  119.         right_ear="Loquacious Earring",
  120.         left_ear="Etiolation earring",}
  121.  
  122.     sets.precast.FC.Utsusemi = sets.precast.FC
  123.  
  124.  
  125.     sets.precast.RA = {ammo=gear.RAbullet,
  126.         head="Ikenga's Hat", --9
  127.         neck="Commodore Charm +1", --3
  128.         body="Ikenga's Vest", --9
  129.         hands="Carmine Fin. Ga. +1", --8 Rapid 11
  130.         legs="Adhemar Kecks +1", --10 Rapid 13
  131.         waist="Impulse Belt", --3
  132.         feet="Meg. Jam. +2", --10
  133.         back={ name="Camulus's Mantle", augments={'Eva.+20 /Mag. Eva.+20','"Snapshot"+10','Phys. dmg. taken-10%',}},} --10
  134.  
  135.        
  136.     -- Weaponskill sets
  137.     -- Default set for any weaponskill that isn't any more specifically defined
  138.     sets.precast.WS = {head="Nyame Helm",
  139.         body="Nyame Mail",
  140.         hands="Meg. Gloves +2",
  141.         legs="Nyame Flanchard",
  142.         feet="Nyame Sollerets",
  143.         neck="Fotia Gorget",
  144.         waist="Fotia Belt",
  145.         left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  146.         right_ear="Ishvara Earring",
  147.         left_ring="Dingir Ring",
  148.         right_ring="Ilabrat Ring",
  149.         back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+8','Weapon skill damage +10%',}},}
  150.  
  151.  
  152.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  153.     sets.precast.WS['Evisceration'] = {head={ name="Blistering Sallet +1", augments={'Path: A',}},
  154.         body="Mummu Jacket +2",
  155.         hands="Adhemar Wrist. +1",
  156.         legs={ name="Samnuha Tights", augments={'STR+8','DEX+9','"Dbl.Atk."+3','"Triple Atk."+2',}},
  157.         feet={ name="Herculean Boots", augments={'Attack+21','"Triple Atk."+3','STR+4','Accuracy+10',}},
  158.         neck="Fotia Gorget",
  159.         waist="Fotia Belt",
  160.         left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  161.         right_ear="Cessance Earring",
  162.         left_ring="Petrov Ring",
  163.         right_ring="Epona's Ring",
  164.         back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Damage taken-5%',}},}
  165.  
  166.     sets.precast.WS['Savage Blade'] = {head="Nyame Helm",
  167.         body="Nyame Mail",
  168.         hands="Meg. Gloves +2",
  169.         legs="Nyame Flanchard",
  170.         feet="Nyame Sollerets",
  171.         neck="Commodore Charm +1",
  172.         waist="Sailfi Belt +1",
  173.         left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  174.         right_ear="Ishvara Earring",
  175.         left_ring="Regal Ring",
  176.         right_ring="Ilabrat Ring",
  177.         back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+8','Weapon skill damage +10%',}},}
  178.  
  179.     sets.precast.WS['Requiescat'] = {ammo=gear.MAbullet,
  180.         head="Adhemar Bonnet +1",
  181.         body="Lanun Frac +3",
  182.         hands="Meg. Gloves +2",
  183.         legs="Nyame Flanchard",
  184.         feet="Lanun Bottes +3",
  185.         neck="Fotia Gorget",
  186.         waist="Fotia Belt",
  187.         left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  188.         right_ear="Ishvara Earring",
  189.         left_ring="Regal Ring",
  190.         right_ring="Karieyh Ring",
  191.         back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+8','Weapon skill damage +10%',}},}
  192.  
  193.     sets.precast.WS['Last Stand'] = {ammo=gear.WSbullet,
  194.         head="Nyame Helm",
  195.         body="Laksa. Frac +3",
  196.         hands="Chasseur's Gants +2",
  197.         legs="Nyame Flanchard",
  198.         feet="Nyame Sollerets",
  199.         neck="Fotia Gorget",
  200.         waist="Fotia Belt",
  201.         left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  202.         right_ear="Ishvara Earring",
  203.         left_ring="Dingir Ring",
  204.         right_ring="Regal Ring",
  205.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','AGI+10','Weapon skill damage +10%',}},}
  206.  
  207.     sets.precast.WS['Wildfire'] = {ammo=gear.MAbullet,
  208.         head="Nyame Helm",
  209.         body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  210.         hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  211.         legs="Nyame Flanchard",
  212.         feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  213.         neck={ name="Comm. Charm +1", augments={'Path: A',}},
  214.         waist="Eschan Stone",
  215.         Right_ear="Friomisi Earring",
  216.         Left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  217.         left_ring="Dingir Ring",
  218.         right_ring="Ilabrat Ring",
  219.         back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
  220.        
  221.     sets.precast.WS['Hot Shot'] = {ammo=gear.WSbullet,
  222.         head="Ikenga's Hat",
  223.         body="Nyame Mail",
  224.         hands="Chasseur's Gants +2",
  225.         legs="Nyame Flanchard",
  226.         feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  227.         neck="Fotia Gorget",
  228.         waist="Fotia Belt",
  229.         Right_ear="Friomisi Earring",
  230.         Left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  231.         left_ring="Dingir Ring",
  232.         right_ring="Regal Ring",
  233.         back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
  234.    
  235.     sets.precast.WS['Leaden Salute'] = {ammo=gear.MAbullet,
  236.         head="Pixie Hairpin +1",
  237.         body="Lanun Frac +3",
  238.         hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  239.         legs="Nyame Flanchard",
  240.         feet="Lanun Bottes +3",
  241.         neck="Commodore Charm +1",
  242.         waist="Eschan Stone",
  243.         Right_ear="Friomisi Earring",
  244.         Left_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},
  245.         left_ring="Dingir Ring",
  246.         right_ring="Archon Ring",
  247.         back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
  248.        
  249.     sets.precast.WS['Aeolian Edge'] = sets.precast.WS['Wildfire']
  250.    
  251.     sets.Obi = {waist="Hachirin-no-Obi"}
  252.    
  253.    
  254.     -- Midcast Sets
  255.     sets.midcast.FastRecast = {}
  256.        
  257.     -- Specific spells
  258.     sets.midcast.Utsusemi = sets.midcast.FastRecast
  259.  
  260.     sets.midcast.CorsairShot = {ammo=gear.QDbullet,
  261.         head="Nyame Helm",
  262.         body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  263.         hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  264.         legs="Nyame Flanchard",
  265.         feet="Chasseur's Bottes +2",
  266.         neck={ name="Comm. Charm +1", augments={'Path: A',}},
  267.         waist="Eschan Stone",
  268.         left_ear="Friomisi Earring",
  269.         right_ear="Enervating Earring",
  270.         left_ring="Dingir Ring",
  271.         right_ring="Regal Ring",
  272.         back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
  273.  
  274.     sets.midcast.CorsairShot.Acc = {}
  275.  
  276.     sets.midcast.CorsairShot['Light Shot'] = {head={ name="Carmine Mask +1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',}},
  277.         body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  278.         name="Nyame Gauntlets",
  279.         legs="Nyame Flanchard",
  280.         feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  281.         neck={ name="Comm. Charm +1", augments={'Path: A',}},
  282.         waist="Eschan Stone",
  283.         left_ring="Dingir Ring",
  284.         right_ring="Ilabrat Ring",
  285.         back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},}
  286.  
  287.     sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
  288.  
  289.  
  290.     -- Ranged gear
  291.     sets.midcast.RA = {ammo=gear.RAbullet,
  292.         head="Ikenga's Hat",
  293.         body="Nisroch Jerkin",
  294.         hands="Malignance Gloves",
  295.         legs="Malignance Tights",
  296.         feet="Ikenga's Clogs",
  297.         neck="Iskur Gorget",
  298.         waist="Yemaya Belt",
  299.         left_ear="Enervating Earring",
  300.         right_ear="Telos Earring",
  301.         left_ring="Ilabrat Ring",
  302.         right_ring="Dingir Ring",
  303.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10','Phys. dmg. taken-10%',}},}
  304.  
  305.     sets.midcast.RA.Acc = {ammo=gear.RAbullet,
  306.         head="Ikenga's Hat",
  307.         body="Ikenga's Vest",
  308.         hands="Malignance Gloves",
  309.         legs="Malignance Tights",
  310.         feet="Ikenga's Clogs",
  311.         neck="Iskur Gorget",
  312.         waist="Yemaya Belt",
  313.         left_ear="Enervating Earring",
  314.         right_ear="Telos Earring",
  315.         left_ring="Ilabrat Ring",
  316.         right_ring="Dingir Ring",
  317.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10','Phys. dmg. taken-10%',}},}
  318.        
  319.     sets.TripleShot = {head="Oshosi Mask", --5
  320.         body="Chasseur's Frac +2", --12
  321.         hands="Lanun Gants +3"}
  322.  
  323.    
  324.     -- Sets to return to when not performing an action.
  325.    
  326.     -- Resting sets
  327.     sets.resting = {}
  328.    
  329.  
  330.     -- Idle sets
  331.     sets.idle = {ammo=gear.RAbullet,
  332.         head="Nyame Helm",
  333.         body="Nyame Mail",
  334.         hands="Nyame Gauntlets",
  335.         legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  336.         feet="Nyame Sollerets",
  337.         neck="Loricate Torque +1",
  338.         waist="Carrier's Sash",
  339.         left_ear="Etiolation Earring",
  340.         right_ear="Infused Earring",
  341.         left_ring="Warp Ring",
  342.         right_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
  343.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10','Phys. dmg. taken-10%',}},
  344. }
  345.  
  346.     sets.idle.Town = {ammo=gear.RAbullet,
  347.         head="Nyame Helm",
  348.         body="Nyame Mail",
  349.         hands="Nyame Gauntlets",
  350.         legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  351.         feet="Nyame Sollerets",
  352.         neck="Loricate Torque +1",
  353.         waist="Carrier's Sash",
  354.         left_ear="Etiolation Earring",
  355.         right_ear="Infused Earring",
  356.         left_ring="Warp Ring",
  357.         right_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
  358.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10','Phys. dmg. taken-10%',}},
  359. }
  360.  
  361.    
  362.     sets.Kiting = {legs="Carmine Cuisses +1"}
  363.  
  364.     -- Engaged sets
  365.  
  366.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  367.     -- sets if more refined versions aren't defined.
  368.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  369.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  370.    
  371.     -- Normal melee group
  372.     sets.engaged = {ammo=gear.RAbullet,
  373.         head="Adhemar Bonnet +1",
  374.         body="Adhemar Jacket +1",
  375.         hands="Adhemar Wristbands +1",
  376.         legs="Samnuha Tights",
  377.         feet="Malignance Boots",
  378.         neck="Iskur Gorget",
  379.         waist="Sailfi Belt +1",
  380.         left_ear="Cessance Earring",
  381.         right_ear="Telos Earring",
  382.         left_ring="Chirich Ring +1",
  383.         right_ring="Epona's Ring",
  384.         back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Damage taken-5%',}},}
  385.    
  386.     sets.engaged.DT = {ammo=gear.RAbullet,
  387.         head="Adhemar Bonnet +1",
  388.         body="Adhemar Jacket +1",
  389.         hands="Malignance Gloves",
  390.         legs="Malignance Tights",
  391.         feet="Malignance Boots",
  392.         neck="Iskur Gorget",
  393.         waist="Sailfi Belt +1",
  394.         left_ear="Cessance Earring",
  395.         right_ear="Telos Earring",
  396.         left_ring="Defending RIng",
  397.         right_ring="Epona's Ring",
  398.         back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Damage taken-5%',}},}
  399.  
  400.     sets.engaged.DW = {}
  401.    
  402.     sets.engaged.DT.DW = {}
  403. end
  404.  
  405. -------------------------------------------------------------------------------------------------------------------
  406. -- Job-specific hooks for standard casting events.
  407. -------------------------------------------------------------------------------------------------------------------
  408.  
  409. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  410. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  411. function job_precast(spell, action, spellMap, eventArgs)
  412.     -- Check that proper ammo is available if we're using ranged attacks or similar.
  413.     if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
  414.         do_bullet_checks(spell, spellMap, eventArgs)
  415.     end
  416.  
  417.     -- gear sets
  418.     if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing.value then
  419.         equip(sets.precast.LuzafRing)
  420.     elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
  421.         classes.CustomClass = 'Acc'
  422.     elseif spell.english == 'Fold' and buffactive['Bust'] == 2 then
  423.         if sets.precast.FoldDoubleBust then
  424.             equip(sets.precast.FoldDoubleBust)
  425.             eventArgs.handled = true
  426.         end
  427.     end
  428. end
  429.  
  430. function job_post_precast(spell, action, spellMap, eventArgs)
  431.     -- Equip obi if weather/day matches for WS/Quick Draw.
  432.     if spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
  433.         if spell.english == 'Leaden Salute' then
  434.             if world.weather_element == 'Dark' or world.day_element == 'Dark' then
  435.                 equip(sets.Obi)
  436.             end
  437.             if player.tp > 2900 then
  438.                 equip(sets.precast.WS['Leaden Salute'].FullTP)
  439.             end
  440.         elseif spell.english == 'Wildfire' and (world.weather_element == 'Fire' or world.day_element == 'Fire') then
  441.             equip(sets.Obi)
  442.         elseif spell.type == 'CorsairShot' and (spell.element == world.weather_element or spell.element == world.day_element) then
  443.             if spell.english ~= "Light Shot" and spell.english ~= "Dark Shot" then
  444.                 equip(sets.Obi)
  445.             end
  446.         end
  447.     end
  448. end
  449.  
  450. function job_post_midcast(spell, action, spellMap, eventArgs)
  451.     if spell.type == 'CorsairShot' then
  452.         if (spell.english ~= 'Light Shot' and spell.english ~= 'Dark Shot') then
  453.             -- Matching double weather (w/o day conflict).
  454.             if spell.element == world.weather_element and (get_weather_intensity() == 2 and spell.element ~= elements.weak_to[world.day_element]) then
  455.                 equip({waist="Hachirin-no-Obi"})
  456.             -- Target distance under 1.7 yalms.
  457.             --elseif spell.target.distance < (1.7 + spell.target.model_size) then
  458.                 --equip({waist="Orpheus's Sash"})
  459.             -- Matching day and weather.
  460.             elseif spell.element == world.day_element and spell.element == world.weather_element then
  461.                 equip({waist="Hachirin-no-Obi"})
  462.             -- Target distance under 8 yalms.
  463.             --elseif spell.target.distance < (8 + spell.target.model_size) then
  464.                 --equip({waist="Orpheus's Sash"})
  465.             -- Match day or weather.
  466.             elseif spell.element == world.day_element or spell.element == world.weather_element then
  467.                 equip({waist="Hachirin-no-Obi"})
  468.             end
  469.         end
  470.     elseif spell.action_type == 'Ranged Attack' then
  471.         if buffactive['Triple Shot'] then
  472.             equip(sets.TripleShot)
  473.                 end
  474.             end
  475.         end
  476.  
  477.  
  478.  
  479. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  480. function job_aftercast(spell, action, spellMap, eventArgs)
  481.     if spell.type == 'CorsairRoll' and not spell.interrupted then
  482.         display_roll_info(spell)
  483.     end
  484. end
  485.  
  486. -------------------------------------------------------------------------------------------------------------------
  487. -- User code that supplements standard library decisions.
  488. -------------------------------------------------------------------------------------------------------------------
  489.  
  490. -- Return a customized weaponskill mode to use for weaponskill sets.
  491. -- Don't return anything if you're not overriding the default value.
  492. function get_custom_wsmode(spell, spellMap, default_wsmode)
  493.     if buffactive['Transcendancy'] then
  494.         return 'Brew'
  495.     end
  496. end
  497.  
  498.  
  499. -- Called by the 'update' self-command, for common needs.
  500. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  501. function job_update(cmdParams, eventArgs)
  502.     if newStatus == 'Engaged' and player.equipment.main == 'Chatoyant Staff' then
  503.         state.OffenseMode:set('Ranged')
  504.     end
  505. end
  506.  
  507.  
  508. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  509. function display_current_job_state(eventArgs)
  510.     local msg = ''
  511.    
  512.     msg = msg .. 'Off.: '..state.OffenseMode.current
  513.     msg = msg .. ', Rng.: '..state.RangedMode.current
  514.     msg = msg .. ', WS.: '..state.WeaponskillMode.current
  515.     msg = msg .. ', QD.: '..state.CastingMode.current
  516.  
  517.     if state.DefenseMode.value ~= 'None' then
  518.         local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
  519.         msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
  520.     end
  521.    
  522.     if state.Kiting.value then
  523.         msg = msg .. ', Kiting'
  524.     end
  525.    
  526.     if state.PCTargetMode.value ~= 'default' then
  527.         msg = msg .. ', Target PC: '..state.PCTargetMode.value
  528.     end
  529.  
  530.     if state.SelectNPCTargets.value then
  531.         msg = msg .. ', Target NPCs'
  532.     end
  533.  
  534.     msg = msg .. ', Roll Size: ' .. ((state.LuzafRing.value and 'Large') or 'Small')
  535.    
  536.     add_to_chat(122, msg)
  537.  
  538.     eventArgs.handled = true
  539. end
  540.  
  541.  
  542. -------------------------------------------------------------------------------------------------------------------
  543. -- Utility functions specific to this job.
  544. -------------------------------------------------------------------------------------------------------------------
  545.  
  546. function define_roll_values()
  547.     rolls = {
  548.         ["Corsair's Roll"]   = {lucky=5, unlucky=9, bonus="Experience Points"},
  549.         ["Ninja Roll"]       = {lucky=4, unlucky=8, bonus="Evasion"},
  550.         ["Hunter's Roll"]    = {lucky=4, unlucky=8, bonus="Accuracy"},
  551.         ["Chaos Roll"]       = {lucky=4, unlucky=8, bonus="Attack"},
  552.         ["Magus's Roll"]     = {lucky=2, unlucky=6, bonus="Magic Defense"},
  553.         ["Healer's Roll"]    = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
  554.         ["Puppet Roll"]      = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
  555.         ["Choral Roll"]      = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
  556.         ["Monk's Roll"]      = {lucky=3, unlucky=7, bonus="Subtle Blow"},
  557.         ["Beast Roll"]       = {lucky=4, unlucky=8, bonus="Pet Attack"},
  558.         ["Samurai Roll"]     = {lucky=2, unlucky=6, bonus="Store TP"},
  559.         ["Evoker's Roll"]    = {lucky=5, unlucky=9, bonus="Refresh"},
  560.         ["Rogue's Roll"]     = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
  561.         ["Warlock's Roll"]   = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
  562.         ["Fighter's Roll"]   = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
  563.         ["Drachen Roll"]     = {lucky=3, unlucky=7, bonus="Pet Accuracy"},
  564.         ["Gallant's Roll"]   = {lucky=3, unlucky=7, bonus="Defense"},
  565.         ["Wizard's Roll"]    = {lucky=5, unlucky=9, bonus="Magic Attack"},
  566.         ["Dancer's Roll"]    = {lucky=3, unlucky=7, bonus="Regen"},
  567.         ["Scholar's Roll"]   = {lucky=2, unlucky=6, bonus="Conserve MP"},
  568.         ["Bolter's Roll"]    = {lucky=3, unlucky=9, bonus="Movement Speed"},
  569.         ["Caster's Roll"]    = {lucky=2, unlucky=7, bonus="Fast Cast"},
  570.         ["Courser's Roll"]   = {lucky=3, unlucky=9, bonus="Snapshot"},
  571.         ["Blitzer's Roll"]   = {lucky=4, unlucky=9, bonus="Attack Delay"},
  572.         ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
  573.         ["Allies's Roll"]    = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
  574.         ["Miser's Roll"]     = {lucky=5, unlucky=7, bonus="Save TP"},
  575.         ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
  576.         ["Avenger's Roll"]   = {lucky=4, unlucky=8, bonus="Counter Rate"},
  577.     }
  578. end
  579.  
  580. function display_roll_info(spell)
  581.     rollinfo = rolls[spell.english]
  582.     local rollsize = (state.LuzafRing.value and 'Large') or 'Small'
  583.  
  584.     if rollinfo then
  585.         add_to_chat(104, spell.english..' provides a bonus to '..rollinfo.bonus..'.  Roll size: '..rollsize)
  586.         add_to_chat(104, 'Lucky roll is '..tostring(rollinfo.lucky)..', Unlucky roll is '..tostring(rollinfo.unlucky)..'.')
  587.     end
  588. end
  589.  
  590.  
  591. -- Determine whether we have sufficient ammo for the action being attempted.
  592. function do_bullet_checks(spell, spellMap, eventArgs)
  593.     local bullet_name
  594.     local bullet_min_count = 1
  595.    
  596.     if spell.type == 'WeaponSkill' then
  597.         if spell.skill == "Marksmanship" then
  598.             if spell.element == 'None' then
  599.                 -- physical weaponskills
  600.                 bullet_name = gear.WSbullet
  601.             else
  602.                 -- magical weaponskills
  603.                 bullet_name = gear.MAbullet
  604.             end
  605.         else
  606.             -- Ignore non-ranged weaponskills
  607.             return
  608.         end
  609.     elseif spell.type == 'CorsairShot' then
  610.         bullet_name = gear.QDbullet
  611.     elseif spell.action_type == 'Ranged Attack' then
  612.         bullet_name = gear.RAbullet
  613.         if buffactive['Triple Shot'] then
  614.             bullet_min_count = 3
  615.         end
  616.     end
  617.    
  618.     local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
  619.    
  620.     -- If no ammo is available, give appropriate warning and end.
  621.     if not available_bullets then
  622.         if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
  623.             add_to_chat(104, 'No Quick Draw ammo left.  Using what\'s currently equipped ('..player.equipment.ammo..').')
  624.             return
  625.         elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
  626.             add_to_chat(104, 'No weaponskill ammo left.  Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
  627.             return
  628.         else
  629.             add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
  630.             eventArgs.cancel = true
  631.             return
  632.         end
  633.     end
  634.    
  635.     -- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
  636.     if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
  637.         add_to_chat(104, 'No ammo will be left for Quick Draw.  Cancelling.')
  638.         eventArgs.cancel = true
  639.         return
  640.     end
  641.    
  642.     -- Low ammo warning.
  643.     if spell.type ~= 'CorsairShot' and state.warned.value == false
  644.         and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
  645.         local msg = '*****  LOW AMMO WARNING: '..bullet_name..' *****'
  646.         --local border = string.repeat("*", #msg)
  647.         local border = ""
  648.         for i = 1, #msg do
  649.             border = border .. "*"
  650.         end
  651.        
  652.         add_to_chat(104, border)
  653.         add_to_chat(104, msg)
  654.         add_to_chat(104, border)
  655.  
  656.         state.warned:set()
  657.     elseif available_bullets.count > options.ammo_warning_limit and state.warned then
  658.         state.warned:reset()
  659.     end
  660. end
  661.  
  662. -- Select default macro book on initial load or subjob change.
  663. function select_default_macro_book()
  664.     set_macro_page(1, 4)
  665. end
  666.  
  667.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement