Spicyryan

THF_Alpha_Version

Aug 2nd, 2020 (edited)
125
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Built off of my BLU, RUN, and DRG GSs.
  2. ---Thanks to various sources such as LS members and BlueGartr for the help building this GearSwap.
  3.  
  4. -------------------------------------
  5. --------- ---------
  6. ------ ------
  7. --- Start of Gear ---
  8. ------ ------
  9. --------- ---------
  10. -------------------------------------
  11.  
  12. ---------------------------------
  13. -- Start of Augmented Gear --
  14. ---------------------------------
  15.  
  16. function get_sets()
  17. maps()
  18.  
  19. AdhemarJacket = {}
  20. AdhemarJacket.TP = { name="Adhemar Jacket +1", augments={'DEX+12','AGI+12','Accuracy+20',}}
  21. AdhemarJacket.FC = { name="Adhemar Jacket +1", augments={'HP+105','"Fast Cast"+10','Magic dmg. taken -4',}}
  22.  
  23. HerculeanHelm = {}
  24. HerculeanHelm.Nuke = { name = "Herculean Helm", augments = { 'Mag. Acc.+18 "Mag.Attack.Bns."+18', '"Fast Cast"+1', 'INT+9', 'Mag. Acc.+9', '"Mag.Attack.Bns."+12', } }
  25. HerculeanHelm.DT = { name = "Herculean Helm", augments = { 'Attack+12', 'Phys. dmg. taken -4%', 'STR+9', 'Accuracy+8', } }
  26. HerculeanHelm.Refesh = { name = "Herculean Helm", augments = { 'Weapon skill damage +2%','Pet: Accuracy+11 Pet: Rng. Acc.+11','"Refresh"+2', } }
  27. HerculeanHelm.WSD = { name = "Herculean Helm", augments = { 'Attack+18','Weapon skill damage +4%','STR+10','Accuracy+12', } }
  28. HerculeanHelm.WSDAcc = { name = "Herculean Helm", augments = { 'Accuracy+23 Attack+23','Weapon skill damage +3%','STR+3','Accuracy+13','Attack+11', } }
  29.  
  30. HerculeanVest = {}
  31. HerculeanVest.Phalanx = { name="Herculean Vest", augments = {'Accuracy+2','DEX+8','Phalanx +2','Accuracy+1 Attack+1','Mag. Acc.+20 "Mag.Attack.Bns."+20',}}
  32. HerculeanVest.CDC = { name="Herculean Vest", augments={'Accuracy+19 Attack+19','Crit. hit damage +3%','DEX+14','Accuracy+3',}}
  33.  
  34. AdhemarWrists = {}
  35. AdhemarWrists.Attack = { name="Adhemar Wrist. +1", augments = {'STR+12','DEX+12','Attack+20',} }
  36. AdhemarWrists.Accuracy = { name="Adhemar Wrist. +1", augments={'DEX+12','AGI+12','Accuracy+20',} }
  37.  
  38. HerculeanGloves = {}
  39. HerculeanGloves.WSD = { name = "Herculean Gloves", augments = { 'Accuracy+21 Attack+21', 'Weapon skill damage +4%', 'Accuracy+9', 'Attack+10', } }
  40. HerculeanGloves.DT = { name = "Herculean Gloves", augments = { 'Accuracy+13', 'Damage taken-3%', 'AGI+1', 'Attack+5', } }
  41. HerculeanGloves.Refresh = { name = "Herculean Gloves", augments = { 'Spell interruption rate down -1%','"Repair" potency +4%','"Refresh"+2','Accuracy+9 Attack+9','Mag. Acc.+16 "Mag.Attack.Bns."+16', } }
  42. HerculeanGloves.Crit = { name = "Herculean Gloves", augments = { 'Attack+23', 'Crit. hit damage +4%', 'DEX+8', 'Accuracy+11', } }
  43. HerculeanGloves.Phalanx = { name="Herculean Gloves", augments={'INT+5','Pet: "Dbl. Atk."+3','Phalanx +4',}}
  44. HerculeanGloves.PhysicalSpells = { name="Herculean Gloves", augments={'Accuracy+11 Attack+11','"Triple Atk."+2','STR+10','Accuracy+15','Attack+5', } }
  45.  
  46. HerculeanGloves.HighAcc = { name = "Herculean Gloves", augments = { 'Accuracy+23 Attack+23', '"Triple Atk."+2', 'DEX+15', 'Accuracy+11', 'Attack+13', } }
  47.  
  48.  
  49. HerculeanLegs = {}
  50. HerculeanLegs.DT = { name = "Herculean Trousers", augments = { 'Accuracy+22', 'Damage taken-2%', 'VIT+6', } }
  51. HerculeanLegs.WSD = { name = "Herculean Trousers", augments = { 'Attack+28', 'Weapon skill damage +3%', 'STR+10', 'Accuracy+9', } }
  52. HerculeanLegs.TH = { name = "Herculean Trousers", augments = { 'INT+5','MND+6','"Treasure Hunter"+1','Mag. Acc.+17 "Mag.Atk.Bns."+17', } }
  53.  
  54. HerculeanFeet = {}
  55. HerculeanFeet.QA = { name = "Herculean Boots", augments = {'AGI+4','"Dbl.Atk."+2','Quadruple Attack +3','Accuracy+4 Attack+4', } }
  56. HerculeanFeet.TA = { name = "Herculean Boots", augments = { 'Accuracy+14 Attack+14', '"Triple Atk."+4', 'DEX+3', 'Accuracy+2', 'Attack+15' } }
  57. HerculeanFeet.DT = { name = "Herculean Boots", augments = { 'Accuracy+23', 'Damage taken -3%' } }
  58. HerculeanFeet.Idle = { name = "Herculean Boots", augments = { 'Crit. hit damage +1%','STR+10','"Refresh"+2','Accuracy+15 Attack+15','Mag. Acc.+17 "Mag.Attack.Bns."+17', } }
  59. HerculeanFeet.CritDmg = { name = "Herculean Boots", augments = { 'Accuracy+28', 'Crit. hit damage +5%', 'DEX+9' } }
  60. HerculeanFeet.WSD = { name = "Herculean Boots", augments = { 'INT+3','AGI+5','Weapon skill damage +9%','Accuracy+12 Attack+12','Mag. Acc.+13 "Mag.Attack.Bns."+13'} }
  61. HerculeanFeet.DW = { name = "Herculean Boots", augments = { 'Accuracy+3 Attack+3','"Dual Wield"+4','AGI+3','Accuracy+14', } }
  62. HerculeanFeet.Phalanx = { name = "Herculean Boots", augments = { '"Store TP"+1','INT+10','Phalanx +3','Accuracy+16 Attack+16','Mag. Acc.+19 "Mag.Attack.Bns."+19' } }
  63. HerculeanFeet.TH = { name="Herculean Boots", augments = { 'Phys. dmg. taken -2%','Pet: Phys. dmg. taken -2%','"Treasure Hunter"+2','Accuracy+16 Attack+16','Mag. Acc.+18 "Mag.Attack.Bns."+18', } }
  64.  
  65. LustFeet = {}
  66. LustFeet.STRDEX = { name="Lustra. Leggings +1", augments={'HP+65','STR+15','DEX+15',}}
  67. LustFeet.STRDA = { name="Lustra. Leggings +1", augments={'Attack+20','STR+8','"Dbl.Attack."+3',}}
  68.  
  69. Toutatis = {}
  70. Toutatis.STP = { name="Toutatis's Cape", augments = {'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Phys. dmg. taken-10%', }}
  71. Toutatis.DEXWSD = { name="Toutatis's Cape", augments={ 'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%', }}
  72. Toutatis.DW = { name="Toutatis's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dual Wield"+10', }}
  73.  
  74. -------------------------------
  75. -- End of Augmented Gear --
  76. -------------------------------
  77.  
  78. sets.Idle = {}
  79. --Idle Sets--
  80. sets.Idle.index = { 'Standard', 'DT' }
  81. Idle_ind = 1
  82. sets.Idle.Standard = {
  83. ammo = "Staunch Tathlum +1",
  84. head = "Turms Cap +1",
  85. neck = "Loricate Torque +1",
  86. ear1 = "Odnowa Earring +1",
  87. ear2 = "Etiolation Earring",
  88. body = "Malignance Tabard",
  89. hands = "Turms Mittens +1",
  90. ring1 = "Sheltered ring",
  91. ring2 = "Karieyh Ring +1",
  92. back = "Moonbeam Cape",
  93. waist = "Flume Belt",
  94. legs = "Malignance Tights",
  95. feet = "Pillager's Poulaines +3"
  96. }
  97.  
  98. sets.Idle.DT = {
  99. ammo = "Staunch Tathlum +1",
  100. head = "Meghanada Visor +2",
  101. neck = "Loricate Torque +1",
  102. ear1 = "Odnowa Earring +1",
  103. ear2 = "Etiolation Earring",
  104. body = "Meghanada Cuirie +2",
  105. hands = "Meghanada Gloves +2",
  106. ring1 = "Sheltered ring",
  107. ring2 = "Karieyh Ring +1",
  108. back = "Moonbeam Cape",
  109. waist = "Flume Belt",
  110. legs = "Meghanada Chausses +2",
  111. feet = "Pillager's Poulaines +3"
  112. }
  113.  
  114. --Dat Waifu--
  115. sets.Idle.Town = set_combine(sets.Idle.Standard, {
  116. ring1 = "Matrimony ring",
  117. })
  118.  
  119. -----------
  120. --TP Sets--
  121. -----------
  122. sets.TP = {}
  123. sets.TP.index = {'DualWield', 'CapHaste', 'AccuracyLite', 'AccuracyMid', 'AccuracyFull' }
  124. TP_ind = 1
  125.  
  126. --Excluding the 5% at 550JP:
  127. --+31 DW needed to cap with only Haste II on--
  128. --+42 DW needed to cap with only Haste on--
  129. sets.TP.DualWield = {
  130. ammo = "Aurgelmir Orb +1",
  131. head = "Adhemar Bonnet +1",
  132. neck = "Anu Torque",
  133. ear1 = "Eabani Earring", --4
  134. ear2 = "Sherida Earring",
  135. body = AdhemarJacket.TP, --6
  136. hands = AdhemarWrists.Attack,
  137. ring1 = "Gere Ring",
  138. ring2 = "Petrov Ring",
  139. back = Toutatis.DW, --10
  140. waist = "Reiki Yotai", --7
  141. legs = "Samnuha Tights",
  142. feet = HerculeanFeet.QA
  143. }
  144.  
  145. sets.TP.CapHaste = {
  146. ammo = "Aurgelmir Orb +1",
  147. head = "Adhemar Bonnet +1",
  148. neck = "Anu Torque",
  149. ear1 = "Telos Earring",
  150. ear2 = "Sherida Earring",
  151. body = "Pillager's Vest +3",
  152. hands = AdhemarWrists.Attack,
  153. ring1 = "Gere Ring",
  154. ring2 = "Hetairoi Ring",
  155. back = Toutatis.STP,
  156. waist = "Reiki Yotai",
  157. legs = "Samnuha Tights",
  158. feet = HerculeanFeet.QA
  159. }
  160.  
  161. sets.TP.AccuracyLite = {
  162. ammo = "Aurgelmir Orb +1",
  163. head = "Adhemar Bonnet +1",
  164. neck = "Combatant's Torque",
  165. ear1 = "Telos Earring",
  166. ear2 = "Sherida Earring",
  167. body = "Pillager's Vest +3",
  168. hands = AdhemarWrists.Attack,
  169. ring1 = "Gere Ring",
  170. ring2 = "Hetairoi Ring",
  171. back = Toutatis.STP,
  172. waist = "Reiki Yotai",
  173. legs = "Samnuha Tights",
  174. feet = HerculeanFeet.TA
  175. }
  176.  
  177. sets.TP.AccuracyMid = {
  178. ammo = "Aurgelmir Orb +1",
  179. head = "Adhemar Bonnet +1",
  180. neck = "Combatant's Torque",
  181. ear1 = "Telos Earring",
  182. ear2 = "Sherida Earring",
  183. body = "Pillager's Vest +3",
  184. hands = "",
  185. ring1 = "Gere Ring",
  186. ring2 = "Hetairoi Ring",
  187. back = Toutatis.STP,
  188. waist = "Reiki Yotai",
  189. legs = "Samnuha Tights",
  190. feet = HerculeanFeet.TA
  191. }
  192.  
  193. sets.TP.AccuracyFull = {
  194. ammo = "Aurgelmir Orb +1",
  195. head = "Pillager's Bonnet +3",
  196. neck = "Shulmanu Collar",
  197. ear1 = "Telos Earring",
  198. ear2 = "Sherida Earring",
  199. body = "Pillager's Vest +3",
  200. hands = "",
  201. ring1 = "Gere Ring",
  202. ring2 = "Regal Ring",
  203. back = Toutatis.STP,
  204. waist = "Reiki Yotai",
  205. legs = "Lustratio Subligar +1",
  206. feet = HerculeanFeet.TA
  207. }
  208.  
  209. --DT Sets--
  210. sets.DT = {}
  211. sets.DT.index = { 'DT', 'DTHybrid', 'MDTV', 'MEVA' }
  212. DT_ind = 1
  213.  
  214. sets.DT.DT = {
  215. ammo = "Yamarang",
  216. head = "Malignance Chapeau",
  217. neck = "Loricate Torque +1",
  218. ear1 = "Odnowa Earring +1",
  219. ear2 = "Sherida Earring",
  220. body = "Malignance Tabard",
  221. hands = "Malignance Gloves",
  222. ring1 = "Gere Ring",
  223. ring2 = "Hetairoi Ring",
  224. back = Toutatis.STP,
  225. waist = "Reiki Yotai",
  226. legs = "Malignance Tights",
  227. feet = "Malignance Boots"
  228. }
  229.  
  230. sets.DT.DTHybrid = {
  231. ammo = "Staunch Tathlum +1",
  232. head = "",
  233. neck = "Anu Torque",
  234. ear1 = "Brutal Earring",
  235. ear2 = "Sherida Earring",
  236. body = "Ashera Harness",
  237. hands = "Meghanada Gloves +2",
  238. ring1 = "Defending Ring",
  239. ring2 = "Gere Ring",
  240. back = Toutatis.DEXWSD,
  241. waist = "Reiki Yotai",
  242. legs = "Malignance Tights",
  243. feet = ""
  244. }
  245. --Shell V on. Need 21% MDT, 19% with sheltered.
  246. sets.DT.MDTV = {
  247. ammo = "Staunch Tathlum +1",
  248. head = "Adhemar Bonnet +1",
  249. neck = "Warder's Charm +1",
  250. ear1 = "",
  251. ear2 = "Sherida Earring",
  252. body = "Ashera Harness",
  253. hands = "Meghanada Gloves +2",
  254. ring1 = "Defending Ring",
  255. ring2 = "Shadow Ring",
  256. back = "",
  257. waist = "Reiki Yotai",
  258. legs = "Malignance Tights",
  259. feet = ""
  260. }
  261.  
  262. sets.DT.MEVA = {
  263. ammo = "Staunch Tathlum +1",
  264. head = "Adhemar Bonnet +1",
  265. neck = "Loricate Torque +1",
  266. ear1 = "",
  267. ear2 = "Eabani Earring",
  268. body = "",
  269. hands = "Leyline Gloves",
  270. ring1 = "Defending Ring",
  271. ring2 = "Purity Ring",
  272. back = "",
  273. waist = "Carrier's Sash",
  274. legs = "Malignance Tights",
  275. feet = LustFeet.STRDEX
  276. }
  277.  
  278. sets.WS = {}
  279.  
  280. sets.RudrasUnstacked = {}
  281.  
  282. sets.RudrasUnstacked.index = { 'AttackUncap', 'AttackCap', 'Accuracy' }
  283. RudrasUnstacked_ind = 1
  284.  
  285. sets.RudrasUnstacked.AttackUncap = {
  286. ammo = "Seething Bomblet +1",
  287. head = "Adhemar Bonnet +1",
  288. neck = "Caro Necklace",
  289. ear1 = "Moonshade Earring",
  290. ear2 = "Sherida Earring",
  291. body = "Meghanada Cuirie +2",
  292. hands = "Meghanada Gloves +2",
  293. ring1 = "Ilabrat Ring",
  294. ring2 = "Regal Ring",
  295. back = Toutatis.DEXWSD,
  296. waist = "Grunfeld Rope",
  297. legs = "Lustratio Subligar +1",
  298. feet = LustFeet.STRDEX
  299. }
  300.  
  301. sets.RudrasUnstacked.AttackCap = {
  302. ammo = "Knobkierrie",
  303. head = "Pillager's Bonnet +3",
  304. neck = "Fotia Gorget",
  305. ear1 = "Moonshade Earring",
  306. ear2 = "Sherida Earring",
  307. body = "Ashera Harness",
  308. hands = "Pillager's Vest +3",
  309. ring1 = "Ilabrat Ring",
  310. ring2 = "Karieyh Ring +1",
  311. back = Toutatis.DEXWSD,
  312. waist = "Fotia Belt",
  313. legs = "Lustratio Subligar +1",
  314. feet = LustFeet.STRDEX
  315. }
  316.  
  317. sets.RudrasUnstacked.Accuracy = {
  318. ammo = "Knobkierrie",
  319. head = "Pillager's Bonnet +3",
  320. neck = "Fotia Gorget",
  321. ear1 = "Moonshade Earring",
  322. ear2 = "Sherida Earring",
  323. body = "",
  324. hands = "Meghanada Gloves +2",
  325. ring1 = "Ilabrat Ring",
  326. ring2 = "Regal Ring",
  327. back = Toutatis.DEXWSD,
  328. waist = "Fotia Belt",
  329. legs = "Lustratio Subligar +1",
  330. feet = LustFeet.STRDEX
  331. }
  332.  
  333. sets.RudrasStacked = {}
  334.  
  335. sets.RudrasStacked.index = { 'AttackUncap', 'AttackCap', 'Accuracy' }
  336. RudrasStacked_ind = 1
  337.  
  338. sets.RudrasStacked.AttackUncap = set_combine(sets.RudrasUnstacked.AttackUncap, {
  339. ammo = "Yetshila +1",
  340. head = "Adhemar Bonnet +1",
  341. neck = "Caro Necklace",
  342. ear1 = "Moonshade Earring",
  343. ear2 = "Sherida Earring",
  344. body = "Meghanada Cuirie +2",
  345. hands = "Meghanada Gloves +2",
  346. ring1 = "Ilabrat Ring",
  347. ring2 = "Regal Ring",
  348. back = Toutatis.DEXWSD,
  349. waist = "Grunfeld Rope",
  350. legs = "Lustratio Subligar +1",
  351. feet = LustFeet.STRDEX
  352. })
  353.  
  354. sets.RudrasStacked.AttackCap = set_combine(sets.RudrasUnstacked.AttackCap, {
  355. ammo = "Yetshila +1",
  356. head = "Pillager's Bonnet +3",
  357. neck = "Fotia Gorget",
  358. ear1 = "Moonshade Earring",
  359. ear2 = "Sherida Earring",
  360. body = "Ashera Harness",
  361. hands = "Meghanada Gloves +2",
  362. ring1 = "Gere Ring",
  363. ring2 = "Regal Ring",
  364. back = Toutatis.DEXWSD,
  365. waist = "Fotia Belt",
  366. legs = "Lustratio Subligar +1",
  367. feet = LustFeet.STRDEX
  368. })
  369.  
  370. sets.RudrasStacked.Accuracy = set_combine(sets.RudrasUnstacked.Accuracy, {
  371. ammo = "Yetshila +1",
  372. head = "Pillager's Bonnet +3",
  373. neck = "Fotia Gorget",
  374. ear1 = "Moonshade Earring",
  375. ear2 = "Sherida Earring",
  376. body = "",
  377. hands = "Meghanada Gloves +2",
  378. ring1 = "Gere Ring",
  379. ring2 = "Regal Ring",
  380. back = Toutatis.DEXWSD,
  381. waist = "Fotia Belt",
  382. legs = "Lustratio Subligar +1",
  383. feet = LustFeet.STRDEX
  384. })
  385.  
  386. sets.ExenteratorUnstacked = {}
  387.  
  388. sets.ExenteratorUnstacked.index = { 'AttackUncap', 'AttackCap', 'Accuracy' }
  389. ExenteratorUnstacked_ind = 1
  390. sets.ExenteratorUnstacked.AttackUncap = {
  391. ammo = "Seething Bomblet +1",
  392. head = "Adhemar Bonnet +1",
  393. neck = "Caro Necklace",
  394. ear1 = "Moonshade Earring",
  395. ear2 = "Sherida Earring",
  396. body = "Abnoba Kaftan",
  397. hands = "Meghanada Gloves +2",
  398. ring1 = "Ilabrat Ring",
  399. ring2 = "Regal Ring",
  400. back = Toutatis.DEXWSD,
  401. waist = "Grunfeld Rope",
  402. legs = "Lustratio Subligar +1",
  403. feet = LustFeet.STRDEX
  404. }
  405.  
  406. sets.ExenteratorUnstacked.AttackCap = {
  407. ammo = "Knobkierrie",
  408. head = "Adhemar Bonnet +1",
  409. neck = "Fotia Gorget",
  410. ear1 = "Brutal Earring",
  411. ear2 = "Sherida Earring",
  412. body = "Ashera Harness",
  413. hands = "Meghanada Gloves +2",
  414. ring1 = "Gere Ring",
  415. ring2 = "Regal Ring",
  416. back = Toutatis.DEXWSD,
  417. waist = "Fotia Belt",
  418. legs = "Lustratio Subligar +1",
  419. feet = LustFeet.STRDEX
  420. }
  421.  
  422. sets.ExenteratorUnstacked.Accuracy = {
  423. ammo = "Knobkierrie",
  424. head = "Pillager's Bonnet +3",
  425. neck = "Fotia Gorget",
  426. ear1 = "Brutal Earring",
  427. ear2 = "Sherida Earring",
  428. body = "Ashera Harness",
  429. hands = "Meghanada Gloves +2",
  430. ring1 = "Gere Ring",
  431. ring2 = "Regal Ring",
  432. back = Toutatis.DEXWSD,
  433. waist = "Fotia Belt",
  434. legs = "Lustratio Subligar +1",
  435. feet = LustFeet.STRDEX
  436. }
  437.  
  438. sets.ExenteratorStacked = {}
  439.  
  440. sets.ExenteratorStacked.index = { 'AttackUncap', 'AttackCap', 'Accuracy' }
  441. ExenteratorStacked_ind = 1
  442. sets.ExenteratorStacked.AttackUncap = {
  443. ammo = "Yetshila +1",
  444. head = "Adhemar Bonnet +1",
  445. neck = "Caro Necklace",
  446. ear1 = "Moonshade Earring",
  447. ear2 = "Sherida Earring",
  448. body = "Abnoba Kaftan",
  449. hands = "Meghanada Gloves +2",
  450. ring1 = "Ilabrat Ring",
  451. ring2 = "Regal Ring",
  452. back = Toutatis.DEXWSD,
  453. waist = "Grunfeld Rope",
  454. legs = "Lustratio Subligar +1",
  455. feet = LustFeet.STRDEX
  456. }
  457.  
  458. sets.ExenteratorStacked.AttackCap = {
  459. ammo = "Knobkierrie",
  460. head = "Adhemar Bonnet +1",
  461. neck = "Fotia Gorget",
  462. ear1 = "Brutal Earring",
  463. ear2 = "Sherida Earring",
  464. body = "Ashera Harness",
  465. hands = "Meghanada Gloves +2",
  466. ring1 = "Gere Ring",
  467. ring2 = "Regal Ring",
  468. back = Toutatis.DEXWSD,
  469. waist = "Fotia Belt",
  470. legs = "Lustratio Subligar +1",
  471. feet = LustFeet.STRDEX
  472. }
  473.  
  474. sets.ExenteratorStacked.Accuracy = {
  475. ammo = "Knobkierrie",
  476. head = "Pillager's Bonnet +3",
  477. neck = "Fotia Gorget",
  478. ear1 = "Brutal Earring",
  479. ear2 = "Sherida Earring",
  480. body = "Ashera Harness",
  481. hands = "Meghanada Gloves +2",
  482. ring1 = "Gere Ring",
  483. ring2 = "Regal Ring",
  484. back = Toutatis.DEXWSD,
  485. waist = "Fotia Belt",
  486. legs = "Lustratio Subligar +1",
  487. feet = LustFeet.STRDEX
  488. }
  489.  
  490. sets.EviscerationUnstacked = {}
  491.  
  492. sets.EviscerationUnstacked.index = { 'AttackUncap', 'AttackCap', 'Accuracy' }
  493. EviscerationUnstacked_ind = 1
  494.  
  495. sets.EviscerationUnstacked.AttackUncap = {
  496. ammo = "Seething Bomblet +1",
  497. head = "Adhemar Bonnet +1",
  498. neck = "Caro Necklace",
  499. ear1 = "Moonshade Earring",
  500. ear2 = "Sherida Earring",
  501. body = "Abnoba Kaftan",
  502. hands = AdhemarWrists.Attack,
  503. ring1 = "Ilabrat Ring",
  504. ring2 = "Regal Ring",
  505. back = Toutatis.DEXWSD,
  506. waist = "Grunfeld Rope",
  507. legs = "Lustratio Subligar +1",
  508. feet = "Adhemar Gamashes +1"
  509. }
  510.  
  511. sets.EviscerationUnstacked.AttackCap = {
  512. ammo = "Seething Bomblet +1",
  513. head = "Adhemar Bonnet +1",
  514. neck = "Caro Necklace",
  515. ear1 = "Moonshade Earring",
  516. ear2 = "Sherida Earring",
  517. body = "Abnoba Kaftan",
  518. hands = AdhemarWrists.Attack,
  519. ring1 = "Ilabrat Ring",
  520. ring2 = "Regal Ring",
  521. back = Toutatis.DEXWSD,
  522. waist = "Grunfeld Rope",
  523. legs = "Lustratio Subligar +1",
  524. feet = LustFeet.STRDEX
  525. }
  526.  
  527. sets.EviscerationUnstacked.Accuracy = {
  528. ammo = "Knobkierrie",
  529. head = "Pillager's Bonnet +3",
  530. neck = "Fotia Gorget",
  531. ear1 = "Telos Earring",
  532. ear2 = "Sherida Earring",
  533. body = "Abnoba Kaftan",
  534. hands = "Meghanada Gloves +2",
  535. ring1 = "Gere Ring",
  536. ring2 = "Karieyh Ring +1",
  537. back = Toutatis.DEXWSD,
  538. waist = "Fotia Belt",
  539. legs = "",
  540. feet = LustFeet.STRDEX
  541. }
  542.  
  543. sets.EviscerationStacked = {}
  544.  
  545. sets.EviscerationStacked.index = { 'AttackUncap', 'AttackCap', 'Accuracy' }
  546. EviscerationStacked_ind = 1
  547.  
  548. sets.EviscerationStacked.AttackUncap = {
  549. ammo = "Seething Bomblet +1",
  550. head = "Adhemar Bonnet +1",
  551. neck = "Caro Necklace",
  552. ear1 = "Moonshade Earring",
  553. ear2 = "Sherida Earring",
  554. body = "Abnoba Kaftan",
  555. hands = AdhemarWrists.Attack,
  556. ring1 = "Ilabrat Ring",
  557. ring2 = "Regal Ring",
  558. back = Toutatis.DEXWSD,
  559. waist = "Grunfeld Rope",
  560. legs = "Lustratio Subligar +1",
  561. feet = LustFeet.STRDEX
  562. }
  563.  
  564. sets.EviscerationStacked.AttackCap = {
  565. ammo = "Seething Bomblet +1",
  566. head = "Adhemar Bonnet +1",
  567. neck = "Caro Necklace",
  568. ear1 = "Moonshade Earring",
  569. ear2 = "Sherida Earring",
  570. body = "Abnoba Kaftan",
  571. hands = AdhemarWrists.Attack,
  572. ring1 = "Ilabrat Ring",
  573. ring2 = "Regal Ring",
  574. back = Toutatis.DEXWSD,
  575. waist = "Grunfeld Rope",
  576. legs = "Lustratio Subligar +1",
  577. feet = LustFeet.STRDEX
  578. }
  579.  
  580. sets.EviscerationStacked.Accuracy = {
  581. ammo = "Knobkierrie",
  582. head = "Pillager's Bonnet +3",
  583. neck = "Fotia Gorget",
  584. ear1 = "Telos Earring",
  585. ear2 = "Sherida Earring",
  586. body = "Abnoba Kaftan",
  587. hands = "Meghanada Gloves +2",
  588. ring1 = "Gere Ring",
  589. ring2 = "Karieyh Ring +1",
  590. back = Toutatis.DEXWSD,
  591. waist = "Fotia Belt",
  592. legs = "",
  593. feet = LustFeet.STRDEX
  594. }
  595.  
  596. sets.AeolianEdge = {
  597. ammo = "Knobkierrie",
  598. head = "Adhemar Bonnet +1",
  599. neck = "Fotia Gorget",
  600. ear1 = "Moonshade Earring",
  601. ear2 = "Sherida Earring",
  602. body = "Abnoba Kaftan",
  603. hands = HerculeanGloves.WSD,
  604. ring1 = "Gere Ring",
  605. ring2 = "Regal Ring",
  606. back = Toutatis.DEXWSD,
  607. waist = "Fotia Belt",
  608. legs = "",
  609. feet = LustFeet.STRDEX
  610. }
  611.  
  612. --SC DMG Set--
  613. sets.SCDmg = {
  614. head = "Adhemar Bonnet +1",
  615. body = "",
  616. hands = HerculeanGloves.WSD,
  617. legs = "Lustratio Subligar +1",
  618. feet = ""
  619. }
  620.  
  621. sets.SCDmgAllies = {
  622. head = "Adhemar Bonnet +1",
  623. body = "",
  624. hands = HerculeanGloves.WSD,
  625. legs = "Lustratio Subligar +1",
  626. feet = ""
  627. }
  628.  
  629. --------------------------
  630. -- Curing Magic Set --
  631. --------------------------
  632.  
  633. sets.Cures = {
  634. ammo = "",
  635. head = "",
  636. neck = "",
  637. ear1 = "",
  638. ear2 = "",
  639. body = "",
  640. hands = "",
  641. ring1 = "",
  642. ring2 = "",
  643. back = "",
  644. waist = "",
  645. legs = "",
  646. feet = ""
  647. }
  648. ----------------------
  649. -- Utility Sets --
  650. -----------------------
  651. -- Sets for one thing or another.
  652. -- Macro in game with:
  653.  
  654. -- /console gs equip sets.butts.andfronts
  655. -- /console gs c lockgearindex
  656.  
  657. sets.Utility = {}
  658.  
  659. sets.Utility.Doom = {
  660. ring1 = "Purity Ring",
  661. ring2 = "Saida Ring",
  662. waist = "Gishdubar Sash"
  663. }
  664.  
  665. sets.Utility.TH = {
  666. head = "Volte Cap",
  667. hands = "Plunderer's Armlets +1",
  668. waist = "Chaac Belt",
  669. legs = HerculeanLegs.TH,
  670. feet = "Skulker's Poulaines +1"
  671. }
  672.  
  673. sets.Utility.DerpDT = {
  674. ammo = "Yamarang",
  675. head = "Malignance Chapeau",
  676. neck = "Warder's Charm +1",
  677. ear1 = "Odnowa Earring +1",
  678. ear2 = "Etiolation Earring",
  679. body = "Malignance Tabard",
  680. hands = "Malignance Gloves",
  681. ring1 = "Defending Ring",
  682. ring2 = "Shadow Ring",
  683. back = Toutatis.STP,
  684. waist = "Engraved Belt",
  685. legs = "Malignance Tights",
  686. feet = "Malignance Boots"
  687. }
  688.  
  689. --Shell II only--
  690. sets.Utility.MDTII = {
  691. ammo = "",
  692. head = "",
  693. neck = "",
  694. ear1 = "",
  695. ear2 = "",
  696. body = "",
  697. hands = "",
  698. ring1 = "",
  699. ring2 = "",
  700. back = "",
  701. waist = "",
  702. legs = "",
  703. feet = ""
  704. }
  705.  
  706. --No Shell--
  707. sets.Utility.MDTNO = {
  708. ammo = "",
  709. head = "",
  710. neck = "",
  711. ear1 = "",
  712. ear2 = "",
  713. body = "",
  714. hands = "",
  715. ring1 = "",
  716. ring2 = "",
  717. back = "",
  718. waist = "",
  719. legs = "",
  720. feet = ""
  721. }
  722.  
  723. ---------------------
  724. -- Enmity Set --
  725. ---------------------
  726.  
  727. sets.Enmity = {
  728. ammo = "",
  729. head = "",
  730. neck = "",
  731. ear1 = "",
  732. ear2 = "",
  733. body = "",
  734. hands = "",
  735. ring1 = "",
  736. ring2 = "",
  737. back = "",
  738. waist = "",
  739. legs = "",
  740. feet = ""
  741. }
  742.  
  743. ------------------------
  744. -- Enhancing Sets --
  745. ------------------------
  746.  
  747. sets.Enhancing = {}
  748.  
  749. sets.Enhancing.Skill = {
  750. ammo = "",
  751. head = "",
  752. neck = "",
  753. ear1 = "",
  754. ear2 = "",
  755. body = "",
  756. hands = "",
  757. ring1 = "",
  758. ring2 = "",
  759. back = "",
  760. waist = "",
  761. legs = "",
  762. feet = ""
  763. }
  764.  
  765. sets.Enhancing.Phalanx = set_combine(sets.Enhancing.Skill, {
  766. })
  767.  
  768. sets.Enhancing.Refresh = set_combine(sets.Enhancing.Skill, {
  769. waist = "Gishdubar Sash",
  770. })
  771.  
  772. sets.Enhancing.ProShell = set_combine(sets.Enhancing.Skill, {
  773. ring2 = "Sheltered Ring",
  774. })
  775.  
  776. --------------------------
  777. -- Job Ability Sets --
  778. --------------------------
  779. sets.JA = {}
  780.  
  781. sets.JA.PerfectDodge = { hands = "Plunderer's Armlets +1" }
  782.  
  783. sets.JA.Steal = { feet = "Pillager's Poulaines +3" }
  784.  
  785. sets.JA.Mug = {}
  786.  
  787. sets.JA.Despoil = {}
  788.  
  789. sets.JA.Hide = { body = "Pillager's Vest +3" }
  790.  
  791. sets.JA.Flee = { feet = "Pillager's Poulaines +3" }
  792.  
  793. sets.JA.Feint = { legs = "Plunderer's Culottes +1" }
  794.  
  795. sets.JA.AccompliceCollaborator = { head = "Raider's Bonnet +2" }
  796.  
  797. sets.JA.Provoke = set_combine(sets.Enmity, {})
  798.  
  799.  
  800. ----------------------
  801. -- Precast Sets --
  802. ----------------------
  803. sets.precast = {}
  804.  
  805. sets.precast.FC = {}
  806.  
  807. sets.precast.FC.Standard = {
  808. ammo = "Sapience Orb",
  809. head = "",
  810. neck = "Orunmila's Torque",
  811. ear1 = "Etiolation Earring",
  812. ear2 = "Loquac. Earring",
  813. body = AdhemarJacket.FC,
  814. hands = "Leyline Gloves",
  815. ring1 = "Prolix Ring",
  816. ring2 = "Rahab Ring",
  817. back = "",
  818. legs = "",
  819. feet = "Carmine Greaves +1"
  820. }
  821.  
  822. end
  823.  
  824. ---End of Gear---------------------------------------------------------------------------------------------------------------------------------------------------------
  825.  
  826. -------------------------------------
  827. --------- ---------
  828. ------ ------
  829. --- Start of Maps ---
  830. ------ ------
  831. --------- ---------
  832. -------------------------------------
  833.  
  834. ------------------------
  835. -- Town Gear List --
  836. ------------------------
  837.  
  838. function maps()
  839.  
  840. Town = S {
  841. "Ru'Lude Gardens", "Upper Jeuno", "Lower Jeuno", "Port Jeuno",
  842. "Port Windurst", "Windurst Waters", "Windurst Woods", "Windurst Walls", "Heavens Tower",
  843. "Port San d'Oria", "Northern San d'Oria", "Southern San d'Oria", "Chateau d'Oraguille",
  844. "Port Bastok", "Bastok Markets", "Bastok Mines", "Metalworks",
  845. "Aht Urhgan Whitegate", "Nashmau",
  846. "Selbina", "Mhaura", "Norg", "Kazham", "Tavanazian Safehold",
  847. "Eastern Adoulin", "Western Adoulin", "Celennia Memorial Library", "Mog Garden"
  848. }
  849.  
  850. end
  851.  
  852. ---End of Maps----------------------------------------------------------------------------------------------------------------------------------------------------------
  853.  
  854.  
  855. --------------------------------------
  856. --------- ---------
  857. ------ ------
  858. --- Start of Rules ---
  859. ------ ------
  860. --------- ---------
  861. --------------------------------------
  862.  
  863. ----------------------------------------------
  864. -- Macro and Style Change on Job Change --
  865. ----------------------------------------------
  866. function set_macros(sheet,book)
  867. if book then
  868. send_command('@input /macro book '..tostring(book)..';wait .1;input /macro set '..tostring(sheet))
  869. return
  870. end
  871. send_command('@input /macro set '..tostring(sheet))
  872. end
  873.  
  874. function set_style(sheet)
  875. send_command('@input ;wait 5.0;input /lockstyleset '..sheet)
  876. add_to_chat (56, 'Your lockstyle looks like shit, and you should feel bad.')
  877. add_to_chat (55, 'You are on '..('THF '):color(5)..''..('btw. '):color(55)..''..('Macros set!'):color(121))
  878. -- add_to_chat (23, '""')
  879. end
  880.  
  881. --Page, Book--
  882. set_macros(1,3)
  883. --Use the Lockstyle Number--
  884. set_style(2)
  885. -------------------------------
  886. -- Variables --
  887. -------------------------------
  888. SetLocked = false --Used to Check if set is locked before changing equipment
  889. LockedEquipSet = {} --Placeholder to store desired lock set
  890. LockGearSet = {}
  891. equipSet = {} --Currently Equiped Gearset
  892. LockGearIndex = false
  893. LockGearIndex = false
  894. TargetDistance = 0
  895. TH = false --TH rule default
  896. DT = false
  897. SkillchainPending = false
  898. AllowSkillchainGear = true --Whether or not hte skillchainPending system should be disabled
  899. SkillchainTimer = 0
  900.  
  901. ------------------------------------
  902. -- Windower Hooks --
  903. ------------------------------------
  904.  
  905. function buff_change(n, gain, buff_table)
  906. local name
  907. name = string.lower(n)
  908. if S{"terror","petrification","sleep","stun"}:contains(name) then
  909. if gain then
  910. ChangeGear(sets.Utility.DerpDT)
  911. elseif not has_any_buff_of({"terror","petrification","sleep","stun"}) then
  912. if player.status == 'Engaged' then
  913. if LockGearIndex then
  914. ChangeGear(LockGearSet)
  915. elseif not LockGearIndex then
  916. if DT == true then
  917. ChangeGear(sets.DT[sets.DT.index[DT_ind]])
  918. else
  919. ChangeGear(sets.TP[sets.TP.index[TP_ind]])
  920. end
  921. end
  922. elseif player.status == 'Idle' then
  923. if LockGearIndex then
  924. ChangeGear(LockGearSet)
  925. elseif not LockGearIndex then
  926. ChangeGear(sets.Idle[sets.Idle.index[Idle_ind]])
  927. end
  928. end
  929. end
  930. elseif name == "doom" then
  931. if gain then
  932. ChangeGear(sets.Utility.Doom)
  933. send_command('@input /p Doomed {~o~:} !')
  934. disable('ring1','ring2','waist')
  935. else
  936. if player.status == 'Engaged' then
  937. if LockGearIndex then
  938. send_command('@input /p Doom is off {^_^}')
  939. enable('ring1','ring2','waist')
  940. ChangeGear(LockGearSet)
  941. else
  942. send_command('@input /p Doom is off {^_^}')
  943. enable('ring1','ring2','waist')
  944. if DT == true then
  945. ChangeGear(sets.DT[sets.DT.index[DT_ind]])
  946. else
  947. ChangeGear(sets.TP[sets.TP.index[TP_ind]])
  948. end
  949. end
  950. elseif player.status == 'Idle' then
  951. if LockGearIndex then
  952. send_command('@input /p Doom is off {^_^}')
  953. enable('ring1','ring2','waist')
  954. ChangeGear(LockGearSet)
  955. else
  956. send_command('@input /p Doom is off {^_^}')
  957. enable('ring1','ring2','waist')
  958. ChangeGear(sets.Idle[sets.Idle.index[Idle_ind]])
  959. end
  960. end
  961. end
  962. elseif name == "charm" then
  963. if gain then
  964. send_command('@input /p Charmed {<3_<3:} !')
  965. else
  966. send_command('@input /p Charm is off {~_^}')
  967. end
  968. end
  969.  
  970. end
  971.  
  972. function has_any_buff_of(buff_set)--returns true if you have any of the buffs given
  973. for i,v in pairs(buff_set) do
  974. if buffactive[v] ~= nil then return true end
  975. end
  976. end
  977.  
  978. ---------------------------
  979. -- Binds --
  980. ---------------------------
  981. send_command('bind f9 gs c toggle TP set') -- Hit f9, toggles the sets
  982. send_command('bind f10 gs c toggle Dagger Set')
  983. send_command('bind f11 gs c toggle Evisceration set')
  984. send_command('bind f12 gs c toggle Idle set')
  985. send_command('bind ^f8 input /ws "Aeolian Edge" <t>')
  986. send_command('bind ^f9 input /ws "Rudra\'s Storm" <t>') -- ^ means cntrl, so hit cntrl + f9
  987. send_command('bind ^f10 input /ws "Evisceration"] <t>')
  988. send_command('bind ^f11 input /ws "Mandalic Stab" <t>')
  989. send_command('bind ^f12 input /ws "Exenterator" <t>')
  990. send_command('bind !f7 gs c toggle DT set') -- ! means alt. this exists only for toggling outside of this mode being active, otherwise f9
  991. send_command('bind !f8 gs c toggle DT') -- ! means alt. DT on or off
  992. send_command('bind !f9 gs c toggle backwards')
  993. send_command('bind !f10 gs c AllowSkillchainGear')
  994. send_command('bind !f11 empty')
  995. send_command('bind !f12 gs c lockgearindex')
  996.  
  997. send_command('bind !e input /item "Echo Drops" <me>')
  998. send_command('bind !r input /item "Remedy" <me>')
  999. send_command('bind !p input /item "Panacea" <me>')
  1000. send_command('bind !h input /item "Holy Water" <me>')
  1001. send_command('bind !w input /equip ring2 "Warp Ring"; /echo Warping; wait 11; input /item "Warp Ring" <me>;')
  1002. send_command('bind !q input /equip ring2 "Dim. Ring (Holla)"; /echo Reisenjima; wait 11; input /item "Dim. Ring (Holla)" <me>;')
  1003. send_command('bind !t gs c toggle TH') -- alt + t toggles TH mode
  1004.  
  1005. --Unload Binds
  1006. function file_unload()
  1007. send_command('unbind ^f8')
  1008. send_command('unbind ^f9')
  1009. send_command('unbind ^f10')
  1010. send_command('unbind ^f11')
  1011. send_command('unbind ^f12')
  1012. send_command('unbind !f7')
  1013. send_command('unbind !f8')
  1014. send_command('unbind !f9')
  1015. send_command('unbind !f10')
  1016. send_command('unbind !f11')
  1017. send_command('unbind !f12')
  1018. send_command('unbind f9')
  1019. send_command('unbind f10')
  1020. send_command('unbind f11')
  1021. send_command('unbind f12')
  1022.  
  1023. send_command('unbind !e')
  1024. send_command('unbind !r')
  1025. send_command('unbind !p')
  1026. send_command('unbind !h')
  1027. send_command('unbind !w')
  1028. send_command('unbind !t')
  1029. end
  1030.  
  1031. --------------------------------------
  1032. -- Console Commands --
  1033. --------------------------------------
  1034. function self_command(command)
  1035. if command == 'togglelock' then
  1036. if SetLocked == false then
  1037. msg("Equipment Set LOCKED !!!")
  1038. else
  1039. SetLocked = false
  1040. msg("Equipment Set UNLOCKED!")
  1041. end
  1042. elseif command == 'lockgearindex' then
  1043. if LockGearIndex == false then
  1044. LockGearIndex = true
  1045. LockGearSet = {
  1046. ammo = player.equipment.ammo,
  1047. head = player.equipment.head,
  1048. neck = player.equipment.neck,
  1049. ear1 = player.equipment.left_ear,
  1050. ear2 = player.equipment.right_ear,
  1051. body = player.equipment.body,
  1052. hands = player.equipment.hands,
  1053. ring1 = player.equipment.left_ring,
  1054. ring2 = player.equipment.right_ring,
  1055. back = player.equipment.back,
  1056. waist = player.equipment.waist,
  1057. legs = player.equipment.legs,
  1058. feet = player.equipment.feet
  1059. }
  1060. msg("Gear Index Locked !!!")
  1061. else
  1062. LockGearIndex = false
  1063. msg("Gear Index Unlocked")
  1064. if player.status == 'Engaged' then
  1065. if DT == true then
  1066. ChangeGear(sets.DT[sets.DT.index[DT_ind]])
  1067. else
  1068. ChangeGear(sets.TP[sets.TP.index[TP_ind]])
  1069. end
  1070. else
  1071. ChangeGear(sets.Idle[sets.Idle.index[Idle_ind]])
  1072. end
  1073. end
  1074. end
  1075. if command == 'toggle TP set' then
  1076. if DT == true then
  1077. DT_ind = DT_ind + 1
  1078. if DT_ind > #sets.DT.index then DT_ind = 1 end
  1079. send_command('@input /echo <----- DT Set changed to ' .. sets.DT.index[DT_ind] .. ' ----->')
  1080. ChangeGear(sets.DT[sets.DT.index[DT_ind]])
  1081. elseif DT == false then
  1082. TP_ind = TP_ind + 1
  1083. if TP_ind > #sets.TP.index then TP_ind = 1 end
  1084. send_command('@input /echo <----- TP Set changed to ' .. sets.TP.index[TP_ind] .. ' ----->')
  1085. if player.status == 'Engaged' then
  1086. ChangeGear(sets.TP[sets.TP.index[TP_ind]])
  1087. end
  1088. end
  1089. elseif command == 'toggle Idle set' then
  1090. Idle_ind = Idle_ind + 1
  1091. if Idle_ind > #sets.Idle.index then Idle_ind = 1 end
  1092. send_command('@input /echo <----- Idle Set changed to ' .. sets.Idle.index[Idle_ind] .. ' ----->')
  1093. if player.status == 'Idle' then
  1094. ChangeGear(sets.Idle[sets.Idle.index[Idle_ind]])
  1095. end
  1096. elseif command == 'toggle Dagger Set' then
  1097. RudrasUnstacked_ind = RudrasUnstacked_ind + 1
  1098. RudrasStacked_ind = RudrasStacked_ind + 1
  1099. EviscerationUnstacked_ind = EviscerationUnstacked_ind +1
  1100. EviscerationStacked_ind = EviscerationStacked_ind +1
  1101. ExenteratorUnstacked_ind = ExenteratorUnstacked_ind + 1
  1102. ExenteratorStacked_ind = ExenteratorStacked_ind + 1
  1103. if RudrasUnstacked_ind > #sets.RudrasUnstacked.index then RudrasUnstacked_ind = 1 end
  1104. if RudrasStacked_ind > #sets.RudrasStacked.index then RudrasStacked_ind = 1 end
  1105. if EviscerationUnstacked_ind > #sets.EviscerationUnstacked.index then EviscerationUnstacked_ind = 1 end
  1106. if EviscerationStacked_ind > #sets.EviscerationStacked.index then EviscerationStacked_ind = 1 end
  1107. if ExenteratorUnstacked_ind > #sets.ExenteratorUnstacked.index then ExenteratorUnstacked_ind = 1 end
  1108. if ExenteratorStacked_ind > #sets.ExenteratorStacked.index then ExenteratorStacked_ind = 1 end
  1109. send_command('@input /echo <----- Dagger Sets changed to ' .. sets.RudrasStacked.index[RudrasStacked_ind] .. ' ----->')
  1110. elseif command == 'toggle DT set' then
  1111. DT_ind = DT_ind + 1
  1112. if DT_ind > #sets.DT.index then DT_ind = 1 end
  1113. send_command('@input /echo <----- DT Set changed to ' .. sets.DT.index[DT_ind] .. ' ----->')
  1114. if DT == true then
  1115. ChangeGear(sets.DT[sets.DT.index[DT_ind]])
  1116. end
  1117. elseif command == 'toggle DT' then
  1118. if DT == true then
  1119. DT = false
  1120. send_command('@input /echo <----- DT TP: [Off] ----->')
  1121. else
  1122. DT = true
  1123. send_command('@input /echo <----- DT TP: [On] ----->')
  1124. end
  1125. status_change(player.status)
  1126. elseif command == 'toggle TH' then
  1127. if TH == true then
  1128. TH = false
  1129. send_command('@input /echo <----- Treasure Hunter TP: [Off] ----->')
  1130. else
  1131. TH = true
  1132. send_command('@input /echo <----- Treasure Hunter TP: [On] ----->')
  1133. end
  1134. status_change(player.status)
  1135. elseif command == 'toggle backwards' then
  1136. if DT == true then
  1137. DT_ind = DT_ind -1
  1138. if DT_ind == 0 then
  1139. DT_ind = #sets.DT.index
  1140. end
  1141. send_command('@input /echo <----- DT Set changed to ' .. sets.DT.index[DT_ind] .. ' ----->')
  1142. ChangeGear(sets.DT[sets.DT.index[DT_ind]])
  1143. elseif DT == false then
  1144. TP_ind = TP_ind -1
  1145. if TP_ind == 0 then
  1146. TP_ind = #sets.TP.index
  1147. end
  1148. send_command('@input /echo <----- TP Set changed to ' .. sets.TP.index[TP_ind] .. ' ----->')
  1149. if player.status == 'Engaged' then
  1150. ChangeGear(sets.TP[sets.TP.index[TP_ind]])
  1151. end
  1152. end
  1153. elseif command == 'ZoneChange' then
  1154. IdleState()
  1155. elseif command == 'AllowSkillchainGear' then
  1156. AllowSkillchainGear = not AllowSkillchainGear
  1157. add_to_chat (56, 'Allow use of skillchain damage gear: ' ..tostring(AllowSkillchainGear))
  1158. elseif string.sub(command, 0, 4) == '-cd ' then --If the first 4 characters of the command are '-cd '
  1159. add_to_chat (30, string.sub(command, 5, string.len(command))) --add everything after '-cd ' to a message in the chat
  1160. end
  1161. end
  1162.  
  1163. --------------------------------------
  1164. -- Character States --
  1165. --------------------------------------
  1166. function IdleState()
  1167. if LockGearIndex then
  1168. ChangeGear(LockGearSet)
  1169. elseif DT == true then
  1170. ChangeGear(sets.DT[sets.DT.index[DT_ind]])
  1171. else
  1172. ChangeGear(sets.Idle[sets.Idle.index[Idle_ind]])
  1173. end
  1174.  
  1175. if Town:contains(world.area) then
  1176. ChangeGear(sets.Idle.Town)
  1177. end
  1178.  
  1179. end
  1180.  
  1181. windower.raw_register_event('zone change',function()
  1182. windower.send_command('@wait 9; input //gs c ZoneChange')
  1183. end)
  1184.  
  1185. function RestingState()
  1186.  
  1187. end
  1188.  
  1189. function EngagedState()
  1190. if LockGearIndex then
  1191. ChangeGear(LockGearSet)
  1192. elseif not LockGearIndex then
  1193. if DT == true then
  1194. ChangeGear(sets.DT[sets.DT.index[DT_ind]])
  1195. else
  1196. ChangeGear(sets.TP[sets.TP.index[TP_ind]])
  1197. end
  1198. end
  1199. end
  1200.  
  1201. -----------------------------
  1202. -- Spell control --
  1203. -----------------------------
  1204. unusable_buff = {
  1205. spell={'Charm','Mute','Omerta','Petrification','Silence','Sleep','Stun','Terror'},
  1206. ability={'Amnesia','Charm','Impairment','Petrification','Sleep','Stun','Terror'}}
  1207. --check_recast('ability',spell.recast_id) check_recast('spell',spell.recast_id)
  1208. function check_recast(typ,id) --if spell can be cast(not in recast) return true
  1209. local recasts = windower.ffxi['get_'..typ..'_recasts']()
  1210. if id and recasts[id] and recasts[id] == 0 then
  1211. return true
  1212. else
  1213. return false
  1214. end
  1215. end
  1216. --return true if spell/ability is unable to be used at this time
  1217. function spell_control(spell)
  1218. if spell.type == "Item" then
  1219. return false
  1220. --Stops spell if you do not have a target
  1221. elseif spell.target.name == nil and not spell.target.raw:contains("st") then
  1222. return true
  1223. --Stops spell if a blocking buff is active
  1224. elseif spell.action_type == 'Ability' and spell.type ~= 'WeaponSkill' and (has_any_buff_of(unusable_buff.ability) or not check_recast('ability',spell.recast_id)) then
  1225. return true
  1226. elseif spell.type == 'WeaponSkill' and player.tp < 1000 then
  1227. return true
  1228. elseif spell.type == 'WeaponSkill' and (has_any_buff_of(unusable_buff.ability)) then
  1229. msg("Weapon Skill Canceled, Can't")
  1230. return true
  1231. elseif spell.action_type == 'Magic' and (has_any_buff_of(unusable_buff.spell)
  1232. or not check_recast('spell',spell.recast_id)) then
  1233. return true
  1234. --Stops spell if you do not have enuf mp/tp to use
  1235. elseif spell.mp_cost and spell.mp_cost > player.mp and not has_any_buff_of({'Manawell','Manafont'}) then
  1236. msg("Spell Canceled, Not Enough MP")
  1237. return true
  1238. end
  1239. --Calculate how many finishing moves your char has up to 6
  1240. local fm_count = 0
  1241. for i, v in pairs(buffactive) do
  1242. if tostring(i):startswith('finishing move') or tostring(i):startswith('?????????') then
  1243. fm_count = tonumber(string.match(i, '%d+')) or 1
  1244. end
  1245. end
  1246. --Stops flourishes if you do not have enough finishing moves
  1247. local min_fm_for_flourishes = {['Animated Flourish']=1,['Desperate Flourish']=1,['Violent Flourish']=1,['Reverse Flourish']=1,['Building Flourish']=1,
  1248. ['Wild Flourish']=2,['Climactic Flourish']=1,['Striking Flourish']=2,['Ternary Flourish']=3,}
  1249. if min_fm_for_flourishes[spell.en] then
  1250. if min_fm_for_flourishes[spell.en] > fm_count and not buffactive[507] then
  1251. return true
  1252. end
  1253. end
  1254. --Reomves Sneak when casting Spectral Jig
  1255. if spell.en == 'Spectral Jig' then
  1256. send_command('cancel 71')
  1257. end
  1258. if spell.english == 'Utsusemi: Ichi' and overwrite and buffactive['Copy Image (3)'] then
  1259. return true
  1260. end
  1261. if player.tp >= 1000 and player.target and player.target.distance and player.target.distance > 7 and spell.type == 'WeaponSkill' then
  1262. msg("Weapon Skill Canceled Target Out of Range")
  1263. return true
  1264. end
  1265. end
  1266.  
  1267. -----------------------------
  1268. -- Precast --
  1269. -----------------------------
  1270. function pc_JA(spell, act)
  1271. if spell.english == 'Perfect Dodge' then
  1272. ChangeGear(sets.JA.PerfectDodge)
  1273. elseif spell.english == 'Steal' then
  1274. ChangeGear(sets.JA.Steal)
  1275. elseif spell.english == 'Mug' then
  1276. ChangeGear(sets.JA.Mug)
  1277. elseif spell.english == 'Despoil' then
  1278. ChangeGear(sets.JA.Despoil)
  1279. elseif spell.english == 'Hide' then
  1280. ChangeGear(sets.JA.Hide)
  1281. elseif spell.english == 'Flee' then
  1282. ChangeGear(sets.JA.Flee)
  1283. elseif spell.english == 'Feint' then
  1284. ChangeGear(sets.JA.Feint)
  1285. elseif spell.english =='Accomplice' or spell.english =='Collaborator' then
  1286. ChangeGear(sets.JA.AccompliceCollaborator)
  1287. elseif spell.english == 'Provoke' then
  1288. ChangeGear(sets.JA.Provoke)
  1289. end
  1290.  
  1291. IgnoreWS = S {"Aeolian Edge"} -- Excluded from Moonshade TP override rule.
  1292. BrutalWS = S {"Rudra's Storm", "Exenterator", "Shark Bite"}
  1293.  
  1294. if spell.type == 'WeaponSkill' then
  1295. if spell.english == "Rudra's Storm" or spell.english == 'Mandalic Stab' or spell.english == 'Shark Bite' then
  1296. if buffactive['Sneak Attack'] or buffactive['Trick Attack'] then --This is unreliable, I need to build in a workaround..
  1297. ChangeGear(sets.RudrasStacked[sets.RudrasStacked.index[RudrasStacked_ind]])
  1298. else
  1299. ChangeGear(sets.RudrasUnstacked[sets.RudrasUnstacked.index[RudrasUnstacked_ind]])
  1300. end
  1301. elseif spell.english == "Evisceration" then
  1302. if buffactive['Sneak Attack'] or buffactive['Trick Attack'] then
  1303. ChangeGear(sets.EviscerationStacked[sets.EviscerationStacked.index[EviscerationStacked_ind]])
  1304. else
  1305. ChangeGear(sets.EviscerationUnstacked[sets.EviscerationUnstacked.index[EviscerationUnstacked_ind]])
  1306. end
  1307. elseif spell.english == 'Exenterator' then
  1308. if buffactive['Sneak Attack'] or buffactive['Trick Attack'] then
  1309. ChangeGear(sets.ExenteratorStacked[sets.ExenteratorStacked.index[ExenteratorStacked_ind]])
  1310. else
  1311. ChangeGear(sets.ExenteratorUnstacked[sets.ExenteratorUnstacked.index[ExenteratorUnstacked_ind]])
  1312. end
  1313. elseif spell.english == 'Aeolian Edge' or spell.english == 'Cyclone' then
  1314. ChangeGear(sets.AeolianEdge)
  1315. end
  1316. --WS TP Rules, so you dont use moonshade when you have TP overflow--
  1317. if player.tp > 2025 and player.equipment.main == 'Aeneas' and buffactive['TP Bonus'] and not buffactive['Sekkanoki'] then
  1318. if IgnoreWS:contains(spell.english) then
  1319. return
  1320. elseif BrutalWS:contains(spell.english) then
  1321. equip(set_combine(equipSet, { ear1 = "Brutal Earring" })) --Watch for ear conflicts between TP sets and WS sets
  1322. msg("Brutal Earring equiped !!!!")
  1323. else
  1324. equip(set_combine(equipSet, { ear1 = "Ishvara Earring" }))
  1325. msg("Ishvara Earring equiped !!!!")
  1326. end
  1327. elseif player.tp > 2275 and player.equipment.main == 'Aeneas' and not buffactive['Sekkanoki'] then
  1328. if IgnoreWS:contains(spell.english) then
  1329. return
  1330. elseif BrutalWS:contains(spell.english) then
  1331. equip(set_combine(equipSet, { ear1 = "Brutal Earring" })) --Watch for ear conflicts between TP sets and WS sets
  1332. msg("Brutal Earring equiped !!!!")
  1333. else
  1334. equip(set_combine(equipSet, { ear1 = "Ishvara Earring" }))
  1335. msg("Ishvara Earring equiped !!!!")
  1336. end
  1337. elseif player.tp > 2550 and buffactive['TP Bonus'] and not buffactive['Sekkanoki'] then
  1338. if IgnoreWS:contains(spell.english) then
  1339. return
  1340. elseif BrutalWS:contains(spell.english) then
  1341. equip(set_combine(equipSet, { ear1 = "Brutal Earring" })) --Watch for ear conflicts between TP sets and WS sets
  1342. msg("Brutal Earring equiped !!!!")
  1343. else
  1344. equip(set_combine(equipSet, { ear1 = "Ishvara Earring" }))
  1345. msg("Ishvara Earring equiped !!!!")
  1346. end
  1347. elseif player.tp > 2775 and not buffactive['Sekkanoki'] then
  1348. if IgnoreWS:contains(spell.english) then
  1349. return
  1350. elseif BrutalWS:contains(spell.english) then
  1351. equip(set_combine(equipSet, { ear1 = "Brutal Earring" })) --Watch for ear conflicts between TP sets and WS sets
  1352. msg("Brutal Earring equiped !!!!")
  1353. else
  1354. equip(set_combine(equipSet, { ear1 = "Ishvara Earring" }))
  1355. msg("Ishvara Earring equiped !!!!")
  1356. end
  1357. end
  1358. end
  1359.  
  1360. if spell.type == 'Step' then
  1361. ChangeGear(set_combine(sets.TP.AccuracyFull, sets.Utility.TH))
  1362. elseif spell.english == 'Animated Flourish' then
  1363. ChangeGear(sets.Enmity)
  1364. elseif spell.type == 'Waltz' then
  1365. ChangeGear(set_combine(sets.Utility.DerpDT, {ammo = "Yamarang"} ))
  1366. end
  1367. end
  1368.  
  1369. function pc_Magic(spell, act)
  1370. if spell.action_type == 'Magic' then
  1371. ChangeGear(sets.precast.FC.Standard)
  1372. end
  1373. end
  1374.  
  1375. function pc_Item(spell, act)
  1376. end
  1377.  
  1378.  
  1379. -----------------------------
  1380. -- Midcast --
  1381. -----------------------------
  1382. function mc_JA(spell, act)
  1383. end
  1384.  
  1385. function mc_Magic(spell, act)
  1386. if spell.skill == 'Enhancing Magic' then
  1387. if spell.english == 'Refresh' then
  1388. ChangeGear(sets.Enhancing.Refresh)
  1389. elseif string.find(spell.english,'Bar') then
  1390. ChangeGear(sets.Enhancing.Skill)
  1391. elseif spell.english=="Phalanx" then
  1392. ChangeGear(sets.Enhancing.Phalanx)
  1393. elseif string.find(spell.english,'Shell') or string.find(spell.english,'Protect') then
  1394. ChangeGear(sets.Enhancing.ProShell)
  1395. end
  1396. end
  1397. end
  1398.  
  1399. function mc_Item(spell, act)
  1400. end
  1401.  
  1402.  
  1403. --------------------------------
  1404. -- After Cast --
  1405. --------------------------------
  1406. function ac_JA(spell)
  1407. end
  1408.  
  1409. function ac_Magic(spell)
  1410. end
  1411.  
  1412. function ac_Item(spell)
  1413. end
  1414.  
  1415. function ac_Global()
  1416. if LockGearIndex == true then
  1417. ChangeGear(LockGearSet)
  1418. msg("Lock Gear is ON -- Swapping Gear")
  1419. else
  1420. if player.status == 'Engaged' then
  1421. EngagedState()
  1422. else
  1423. IdleState()
  1424. end
  1425. end
  1426. end
  1427.  
  1428. ------------------------------------
  1429. -- Framework Core --
  1430. ------------------------------------
  1431. function status_change(new, old)
  1432. if new == 'Idle' then
  1433. IdleState()
  1434. elseif new == 'Resting' then
  1435. RestingState()
  1436. elseif new == 'Engaged' then
  1437. EngagedState()
  1438. end
  1439.  
  1440. if player.status == 'Engaged' and TH == true then
  1441. ChangeGear(set_combine(equipSet, sets.Utility.TH))
  1442. end
  1443.  
  1444. if DT == true and LockGearIndex == false then
  1445. ChangeGear(sets.DT[sets.DT.index[DT_ind]])
  1446. end
  1447.  
  1448. end
  1449.  
  1450. function precast(spell, act, spellMap, eventArgs)
  1451. if spell_control(spell) then
  1452. cancel_spell()
  1453. return
  1454. end
  1455. if spell.action_type == 'Ability' then
  1456. pc_JA(spell, act)
  1457. elseif spell.action_type == 'Magic' then
  1458. pc_Magic(spell, act)
  1459. else
  1460. pc_Item(spell, act)
  1461. end
  1462.  
  1463. if spell.type:lower() == "weaponskill" and SkillchainPending == true then
  1464. if (os.time() - SkillchainTimer) <= 9 and AllowSkillchainGear == true then
  1465. if buffactive["Allies' Roll"] then
  1466. equip(sets.SCDmgAllies)
  1467. else
  1468. equip(sets.SCDmg) -- If the current operating system time (in seconds)
  1469. end -- minus SkillchainTimer variable is less than 9, equip skillchain gear
  1470. else
  1471. SkillchainPending = false
  1472. end
  1473. end
  1474. end
  1475.  
  1476. function midcast(spell, act)
  1477. if spell.action_type == 'Ability' and TH == true then
  1478. ChangeGear(set_combine(equipSet, sets.Utility.TH))
  1479. elseif spell.action_type == 'Ability' then
  1480. mc_JA(spell, act)
  1481. elseif spell.action_type == 'Magic' then
  1482. mc_Magic(spell, act)
  1483. else
  1484. mc_Item(spell, act)
  1485. end
  1486. end
  1487.  
  1488. function aftercast(spell, act, spellMap, eventArgs)
  1489. if spell.action_type == 'Ability' then
  1490. ac_JA(spell)
  1491. elseif spell.action_type == 'Magic' then
  1492. ac_Magic(spell)
  1493. else
  1494. ac_Item(spell)
  1495. end
  1496. ac_Global()
  1497.  
  1498. --Countdowns--
  1499. if not spell.interrupted then
  1500. if spell.english == "Berserk" then
  1501. send_command('wait 169;gs c -cd '..spell.name..': [Ready In 10 Seconds!];wait 10;gs c -cd '..spell.name..': [Ready !]')
  1502. elseif spell.english == "Aggressor" then
  1503. send_command('wait 169;gs c -cd '..spell.name..': [Ready In 10 Seconds!];wait 10;gs c -cd '..spell.name..': [Ready !]')
  1504. elseif spell.english == "Meditate" then
  1505. send_command('wait 169;gs c -cd '..spell.name..': [Ready In 10 Seconds!];wait 10;gs c -cd '..spell.name..': [Ready !]')
  1506. elseif spell.english == "Sekkanoki" then
  1507. send_command('wait 289;gs c -cd '..spell.name..': [Ready In 10 Seconds!];wait 10;gs c -cd '..spell.name..': [Ready !]')
  1508. elseif spell.english == "Feint" then
  1509. send_command('timers create "Feint Duration" 30 down')
  1510. elseif spell.english == "Bully" then
  1511. send_command('timers create "Bully Duration" 30 down')
  1512. elseif spell.type == "WeaponSkill" then
  1513. SkillchainPending = true
  1514. SkillchainTimer = os.time() -- sets SkillchainTimer variable to the current time of the operating system (in seconds)
  1515. end
  1516. end
  1517.  
  1518. if not spell.interrupted then
  1519. if spell.english == 'Utsusemi: Ichi' then
  1520. overwrite = false
  1521. elseif spell.english == 'Utsusemi: Ni' then
  1522. overwrite = true
  1523. end
  1524. end
  1525.  
  1526. end
  1527.  
  1528. function ChangeGear(GearSet)
  1529. equipSet = GearSet
  1530. equip(GearSet)
  1531. end
  1532.  
  1533. function LockGearSet(GearSet)
  1534. LockedEquipSet = GearSet
  1535. equip(GearSet)
  1536. SetLocked = true
  1537. end
  1538.  
  1539. function UnlockGearSet()
  1540. locked = false
  1541. equip(equipSet)
  1542. end
  1543.  
  1544. function msg(str)
  1545. send_command('@input /echo <----- ' .. str .. ' ----->')
  1546. end
  1547.  
  1548. ---End of Rules-------------------------------------------------------------------------------------------------------------------------------------------------------
RAW Paste Data