bongarippa

COR

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