Advertisement
bongarippa

COR

Feb 4th, 2021 (edited)
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 75.27 KB | None | 0 0
  1. -- Original: Motenten / Modified: Arislan
  2. -- Haste/DW Detection Requires Gearinfo Addon
  3.  
  4. -------------------------------------------------------------------------------------------------------------------
  5. -- Keybinds
  6. -------------------------------------------------------------------------------------------------------------------
  7.  
  8. -- Modes: [ F9 ] Cycle Offense Modes
  9. -- [ CTRL+F9 ] Cycle Hybrid Modes
  10. -- [ ALT+F9 ] Cycle Ranged Modes
  11. -- [ WIN+F9 ] Cycle Weapon Skill Modes
  12. -- [ F10 ] Emergency -PDT Mode
  13. -- [ ALT+F10 ] Toggle Kiting Mode
  14. -- [ F11 ] Emergency -MDT Mode
  15. -- [ F12 ] Update Current Gear / Report Current Status
  16. -- [ CTRL+F12 ] Cycle Idle Modes
  17. -- [ ALT+F12 ] Cancel Emergency -PDT/-MDT Mode
  18. -- [ WIN+C ] Toggle Capacity Points Mode
  19. -- [ WIN+` ] Toggle use of Luzaf Ring.
  20. -- [ WIN+Q ] Quick Draw shot mode selector.
  21. --
  22. -- Abilities: [ CTRL+- ] Quick Draw primary shot element cycle forward.
  23. -- [ CTRL+= ] Quick Draw primary shot element cycle backward.
  24. -- [ ALT+- ] Quick Draw secondary shot element cycle forward.
  25. -- [ ALT+= ] Quick Draw secondary shot element cycle backward.
  26. -- [ CTRL+[ ] Quick Draw toggle target type.
  27. -- [ CTRL+] ] Quick Draw toggle use secondary shot.
  28. --
  29. -- [ CTRL+C ] Crooked Cards
  30. -- [ CTRL+` ] Double-Up
  31. -- [ CTRL+X ] Fold
  32. -- [ CTRL+S ] Snake Eye
  33. -- [ CTRL+NumLock ] Triple Shot
  34. -- [ CTRL+Numpad/ ] Berserk
  35. -- [ CTRL+Numpad* ] Warcry
  36. -- [ CTRL+Numpad- ] Aggressor
  37. --
  38. -- Spells: [ WIN+, ] Utsusemi: Ichi
  39. -- [ WIN+. ] Utsusemi: Ni
  40. --
  41. -- Weapons: [ WIN+E/R ] Cycles between available Weapon Sets
  42. -- [ WIN+W ] Toggle Ranged Weapon Lock
  43. --
  44. -- WS: [ CTRL+Numpad7 ] Savage Blade
  45. -- [ CTRL+Numpad8 ] Last Stand
  46. -- [ CTRL+Numpad4 ] Leaden Salute
  47. -- [ CTRL+Numpad5 ] Requiescat
  48. -- [ CTRL+Numpad6 ] Wildfire
  49. -- [ CTRL+Numpad1 ] Aeolian Edge
  50. -- [ CTRL+Numpad2 ] Evisceration
  51. --
  52. -- RA: [ Numpad0 ] Ranged Attack
  53. --
  54. --
  55. -- (Global-Binds.lua contains additional non-job-related keybinds)
  56.  
  57.  
  58. -------------------------------------------------------------------------------------------------------------------
  59. -- Custom Commands (preface with /console to use these in macros)
  60. -------------------------------------------------------------------------------------------------------------------
  61.  
  62. -- gs c qd Uses the currently configured shot on the target, with either <t> or
  63. -- <stnpc> depending on setting.
  64. -- gs c qd t Uses the currently configured shot on the target, but forces use of <t>.
  65. --
  66. -- gs c cycle mainqd Cycles through the available steps to use as the primary shot when using
  67. -- one of the above commands.
  68. -- gs c cycle altqd Cycles through the available steps to use for alternating with the
  69. -- configured main shot.
  70. -- gs c toggle usealtqd Toggles whether or not to use an alternate shot.
  71. -- gs c toggle selectqdtarget Toggles whether or not to use <stnpc> (as opposed to <t>) when using a shot.
  72. --
  73. -- gs c toggle LuzafRing Toggles use of Luzaf Ring on and off
  74.  
  75.  
  76. -------------------------------------------------------------------------------------------------------------------
  77. -- Setup functions for this job. Generally should not be modified.
  78. -------------------------------------------------------------------------------------------------------------------
  79.  
  80. -- Initialization function for this job file.
  81. function get_sets()
  82. include('organizer-lib')
  83. mote_include_version = 2
  84.  
  85. -- Load and initialize the include file.
  86. include('Mote-Include.lua')
  87. end
  88.  
  89. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  90. function job_setup()
  91. -- QuickDraw Selector
  92. state.Mainqd = M{['description']='Primary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
  93. state.Altqd = M{['description']='Secondary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
  94. state.UseAltqd = M(false, 'Use Secondary Shot')
  95. state.SelectqdTarget = M(false, 'Select Quick Draw Target')
  96. state.IgnoreTargetting = M(false, 'Ignore Targetting')
  97.  
  98. state.QDMode = M{['description']='Quick Draw Mode', 'STP', 'Enhance', 'Magic Attack','TH'}
  99.  
  100. state.Currentqd = M{['description']='Current Quick Draw', 'Main', 'Alt'}
  101.  
  102. -- Whether to use Luzaf's Ring
  103. state.LuzafRing = M(false, "Luzaf's Ring")
  104. -- Whether a warning has been given for low ammo
  105. state.warned = M(false)
  106.  
  107. include('Mote-TreasureHunter')
  108. state.TreasureMode:set('Tag')
  109.  
  110.  
  111.  
  112. no_swap_gear = S{"Warp Ring", "Dim. Ring (Dem)", "Dim. Ring (Holla)", "Dim. Ring (Mea)",
  113. "Trizek Ring", "Echad Ring", "Facility Ring", "Capacity Ring",
  114. "Dev. Bul. Pouch", "Chr. Bul. Pouch", "Liv. Bul. Pouch"}
  115. elemental_ws = S{"Aeolian Edge", "Leaden Salute", "Wildfire"}
  116. no_shoot_ammo = S{"Hauksbok Bullet"}
  117.  
  118. define_roll_values()
  119.  
  120. lockstyleset = 37
  121. end
  122.  
  123. -------------------------------------------------------------------------------------------------------------------
  124. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  125. -------------------------------------------------------------------------------------------------------------------
  126.  
  127. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  128. function user_setup()
  129. state.OffenseMode:options('Normal', 'LowAcc', 'MidAcc', 'HighAcc', 'STP', 'EngagedShooting')
  130. state.HybridMode:options('Normal', 'DT', 'SubtleBlow', 'MeleeCrit')
  131. state.RangedMode:options('Normal', 'Acc', 'Critical', 'SubtleBlow')
  132. state.WeaponskillMode:options('Normal', 'Acc')
  133. state.IdleMode:options('Normal', 'HP') --'Refresh', 'DT'
  134.  
  135. state.Gun = M{['description']='Current Gun', 'Death Penalty', 'Armageddon', 'Fomalhaut', 'Ataktos','Compensator'}
  136. -- state.CP = M(false, "Capacity Points Mode")
  137. state.WeaponLock = M(false, 'Weapon Lock')
  138.  
  139. gear.RAbullet = "Chrono Bullet"
  140. gear.RAccbullet = "Devastating Bullet"
  141. gear.WSbullet = "Chrono Bullet"
  142. gear.MAbullet = "Living Bullet"
  143. gear.QDbullet = "Hauksbok Bullet"
  144. options.ammo_warning_limit = 10
  145.  
  146. -- Additional local binds
  147. -- include('Global-Binds.lua') -- OK to remove this line
  148. -- include('Global-GEO-Binds.lua') -- OK to remove this line
  149.  
  150. send_command('lua l gearinfo')
  151.  
  152. -- send_command('bind @t gs c cycle treasuremode')
  153. send_command('bind !` input /ja "Bolter\'s Roll" <me>')
  154. send_command ('bind @` gs c toggle LuzafRing')
  155.  
  156. send_command('bind ^- gs c cycleback mainqd')
  157. send_command('bind ^= gs c cycle mainqd')
  158. send_command('bind !- gs c cycle altqd')
  159. send_command('bind != gs c cycleback altqd')
  160. send_command('bind ^[ gs c toggle selectqdtarget')
  161. send_command('bind ^] gs c toggle usealtqd')
  162.  
  163. -- send_command('bind @c gs c toggle CP')
  164. send_command('bind @q gs c cycle QDMode')
  165. send_command('bind @e gs c cycle Gun')
  166. send_command('bind @w gs c toggle WeaponLock')
  167.  
  168. -- send_command('bind numpad0 input /ra <t>')
  169.  
  170. select_default_macro_book()
  171. set_lockstyle()
  172.  
  173. state.Auto_Kite = M(false, 'Auto_Kite')
  174. Haste = 0
  175. DW_needed = 0
  176. DW = false
  177. moving = false
  178. update_combat_form()
  179. determine_haste_group()
  180. end
  181.  
  182.  
  183. -- Called when this job file is unloaded (eg: job change)
  184. function user_unload()
  185. -- send_command('unbind @t')
  186. send_command('unbind !`')
  187. send_command('unbind @`')
  188. send_command('unbind ^-')
  189. send_command('unbind ^=')
  190. send_command('unbind !-')
  191. send_command('unbind !=')
  192. send_command('unbind ^[')
  193. send_command('unbind ^]')
  194. -- send_command('unbind @c')
  195. send_command('unbind @q')
  196. send_command('unbind @e')
  197. send_command('unbind @w')
  198.  
  199. send_command('lua u gearinfo')
  200. end
  201.  
  202. -- Define sets and vars used by this job file.
  203. function init_gear_sets()
  204.  
  205. ------------------------------------------------------------------------------------------------
  206. ---------------------------------------- Precast Sets ------------------------------------------
  207. ------------------------------------------------------------------------------------------------
  208.  
  209.  
  210. sets.precast.JA['Double-Up'] = {legs="Lanun Trews +3"}
  211. sets.precast.JA['Snake Eye'] = {legs="Lanun Trews +3"}
  212. sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +3"}
  213. sets.precast.JA['Random Deal'] = {body="Lanun Frac +3"}
  214. sets.precast.JA['Triple Shot'] = {head="Oshosi Mask",
  215. body="Chasseur's Frac +3",
  216. hands="Oshosi Gloves",
  217. legs="Oshosi Trousers",
  218. feet="Oshosi Leggings",
  219. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},}
  220.  
  221. sets.precast.CorsairRoll = {
  222. main={ name="Rostam", augments={'Path: C',}},
  223. head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
  224. body="Malignance Tabard",
  225. hands="Chasseur's Gants +3",
  226. legs={ name="Desultor Tassets", augments={'"Sic" and "Ready" ability delay -5','"Phantom Roll" ability delay -5',}},
  227. feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  228. neck="Bathy Choker +1",
  229. --neck="Regal Necklace",
  230. waist="Plat. Mog. Belt",
  231. left_ear="Genmei Earring",
  232. right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
  233. left_ring="Defending Ring",
  234. right_ring="Luzaf's Ring",
  235. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},}
  236.  
  237. sets.precast.CorsairRoll.Duration = {}
  238. sets.precast.CorsairRoll.LowerDelay = {back="Gunslinger's Cape"}
  239. sets.precast.CorsairRoll["Caster\'s Roll"] = {}
  240. sets.precast.CorsairRoll["Courser\'s Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chass. Bottes +3"})
  241. sets.precast.CorsairRoll["Blitzer\'s Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chass. Tricorne +3"})
  242. sets.precast.CorsairRoll["Tactician\'s Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +3"})
  243. sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants +3"})
  244.  
  245. sets.precast.LuzafRing = {ring1="Luzaf's Ring"}
  246.  
  247. sets.precast.FoldDoubleBust = {hands="Lanun Gants +3"}
  248.  
  249. sets.precast.Waltz = {
  250. body="Passion Jacket",
  251. ring1="Asklepian Ring",
  252. waist="Gishdubar Sash",
  253. }
  254.  
  255. sets.precast.Waltz['Healing Waltz'] = {}
  256.  
  257. sets.precast.FC = {head={ name="Carmine Mask +1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',}},
  258. body={ name="Adhemar Jacket +1", augments={'HP+105','"Fast Cast"+10','Magic dmg. taken -4',}},
  259. hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
  260. legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  261. feet={ name="Carmine Greaves +1", augments={'Accuracy+12','DEX+12','MND+20',}},
  262. neck="Incantor's Torque",
  263. waist="Plat. Mog. Belt",
  264. left_ear="Loquac. Earring",
  265. right_ear="Enchntr. Earring +1",
  266. left_ring="Rahab ring",
  267. right_ring="Kishar Ring",
  268. back="Moonlight Cape",
  269. }
  270.  
  271. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
  272. body="Passion Jacket",
  273. neck="Magoraga Beads",
  274. })
  275.  
  276. -- (10% Snapshot from JP Gifts)
  277. sets.precast.RA = {head="Chass. Tricorne +3",
  278. body="Oshosi Vest",
  279. hands={ name="Lanun Gants +3", augments={'Enhances "Fold" effect',}},
  280. legs={ name="Adhemar Kecks +1", augments={'AGI+12','"Rapid Shot"+13','Enmity-6',}},
  281. feet="Meg. Jam. +2",
  282. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  283. waist="Impulse Belt",
  284. left_ear="Odnowa Earring",
  285. right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
  286. left_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
  287. right_ring="Regal Ring",
  288. back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},
  289. }
  290.  
  291. sets.precast.RA.Flurry1 = set_combine(sets.precast.RA, {head="Chass. Tricorne +3",
  292. body="Laksa. Frac +3",
  293. hands="Lanun Gants +3",
  294. legs={ name="Adhemar Kecks +1", augments={'AGI+12','"Rapid Shot"+13','Enmity-6',}},
  295. feet="Meg. Jam. +2",
  296. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  297. waist="Impulse Belt",
  298. back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},})
  299.  
  300. sets.precast.RA.Flurry2 = set_combine(sets.precast.RA, {head="Chass. Tricorne +3",
  301. body="Laksa. Frac +3",
  302. hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
  303. legs={ name="Adhemar Kecks +1", augments={'AGI+12','"Rapid Shot"+13','Enmity-6',}},
  304. feet="Meg. Jam. +2",
  305. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  306. waist="Impulse Belt",
  307. back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},})
  308.  
  309. ------------------------------------------------------------------------------------------------
  310. ------------------------------------- Weapon Skill Sets ----------------------------------------
  311. ------------------------------------------------------------------------------------------------
  312.  
  313. sets.precast.WS = {
  314. ammo=gear.WSbullet,
  315. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  316. body="Laksa. Frac +3",
  317. hands="Meg. Gloves +2",
  318. legs="Malignance Tights",
  319. feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  320. neck="Fotia Gorget",
  321. waist="Fotia Belt",
  322. left_ear="Ishvara Earring",
  323. right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
  324. left_ring="Cornelia's Ring",
  325. right_ring="Regal Ring",
  326. back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
  327. }
  328.  
  329. sets.precast.WS.Acc = set_combine(sets.precast.WS, {
  330. feet="Meg. Jam. +2",
  331. ear2="Telos Earring",
  332. neck="Iskur Gorget",
  333. ring2="Hajduk Ring +1",
  334. waist="Eschan Stone",
  335. })
  336.  
  337. sets.precast.WS['Last Stand'] = {ammo=gear.WSbullet,
  338. head={ name="Lanun Tricorne +3", augments={'Enhances "Winning Streak" effect',}},
  339. body="Laksa. Frac +3",
  340. hands="Chasseur's Gants +3",
  341. legs={ name="Nyame Flanchard", augments={'Path: B',}},
  342. feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  343. neck="Fotia Gorget",
  344. waist="Fotia Belt",
  345. left_ear="Ishvara Earring",
  346. right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
  347. left_ring="Epaminondas's Ring",
  348. right_ring="Cornelia's Ring",
  349. back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','AGI+10','Weapon skill damage +10%',}},}
  350.  
  351. sets.precast.WS['Last Stand'].Acc = set_combine(sets.precast.WS['Last Stand'], {
  352. feet="Meg. Jam. +2",
  353. neck="Iskur Gorget",
  354. ear2="Telos Earring",
  355. ring2="Hajduk Ring +1",
  356. waist="Eschan Stone",
  357. })
  358.  
  359. sets.precast.WS['Wildfire'] = {
  360. ammo=gear.MAbullet,
  361. head="Nyame Helm",
  362. body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  363. hands="Chasseur's Gants +3",
  364. legs="Nyame Flanchard",
  365. feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  366. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  367. waist="Skrymir Cord +1",
  368. left_ear="Friomisi Earring",
  369. right_ear="Ishvara Earring",
  370. left_ring="Cornelia's Ring",
  371. right_ring="Epaminondas's Ring",
  372. back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
  373. }
  374.  
  375. sets.precast.WS['Hot Shot'] = sets.precast.WS['Wildfire']
  376.  
  377. sets.precast.WS['Leaden Salute'] = {ammo=gear.MAbullet,
  378. head="Pixie Hairpin +1",
  379. body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  380. hands="Nyame Gauntlets",
  381. legs="Nyame Flanchard",
  382. feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  383. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  384. waist="Orpheus's Sash",
  385. left_ear="Friomisi Earring",
  386. right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
  387. left_ring="Cornelia's Ring",
  388. right_ring="Archon Ring",
  389. back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},}
  390.  
  391. sets.precast.WS['Leaden Salute'].Acc = {ammo=gear.MAbullet,
  392. head="Pixie Hairpin +1",
  393. body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  394. hands="Nyame Gauntlets",
  395. legs="Nyame Flanchard",
  396. feet={ name="Lanun Bottes +3", augments={'Enhances "Wild Card" effect',}},
  397. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  398. waist="Orpheus's Sash",
  399. left_ear="Friomisi Earring",
  400. right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
  401. left_ring="Cornelia's Ring",
  402. right_ring="Archon Ring",
  403. back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},}
  404.  
  405. sets.precast.WS['Evisceration'] = {
  406. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  407. body="Meg. Cuirie +2",
  408. hands="Chasseur's Gants +3",
  409. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  410. feet="Mummu Gamash. +2",
  411. neck="Fotia Gorget",
  412. waist="Fotia Belt",
  413. left_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
  414. right_ear="Odr Earring",
  415. left_ring="Mummu Ring",
  416. right_ring="Regal Ring",
  417. back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
  418. }
  419.  
  420. sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {
  421. head="Mummu Bonnet +2",
  422. legs="Mummu Kecks +2",
  423. })
  424.  
  425. sets.precast.WS['Savage Blade'] = {head={ name="Nyame Helm", augments={'Path: B',}},
  426. body="Laksa. Frac +3",
  427. hands="Chasseur's Gants +3",
  428. legs={ name="Nyame Flanchard", augments={'Path: B',}},
  429. feet={ name="Nyame Sollerets", augments={'Path: B',}},
  430. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  431. waist={ name="Sailfi Belt +1", augments={'Path: A',}},
  432. left_ear="Ishvara Earring",
  433. right_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
  434. left_ring="Epaminondas's Ring",
  435. right_ring="Cornelia's Ring",
  436. back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
  437. }
  438.  
  439. sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {
  440. body="Meg. Cuirie +2",
  441. ear2="Telos Earring",
  442. ring2="Rufescent Ring",
  443. waist="Kentarch belt +1",
  444. })
  445.  
  446. sets.precast.WS['Circle Blade'] = sets.precast.WS['Savage Blade']
  447.  
  448. sets.precast.WS['Swift Blade'] = {}
  449.  
  450. sets.precast.WS['Swift Blade'].Acc = {}
  451.  
  452. sets.precast.WS['Requiescat'] = {}
  453.  
  454. sets.precast.WS['Requiescat'].Acc = {}
  455.  
  456. sets.precast.WS['Aeolian Edge'] = {ammo=gear.MAbullet,
  457. head={ name="Nyame Helm", augments={'Path: B',}},
  458. body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  459. hands={ name="Nyame Gauntlets", augments={'Path: B',}},
  460. legs={ name="Nyame Flanchard", augments={'Path: B',}},
  461. feet={ name="Nyame Sollerets", augments={'Path: B',}},
  462. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  463. waist="Orpheus's Sash",
  464. left_ear={ name="Moonshade Earring", augments={'Accuracy+4','TP Bonus +250',}},
  465. right_ear="Friomisi Earring",
  466. left_ring="Epaminondas's Ring",
  467. right_ring="Cornelia's Ring",
  468. back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}}}
  469.  
  470. sets.precast.WS['Last Start'] = {main={ name="Rostam", augments={'Path: A',}},}
  471.  
  472.  
  473. ------------------------------------------------------------------------------------------------
  474. ---------------------------------------- Midcast Sets ------------------------------------------
  475. ------------------------------------------------------------------------------------------------
  476.  
  477. sets.midcast.FastRecast = sets.precast.FC
  478.  
  479. sets.midcast.SpellInterrupt = {
  480. legs="Carmine Cuisses +1", --20
  481. ring1="Evanescence Ring", --5
  482. }
  483.  
  484. sets.midcast.Cure = {}
  485.  
  486. sets.midcast.Utsusemi = sets.midcast.SpellInterrupt
  487.  
  488. sets.midcast.CorsairShot = {
  489. ammo=gear.QDbullet,
  490. head={ name="Ikenga's Hat", augments={'Path: A',}},
  491. body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  492. hands="Chasseur's Gants +3",
  493. legs={ name="Nyame Flanchard", augments={'Path: B',}},
  494. feet="Chass. Bottes +3",
  495. neck="Baetyl Pendant",
  496. waist="Skrymir Cord +1",
  497. left_ear="Friomisi Earring",
  498. right_ear="Novio Earring",
  499. left_ring="Dingir Ring",
  500. right_ring="Crepuscular Ring",
  501. back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}}
  502. }
  503.  
  504. sets.midcast.CorsairShot.STP = {
  505. ammo=gear.QDbullet,
  506. head="Ikenga's Hat",
  507. body={ name="Lanun Frac +3", augments={'Enhances "Loaded Deck" effect',}},
  508. hands="Chasseur's Gants +3",
  509. legs={ name="Nyame Flanchard", augments={'Path: B',}},
  510. feet="Chass. Bottes +3",
  511. neck="Baetyl Pendant",
  512. waist="Skrymir Cord +1",
  513. left_ear="Friomisi Earring",
  514. right_ear="Novio Earring",
  515. left_ring="Dingir Ring",
  516. right_ring="Crepuscular Ring",
  517. back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
  518. }
  519. sets.midcast.CorsairShot.TH = {head="Volte Cap", legs="Volte hose", hands="Volte Bracers",feet="Volte boots",}
  520.  
  521. sets.midcast.CorsairShot['Light Shot'] = {
  522. ammo=gear.MAbullet,
  523. head="Ikenga's Hat",
  524. body="Malignance Tabard",
  525. hands="Malignance Gloves",
  526. legs="Malignance Tights",
  527. feet="Chass. Bottes +3",
  528. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  529. waist="Skrymir Cord +1",
  530. left_ear="Digni. Earring",
  531. right_ear="Crep. Earring",
  532. left_ring="Stikini Ring +1",
  533. right_ring="Crepuscular Ring",
  534. back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%','Mag. Evasion+15',}},
  535. }
  536.  
  537. sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
  538. sets.midcast.CorsairShot.Enhance = {feet="Chass. Bottes +3"}
  539.  
  540. -- Ranged gear
  541. sets.midcast.RA = {
  542. ammo=gear.RAbullet,
  543. head="Ikenga's Hat",
  544. body="Malignance Tabard",
  545. hands="Malignance Gloves",
  546. legs="Ikenga's Trousers",
  547. feet="Meg. Jam. +2",
  548. neck="Iskur Gorget",
  549. waist="Reiki Yotai",
  550. left_ear="Telos Earring",
  551. right_ear="Digni. Earring",
  552. left_ring="Crepuscular Ring",
  553. right_ring="Ilabrat Ring",
  554. back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10','Phys. dmg. taken-10%',}},}
  555.  
  556.  
  557. sets.midcast.RA.Acc = set_combine(sets.midcast.RA, {
  558. ammo=gear.RAccbullet,
  559. body="Laksa. Frac +3",
  560. legs="Malignance Tights",
  561. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  562. waist="Eschan Stone",
  563. right_ear="Beyla Earring",
  564. right_ring="Cacoethic Ring +1"})
  565.  
  566. sets.midcast.RA.Critical = set_combine(sets.midcast.RA, {
  567. head="Meghanada Visor +2",
  568. body="Meg. Cuirie +2",
  569. hands="Chasseur's Gants +3",
  570. legs="Darraigner's Brais",
  571. feet="Osh. Leggings",
  572. neck="Iskur Gorget",
  573. waist="Gerdr Belt",
  574. left_ear="Odr Earring",
  575. right_ear="Telos Earring",
  576. left_ring="Mummu Ring",
  577. right_ring="Begrudging Ring",
  578. back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','Crit.hit rate+10',}},
  579. })
  580.  
  581.  
  582. sets.TripleShot = {body="Chasseur's Frac +3",hands="Oshosi Gloves",head="Oshosi mask",legs="Oshosi Trousers", feet="Oshosi Leggings"}
  583.  
  584. sets.TripleShotCritical = {
  585. head="Meghanada Visor +2",
  586. waist="Gerdr Belt",
  587. }
  588.  
  589. sets.midcast.RA.SubtleBlow = set_combine(sets.midcast.RA,
  590. {head="Volte Tiara",
  591. hands="Volte Mittens",
  592. legs="Volte Tights",
  593. left_ear="Beyla Earring",
  594. })
  595. ------------------------------------------------------------------------------------------------
  596. ----------------------------------------- Idle Sets --------------------------------------------
  597. ------------------------------------------------------------------------------------------------
  598.  
  599. sets.resting = {}
  600.  
  601. sets.idle = {ammo=gear.WSbullet,
  602. head="Nyame Helm",
  603. body="Malignance Tabard",
  604. hands="Nyame Gauntlets",
  605. legs={ name="Carmine Cuisses +1", augments={'Accuracy+20','Attack+12','"Dual Wield"+6',}},
  606. feet="Nyame Sollerets",
  607. neck="Bathy Choker +1",
  608. waist="Plat. Mog. Belt",
  609. left_ear="Suppanomimi",
  610. right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
  611. left_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
  612. right_ring="Paguroidea Ring",
  613. back="Moonlight Cape",
  614. }
  615.  
  616. sets.idle.DT = sets.idle
  617.  
  618. -- sets.idle.Refresh = set_combine{}
  619.  
  620. sets.idle.Town = set_combine(sets.idle,{waist="Skrymir Cord +1", right_ear="Balder Earring +1"})
  621.  
  622.  
  623. ------------------------------------------------------------------------------------------------
  624. ---------------------------------------- Defense Sets ------------------------------------------
  625. ------------------------------------------------------------------------------------------------
  626.  
  627. sets.defense.PDT = sets.idle.DT
  628. sets.defense.MDT = sets.idle.DT
  629.  
  630. sets.Kiting = {legs="Carmine Cuisses +1"}
  631.  
  632.  
  633. ------------------------------------------------------------------------------------------------
  634. ---------------------------------------- Engaged Sets ------------------------------------------
  635. ------------------------------------------------------------------------------------------------
  636.  
  637. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  638. -- sets if more refined versions aren't defined.
  639. -- If you create a set with both offense and defense modes, the offense mode should be first.
  640. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  641.  
  642. sets.engaged = {
  643. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  644. body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  645. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  646. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  647. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  648. neck="Iskur Gorget",
  649. waist={ name="Sailfi Belt +1", augments={'Path: A',}},
  650. left_ear="Suppanomimi",
  651. right_ear="Balder Earring +1",
  652. left_ring="Petrov Ring",
  653. right_ring="Epona's Ring",
  654. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
  655. }
  656.  
  657. sets.engaged.LowAcc = set_combine(sets.engaged, {nrck="Lissome Necklace"
  658. })
  659.  
  660. sets.engaged.MidAcc = set_combine(sets.engaged.LowAcc, {
  661. right_ear="Telos Earring",
  662. waist="Kentarch Belt +1",
  663. })
  664.  
  665. sets.engaged.HighAcc = set_combine(sets.engaged.MidAcc, {
  666. head="Blistering Sallet +1",
  667. left_ring="Chirich Ring +1",
  668. right_ring="Chirich Ring +1",
  669. legs="Meg. Chausses +2",})
  670.  
  671. sets.engaged.STP = set_combine(sets.engaged, {
  672. feet="Carmine Greaves +1",
  673. ring1={name="Chirich Ring +1", bag="wardrobe3"},
  674. ring2={name="Chirich Ring +1", bag="wardrobe4"},
  675. })
  676.  
  677. sets.engaged.EngagedShooting={head="Malignance Chapeau",
  678. body="Malignance Tabard",
  679. hands="Malignance Gloves",
  680. legs="Malignance Tights",
  681. feet="Malignance Boots",
  682. neck="Loricate Torque +1",
  683. waist="Windbuffet Belt +1",
  684. left_ear="Suppanomimi",
  685. right_ear="Sanare Earring",
  686. left_ring="Vocane Ring +1",
  687. right_ring="Defending Ring",
  688. back="Moonlight Cape",
  689. }
  690.  
  691.  
  692. -- * DNC Subjob DW Trait: +15%
  693. -- * NIN Subjob DW Trait: +25%
  694.  
  695. -- No Magic Haste (74% DW to cap)
  696. sets.engaged.DW = {
  697. ammo=gear.RAbullet,
  698. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  699. body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  700. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  701. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  702. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  703. neck="Iskur Gorget",
  704. waist="Windbuffet Belt +1",
  705. left_ear="Suppanomimi",
  706. right_ear="Balder Earring +1",
  707. left_ring="Epona's Ring",
  708. right_ring="Hetairoi Ring",
  709. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
  710. } -- 48%
  711.  
  712. sets.engaged.DW.LowAcc = set_combine(sets.engaged.DW, {
  713. neck="Lissome Necklace",
  714. legs="Malignance Tights",
  715.  
  716. })
  717.  
  718. sets.engaged.DW.MidAcc = set_combine(sets.engaged.DW.LowAcc, {
  719. waist="Kentarch Belt +1",
  720. right_ear="Telos Earring"
  721. })
  722.  
  723. sets.engaged.DW.HighAcc = set_combine(sets.engaged.DW.MidAcc, {
  724. head="Blistering Sallet +1",
  725. left_ring="Chirich Ring +1",
  726. right_ring="Chirich Ring +1",
  727. })
  728.  
  729. sets.engaged.DW.STP = set_combine(sets.engaged.DW, {
  730. feet="Carmine Greaves +1",
  731. ring1={name="Chirich Ring +1", bag="wardrobe3"},
  732. ring2={name="Chirich Ring +1", bag="wardrobe4"},
  733. })
  734.  
  735. sets.engaged.DW.EngagedShooting={head="Malignance Chapeau",
  736. body="Malignance Tabard",
  737. hands="Malignance Gloves",
  738. legs="Malignance Tights",
  739. feet="Malignance Boots",
  740. --neck="Loricate Torque +1",
  741. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  742. waist="Windbuffet Belt +1",
  743. left_ear="Suppanomimi",
  744. right_ear="Sanare Earring",
  745. left_ring="Vocane Ring +1",
  746. right_ring="Defending Ring",
  747. back="Moonlight Cape",
  748. }
  749.  
  750. -- 15% Magic Haste (67% DW to cap)
  751. sets.engaged.DW.LowHaste = {
  752. ammo=gear.RAbullet,
  753. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  754. body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  755. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  756. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  757. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  758. neck="Iskur Gorget",
  759. waist="Windbuffet Belt +1",
  760. left_ear="Suppanomimi",
  761. right_ear="Balder Earring +1",
  762. left_ring="Epona's Ring",
  763. right_ring="Hetairoi Ring",
  764. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
  765. }
  766.  
  767. sets.engaged.DW.LowAcc.LowHaste = set_combine(sets.engaged.DW.LowHaste, {
  768. legs="Malignance Tights",
  769. neck="Lissome Necklace"
  770. })
  771.  
  772. sets.engaged.DW.MidAcc.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, {
  773. right_ear="Telos Earring",
  774. waist="Kentarch Belt +1",
  775. })
  776.  
  777. sets.engaged.DW.HighAcc.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, {
  778. head="Blistering Sallet +1",
  779. left_ring="Chirich Ring +1",
  780. right_ring="Chirich Ring +1",
  781. })
  782.  
  783. sets.engaged.DW.STP.LowHaste = set_combine(sets.engaged.DW.LowHaste, {
  784. feet="Carmine Greaves +1",
  785. ring1={name="Chirich Ring +1", bag="wardrobe3"},
  786. ring2={name="Chirich Ring +1", bag="wardrobe4"},
  787. })
  788.  
  789. sets.engaged.DW.EngagedShooting.LowHaste={head="Malignance Chapeau",
  790. body="Malignance Tabard",
  791. hands="Malignance Gloves",
  792. legs="Malignance Tights",
  793. feet="Malignance Boots",
  794. --neck="Loricate Torque +1",
  795. neck={ name="Comm. Charm +2", augments={'Path: A',}},
  796. waist="Windbuffet Belt +1",
  797. left_ear="Suppanomimi",
  798. right_ear="Sanare Earring",
  799. left_ring="Vocane Ring +1",
  800. right_ring="Defending Ring",
  801. back="Moonlight Cape",
  802. }
  803.  
  804. -- 30% Magic Haste (56% DW to cap)
  805. sets.engaged.DW.MidHaste = {
  806. ammo=gear.RAbullet,
  807. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  808. body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  809. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  810. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  811. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  812. neck="Lissome Necklace",
  813. waist="Windbuffet Belt +1",
  814. left_ear="Suppanomimi",
  815. right_ear="Balder Earring +1",
  816. left_ring="Epona's Ring",
  817. right_ring="Hetairoi Ring",
  818. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
  819. } -- 31%
  820.  
  821. sets.engaged.DW.LowAcc.MidHaste = set_combine(sets.engaged.DW.MidHaste, {
  822. legs="Malignance Tights",
  823. neck="Lissome Necklace"
  824. })
  825.  
  826. sets.engaged.DW.MidAcc.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, {
  827. right_ear="Telos Earring",
  828. waist="Kentarch Belt +1",
  829. })
  830.  
  831. sets.engaged.DW.HighAcc.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, {
  832. head="Blistering Sallet +1",
  833. left_ring="Chirich Ring +1",
  834. right_ring="Chirich Ring +1",
  835. })
  836.  
  837. sets.engaged.DW.STP.MidHaste = set_combine(sets.engaged.DW.MidHaste, {
  838. feet="Carmine Greaves +1",
  839. ring1={name="Chirich Ring +1", bag="wardrobe3"},
  840. ring2={name="Chirich Ring +1", bag="wardrobe4"},
  841. })
  842.  
  843. sets.engaged.DW.EngagedShooting.MidHaste={head="Malignance Chapeau",
  844. body="Malignance Tabard",
  845. hands="Malignance Gloves",
  846. legs="Malignance Tights",
  847. feet="Malignance Boots",
  848. neck="Loricate Torque +1",
  849. waist="Windbuffet Belt +1",
  850. left_ear="Suppanomimi",
  851. right_ear="Sanare Earring",
  852. left_ring="Vocane Ring +1",
  853. right_ring="Defending Ring",
  854. back="Moonlight Cape",
  855. }
  856.  
  857. -- 35% Magic Haste (51% DW to cap)
  858. sets.engaged.DW.HighHaste = {
  859. ammo=gear.RAbullet,
  860. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  861. body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  862. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  863. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  864. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  865. neck="Lissome Necklace",
  866. waist="Windbuffet Belt +1",
  867. left_ear="Suppanomimi",
  868. right_ear="Balder Earring +1",
  869. left_ring="Epona's Ring",
  870. right_ring="Hetairoi Ring",
  871. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
  872. }
  873.  
  874. sets.engaged.DW.LowAcc.HighHaste = set_combine(sets.engaged.DW.HighHaste, {
  875.  
  876. legs="Malignance Tights",
  877. neck="Lissome Necklace"
  878. })
  879.  
  880. sets.engaged.DW.MidAcc.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, {
  881. right_ear="Telos Earring",
  882. waist="Kentarch Belt +1",
  883. })
  884.  
  885. sets.engaged.DW.HighAcc.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, {
  886. head="Blistering Sallet +1",
  887. left_ring="Chirich Ring +1",
  888. right_ring="Chirich Ring +1",
  889. })
  890.  
  891. sets.engaged.DW.STP.HighHaste = set_combine(sets.engaged.DW.HighHaste, {
  892. feet="Carmine Greaves +1",
  893. ring1={name="Chirich Ring +1", bag="wardrobe3"},
  894. ring2={name="Chirich Ring +1", bag="wardrobe4"},
  895. })
  896.  
  897. sets.engaged.DW.EngagedShooting.HighHaste={head="Malignance Chapeau",
  898. body="Malignance Tabard",
  899. hands="Malignance Gloves",
  900. legs="Malignance Tights",
  901. feet="Malignance Boots",
  902. neck="Loricate Torque +1",
  903. waist="Windbuffet Belt +1",
  904. left_ear="Suppanomimi",
  905. right_ear="Sanare Earring",
  906. left_ring="Vocane Ring +1",
  907. right_ring="Defending Ring",
  908. back="Moonlight Cape",
  909. }
  910.  
  911. -- 45% Magic Haste (36% DW to cap)
  912. sets.engaged.DW.MaxHaste = {
  913. ammo=gear.RAbullet,
  914. head={ name="Adhemar Bonnet +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  915. body={ name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  916. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  917. legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
  918. feet={ name="Herculean Boots", augments={'Accuracy+27','"Triple Atk."+4','MND+8','Attack+15',}},
  919. neck="Lissome Necklace",
  920. waist="Windbuffet Belt +1",
  921. left_ear="Suppanomimi",
  922. right_ear="Balder Earring +1",
  923. left_ring="Epona's Ring",
  924. right_ring="Hetairoi Ring",
  925. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},} -- 11%
  926.  
  927. sets.engaged.DW.LowAcc.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, {
  928. legs="Malignance Tights",
  929. neck="Lissome Necklace"
  930. })
  931.  
  932. sets.engaged.DW.MidAcc.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, {
  933. right_ear="Telos Earring",
  934. waist="Kentarch Belt +1",
  935. })
  936.  
  937. sets.engaged.DW.HighAcc.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, {
  938. head="Blistering Sallet +1",
  939. left_ring="Chirich Ring +1",
  940. right_ring="Chirich Ring +1",
  941. })
  942.  
  943. sets.engaged.DW.STP.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, {
  944. feet="Carmine Greaves +1",
  945. ring1={name="Chirich Ring +1", bag="wardrobe3"},
  946. ring2={name="Chirich Ring +1", bag="wardrobe4"},
  947. })
  948.  
  949. sets.engaged.DW.EngagedShooting.MaxHaste={head="Malignance Chapeau",
  950. body="Malignance Tabard",
  951. hands="Malignance Gloves",
  952. legs="Malignance Tights",
  953. feet="Malignance Boots",
  954. neck="Loricate Torque +1",
  955. waist="Windbuffet Belt +1",
  956. left_ear="Suppanomimi",
  957. right_ear="Sanare Earring",
  958. left_ring="Vocane Ring +1",
  959. right_ring="Defending Ring",
  960. back="Moonlight Cape",
  961. }
  962.  
  963. sets.engaged.DW.MaxHastePlus = set_combine(sets.engaged.DW.MaxHaste, {back="Moonlight Cape"})
  964. sets.engaged.DW.LowAcc.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHaste, {back="Moonlight Cape"})
  965. sets.engaged.DW.MidAcc.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHaste, {back="Moonlight Cape"})
  966. sets.engaged.DW.HighAcc.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHaste, {back="Moonlight Cape"})
  967. sets.engaged.DW.STP.MaxHastePlus = set_combine(sets.engaged.DW.STP.MaxHaste, {back="Moonlight Cape"})
  968.  
  969.  
  970. ------------------------------------------------------------------------------------------------
  971. ---------------------------------------- Hybrid Sets -------------------------------------------
  972. ------------------------------------------------------------------------------------------------
  973.  
  974. sets.engaged.Hybrid = {head={ name="Nyame Helm", augments={'Path: B',}},
  975. body="Malignance Tabard",
  976. hands={ name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',}},
  977. legs="Malignance Tights",
  978. feet="Malignance Boots",
  979. neck="Lissome Necklace",
  980. waist="Reiki Yotai",
  981. left_ear="Suppanomimi",
  982. right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
  983. left_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
  984. right_ring="Chirich Ring +1",
  985. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}}
  986.  
  987. sets.engaged.MCrit = {head="Mummu Bonnet +2",
  988. body="Mummu Jacket +2",
  989. hands="Mummu Wrists +2",
  990. legs="Mummu Kecks +2",
  991. feet="Mummu Gamash. +2",
  992. neck="Combatant's Torque",
  993. waist="Windbuffet Belt +1",
  994. left_ear="Mache Earring +1",
  995. right_ear="Mache Earring +1",
  996. left_ring="Mummu Ring",
  997. right_ring="Ramuh Ring +1",
  998. back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10',}},
  999. }
  1000.  
  1001. sets.engaged.Subtle = {
  1002. left_ring="Chirich Ring +1",
  1003. right_ring="Chirich Ring +1",
  1004. neck="Bathy Choker +1",
  1005.  
  1006. }
  1007.  
  1008. sets.engaged.DT = set_combine(sets.engaged, sets.engaged.Hybrid)
  1009. sets.engaged.LowAcc.DT = set_combine(sets.engaged.LowAcc, sets.engaged.Hybrid)
  1010. sets.engaged.MidAcc.DT = set_combine(sets.engaged.MidAcc, sets.engaged.Hybrid)
  1011. sets.engaged.HighAcc.DT = set_combine(sets.engaged.HighAcc, sets.engaged.Hybrid)
  1012. sets.engaged.STP.DT = set_combine(sets.engaged.STP, sets.engaged.Hybrid)
  1013.  
  1014. sets.engaged.SubtleBlow = set_combine(sets.engaged, sets.engaged.Subtle)
  1015. sets.engaged.LowAcc.SubtleBlow = set_combine(sets.engaged.LowAcc, sets.engaged.Subtle)
  1016. sets.engaged.MidAcc.SubtleBlow = set_combine(sets.engaged.MidAcc, sets.engaged.Subtle)
  1017. sets.engaged.HighAcc.SubtleBlow = set_combine(sets.engaged.HighAcc, sets.engaged.Subtle)
  1018. sets.engaged.STP.SubtleBlow = set_combine(sets.engaged.STP, sets.engaged.Subtle)
  1019.  
  1020. sets.engaged.MeleeCrit = set_combine(sets.engaged, sets.engaged.MCrit)
  1021. sets.engaged.LowAcc.MeleeCrit = set_combine(sets.engaged.LowAcc, sets.engaged.MCrit)
  1022. sets.engaged.MidAcc.MeleeCrit = set_combine(sets.engaged.MidAcc, sets.engaged.MCrit)
  1023. sets.engaged.HighAcc.MeleeCrit = set_combine(sets.engaged.HighAcc, sets.engaged.MCrit)
  1024. sets.engaged.STP.MeleeCrit = set_combine(sets.engaged.STP, sets.engaged.MCrit)
  1025.  
  1026. sets.engaged.DW.DT = set_combine(sets.engaged.DW, sets.engaged.Hybrid)
  1027. sets.engaged.DW.LowAcc.DT = set_combine(sets.engaged.DW.LowAcc, sets.engaged.Hybrid)
  1028. sets.engaged.DW.MidAcc.DT = set_combine(sets.engaged.DW.MidAcc, sets.engaged.Hybrid)
  1029. sets.engaged.DW.HighAcc.DT = set_combine(sets.engaged.DW.HighAcc, sets.engaged.Hybrid)
  1030. sets.engaged.DW.STP.DT = set_combine(sets.engaged.DW.STP, sets.engaged.Hybrid)
  1031.  
  1032. sets.engaged.DW.SubtleBlow = set_combine(sets.engaged.DW, sets.engaged.Subtle)
  1033. sets.engaged.DW.LowAcc.SubtleBlow = set_combine(sets.engaged.DW.LowAcc, sets.engaged.Subtle)
  1034. sets.engaged.DW.MidAcc.SubtleBlow = set_combine(sets.engaged.DW.MidAcc, sets.engaged.Subtle)
  1035. sets.engaged.DW.HighAcc.SubtleBlow = set_combine(sets.engaged.DW.HighAcc, sets.engaged.Subtle)
  1036. sets.engaged.DW.STP.SubtleBlow = set_combine(sets.engaged.DW.STP, sets.engaged.Subtle)
  1037.  
  1038. sets.engaged.DW.MeleeCrit = set_combine(sets.engaged.DW, sets.engaged.MCrit)
  1039. sets.engaged.DW.LowAcc.MeleeCrit = set_combine(sets.engaged.DW.LowAcc, sets.engaged.MCrit)
  1040. sets.engaged.DW.MidAcc.MeleeCrit = set_combine(sets.engaged.DW.MidAcc, sets.engaged.MCrit)
  1041. sets.engaged.DW.HighAcc.MeleeCrit = set_combine(sets.engaged.DW.HighAcc, sets.engaged.MCrit)
  1042. sets.engaged.DW.STP.MeleeCrit = set_combine(sets.engaged.DW.STP, sets.engaged.MCrit)
  1043.  
  1044. sets.engaged.DW.DT.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Hybrid)
  1045. sets.engaged.DW.LowAcc.DT.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.Hybrid)
  1046. sets.engaged.DW.MidAcc.DT.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.Hybrid)
  1047. sets.engaged.DW.HighAcc.DT.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.Hybrid)
  1048. sets.engaged.DW.STP.DT.LowHaste = set_combine(sets.engaged.DW.STP.LowHaste, sets.engaged.Hybrid)
  1049.  
  1050. sets.engaged.DW.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.Subtle)
  1051. sets.engaged.DW.LowAcc.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.Subtle)
  1052. sets.engaged.DW.MidAcc.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.Subtle)
  1053. sets.engaged.DW.HighAcc.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.Subtle)
  1054. sets.engaged.DW.STP.SubtleBlow.LowHaste = set_combine(sets.engaged.DW.STP.LowHaste, sets.engaged.Subtle)
  1055.  
  1056. sets.engaged.DW.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.LowHaste, sets.engaged.MCrit)
  1057. sets.engaged.DW.LowAcc.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.LowAcc.LowHaste, sets.engaged.MCrit)
  1058. sets.engaged.DW.MidAcc.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.MidAcc.LowHaste, sets.engaged.MCrit)
  1059. sets.engaged.DW.HighAcc.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.HighAcc.LowHaste, sets.engaged.MCrit)
  1060. sets.engaged.DW.STP.MeleeCrit.LowHaste = set_combine(sets.engaged.DW.STP.LowHaste, sets.engaged.MCrit)
  1061.  
  1062. sets.engaged.DW.DT.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Hybrid)
  1063. sets.engaged.DW.LowAcc.DT.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.Hybrid)
  1064. sets.engaged.DW.MidAcc.DT.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.Hybrid)
  1065. sets.engaged.DW.HighAcc.DT.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.Hybrid)
  1066. sets.engaged.DW.STP.DT.MidHaste = set_combine(sets.engaged.DW.STP.MidHaste, sets.engaged.Hybrid)
  1067.  
  1068. sets.engaged.DW.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.Subtle)
  1069. sets.engaged.DW.LowAcc.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.Subtle)
  1070. sets.engaged.DW.MidAcc.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.Subtle)
  1071. sets.engaged.DW.HighAcc.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.Subtle)
  1072. sets.engaged.DW.STP.SubtleBlow.MidHaste = set_combine(sets.engaged.DW.STP.MidHaste, sets.engaged.Subtle)
  1073.  
  1074. sets.engaged.DW.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.MidHaste, sets.engaged.MCrit)
  1075. sets.engaged.DW.LowAcc.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.LowAcc.MidHaste, sets.engaged.MCrit)
  1076. sets.engaged.DW.MidAcc.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.MidAcc.MidHaste, sets.engaged.MCrit)
  1077. sets.engaged.DW.HighAcc.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.HighAcc.MidHaste, sets.engaged.MCrit)
  1078. sets.engaged.DW.STP.MeleeCrit.MidHaste = set_combine(sets.engaged.DW.STP.MidHaste, sets.engaged.MCrit)
  1079.  
  1080. sets.engaged.DW.DT.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Hybrid)
  1081. sets.engaged.DW.LowAcc.DT.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.Hybrid)
  1082. sets.engaged.DW.MidAcc.DT.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.Hybrid)
  1083. sets.engaged.DW.HighAcc.DT.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.Hybrid)
  1084. sets.engaged.DW.STP.DT.HighHaste = set_combine(sets.engaged.DW.HighHaste.STP, sets.engaged.Hybrid)
  1085.  
  1086. sets.engaged.DW.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.Subtle)
  1087. sets.engaged.DW.LowAcc.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.Subtle)
  1088. sets.engaged.DW.MidAcc.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.Subtle)
  1089. sets.engaged.DW.HighAcc.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.Subtle)
  1090. sets.engaged.DW.STP.SubtleBlow.HighHaste = set_combine(sets.engaged.DW.HighHaste.STP, sets.engaged.Subtle)
  1091.  
  1092. sets.engaged.DW.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.HighHaste, sets.engaged.MCrit)
  1093. sets.engaged.DW.LowAcc.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.LowAcc.HighHaste, sets.engaged.MCrit)
  1094. sets.engaged.DW.MidAcc.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.MidAcc.HighHaste, sets.engaged.MCrit)
  1095. sets.engaged.DW.HighAcc.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.HighAcc.HighHaste, sets.engaged.MCrit)
  1096. sets.engaged.DW.STP.MeleeCrit.HighHaste = set_combine(sets.engaged.DW.HighHaste.STP, sets.engaged.MCrit)
  1097.  
  1098. sets.engaged.DW.DT.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.Hybrid)
  1099. sets.engaged.DW.LowAcc.DT.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.Hybrid)
  1100. sets.engaged.DW.MidAcc.DT.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.Hybrid)
  1101. sets.engaged.DW.HighAcc.DT.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.Hybrid)
  1102. sets.engaged.DW.STP.DT.MaxHaste = set_combine(sets.engaged.DW.STP.MaxHaste, sets.engaged.Hybrid)
  1103.  
  1104. sets.engaged.DW.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.Subtle)
  1105. sets.engaged.DW.LowAcc.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.Subtle)
  1106. sets.engaged.DW.MidAcc.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.Subtle)
  1107. sets.engaged.DW.HighAcc.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.Subtle)
  1108. sets.engaged.DW.STP.SubtleBlow.MaxHaste = set_combine(sets.engaged.DW.STP.MaxHaste, sets.engaged.Subtle)
  1109.  
  1110. sets.engaged.DW.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.MaxHaste, sets.engaged.MCrit)
  1111. sets.engaged.DW.LowAcc.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.LowAcc.MaxHaste, sets.engaged.MCrit)
  1112. sets.engaged.DW.MidAcc.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.MidAcc.MaxHaste, sets.engaged.MCrit)
  1113. sets.engaged.DW.HighAcc.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.HighAcc.MaxHaste, sets.engaged.MCrit)
  1114. sets.engaged.DW.STP.MeleeCrit.MaxHaste = set_combine(sets.engaged.DW.STP.MaxHaste, sets.engaged.MCrit)
  1115.  
  1116. sets.engaged.DW.DT.MaxHastePlus = set_combine(sets.engaged.DW.MaxHastePlus, sets.engaged.Hybrid)
  1117. sets.engaged.DW.LowAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHastePlus, sets.engaged.Hybrid)
  1118. sets.engaged.DW.MidAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHastePlus, sets.engaged.Hybrid)
  1119. sets.engaged.DW.HighAcc.DT.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHastePlus, sets.engaged.Hybrid)
  1120. sets.engaged.DW.STP.DT.MaxHastePlus = set_combine(sets.engaged.DW.STP.MaxHastePlus, sets.engaged.Hybrid)
  1121.  
  1122. sets.engaged.DW.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.MaxHastePlus, sets.engaged.Subtle)
  1123. sets.engaged.DW.LowAcc.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHastePlus, sets.engaged.Subtle)
  1124. sets.engaged.DW.MidAcc.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHastePlus, sets.engaged.Subtle)
  1125. sets.engaged.DW.HighAcc.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHastePlus, sets.engaged.Subtle)
  1126. sets.engaged.DW.STP.SubtleBlow.MaxHastePlus = set_combine(sets.engaged.DW.STP.MaxHastePlus, sets.engaged.Subtle)
  1127.  
  1128. sets.engaged.DW.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.MaxHastePlus, sets.engaged.MCrit)
  1129. sets.engaged.DW.LowAcc.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.LowAcc.MaxHastePlus, sets.engaged.MCrit)
  1130. sets.engaged.DW.MidAcc.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.MidAcc.MaxHastePlus, sets.engaged.MCrit)
  1131. sets.engaged.DW.HighAcc.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.HighAcc.MaxHastePlus, sets.engaged.MCrit)
  1132. sets.engaged.DW.STP.MeleeCrit.MaxHastePlus = set_combine(sets.engaged.DW.STP.MaxHastePlus, sets.engaged.MCrit)
  1133.  
  1134.  
  1135.  
  1136.  
  1137. ------------------------------------------------------------------------------------------------
  1138. ---------------------------------------- Special Sets ------------------------------------------
  1139. ------------------------------------------------------------------------------------------------
  1140.  
  1141. sets.buff.Doom = {waist="Gishdubar Sash"}
  1142.  
  1143. sets.FullTP = {ear1="Crematio Earring"}
  1144. sets.Obi = {waist="Hachirin-no-Obi"}
  1145. -- sets.CP = {back="Mecisto. Mantle"}
  1146. --sets.Reive = {neck="Ygnas's Resolve +1"}
  1147.  
  1148. sets.TreasureHunter = {head="Volte Cap",
  1149. body="Volte Jupon",
  1150. feet="Volte Boots"}
  1151. end
  1152.  
  1153.  
  1154. -------------------------------------------------------------------------------------------------------------------
  1155. -- Job-specific hooks for standard casting events.
  1156. -------------------------------------------------------------------------------------------------------------------
  1157.  
  1158. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  1159. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  1160. function job_precast(spell, action, spellMap, eventArgs)
  1161. -- Check that proper ammo is available if we're using ranged attacks or similar.
  1162. if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
  1163. do_bullet_checks(spell, spellMap, eventArgs)
  1164. end
  1165. -- Gear
  1166. if spell.english == 'Fold' and buffactive['Bust'] == 2 then
  1167. if sets.precast.FoldDoubleBust then
  1168. equip(sets.precast.FoldDoubleBust)
  1169. eventArgs.handled = true
  1170. end
  1171. end
  1172. if spellMap == 'Utsusemi' then
  1173. if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
  1174. cancel_spell()
  1175. add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
  1176. eventArgs.handled = true
  1177. return
  1178. elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
  1179. send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
  1180. end
  1181. end
  1182. end
  1183.  
  1184. function job_post_precast(spell, action, spellMap, eventArgs)
  1185. if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") then
  1186. if player.status ~= 'Engaged' and state.WeaponLock.value == false then
  1187. equip(sets.precast.CorsairRoll.Duration)
  1188. end
  1189. if state.LuzafRing.value then
  1190. equip(sets.precast.LuzafRing)
  1191. end
  1192. end
  1193. if spell.action_type == 'Ranged Attack' then--else @start
  1194. special_ammo_check()
  1195. if flurry == 2 then
  1196. equip(sets.precast.RA.Flurry2)
  1197. elseif flurry == 1 then
  1198. equip(sets.precast.RA.Flurry1)
  1199. end
  1200. elseif spell.type == 'WeaponSkill' then
  1201. if spell.skill == 'Marksmanship' then
  1202. special_ammo_check()
  1203. end
  1204. -- Replace TP-bonus gear if not needed.
  1205. if spell.english == 'Leaden Salute' or spell.english == 'Aeolian Edge' and player.tp > 2900 then
  1206. equip(sets.FullTP)
  1207. end
  1208. if elemental_ws:contains(spell.name) then
  1209. -- Matching double weather (w/o day conflict).
  1210. if spell.element == world.weather_element and (get_weather_intensity() == 2 and spell.element ~= elements.weak_to[world.day_element]) then
  1211. equip(sets.Obi)
  1212. -- Target distance under 1.7 yalms.
  1213. elseif spell.target.distance < (1.7 + spell.target.model_size) then
  1214. equip({waist="Orpheus's Sash"})
  1215. -- Matching day and weather.
  1216. elseif spell.element == world.day_element and spell.element == world.weather_element then
  1217. equip(sets.Obi)
  1218. -- Target distance under 8 yalms.
  1219. elseif spell.target.distance < (8 + spell.target.model_size) then
  1220. equip({waist="Orpheus's Sash"})
  1221. -- Match day or weather.
  1222. elseif spell.element == world.day_element or spell.element == world.weather_element then
  1223. equip(sets.Obi)
  1224. end
  1225. end
  1226. end
  1227. end
  1228.  
  1229. function job_post_midcast(spell, action, spellMap, eventArgs)
  1230. if spell.type == 'CorsairShot' then
  1231. if (spell.english ~= 'Light Shot' and spell.english ~= 'Dark Shot') then
  1232. -- Matching double weather (w/o day conflict).
  1233. if spell.element == world.weather_element and (get_weather_intensity() == 2 and spell.element ~= elements.weak_to[world.day_element]) then
  1234. equip(sets.Obi)
  1235. -- Target distance under 1.7 yalms.
  1236. elseif spell.target.distance < (1.7 + spell.target.model_size) then
  1237. equip({waist="Orpheus's Sash"})
  1238. -- Matching day and weather.
  1239. elseif spell.element == world.day_element and spell.element == world.weather_element then
  1240. equip(sets.Obi)
  1241. -- Target distance under 8 yalms.
  1242. elseif spell.target.distance < (8 + spell.target.model_size) then
  1243. equip({waist="Orpheus's Sash"})
  1244. -- Match day or weather.
  1245. elseif spell.element == world.day_element or spell.element == world.weather_element then
  1246. equip(sets.Obi)
  1247. end
  1248. if state.QDMode.value == 'Enhance' then
  1249. equip(sets.midcast.CorsairShot.Enhance)
  1250. elseif state.QDMode.value == 'STP' then
  1251. equip(sets.midcast.CorsairShot.STP)
  1252. elseif state.QDMode.value == 'TH' then
  1253. equip(sets.midcast.CorsairShot.TH)
  1254. end
  1255. end
  1256. elseif spell.action_type == 'Ranged Attack' then
  1257. if buffactive['Triple Shot'] then
  1258. equip(sets.TripleShot)
  1259. if buffactive['Aftermath: Lv.3'] and player.equipment.ranged == "Armageddon" then
  1260. equip(sets.TripleShotCritical)
  1261. end
  1262. elseif buffactive['Aftermath: Lv.3'] and player.equipment.ranged == "Armageddon" then
  1263. equip(sets.midcast.RA.Critical)
  1264. end
  1265. end
  1266. end
  1267.  
  1268. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  1269. function job_aftercast(spell, action, spellMap, eventArgs)
  1270. if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and not spell.interrupted then
  1271. display_roll_info(spell)
  1272. end
  1273. if spell.english == "Light Shot" then
  1274. send_command('@timers c "Light Shot ['..spell.target.name..']" 60 down abilities/00195.png')
  1275. end
  1276. end
  1277.  
  1278. function job_buff_change(buff,gain)
  1279. -- If we gain or lose any flurry buffs, adjust gear.
  1280. if S{'flurry'}:contains(buff:lower()) then
  1281. if not gain then
  1282. flurry = nil
  1283. --add_to_chat(122, "Flurry status cleared.")
  1284. end
  1285. if not midaction() then
  1286. handle_equipping_gear(player.status)
  1287. end
  1288. end
  1289.  
  1290. -- if buffactive['Reive Mark'] then
  1291. -- if gain then
  1292. -- equip(sets.Reive)
  1293. -- disable('neck')
  1294. -- else
  1295. -- enable('neck')
  1296. -- end
  1297. -- end
  1298.  
  1299. if buff == "doom" then
  1300. if gain then
  1301. equip(sets.buff.Doom)
  1302. send_command('@input /p Doomed.')
  1303. disable('ring1','ring2','waist')
  1304. else
  1305. enable('ring1','ring2','waist')
  1306. handle_equipping_gear(player.status)
  1307. end
  1308. end
  1309. end
  1310.  
  1311. -- Handle notifications of general user state change.
  1312. function job_state_change(stateField, newValue, oldValue)
  1313. if state.WeaponLock.value == true then
  1314. disable('ranged')
  1315. else
  1316. enable('ranged')
  1317. end
  1318. end
  1319.  
  1320. -------------------------------------------------------------------------------------------------------------------
  1321. -- User code that supplements standard library decisions.
  1322. -------------------------------------------------------------------------------------------------------------------
  1323.  
  1324. -- Called by the 'update' self-command, for common needs.
  1325. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  1326. function job_handle_equipping_gear(playerStatus, eventArgs)
  1327. check_gear()
  1328. update_combat_form()
  1329. determine_haste_group()
  1330. check_moving()
  1331. end
  1332.  
  1333. function job_update(cmdParams, eventArgs)
  1334. handle_equipping_gear(player.status)
  1335. end
  1336.  
  1337. function update_combat_form()
  1338. if DW == true then
  1339. state.CombatForm:set('DW')
  1340. elseif DW == false then
  1341. state.CombatForm:reset()
  1342. end
  1343. end
  1344.  
  1345. function get_custom_wsmode(spell, action, spellMap)
  1346. local wsmode
  1347. if spell.skill == 'Marksmanship' then
  1348. if state.RangedMode.value == 'Acc' or state.RangedMode.value == 'HighAcc' then
  1349. wsmode = 'Acc'
  1350. end
  1351. else
  1352. if state.OffenseMode.value == 'Acc' or state.OffenseMode.value == 'HighAcc' then
  1353. wsmode = 'Acc'
  1354. end
  1355. end
  1356.  
  1357. return wsmode
  1358. end
  1359.  
  1360. -- Modify the default idle set after it was constructed.
  1361. function customize_idle_set(idleSet)
  1362. if state.Gun.current == 'Death Penalty' then
  1363. equip({ranged="Death Penalty"})
  1364. elseif state.Gun.current == 'Armageddon' then
  1365. equip({ranged="Armageddon"})
  1366. elseif state.Gun.current == 'Fomalhaut' then
  1367. equip({ranged="Fomalhaut"})
  1368. elseif state.Gun.current == 'Ataktos' then
  1369. equip({ranged="Ataktos"})
  1370. elseif state.Gun.current == 'Compensator' then
  1371. equip({ranged="Compensator"})
  1372. end
  1373.  
  1374.  
  1375. -- if state.CP.current == 'on' then
  1376. -- equip(sets.CP)
  1377. -- disable('back')
  1378. -- else
  1379. -- enable('back')
  1380. -- end
  1381. if state.Auto_Kite.value == true then
  1382. idleSet = set_combine(idleSet, sets.Kiting)
  1383. end
  1384.  
  1385. return idleSet
  1386. end
  1387.  
  1388. -- Handle auto-targetting based on local setup.
  1389. function job_auto_change_target(spell, action, spellMap, eventArgs)
  1390. if spell.type == 'CorsairShot' then
  1391. if state.IgnoreTargetting.value == true then
  1392. state.IgnoreTargetting:reset()
  1393. eventArgs.handled = true
  1394. end
  1395.  
  1396. eventArgs.SelectNPCTargets = state.SelectqdTarget.value
  1397. end
  1398. end
  1399.  
  1400. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  1401. function display_current_job_state(eventArgs)
  1402. local cf_msg = ''
  1403. if state.CombatForm.has_value then
  1404. cf_msg = ' (' ..state.CombatForm.value.. ')'
  1405. end
  1406.  
  1407. local m_msg = state.OffenseMode.value
  1408. if state.HybridMode.value ~= 'Normal' then
  1409. m_msg = m_msg .. '/' ..state.HybridMode.value
  1410. end
  1411.  
  1412. local ws_msg = state.WeaponskillMode.value
  1413.  
  1414. local qd_msg = '(' ..string.sub(state.QDMode.value,1,1).. ')'
  1415.  
  1416. local e_msg = state.Mainqd.current
  1417. if state.UseAltqd.value == true then
  1418. e_msg = e_msg .. '/'..state.Altqd.current
  1419. end
  1420.  
  1421. local d_msg = 'None'
  1422. if state.DefenseMode.value ~= 'None' then
  1423. d_msg = state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value
  1424. end
  1425.  
  1426. local i_msg = state.IdleMode.value
  1427.  
  1428. local msg = ''
  1429. if state.Kiting.value then
  1430. msg = msg .. ' Kiting: On |'
  1431. end
  1432.  
  1433. add_to_chat(002, '| ' ..string.char(31,210).. 'Melee' ..cf_msg.. ': ' ..string.char(31,001)..m_msg.. string.char(31,002).. ' |'
  1434. ..string.char(31,207).. ' WS: ' ..string.char(31,001)..ws_msg.. string.char(31,002).. ' |'
  1435. ..string.char(31,060).. ' QD' ..qd_msg.. ': ' ..string.char(31,001)..e_msg.. string.char(31,002).. ' |'
  1436. ..string.char(31,004).. ' Defense: ' ..string.char(31,001)..d_msg.. string.char(31,002).. ' |'
  1437. ..string.char(31,008).. ' Idle: ' ..string.char(31,001)..i_msg.. string.char(31,002).. ' |'
  1438. ..string.char(31,002)..msg)
  1439.  
  1440. eventArgs.handled = true
  1441. end
  1442.  
  1443. -------------------------------------------------------------------------------------------------------------------
  1444. -- Utility functions specific to this job.
  1445. -------------------------------------------------------------------------------------------------------------------
  1446.  
  1447. --Read incoming packet to differentiate between Haste/Flurry I and II
  1448. windower.register_event('action',
  1449. function(act)
  1450. --check if you are a target of spell
  1451. local actionTargets = act.targets
  1452. playerId = windower.ffxi.get_player().id
  1453. isTarget = false
  1454. for _, target in ipairs(actionTargets) do
  1455. if playerId == target.id then
  1456. isTarget = true
  1457. end
  1458. end
  1459. if isTarget == true then
  1460. if act.category == 4 then
  1461. local param = act.param
  1462. if param == 845 and flurry ~= 2 then
  1463. add_to_chat(122, 'Flurry Status: Flurry I')
  1464. flurry = 1
  1465. elseif param == 846 then
  1466. add_to_chat(122, 'Flurry Status: Flurry II')
  1467. flurry = 2
  1468. end
  1469. end
  1470. end
  1471. end)
  1472.  
  1473. function determine_haste_group()
  1474. classes.CustomMeleeGroups:clear()
  1475. if DW == true then
  1476. if DW_needed <= 11 then
  1477. classes.CustomMeleeGroups:append('MaxHaste')
  1478. elseif DW_needed > 12 and DW_needed <= 23 then
  1479. classes.CustomMeleeGroups:append('MaxHaste')
  1480. elseif DW_needed > 24 and DW_needed <= 27 then
  1481. classes.CustomMeleeGroups:append('HighHaste')
  1482. elseif DW_needed > 28 and DW_needed <= 32 then
  1483. classes.CustomMeleeGroups:append('MidHaste')
  1484. elseif DW_needed > 33 then
  1485. classes.CustomMeleeGroups:append('')
  1486. end
  1487. end
  1488. end
  1489.  
  1490.  
  1491. function job_self_command(cmdParams, eventArgs)
  1492. if cmdParams[1] == 'qd' then
  1493. if cmdParams[2] == 't' then
  1494. state.IgnoreTargetting:set()
  1495. end
  1496.  
  1497. local doqd = ''
  1498. if state.UseAltqd.value == true then
  1499. doqd = state[state.Currentqd.current..'qd'].current
  1500. state.Currentqd:cycle()
  1501. else
  1502. doqd = state.Mainqd.current
  1503. end
  1504.  
  1505. send_command('@input /ja "'..doqd..'" <t>')
  1506. end
  1507. gearinfo(cmdParams, eventArgs)
  1508. end
  1509.  
  1510. function gearinfo(cmdParams, eventArgs)
  1511. if cmdParams[1] == 'gearinfo' then
  1512. if type(tonumber(cmdParams[2])) == 'number' then
  1513. if tonumber(cmdParams[2]) ~= DW_needed then
  1514. DW_needed = tonumber(cmdParams[2])
  1515. DW = true
  1516. end
  1517. elseif type(cmdParams[2]) == 'string' then
  1518. if cmdParams[2] == 'false' then
  1519. DW_needed = 0
  1520. DW = false
  1521. end
  1522. end
  1523. if type(tonumber(cmdParams[3])) == 'number' then
  1524. if tonumber(cmdParams[3]) ~= Haste then
  1525. Haste = tonumber(cmdParams[3])
  1526. end
  1527. end
  1528. if type(cmdParams[4]) == 'string' then
  1529. if cmdParams[4] == 'true' then
  1530. moving = true
  1531. elseif cmdParams[4] == 'false' then
  1532. moving = false
  1533. end
  1534. end
  1535. if not midaction() then
  1536. job_update()
  1537. end
  1538. end
  1539. end
  1540.  
  1541. function define_roll_values()
  1542. rolls = {
  1543. ["Corsair's Roll"] = {lucky=5, unlucky=9, bonus="Experience Points"},
  1544. ["Ninja Roll"] = {lucky=4, unlucky=8, bonus="Evasion"},
  1545. ["Hunter's Roll"] = {lucky=4, unlucky=8, bonus="Accuracy"},
  1546. ["Chaos Roll"] = {lucky=4, unlucky=8, bonus="Attack"},
  1547. ["Magus's Roll"] = {lucky=2, unlucky=6, bonus="Magic Defense"},
  1548. ["Healer's Roll"] = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
  1549. ["Drachen Roll"] = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
  1550. ["Choral Roll"] = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
  1551. ["Monk's Roll"] = {lucky=3, unlucky=7, bonus="Subtle Blow"},
  1552. ["Beast Roll"] = {lucky=4, unlucky=8, bonus="Pet Attack"},
  1553. ["Samurai Roll"] = {lucky=2, unlucky=6, bonus="Store TP"},
  1554. ["Evoker's Roll"] = {lucky=5, unlucky=9, bonus="Refresh"},
  1555. ["Rogue's Roll"] = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
  1556. ["Warlock's Roll"] = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
  1557. ["Fighter's Roll"] = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
  1558. ["Puppet Roll"] = {lucky=3, unlucky=7, bonus="Pet Magic Attack/Accuracy"},
  1559. ["Gallant's Roll"] = {lucky=3, unlucky=7, bonus="Defense"},
  1560. ["Wizard's Roll"] = {lucky=5, unlucky=9, bonus="Magic Attack"},
  1561. ["Dancer's Roll"] = {lucky=3, unlucky=7, bonus="Regen"},
  1562. ["Scholar's Roll"] = {lucky=2, unlucky=6, bonus="Conserve MP"},
  1563. ["Naturalist's Roll"] = {lucky=3, unlucky=7, bonus="Enh. Magic Duration"},
  1564. ["Runeist's Roll"] = {lucky=4, unlucky=8, bonus="Magic Evasion"},
  1565. ["Bolter's Roll"] = {lucky=3, unlucky=9, bonus="Movement Speed"},
  1566. ["Caster's Roll"] = {lucky=2, unlucky=7, bonus="Fast Cast"},
  1567. ["Courser's Roll"] = {lucky=3, unlucky=9, bonus="Snapshot"},
  1568. ["Blitzer's Roll"] = {lucky=4, unlucky=9, bonus="Attack Delay"},
  1569. ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
  1570. ["Allies' Roll"] = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
  1571. ["Miser's Roll"] = {lucky=5, unlucky=7, bonus="Save TP"},
  1572. ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
  1573. ["Avenger's Roll"] = {lucky=4, unlucky=8, bonus="Counter Rate"},
  1574. }
  1575. end
  1576.  
  1577. function display_roll_info(spell)
  1578. rollinfo = rolls[spell.english]
  1579. local rollsize = (state.LuzafRing.value and string.char(129,157)) or ''
  1580.  
  1581. if rollinfo then
  1582. add_to_chat(001, string.char(129,115).. ' ' ..string.char(31,210)..spell.english..string.char(31,001)..
  1583. ' : '..rollinfo.bonus.. ' ' ..string.char(129,116).. ' ' ..string.char(129,195)..
  1584. ' Lucky: ' ..string.char(31,204).. tostring(rollinfo.lucky)..string.char(31,001).. ' /' ..
  1585. ' Unlucky: ' ..string.char(31,167).. tostring(rollinfo.unlucky)..string.char(31,002)..
  1586. ' ' ..rollsize)
  1587. end
  1588. end
  1589.  
  1590.  
  1591. -- Determine whether we have sufficient ammo for the action being attempted.
  1592. function do_bullet_checks(spell, spellMap, eventArgs)
  1593. local bullet_name
  1594. local bullet_min_count = 1
  1595.  
  1596. if spell.type == 'WeaponSkill' then
  1597. if spell.skill == "Marksmanship" then
  1598. if spell.english == 'Wildfire' or spell.english == 'Leaden Salute' then
  1599. -- magical weaponskills
  1600. bullet_name = gear.MAbullet
  1601. else
  1602. -- physical weaponskills
  1603. bullet_name = gear.WSbullet
  1604. end
  1605. else
  1606. -- Ignore non-ranged weaponskills
  1607. return
  1608. end
  1609. elseif spell.type == 'CorsairShot' then
  1610. bullet_name = gear.QDbullet
  1611. elseif spell.action_type == 'Ranged Attack' then
  1612. bullet_name = gear.RAbullet
  1613. if buffactive['Triple Shot'] then
  1614. bullet_min_count = 3
  1615. end
  1616. end
  1617.  
  1618. local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
  1619.  
  1620. -- If no ammo is available, give appropriate warning and end.
  1621. if not available_bullets then
  1622. if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
  1623. add_to_chat(104, 'No Quick Draw ammo left. Using what\'s currently equipped ('..player.equipment.ammo..').')
  1624. return
  1625. elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
  1626. add_to_chat(104, 'No weaponskill ammo left. Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
  1627. return
  1628. else
  1629. add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
  1630. eventArgs.cancel = true
  1631. return
  1632. end
  1633. end
  1634.  
  1635. -- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
  1636. if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
  1637. add_to_chat(104, 'No ammo will be left for Quick Draw. Cancelling.')
  1638. eventArgs.cancel = true
  1639. return
  1640. end
  1641.  
  1642. -- Low ammo warning.
  1643. if spell.type ~= 'CorsairShot' and state.warned.value == false
  1644. and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
  1645. local msg = '***** LOW AMMO WARNING: '..bullet_name..' *****'
  1646. --local border = string.repeat("*", #msg)
  1647. local border = ""
  1648. for i = 1, #msg do
  1649. border = border .. "*"
  1650. end
  1651.  
  1652. add_to_chat(104, border)
  1653. add_to_chat(104, msg)
  1654. add_to_chat(104, border)
  1655.  
  1656. state.warned:set()
  1657. elseif available_bullets.count > options.ammo_warning_limit and state.warned then
  1658. state.warned:reset()
  1659. end
  1660. end
  1661.  
  1662. function special_ammo_check()
  1663. -- Stop if Animikii/Hauksbok equipped
  1664. if no_shoot_ammo:contains(player.equipment.ammo) then
  1665. cancel_spell()
  1666. add_to_chat(123, '** Action Canceled: [ '.. player.equipment.ammo .. ' equipped!! ] **')
  1667. return
  1668. end
  1669. end
  1670.  
  1671. -- Check for various actions that we've specified in user code as being used with TH gear.
  1672. -- This will only ever be called if TreasureMode is not 'None'.
  1673. -- Category and Param are as specified in the action event packet.
  1674. function th_action_check(category, param)
  1675. if category == 2 or -- any ranged attack
  1676. --category == 4 or -- any magic action
  1677. (category == 3 and param == 30) or -- Aeolian Edge
  1678. (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
  1679. (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
  1680. then return true
  1681. end
  1682. end
  1683.  
  1684. function check_moving()
  1685. if state.DefenseMode.value == 'None' and state.Kiting.value == false then
  1686. if state.Auto_Kite.value == false and moving then
  1687. state.Auto_Kite:set(true)
  1688. elseif state.Auto_Kite.value == true and moving == false then
  1689. state.Auto_Kite:set(false)
  1690. end
  1691. end
  1692. end
  1693.  
  1694. function check_gear()
  1695. if no_swap_gear:contains(player.equipment.left_ring) then
  1696. disable("ring1")
  1697. else
  1698. enable("ring1")
  1699. end
  1700. if no_swap_gear:contains(player.equipment.right_ring) then
  1701. disable("ring2")
  1702. else
  1703. enable("ring2")
  1704. end
  1705. if no_swap_gear:contains(player.equipment.waist) then
  1706. disable("waist")
  1707. else
  1708. enable("waist")
  1709. end
  1710. end
  1711.  
  1712. windower.register_event('zone change',
  1713. function()
  1714. if no_swap_gear:contains(player.equipment.left_ring) then
  1715. enable("ring1")
  1716. equip(sets.idle)
  1717. end
  1718. if no_swap_gear:contains(player.equipment.right_ring) then
  1719. enable("ring2")
  1720. equip(sets.idle)
  1721. end
  1722. if no_swap_gear:contains(player.equipment.waist) then
  1723. enable("waist")
  1724. equip(sets.idle)
  1725. end
  1726. end
  1727. )
  1728.  
  1729. -- Select default macro book on initial load or subjob change.
  1730. function select_default_macro_book()
  1731. if player.sub_job == 'DNC' then
  1732. set_macro_page(1, 18)
  1733. else
  1734. set_macro_page(1, 18)
  1735. end
  1736. end
  1737.  
  1738. function set_lockstyle()
  1739. send_command('wait 2; input /lockstyleset ' .. lockstyleset)
  1740. end
  1741.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement