Advertisement
Guest User

BST lua 72018

a guest
Jul 20th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.73 KB | None | 0 0
  1. -- NOTE: I do not play bst, so this will not be maintained for 'active' use.
  2. -- It is added to the repository to allow people to have a baseline to build from,
  3. -- and make sure it is up-to-date with the library API.
  4.  
  5. -- Credit to Quetzalcoatl.Falkirk for most of the original work.
  6.  
  7. --[[
  8. Custom commands:
  9.  
  10. Ctrl-F8 : Cycle through available pet food options.
  11. Alt-F8 : Cycle through correlation modes for pet attacks.
  12. ]]
  13.  
  14. -------------------------------------------------------------------------------------------------------------------
  15. -- Setup functions for this job. Generally should not be modified.
  16. -------------------------------------------------------------------------------------------------------------------
  17.  
  18. -- Initialization function for this job file.
  19. function get_sets()
  20. mote_include_version = 2
  21.  
  22. -- Load and initialize the include file.
  23. include('Mote-Include.lua')
  24. end
  25.  
  26. function job_setup()
  27. -- Set up Reward Modes and keybind Ctrl-F8
  28. state.RewardMode = M{['description']='Reward Mode', 'Theta', 'Zeta', 'Eta'}
  29. RewardFood = {name="Pet Food Theta"}
  30. send_command('bind ^f8 gs c cycle RewardMode')
  31.  
  32. -- Set up Monster Correlation Modes and keybind Alt-F8
  33. state.CorrelationMode = M{['description']='Correlation Mode', 'Neutral','Favorable'}
  34. send_command('bind !f8 gs c cycle CorrelationMode')
  35.  
  36. -- Custom pet modes for engaged gear
  37. state.PetMode = M{['description']='Pet Mode', 'Normal', 'PetStance', 'PetTank'}
  38.  
  39.  
  40. ready_moves_to_check = S{'Sic','Whirl Claws','Dust Cloud','Foot Kick','Sheep Song','Sheep Charge','Lamb Chop',
  41. 'Rage','Head Butt','Scream','Dream Flower','Wild Oats','Leaf Dagger','Claw Cyclone','Razor Fang',
  42. 'Roar','Gloeosuccus','Palsy Pollen','Soporific','Cursed Sphere','Venom','Geist Wall','Toxic Spit',
  43. 'Numbing Noise','Nimble Snap','Cyclotail','Spoil','Rhino Guard','Rhino Attack','Power Attack',
  44. 'Hi-Freq Field','Sandpit','Sandblast','Venom Spray','Mandibular Bite','Metallic Body','Bubble Shower',
  45. 'Bubble Curtain','Scissor Guard','Big Scissors','Grapple','Spinning Top','Double Claw','Filamented Hold',
  46. 'Frog Kick','Queasyshroom','Silence Gas','Numbshroom','Spore','Dark Spore','Shakeshroom','Blockhead',
  47. 'Secretion','Fireball','Tail Blow','Plague Breath','Brain Crush','Infrasonics','1000 Needles',
  48. 'Needleshot','Chaotic Eye','Blaster','Scythe Tail','Ripper Fang','Chomp Rush','Intimidate','Recoil Dive',
  49. 'Water Wall','Snow Cloud','Wild Carrot','Sudden Lunge','Spiral Spin','Noisome Powder','Wing Slap',
  50. 'Beak Lunge','Suction','Drainkiss','Acid Mist','TP Drainkiss','Back Heel','Jettatura','Choke Breath',
  51. 'Fantod','Charged Whisker','Purulent Ooze','Corrosive Ooze','Tortoise Stomp','Harden Shell','Aqua Breath',
  52. 'Sensilla Blades','Tegmina Buffet','Molting Plumage','Swooping Frenzy','Pentapeck','Sweeping Gouge',
  53. 'Zealous Snort'}
  54. end
  55.  
  56. -------------------------------------------------------------------------------------------------------------------
  57. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  58. -------------------------------------------------------------------------------------------------------------------
  59.  
  60. function user_setup()
  61. state.OffenseMode:options('Normal', 'Acc')
  62. state.WeaponskillMode:options('Normal', 'Acc')
  63. state.IdleMode:options('Normal', 'Refresh', 'Reraise')
  64. state.PhysicalDefenseMode:options('PDT', 'Hybrid', 'Reraise')
  65.  
  66. update_combat_form()
  67. end
  68.  
  69.  
  70. -- Called when this job file is unloaded (eg: job change)
  71. function user_unload()
  72. -- Unbinds the Reward and Correlation hotkeys.
  73. send_command('unbind ^f8')
  74. send_command('unbind !f8')
  75. end
  76.  
  77.  
  78. -- Define sets and vars used by this job file.
  79. function init_gear_sets()
  80. --------------------------------------
  81. -- Precast sets
  82. --------------------------------------
  83.  
  84. sets.precast.JA['Killer Instinct'] = {head="Ankusa Helm +1"}
  85. sets.precast.JA['Feral Howl'] = {body="Ankusa Jackcoat +1"}
  86.  
  87. sets.precast.JA['Beastial Loyalty'] =
  88. {head="Gorney Morion +1",neck="Ferine Necklace",ear1="Volley Earring",ear2="Brutal Earring",
  89. body="Meghanada Cuirie",hands="Ankusa Gloves",ring1="Rajas Ring",ring2="Epona's Ring",
  90. back="Atheling Mantle",waist="Chiner's Belt +1",legs="Tali'ah Seraweels",feet="Tali'ah Crackows"}
  91.  
  92. sets.precast.JA['Call Beast'] = sets.precast.JA['Beastial Loyalty']
  93.  
  94. sets.precast.JA['Familiar'] = {legs="Meg. Chausses"}
  95. sets.precast.JA['Tame'] = {head="Totemic Helm +1",ear1="Tamer's Earring",legs="Stout Kecks"}
  96. sets.precast.JA['Spur'] = {feet="Ferine Ocreae +2"}
  97.  
  98. sets.precast.JA['Reward'] = {ammo=RewardFood,
  99. head="Stout Bonnet",neck="Aife's Medal",ear1="Lifestorm Earring",ear2="Neptune's Pearl",
  100. body="Totemic Jackcoat +1",hands="Meg. Gloves +1",ring1="Angel Ring",ring2="Aquasoul Ring",
  101. back="Atheling Mantle",waist="Crudelis Belt",legs="Meg. Chausses",feet="Mst. Gaiters +2"}
  102.  
  103. sets.precast.JA['Charm'] = {ammo="Oneiros Pebble",
  104. head="Totemic Helm +1",neck="Ferine Necklace",ear1="Enchanter's Earring",ear2="Reverie Earring +1",
  105. body="Ankusa Jackcoat +1",hands="Ankusa Gloves",ring1="Angel Ring",ring2="Dawnsoul Ring",
  106. back="Aisance Mantle +1",waist="Aristo Belt",legs="Meg. Chausses",feet="Meg. Jam. +1"}
  107.  
  108. -- CURING WALTZ
  109. sets.precast.Waltz = {ammo="Oneiros Pebble",
  110. head="Totemic Helm +1",neck="Ferine Necklace",ear1="Enchanter's Earring",ear2="Reverie Earring +1",
  111. body="Meghanada Cuirie",hands="Gorney Moufles +1",ring1="Angel Ring",ring2="Asklepian Ring",
  112. back="Aisance Mantle +1",waist="Aristo Belt",legs="Osmium Cuisses",feet="Meg. Jam. +1"}
  113.  
  114. -- HEALING WALTZ
  115. sets.precast.Waltz['Healing Waltz'] = {}
  116.  
  117. -- STEPS
  118. sets.precast.Step = {ammo="Oneiros Pebble",
  119. head="Gorney Morion +1",neck="Ziel Charm",ear1="Choreia Earring",ear2="Suppanomimi",
  120. body="Meghanada Cuirie",hands="Buremte Gloves",ring1="Rajas Ring",ring2="Tyrant's Ring",
  121. back="Letalis Mantle",waist="Hurch'lan Sash",legs="Meg. Chausses",feet="Gor. Sollerets +1"}
  122.  
  123. -- VIOLENT FLOURISH
  124. sets.precast.Flourish1 = {}
  125. sets.precast.Flourish1['Violent Flourish'] = {body="Ankusa Jackcoat +1",legs="Meg. Chausses",feet="Iuitl Gaiters +1"}
  126.  
  127. sets.precast.FC = {ammo="Impatiens",neck="Orunmila's Torque",ear1="Loquacious Earring",ring1="Prolix Ring"}
  128. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  129.  
  130. -- WEAPONSKILLS
  131. -- Default weaponskill set.
  132. sets.precast.WS = {ammo="Oneiros Pebble",
  133. head="Meghanada Visor",neck="Ferine Necklace",ear1="Volley Earring",ear2="Brutal Earring",
  134. body="Meghanada Cuirie",hands="Meg. Gloves +1",ring1="Rajas Ring",ring2="Epona's Ring",
  135. back="Atheling Mantle",waist="Chiner's Belt +1",legs="Meg. Chausses",feet="Gor. Sollerets +1"}
  136.  
  137. sets.precast.WS.WSAcc = {ammo="Oneiros Pebble",
  138. head="Gorney Morion +1",neck="Ferine Necklace",ear1="Volley Earring",ear2="Brutal Earring",
  139. body="Meghanada Cuirie",hands="Meg. Gloves +1",ring1="Meghanada Ring",ring2="Epona's Ring",
  140. back="Atheling Mantle",waist="Chiner's Belt +1",legs="Meg. Chausses",feet="Meg. Jam. +1"}
  141.  
  142. -- Specific weaponskill sets.
  143. sets.precast.WS['Ruinator'] = set_combine(sets.precast.WS, {neck="Breeze Gorget",hands="Meg. Gloves +1",
  144. back="Buquwik Cape",waist="Breeze Belt"})
  145.  
  146. sets.precast.WS['Ruinator'].WSAcc = set_combine(sets.precast.WS.WSAcc, {neck="Breeze Gorget",waist="Breeze Belt"})
  147.  
  148. sets.precast.WS['Ruinator'].Mekira = set_combine(sets.precast.WS['Ruinator'], {head="Mekira-oto +1"})
  149.  
  150. sets.precast.WS['Onslaught'] = set_combine(sets.precast.WS, {ear1="Steelflash Earring",ear2="Bladeborn Earring",
  151. ring1="Rajas Ring",feet="Ejekamal Boots"})
  152.  
  153. sets.precast.WS['Onslaught'].WSAcc = set_combine(sets.precast.WSAcc, {hands="Buremte Gloves",ring1="Rajas Ring"})
  154. sets.precast.WS['Primal Rend'] = {ammo="Erlene's Notebook",
  155. head="Meghanada Visor",neck="Ferine Necklace",ear1="Volley Earring",ear2="Brutal Earring",
  156. body="Meghanada Cuirie",hands="Meg. Gloves +1",ring1="Rajas Ring",ring2="Epona's Ring",
  157. back="Atheling Mantle",waist="Chiner's Belt +1",legs="Meg. Chausses",feet="Gor. Sollerets +1"}
  158.  
  159. sets.precast.WS['Cloudsplitter'] = set_combine(sets.precast.WS['Primal Rend'], {waist="Thunder Belt"})
  160.  
  161.  
  162. --------------------------------------
  163. -- Midcast sets
  164. --------------------------------------
  165.  
  166. sets.midcast.FastRecast = {ammo="Impatiens",
  167. head="Iuitl Headgear +1",neck="Orunmila's Torque",ear1="Loquacious Earring",
  168. body="Meghanada Cuirie",hands="Iuitl Wristbands +1",ring1="Prolix Ring",ring2="Dark Ring",
  169. back="Shadow Mantle",waist="Hurch'lan Sash",legs="Meg. Chausses",feet="Iuitl Gaiters +1"}
  170.  
  171. sets.midcast.Utsusemi = sets.midcast.FastRecast
  172.  
  173.  
  174. -- PET SIC & READY MOVES
  175. sets.midcast.Pet.WS = {ammo="Demonry Core",
  176. head="Gorney Morion +1",neck="Ferine Necklace",ear1="Suppanomimi",ear2="Ferine Earring",
  177. body="Meghanada Cuirie",hands="Nukumi Manoplas",ring1="Meghanada Ring",ring2="Tyrant's Ring",
  178. back="Ferine Mantle",waist="Hurch'lan Sash",legs="Tali'ah Seraweels",feet="Tali'ah Crackows"}
  179.  
  180. sets.midcast.Pet.WS.Unleash = set_combine(sets.midcast.Pet.WS, {hands="Scorpion Mittens"})
  181.  
  182. sets.midcast.Pet.Neutral = {legs="Desultor Tassets"}
  183. sets.midcast.Pet.Favorable = {head="Ferine Cabasset +2",legs="Desultor Tassets"}
  184.  
  185.  
  186. --------------------------------------
  187. -- Idle/resting/defense/etc sets
  188. --------------------------------------
  189.  
  190. -- RESTING
  191. sets.resting = {ammo="Demonry Core",
  192. head="Twilight Helm",neck="Orochi Nodowa",ear1="Suppanomimi",ear2="Ferine Earring",
  193. body="Twilight Mail",hands="Meg. Gloves +1",ring1="Paguroidea Ring",ring2="Chirich Ring",
  194. back="Shadow Mantle",waist="Nierenschutz",legs="Monster Trousers",feet="Tali'ah Crackows"}
  195.  
  196. -- IDLE SETS
  197. sets.idle = {ammo="Demonry Core",
  198. head="Twilight Helm",neck="Orochi Nodowa",ear1="Suppanomimi",ear2="Brutal Earring",
  199. body="Twilight Mail",hands="Meg. Gloves +1",ring1="Paguroidea Ring",ring2="Chirich Ring",
  200. back="Shadow Mantle",waist="Nierenschutz",legs="Meg. Chausses",feet="Gor. Sollerets +1"}
  201.  
  202. sets.idle.Town = {ammo="Demonry Core",
  203. head="Twilight Helm",neck="Orochi Nodowa",ear1="Suppanomimi",ear2="Brutal Earring",
  204. body="Twilight Mail",hands="Meg. Gloves +1",ring1="Paguroidea Ring",ring2="Chirich Ring",
  205. back="Shadow Mantle",waist="Nierenschutz",legs="Tali'ah Seraweels",feet="Tali'ah Crackows"}
  206.  
  207. sets.idle.Refresh = {head="Wivre Hairpin",body="Twilight Mail",hands="Ogier's Gauntlets",legs="Ogier's Breeches"}
  208.  
  209. sets.idle.Reraise = set_combine(sets.idle, {head="Twilight Helm",body="Twilight Mail"})
  210.  
  211. sets.idle.Pet = sets.idle
  212.  
  213. sets.idle.Pet.Engaged = {ammo="Demonry Core",
  214. head="Meghanada Visor",neck="Ferine Necklace",ear1="Suppanomimi",ear2="Ferine Earring",
  215. body="Meghanada Cuirie",hands="Ankusa Gloves",ring1="Archon Ring",ring2="Chirich Ring",
  216. back="Ferine Mantle",waist="Chiner's Belt +1",legs="Tali'ah Seraweels",feet="Tali'ah Crackows"}
  217.  
  218. -- DEFENSE SETS
  219. sets.defense.PDT = {ammo="Jukukik Feather",
  220. head="Meghanada Visor",neck="Twilight Torque",
  221. body="Meghanada Cuirie",hands="Iuitl Wristbands +1",ring1="Meghanada Ring",ring2="Paguroidea Ring",
  222. back="Shadow Mantle",waist="Nierenschutz",legs="Meg. Chausses",feet="Iuitl Gaiters +1"}
  223.  
  224. sets.defense.Hybrid = set_combine(sets.defense.PDT, {head="Iuitl Headgear +1",
  225. back="Shadow Mantle",waist="Hurch'lan Sash",legs="Meg. Chausses",feet="Iuitl Gaiters +1"})
  226.  
  227. sets.defense.Reraise = set_combine(sets.defense.Hybrid, {head="Twilight Helm",body="Twilight Mail"})
  228.  
  229. sets.defense.MDT = set_combine(sets.defense.PDT, {ammo="Sihirik",
  230. head="Ogier's Helm",ear1="Flashward Earring",ear2="Spellbreaker Earring",
  231. body="Nocturnus Mail",ring1="Shadow Ring",
  232. back="Engulfer Cape",waist="Nierenschutz"})
  233.  
  234. sets.Kiting = {ammo="Demonry Core",
  235. head="Iuitl Headgear +1",neck="Twilight Torque",
  236. body="Meghanada Cuirie",hands="Iuitl Wristbands +1",ring1="Meghanada Ring",ring2="Paguroidea Ring",
  237. back="Shadow Mantle",waist="Nierenschutz",legs="Meg. Chausses",feet="Tali'ah Crackows"}
  238.  
  239.  
  240. --------------------------------------
  241. -- Engaged sets
  242. --------------------------------------
  243.  
  244. sets.engaged = {ammo="Oneiros Pebble",
  245. head="Gorney Morion +1",neck="Ferine Necklace",ear1="Suppanomimi",ear2="Brutal Earring",
  246. body="Meghanada Cuirie",hands="Tali'ah Gages",ring1="Rajas Ring",ring2="Epona's Ring",
  247. back="Atheling Mantle",waist="Chiner's Belt +1",legs="Tali'ah Seraweels",feet="Taeon Boots"}
  248.  
  249. sets.engaged.Acc = {ammo="Oneiros Pebble",
  250. head="Gorney Morion +1",neck="Ziel Charm",ear1="Suppanomimi",ear2="Dudgeon Earring",
  251. body="Meghanada Cuirie",hands="Buremte Gloves",ring1="Rajas Ring",ring2="Meghanada Ring",
  252. back="Atheling Mantle",waist="Chiner's Belt +1",legs="Meg. Chausses",feet="Meg. Jam. +1"}
  253.  
  254. sets.engaged.Killer = set_combine(sets.engaged, {body="Ferine Gausape +2",waist="Cetl Belt"})
  255. sets.engaged.Killer.Acc = set_combine(sets.engaged.Acc, {body="Ferine Gausape +2",waist="Cetl Belt"})
  256.  
  257.  
  258. -- EXAMPLE SETS WITH PET MODES
  259. --[[
  260. sets.engaged.PetStance = {}
  261. sets.engaged.PetStance.Acc = {}
  262. sets.engaged.PetTank = {}
  263. sets.engaged.PetTank.Acc = {}
  264. sets.engaged.PetStance.Killer = {}
  265. sets.engaged.PetStance.Killer.Acc = {}
  266. sets.engaged.PetTank.Killer = {}
  267. sets.engaged.PetTank.Killer.Acc = {}
  268. ]]
  269. -- MORE EXAMPLE SETS WITH EXPANDED COMBAT FORMS
  270. --[[
  271. sets.engaged.DW.PetStance = {}
  272. sets.engaged.DW.PetStance.Acc = {}
  273. sets.engaged.DW.PetTank = {}
  274. sets.engaged.DW.PetTank.Acc = {}
  275. sets.engaged.KillerDW.PetStance = {}
  276. sets.engaged.KillerDW.PetStance.Acc = {}
  277. sets.engaged.KillerDW.PetTank= {}
  278. sets.engaged.KillerDW.PetTank.Acc = {}
  279. ]]
  280.  
  281. --------------------------------------
  282. -- Custom buff sets
  283. --------------------------------------
  284.  
  285. sets.buff['Killer Instinct'] = {body="Ferine Gausape +2"}
  286.  
  287. end
  288.  
  289.  
  290. -------------------------------------------------------------------------------------------------------------------
  291. -- Job-specific hooks for standard casting events.
  292. -------------------------------------------------------------------------------------------------------------------
  293.  
  294. function job_precast(spell, action, spellMap, eventArgs)
  295. -- Define class for Sic and Ready moves.
  296. if ready_moves_to_check:contains(spell.english) and pet.status == 'Engaged' then
  297. classes.CustomClass = "WS"
  298. end
  299. end
  300.  
  301.  
  302. function job_post_precast(spell, action, spellMap, eventArgs)
  303. -- If Killer Instinct is active during WS, equip Ferine Gausape +2.
  304. if spell.type:lower() == 'weaponskill' and buffactive['Killer Instinct'] then
  305. equip(sets.buff['Killer Instinct'])
  306. end
  307. end
  308.  
  309.  
  310. function job_pet_post_midcast(spell, action, spellMap, eventArgs)
  311. -- Equip monster correlation gear, as appropriate
  312. equip(sets.midcast.Pet[state.CorrelationMode.value])
  313. end
  314.  
  315. -------------------------------------------------------------------------------------------------------------------
  316. -- Job-specific hooks for non-casting events.
  317. -------------------------------------------------------------------------------------------------------------------
  318.  
  319. function job_buff_change(buff, gain)
  320. if buff == 'Killer Instinct' then
  321. update_combat_form()
  322. handle_equipping_gear(player.status)
  323. end
  324. end
  325.  
  326. -- Called when the pet's status changes.
  327. function job_pet_status_change(newStatus, oldStatus)
  328.  
  329. end
  330.  
  331. -- Handle notifications of general user state change.
  332. function job_state_change(stateField, newValue, oldValue)
  333. if stateField == 'Reward Mode' then
  334. -- Thena, Zeta or Eta
  335. RewardFood.name = "Pet Food " .. newValue
  336. elseif stateField == 'Pet Mode' then
  337. state.CombatWeapon:set(newValue)
  338. end
  339. end
  340.  
  341. -------------------------------------------------------------------------------------------------------------------
  342. -- User code that supplements standard library decisions.
  343. -------------------------------------------------------------------------------------------------------------------
  344.  
  345. function get_custom_wsmode(spell, spellMap, defaut_wsmode)
  346. if defaut_wsmode == 'Normal' then
  347. if spell.english == "Ruinator" and (world.day_element == 'Water' or world.day_element == 'Wind' or world.day_element == 'Ice') then
  348. return 'Mekira'
  349. end
  350. end
  351. end
  352.  
  353. -- Called by the 'update' self-command, for common needs.
  354. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  355. function job_update(cmdParams, eventArgs)
  356. update_combat_form()
  357. end
  358.  
  359.  
  360. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  361. function display_current_job_state(eventArgs)
  362. local msg = 'Melee'
  363.  
  364. if state.CombatForm.has_value then
  365. msg = msg .. ' (' .. state.CombatForm.value .. ')'
  366. end
  367.  
  368. msg = msg .. ': '
  369.  
  370. msg = msg .. state.OffenseMode.value
  371. if state.HybridMode.value ~= 'Normal' then
  372. msg = msg .. '/' .. state.HybridMode.value
  373. end
  374. msg = msg .. ', WS: ' .. state.WeaponskillMode.value
  375.  
  376. if state.DefenseMode.value ~= 'None' then
  377. msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
  378. end
  379.  
  380. if state.Kiting.value then
  381. msg = msg .. ', Kiting'
  382. end
  383.  
  384. msg = msg .. ', Reward: '..state.RewardMode.value..', Correlation: '..state.CorrelationMode.value
  385.  
  386. add_to_chat(122, msg)
  387.  
  388. eventArgs.handled = true
  389. end
  390.  
  391.  
  392. -------------------------------------------------------------------------------------------------------------------
  393. -- Utility functions specific to this job.
  394. -------------------------------------------------------------------------------------------------------------------
  395.  
  396. function update_combat_form()
  397. if buffactive['Killer Instinct'] then
  398. if (player.sub_job == 'NIN' or player.sub_job == 'DNC') and player.equipment.sub:endswith('Axe') then
  399. state.CombatForm:set('KillerDW')
  400. else
  401. state.CombatForm:set('Killer')
  402. end
  403. elseif (player.sub_job == 'NIN' or player.sub_job == 'DNC') and player.equipment.sub:endswith('Axe') then
  404. state.CombatForm:set('DW')
  405. else
  406. state.CombatForm:reset()
  407. end
  408. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement