Advertisement
Boposhopo

COR Lua

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