Guest User

Untitled

a guest
Nov 2nd, 2018
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 26.71 KB | None | 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. end
  32.  
  33. -------------------------------------------------------------------------------------------------------------------
  34. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  35. -------------------------------------------------------------------------------------------------------------------
  36.  
  37. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  38. function user_setup()
  39.     state.OffenseMode:options('Ranged', 'Melee', 'Acc')
  40.     state.RangedMode:options('Normal', 'Acc')
  41.     state.WeaponskillMode:options('Normal', 'Acc', 'Att', 'Mod')
  42.     state.CastingMode:options('Normal', 'Resistant')
  43.     state.IdleMode:options('Normal', 'PDT', 'Refresh')
  44.  
  45.     gear.RAbullet = "Chrono Bullet"
  46.     gear.WSbullet = "Chrono Bullet"
  47.     gear.MAbullet = "Chrono Bullet"
  48.     gear.QDbullet = "Animikii Bullet"
  49.     options.ammo_warning_limit = 15
  50.  
  51.     -- Additional local binds
  52.     send_command('bind ^` input /ja "Double-up" <me>')
  53.     send_command('bind !` input /ja "Bolter\'s Roll" <me>')
  54.  
  55.     select_default_macro_book()
  56. end
  57.  
  58.  
  59. -- Called when this job file is unloaded (eg: job change)
  60. function user_unload()
  61.     send_command('unbind ^`')
  62.     send_command('unbind !`')
  63. end
  64.  
  65. -- Define sets and vars used by this job file.
  66. function init_gear_sets()
  67.     --------------------------------------
  68.     -- Start defining the sets
  69.     --------------------------------------
  70.    
  71.     -- Precast Sets
  72.  
  73.     -- Precast sets to enhance JAs
  74.    
  75.     sets.precast.JA['Triple Shot'] = {body="Chasseur's Frac",head="Oshosi Mask",feet="Oshosi Leggings",}
  76.     sets.precast.JA['Snake Eye'] = {legs="Lanun Trews +1"}
  77.     sets.precast.JA['Wild Card'] = {feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}}}
  78.     sets.precast.JA['Random Deal'] = {body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}}}
  79.    
  80.  
  81.    
  82.     sets.precast.CorsairRoll = {
  83.     head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
  84.     back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Weapon skill damage +10%',}},
  85.     hands="Chasseur's Gants +1",
  86.     neck="Regal Necklace",
  87. }
  88.    
  89.     sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Nvrch. Culottes +2"})
  90.     sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chass. Bottes +1"})
  91.     sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chass. Tricorne"})
  92.     sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac"})
  93.     sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants +1"})
  94.    
  95.     sets.precast.LuzafRing = {ring2="Luzaf's Ring"}
  96.     sets.precast.FoldDoubleBust = {hands="Chasseur's Gants +1"}
  97.    
  98.     sets.precast.CorsairShot = {head="Blood Mask"}
  99.    
  100.  
  101.     -- Waltz set (chr and vit)
  102.     sets.precast.Waltz = {
  103.         head="Laksa. Tricorne +2",
  104.         body="Mummu Jacket +2",hands="Mummu Wrists +1",
  105.         legs="Mummu Kecks +2",feet="Mummu Gamash. +2"}
  106.        
  107.     -- Don't need any special gear for Healing Waltz.
  108.     sets.precast.Waltz['Healing Waltz'] = {}
  109.  
  110.     -- Fast cast sets for spells
  111.    
  112.     sets.precast.FC = {
  113.     head={ name="Carmine Mask +1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',}},
  114.     body={ name="Samnuha Coat", augments={'Mag. Acc.+13','"Mag.Atk.Bns."+14','"Fast Cast"+3','"Dual Wield"+4',}},
  115.     legs={ name="Rawhide Trousers", augments={'MP+50','"Fast Cast"+5','"Refresh"+1',}},
  116.     left_ear="Etiolation Earring",
  117.     right_ear="Loquac. Earring",
  118.     left_ring="Kishar Ring",
  119. }
  120.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  121.  
  122.  
  123.     sets.precast.RA = {ammo=gear.RAbullet,
  124.         head="Chass. Tricorne",
  125.         body="Laksa. Frac +3",waist="Impulse Belt",back="Navarch's Mantle",
  126.         hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  127.         legs={ name="Adhemar Kecks +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',},feet={ name="Adhe. Gamashes +1", augments={'HP+65','"Store TP"+7','"Snapshot"+10',}}}
  128.         }
  129.        
  130.     -- Weaponskill sets
  131.     -- Default set for any weaponskill that isn't any more specifically defined
  132.     sets.precast.WS = {
  133.         head="Meghanada Visor +2",
  134.         neck="Fotia Gorget",
  135.         ear1={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
  136.         ear2="Ishvara Earring",
  137.         body="Laksa. Frac +3",hands="Meg. Gloves +2",
  138.         ring1="Apate Ring",ring2="Regal Ring",
  139.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Weapon skill damage +10%',}},
  140.         waist="Fotia Belt",legs="Mummu Kecks +2",
  141.         feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  142. }
  143.  
  144.  
  145.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  146.     sets.precast.WS['Evisceration'] = sets.precast.WS
  147.  
  148.     sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {legs="Mummu Kecks +2"})
  149.  
  150.     sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {legs="Mummu Kecks +2"})
  151.  
  152.     sets.precast.WS['Last Stand'] = {
  153.         ammo=gear.WSbullet,
  154.         head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
  155.         main="Fettering Blade",
  156.         sub="Nusku Shield",
  157.         range="Fomalhaut",
  158.         head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
  159.         body="Laksa. Frac +3",
  160.         hands="Meg. Gloves +2",
  161.         legs={ name="Herculean Trousers", augments={'Weapon skill damage +5%','MND+6','Rng.Atk.+11',}},
  162.         feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  163.         neck="Fotia Gorget",
  164.         waist="Fotia Belt",
  165.         left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
  166.         right_ear="Ishvara Earring",
  167.         left_ring="Archon Ring",
  168.         right_ring="Regal Ring",
  169.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Weapon skill damage +10%',}},
  170. }
  171.  
  172.     sets.precast.WS['Last Stand'].Acc = {
  173.         ammo=gear.WSbullet,
  174.         main="Fettering Blade",
  175.         sub="Nusku Shield",
  176.         range="Fomalhaut",
  177.         head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
  178.         body="Laksa. Frac +3",
  179.         hands="Meg. Gloves +2",
  180.         legs={ name="Herculean Trousers", augments={'Weapon skill damage +5%','MND+6','Rng.Atk.+11',}},
  181.         feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  182.         neck="Fotia Gorget",
  183.         waist="Fotia Belt",
  184.         left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
  185.         right_ear="Ishvara Earring",
  186.         left_ring="Archon Ring",
  187.         right_ring="Regal Ring",
  188.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Weapon skill damage +10%',}},
  189. }
  190.  
  191.  
  192.     sets.precast.WS['Wildfire'] = {
  193.         ammo=gear.MAbullet,
  194.         main="Fettering Blade",
  195.         sub="Nusku Shield",
  196.         range="Fomalhaut",
  197.         head={ name="Herculean Helm", augments={'Mag. Acc.+18 "Mag.Atk.Bns."+18','STR+4','"Mag.Atk.Bns."+11',}},
  198.         body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  199.         hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  200.         legs={ name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Weapon skill damage +1%','Mag. Acc.+15','"Mag.Atk.Bns."+12',}},
  201.         feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  202.         neck="Sanctity Necklace",
  203.         waist="Fotia Belt",
  204.         left_ear="Friomisi Earring",
  205.         right_ear="Hecate's Earring",
  206.         left_ring="Dingir Ring",
  207.         right_ring="Shiva Ring +1",
  208.         back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Weapon skill damage +10%',}},
  209. }
  210.  
  211.    
  212.     sets.precast.WS['Leaden Salute'] = set_combine(sets.precast.WS['Wildfire'], {head="Pixie Hairpin +1",right_ring="Archon Ring"})
  213.    
  214.    
  215.     -- Midcast Sets
  216.     sets.midcast.FastRecast = {
  217.         head="Whirlpool Mask",
  218.         body="Iuitl Vest",hands="Iuitl Wristbands",
  219.         legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  220.        
  221.     -- Specific spells
  222.     sets.midcast.Utsusemi = sets.midcast.FastRecast
  223.  
  224.     sets.midcast.CorsairShot = {
  225.         ammo=gear.QDbullet,
  226.         main="Fettering Blade",
  227.         sub="Nusku Shield",
  228.         range="Fomalhaut",
  229.         head="Laksa. Tricorne +2",
  230.         body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  231.         hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  232.         legs={ name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Weapon skill damage +1%','Mag. Acc.+15','"Mag.Atk.Bns."+12',}},
  233.         feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  234.         neck="Sanctity Necklace",
  235.         waist="Eschan Stone",
  236.         left_ear="Friomisi Earring",
  237.         right_ear="Digni. Earring",
  238.         left_ring="Dingir Ring",
  239.         right_ring="Shiva Ring +1",
  240.         back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Weapon skill damage +10%',}},
  241. }
  242.  
  243.     sets.midcast.CorsairShot.Acc = {
  244.         ammo=gear.QDbullet,
  245.         main="Fettering Blade",
  246.         sub="Nusku Shield",
  247.         range="Fomalhaut",
  248.         head="Laksa. Tricorne +2",
  249.         body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  250.         hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  251.         legs={ name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Weapon skill damage +1%','Mag. Acc.+15','"Mag.Atk.Bns."+12',}},
  252.         feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  253.         neck="Sanctity Necklace",
  254.         waist="Eschan Stone",
  255.         left_ear="Friomisi Earring",
  256.         right_ear="Digni. Earring",
  257.         left_ring="Dingir Ring",
  258.         right_ring="Shiva Ring +1",
  259.         back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','Weapon skill damage +10%',}},
  260. }
  261.  
  262.     sets.midcast.CorsairShot['Light Shot'] = {
  263.         ammo=gear.QDbullet,
  264.         main="Fettering Blade",
  265.         sub="Nusku Shield",
  266.         range="Fomalhaut",
  267.         head="Laksa. Tricorne +2",
  268.         body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  269.         hands="Mummu Wrists +1",
  270.         legs="Mummu Kecks +2",
  271.         feet="Chass. Bottes +1",
  272.         neck="Sanctity Necklace",
  273.         waist="Eschan Stone",
  274.         left_ear="Friomisi Earring",
  275.         right_ear="Digni. 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','Weapon skill damage +10%',}},
  279. }
  280.  
  281.     sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
  282.  
  283.  
  284.     -- Ranged gear
  285.     sets.midcast.RA = {
  286.         ammo=gear.RAbullet,
  287.         main="Fettering Blade",
  288.         sub="Nusku Shield",
  289.         range="Fomalhaut",
  290.         head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
  291.         body="Laksa. Frac +3",
  292.         hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  293.         legs={ name="Adhemar Kecks +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
  294.         feet={ name="Adhe. Gamashes +1", augments={'HP+65','"Store TP"+7','"Snapshot"+10',}},
  295.         neck="Iskur Gorget",
  296.         waist="Reiki Yotai",
  297.         left_ear="Enervating Earring",
  298.         right_ear="Telos Earring",
  299.         left_ring="Dingir Ring",
  300.         right_ring="Cacoethic Ring +1",
  301.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10',}},
  302. }
  303.  
  304.     sets.midcast.RA.Acc = {
  305.         ammo=gear.RAbullet,
  306.         main="Fettering Blade",
  307.         sub="Nusku Shield",
  308.         range="Fomalhaut",
  309.         head="Meghanada Visor +2",
  310.         body="Laksa. Frac +3",
  311.         hands="Meg. Gloves +2",
  312.         legs={ name="Adhemar Kecks +1", augments={'AGI+12','Rng.Acc.+20','Rng.Atk.+20',}},
  313.         feet="Meg. Jam. +2",
  314.         neck="Iskur Gorget",
  315.         waist="Eschan Stone",
  316.         left_ear="Enervating Earring",
  317.         right_ear="Telos Earring",
  318.         left_ring="Paqichikaji Ring",
  319.         right_ring="Cacoethic Ring +1",
  320.         back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10',}},
  321. }
  322.  
  323.    
  324.     -- Sets to return to when not performing an action.
  325.    
  326.     -- Resting sets
  327.     sets.resting = {neck="Wiglen Gorget",ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  328.    
  329.  
  330.     -- Idle sets
  331.     sets.idle = {
  332.         ammo=gear.RAbullet,
  333.         head="Meghanada Visor +2",
  334.         body="Meg. Cuirie +2",
  335.         hands="Meg. Gloves +2",
  336.         legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  337.         feet="Meg. Jam. +2",
  338.         neck="Twilight Torque",
  339.         waist="Flax Sash",
  340.         left_ear="Etiolation Earring",
  341.         right_ear="Infused Earring",
  342.         left_ring="Defending Ring",
  343.         right_ring={ name="Dark Ring", augments={'Phys. dmg. taken -6%','Magic dmg. taken -5%',}},
  344.         back="Solemnity Cape",
  345. }
  346.  
  347.     sets.idle.Town = {
  348.         main="Surcouf's Jambiya",
  349.         range="Eminent Gun",
  350.         ammo=gear.RAbullet,
  351.         head="Rawhide Mask",
  352.         body="Meg. Cuirie +2",
  353.         hands="Meg. Gloves +2",
  354.         legs={ name="Rawhide Trousers", augments={'MP+50','"Fast Cast"+5','"Refresh"+1',}},
  355.         feet="Meg. Jam. +2",
  356.         neck="Wiglen Gorget",
  357.         waist="Flax Sash",
  358.         left_ear="Etiolation Earring",
  359.         right_ear="Infused Earring",
  360.         left_ring="Paguroidea Ring",
  361.         right_ring="Sheltered Ring",
  362.         back="Solemnity Cape",
  363. }
  364.    
  365.     -- Defense sets
  366.     sets.defense.PDT = {
  367.         head="Meghanada Visor +2",
  368.         body="Meg. Cuirie +2",
  369.         hands="Meg. Gloves +2",
  370.         legs="Meg. Chausses +2",
  371.         feet="Meg. Jam. +2",
  372.         neck="Twilight Torque",
  373.         waist="Flax Sash",
  374.         left_ear="Etiolation Earring",
  375.         right_ear="Genmei Earring",
  376.         left_ring="Defending Ring",
  377.         right_ring={ name="Dark Ring", augments={'Phys. dmg. taken -6%','Magic dmg. taken -5%',}},
  378.         back="Solemnity Cape",
  379. }
  380.  
  381.     sets.defense.MDT = {
  382.         head="Meghanada Visor +2",
  383.         body="Meg. Cuirie +2",
  384.         hands="Meg. Gloves +2",
  385.         legs="Meg. Chausses +2",
  386.         feet="Meg. Jam. +2",
  387.         neck="Twilight Torque",
  388.         waist="Flax Sash",
  389.         left_ear="Etiolation Earring",
  390.         right_ear="Genmei Earring",
  391.         left_ring="Defending Ring",
  392.         right_ring={ name="Dark Ring", augments={'Phys. dmg. taken -6%','Magic dmg. taken -5%',}},
  393.         back="Solemnity Cape",
  394. }
  395.    
  396.  
  397.     sets.Kiting = {legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},}
  398.  
  399.     -- Engaged sets
  400.  
  401.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  402.     -- sets if more refined versions aren't defined.
  403.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  404.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  405.    
  406.     -- Normal melee group
  407.     sets.engaged.Melee = {
  408.         ammo=gear.RAbullet,
  409.         head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}},
  410.         body={ name="Herculean Vest", augments={'Accuracy+19 Attack+19','"Triple Atk."+3','Attack+7',}},
  411.         hands={ name="Herculean Gloves", augments={'Accuracy+6','"Triple Atk."+3','STR+8','Attack+15',}},
  412.         legs={ name="Samnuha Tights", augments={'STR+9','DEX+8','"Dbl.Atk."+2','"Triple Atk."+2',}},
  413.         feet={ name="Herculean Boots", augments={'Accuracy+1 Attack+1','"Triple Atk."+3','DEX+5','Accuracy+10','Attack+13',}},
  414.         neck="Sanctity Necklace",
  415.         waist="Windbuffet Belt +1",
  416.         left_ear="Telos Earring",
  417.         right_ear="Digni. Earring",
  418.         left_ring="Hetairoi Ring",
  419.         right_ring="Epona's Ring",
  420.         back="Grounded Mantle",
  421. }
  422.    
  423.     sets.engaged.Acc = {
  424.         ammo=gear.RAbullet,
  425.         head="Meghanada Visor +2",
  426.         body="Meg. Cuirie +2",
  427.         hands="Meg. Gloves +2",
  428.         legs="Meg. Chausses +2",
  429.         feet="Meg. Jam. +2",
  430.         neck="Sanctity Necklace",
  431.         waist="Eschan Stone",
  432.         left_ear="Telos Earring",
  433.         right_ear="Digni. Earring",
  434.         left_ring="Cacoethic Ring +1",
  435.         right_ring="Varar Ring",
  436.         back="Grounded Mantle",
  437. }
  438.  
  439.     sets.engaged.Ranged = {
  440.         ammo=gear.RAbullet,
  441.         head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}},
  442.         body={ name="Herculean Vest", augments={'Accuracy+19 Attack+19','"Triple Atk."+3','Attack+7',}},
  443.         hands={ name="Herculean Gloves", augments={'Accuracy+6','"Triple Atk."+3','STR+8','Attack+15',}},
  444.         legs={ name="Samnuha Tights", augments={'STR+9','DEX+8','"Dbl.Atk."+2','"Triple Atk."+2',}},
  445.         feet={ name="Herculean Boots", augments={'Accuracy+1 Attack+1','"Triple Atk."+3','DEX+5','Accuracy+10','Attack+13',}},
  446.         neck="Sanctity Necklace",
  447.         waist="Windbuffet Belt +1",
  448.         left_ear="Telos Earring",
  449.         right_ear="Digni. Earring",
  450.         left_ring="Hetairoi Ring",
  451.         right_ring="Epona's Ring",
  452.         back="Grounded Mantle",
  453. }
  454.  
  455. end
  456.  
  457. -------------------------------------------------------------------------------------------------------------------
  458. -- Job-specific hooks for standard casting events.
  459. -------------------------------------------------------------------------------------------------------------------
  460.  
  461. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  462. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  463. function job_precast(spell, action, spellMap, eventArgs)
  464.     -- Check that proper ammo is available if we're using ranged attacks or similar.
  465.     if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
  466.         do_bullet_checks(spell, spellMap, eventArgs)
  467.     end
  468.  
  469.     -- gear sets
  470.     if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing.value then
  471.         equip(sets.precast.LuzafRing)
  472.     elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
  473.         classes.CustomClass = 'Acc'
  474.     elseif spell.english == 'Fold' and buffactive['Bust'] == 2 then
  475.         if sets.precast.FoldDoubleBust then
  476.             equip(sets.precast.FoldDoubleBust)
  477.             eventArgs.handled = true
  478.         end
  479.     end
  480. end
  481.  
  482.  
  483. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  484. function job_aftercast(spell, action, spellMap, eventArgs)
  485.     if spell.type == 'CorsairRoll' and not spell.interrupted then
  486.         display_roll_info(spell)
  487.     end
  488. end
  489.  
  490. -------------------------------------------------------------------------------------------------------------------
  491. -- User code that supplements standard library decisions.
  492. -------------------------------------------------------------------------------------------------------------------
  493.  
  494. -- Return a customized weaponskill mode to use for weaponskill sets.
  495. -- Don't return anything if you're not overriding the default value.
  496. function get_custom_wsmode(spell, spellMap, default_wsmode)
  497.     if buffactive['Transcendancy'] then
  498.         return 'Brew'
  499.     end
  500. end
  501.  
  502.  
  503. -- Called by the 'update' self-command, for common needs.
  504. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  505. function job_update(cmdParams, eventArgs)
  506.     if newStatus == 'Engaged' and player.equipment.main == 'Chatoyant Staff' then
  507.         state.OffenseMode:set('Ranged')
  508.     end
  509. end
  510.  
  511.  
  512. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  513. function display_current_job_state(eventArgs)
  514.     local msg = ''
  515.    
  516.     msg = msg .. 'Off.: '..state.OffenseMode.current
  517.     msg = msg .. ', Rng.: '..state.RangedMode.current
  518.     msg = msg .. ', WS.: '..state.WeaponskillMode.current
  519.     msg = msg .. ', QD.: '..state.CastingMode.current
  520.  
  521.     if state.DefenseMode.value ~= 'None' then
  522.         local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
  523.         msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
  524.     end
  525.    
  526.     if state.Kiting.value then
  527.         msg = msg .. ', Kiting'
  528.     end
  529.    
  530.     if state.PCTargetMode.value ~= 'default' then
  531.         msg = msg .. ', Target PC: '..state.PCTargetMode.value
  532.     end
  533.  
  534.     if state.SelectNPCTargets.value then
  535.         msg = msg .. ', Target NPCs'
  536.     end
  537.  
  538.     msg = msg .. ', Roll Size: ' .. ((state.LuzafRing.value and 'Large') or 'Small')
  539.    
  540.     add_to_chat(122, msg)
  541.  
  542.     eventArgs.handled = true
  543. end
  544.  
  545.  
  546. -------------------------------------------------------------------------------------------------------------------
  547. -- Utility functions specific to this job.
  548. -------------------------------------------------------------------------------------------------------------------
  549.  
  550. function define_roll_values()
  551.     rolls = {
  552.         ["Corsair's Roll"]   = {lucky=5, unlucky=9, bonus="Experience Points"},
  553.         ["Ninja Roll"]       = {lucky=4, unlucky=8, bonus="Evasion"},
  554.         ["Hunter's Roll"]    = {lucky=4, unlucky=8, bonus="Accuracy"},
  555.         ["Chaos Roll"]       = {lucky=4, unlucky=8, bonus="Attack"},
  556.         ["Magus's Roll"]     = {lucky=2, unlucky=6, bonus="Magic Defense"},
  557.         ["Healer's Roll"]    = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
  558.         ["Puppet Roll"]      = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
  559.         ["Choral Roll"]      = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
  560.         ["Monk's Roll"]      = {lucky=3, unlucky=7, bonus="Subtle Blow"},
  561.         ["Beast Roll"]       = {lucky=4, unlucky=8, bonus="Pet Attack"},
  562.         ["Samurai Roll"]     = {lucky=2, unlucky=6, bonus="Store TP"},
  563.         ["Evoker's Roll"]    = {lucky=5, unlucky=9, bonus="Refresh"},
  564.         ["Rogue's Roll"]     = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
  565.         ["Warlock's Roll"]   = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
  566.         ["Fighter's Roll"]   = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
  567.         ["Drachen Roll"]     = {lucky=3, unlucky=7, bonus="Pet Accuracy"},
  568.         ["Gallant's Roll"]   = {lucky=3, unlucky=7, bonus="Defense"},
  569.         ["Wizard's Roll"]    = {lucky=5, unlucky=9, bonus="Magic Attack"},
  570.         ["Dancer's Roll"]    = {lucky=3, unlucky=7, bonus="Regen"},
  571.         ["Scholar's Roll"]   = {lucky=2, unlucky=6, bonus="Conserve MP"},
  572.         ["Bolter's Roll"]    = {lucky=3, unlucky=9, bonus="Movement Speed"},
  573.         ["Caster's Roll"]    = {lucky=2, unlucky=7, bonus="Fast Cast"},
  574.         ["Courser's Roll"]   = {lucky=3, unlucky=9, bonus="Snapshot"},
  575.         ["Blitzer's Roll"]   = {lucky=4, unlucky=9, bonus="Attack Delay"},
  576.         ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
  577.         ["Allies's Roll"]    = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
  578.         ["Miser's Roll"]     = {lucky=5, unlucky=7, bonus="Save TP"},
  579.         ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
  580.         ["Avenger's Roll"]   = {lucky=4, unlucky=8, bonus="Counter Rate"},
  581.     }
  582. end
  583.  
  584. function display_roll_info(spell)
  585.     rollinfo = rolls[spell.english]
  586.     local rollsize = (state.LuzafRing.value and 'Large') or 'Small'
  587.  
  588.     if rollinfo then
  589.         add_to_chat(104, spell.english..' provides a bonus to '..rollinfo.bonus..'.  Roll size: '..rollsize)
  590.         add_to_chat(104, 'Lucky roll is '..tostring(rollinfo.lucky)..', Unlucky roll is '..tostring(rollinfo.unlucky)..'.')
  591.     end
  592. end
  593.  
  594.  
  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 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 state.warned.value == false
  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 = string.repeat("*", #msg)
  651.         local border = ""
  652.         for i = 1, #msg do
  653.             border = border .. "*"
  654.         end
  655.        
  656.         add_to_chat(104, border)
  657.         add_to_chat(104, msg)
  658.         add_to_chat(104, border)
  659.  
  660.         state.warned:set()
  661.     elseif available_bullets.count > options.ammo_warning_limit and state.warned then
  662.         state.warned:reset()
  663.     end
  664. end
  665.  
  666. -- Select default macro book on initial load or subjob change.
  667. function select_default_macro_book()
  668.     set_macro_page(1, 19)
  669. end
Add Comment
Please, Sign In to add comment