Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.58 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job. Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- Initialization function for this job file.
  6. function get_sets()
  7. mote_include_version = 2
  8.  
  9. -- Load and initialize the include file.
  10. include('Mote-Include.lua')
  11. end
  12.  
  13.  
  14. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  15. function job_setup()
  16. -- List of pet weaponskills to check for
  17. petWeaponskills = S{"Slapstick", "Knockout", "Magic Mortar",
  18. "Chimera Ripper", "String Clipper", "Cannibal Blade", "Bone Crusher", "String Shredder",
  19. "Arcuballista", "Daze", "Armor Piercer", "Armor Shatterer"}
  20.  
  21. -- Map automaton heads to combat roles
  22. petModes = {
  23. ['Harlequin Head'] = 'Melee',
  24. ['Sharpshot Head'] = 'Ranged',
  25. ['Valoredge Head'] = 'Tank',
  26. ['Stormwaker Head'] = 'Magic',
  27. ['Soulsoother Head'] = 'Heal',
  28. ['Spiritreaver Head'] = 'Nuke'
  29. }
  30.  
  31. -- Subset of modes that use magic
  32. magicPetModes = S{'Nuke','Heal','Magic'}
  33.  
  34. -- Var to track the current pet mode.
  35. state.PetMode = M{['description']='Pet Mode', 'None', 'Melee', 'Ranged', 'Tank', 'Magic', 'Heal', 'Nuke'}
  36. end
  37.  
  38. -------------------------------------------------------------------------------------------------------------------
  39. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  40. -------------------------------------------------------------------------------------------------------------------
  41.  
  42. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  43. function user_setup()
  44. state.OffenseMode:options('Normal', 'Acc', 'Hybrid')
  45. state.HybridMode:options('Normal')
  46. state.WeaponskillMode:options('Normal')
  47. state.PhysicalDefenseMode:options('PDT')
  48.  
  49. -- Default maneuvers 1, 2, 3 and 4 for each pet mode.
  50. defaultManeuvers = {
  51. ['Melee'] = {'Fire Maneuver', 'Thunder Maneuver', 'Wind Maneuver', 'Light Maneuver'},
  52. ['Ranged'] = {'Wind Maneuver', 'Fire Maneuver', 'Thunder Maneuver', 'Light Maneuver'},
  53. ['Tank'] = {'Earth Maneuver', 'Dark Maneuver', 'Light Maneuver', 'Wind Maneuver'},
  54. ['Magic'] = {'Ice Maneuver', 'Light Maneuver', 'Dark Maneuver', 'Earth Maneuver'},
  55. ['Heal'] = {'Light Maneuver', 'Dark Maneuver', 'Water Maneuver', 'Earth Maneuver'},
  56. ['Nuke'] = {'Ice Maneuver', 'Dark Maneuver', 'Light Maneuver', 'Earth Maneuver'}
  57. }
  58.  
  59. update_pet_mode()
  60. select_default_macro_book()
  61. end
  62.  
  63.  
  64. -- Define sets used by this job file.
  65. function init_gear_sets()
  66.  
  67. FChead={ name="Herculean Helm", augments={'Mag. Acc.+24','"Fast Cast"+6','"Mag.Atk.Bns."+1',}}
  68. FCBody = { name="Taeon tabard", augments={'Accuracy+18 Attack+18','"Fast Cast"+5','Phalanx +3',}}
  69. FCfeet={ name="Herculean Boots", augments={'"Mag.Atk.Bns."+18','"Fast Cast"+6','STR+2',}}
  70.  
  71. Refreshfeet={ name="Herculean Boots", augments={'MND+10','"Repair" potency +6%','"Refresh"+2','Accuracy+4 Attack+4',}}
  72.  
  73. TPfeet={ name="Herculean Boots", augments={'Accuracy+10 Attack+10','"Triple Atk."+4','STR+7','Accuracy+15','Attack+1',}}
  74.  
  75. DThead={ name="Herculean Helm", augments={'Pet: Attack+30 Pet: Rng.Atk.+30','Pet: "Dbl. Atk."+3','Damage taken-4%','Accuracy+18 Attack+18',}}
  76. DThands={ name="Herculean Gloves", augments={'AGI+9','Damage taken-3%','Accuracy+16 Attack+16','Mag. Acc.+3 "Mag.Atk.Bns."+3',}}
  77. DTlegs={ name="Herculean Trousers", augments={'Accuracy+27','Damage taken-2%','STR+7','Attack+14',}}
  78. DTfeet={ name="Herculean Boots", augments={'Accuracy+24','Phys. dmg. taken -5%','DEX+8','Attack+9',}}
  79.  
  80. Critlegs= { name="Herculean Trousers", augments={'Accuracy+28','Crit.hit rate+3','DEX+7','Attack+7',}}
  81. Critfeet={ name="Herculean Boots", augments={'Accuracy+21 Attack+21','Crit.hit rate+3','DEX+15','Attack+11',}}
  82.  
  83. MasterPetback={ name="Visucius's Mantle", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Accuracy+20 Attack+20','Pet: Haste+10',}}
  84. PetRegenback={ name="Visucius's Mantle", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: "Regen"+10',}}
  85.  
  86. -- Precast Sets
  87.  
  88. -- Fast cast sets for spells
  89. sets.precast.FC = {head=FChead,neck="Baetyl Pendant",ear2="Loquacious Earring",
  90. body=FCBody,ring1="Lebeche Ring",ring2="Prolix Ring",
  91. back=FCback,legs="Orvail Pants +1",feet=FCfeet}
  92.  
  93. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  94.  
  95.  
  96. -- Precast sets to enhance JAs
  97. sets.precast.JA['Tactical Switch'] = {}
  98.  
  99. sets.precast.JA['Repair'] = {ear1="Pratik Earring",feet=Refreshfeet}
  100.  
  101. sets.precast.JA.Maneuver = {neck="Buffoon's Collar",body="Karagoz Farsetto"}
  102.  
  103.  
  104.  
  105. -- Waltz set (chr and vit)
  106. sets.precast.Waltz = {}
  107.  
  108. -- Don't need any special gear for Healing Waltz.
  109. sets.precast.Waltz['Healing Waltz'] = {}
  110.  
  111.  
  112. -- Weaponskill sets
  113. -- Default set for any weaponskill that isn't any more specifically defined
  114. sets.precast.WS = {
  115. head="Hizamaru somen +1",neck="Fotia Gorget",ear1="Telos Earring",ear2="Odnowa Earring +1",
  116. body="Hizamaru Haramaki +1",hands="Tali'ah Gages +1",ring1="Niqmaddu Ring",ring2="Regal Ring",
  117. back=MasterPetback,waist="Moonbow Belt",legs="Hizamaru Hizayoroi +1",feet=TPfeet}
  118.  
  119. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  120.  
  121. sets.precast.WS['Stringing Pummel'] = {
  122. head="Rao Kabuto",neck="Fotia Gorget",ear1="Telos Earring",ear2="Moonshade Earring",
  123. body="Abnoba Kaftan",hands="Tali'ah Gages +1",ring1="Niqmaddu Ring",ring2="Regal Ring",
  124. back=MasterPetback,waist="Moonbow Belt",legs=Critlegs,feet=Critfeet}
  125.  
  126. sets.precast.WS['Victory Smite'] = {
  127. head="Rao Kabuto",neck="Fotia Gorget",ear1="Telos Earring",ear2="Moonshade Earring",
  128. body="Abnoba Kaftan",hands="Tali'ah Gages +1",ring1="Niqmaddu Ring",ring2="Regal Ring",
  129. back=MasterPetback,waist="Moonbow Belt",legs=Critlegs,feet=Critfeet}
  130. sets.precast.WS['Shijin Spiral'] = {
  131. head=DThead,neck="Fotia Gorget",ear1="Telos Earring",ear2="Odnowa earring +1",
  132. body="Tali'ah manteel +1",hands="Tali'ah Gages +1",ring1="Niqmaddu Ring",ring2="Regal Ring",
  133. back=MasterPetback,waist="Moonbow Belt",legs="Samnuha Tights",feet=Critfeet}
  134.  
  135.  
  136. -- Midcast Sets
  137.  
  138. sets.midcast.FastRecast = {}
  139.  
  140.  
  141. -- Midcast sets for pet actions
  142. sets.midcast.Pet.Cure = {}
  143.  
  144. sets.midcast.Pet['Elemental Magic'] = {}
  145.  
  146. sets.midcast.Pet.WeaponSkill = {}
  147.  
  148.  
  149. -- Sets to return to when not performing an action.
  150.  
  151. -- Resting sets
  152. sets.resting = {}
  153.  
  154.  
  155. -- Idle sets
  156.  
  157. sets.idle = {
  158. head=DThands,neck="Bathy Choker +1",ear1="Sanare Earring",ear2="Infused Earring",
  159. body="Hizamaru Haramaki +1",hands=DThands,ring1="Sheltered Ring",ring2="Paguroidea Ring",
  160. back=PetRegenback,waist="Isa Belt",legs=DTlegs,feet="Hermes' Sandals"}
  161.  
  162. sets.idle.Town = sets.idle
  163.  
  164. -- Set for idle while pet is out (eg: pet regen gear)
  165. sets.idle.Pet = sets.idle
  166.  
  167. -- Idle sets to wear while pet is engaged
  168. sets.idle.Pet.Engaged = {
  169. head="Rao Kabuto",neck="Empath Necklace",ear1="Enmerkar Earring",ear2="Domesticator's Earring",
  170. body="Rao Togi",hands="Tali'ah Gages +1",ring1="Overbearing Ring",ring2="Varar Ring",
  171. back=PetRegenback,waist="Isa Belt",legs="Tali'ah seraweels +1",feet="Rao sune-ate +1"}
  172.  
  173. sets.idle.Pet.Engaged.Ranged = set_combine(sets.idle.Pet.Engaged, {head="Tali'ah turban +1",body="Tali'ah manteel +1",back=MasterPetback,feet="Tali'ah Seraweels +1"})
  174.  
  175. sets.idle.Pet.Engaged.Nuke = set_combine(sets.idle.Pet.Engaged, {})
  176.  
  177. sets.idle.Pet.Engaged.Magic = set_combine(sets.idle.Pet.Engaged, {})
  178.  
  179.  
  180. -- Defense sets
  181.  
  182.  
  183. sets.defense.PDT = {
  184. head=DThands,neck="Loricate Torque +1",ear1="Genmei earring",ear2="Enmerkar earring",
  185. body="Hizamaru haramaki +1",hands=DThands,ring1="Vocane Ring",ring2="Defending Ring",
  186. back="Moonlight Cape",waist="Moonbow Belt",legs=DTlegs,feet=DTfeet}
  187.  
  188. sets.defense.MDT = {
  189. head=DThands,neck="Warder's Charm +1",ear1="Sanare earring",ear2="Eabani earring",
  190. body="Passion Jacket",hands=DThands,ring1="Vocane Ring",ring2="Defending Ring",
  191. back="Moonlight Cape",waist="Carrier's Sash",legs=DTlegs,feet=DTfeet}
  192.  
  193. sets.Kiting = {}
  194.  
  195. -- Engaged sets
  196.  
  197. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  198. -- sets if more refined versions aren't defined.
  199. -- If you create a set with both offense and defense modes, the offense mode should be first.
  200. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  201.  
  202. -- Normal melee group
  203. sets.engaged = {
  204. head="Hizamaru Somen +1",neck="Combatant's Torque",ear1="Enervating Earring",ear2="Telos Earring",
  205. body="Tali'ah Manteel +1",hands="Tali'ah Gages +1",ring1="Niqmaddu Ring",ring2="Epona's Ring",
  206. back=MasterPetback,waist="Moonbow Belt",legs="Samnuha Tights",feet=TPfeet}
  207. sets.engaged.Acc = {
  208. head="Tali'ah turban +1",neck="Empath Necklace",ear1="Enmerkar Earring",ear2="Telos Earring",
  209. body="Tali'ah Manteel +1",hands="Tali'ah Gages +1",ring1="Niqmaddu Ring",ring2="Varar Ring",
  210. back=MasterPetback,waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"}
  211. sets.engaged.Hybrid = {
  212. head="Tali'ah turban +1",neck="Empath Necklace",ear1="Enmerkar Earring",ear2="Telos Earring",
  213. body="Tali'ah Manteel +1",hands="Tali'ah Gages +1",ring1="Niqmaddu Ring",ring2="Epona's Ring",
  214. back=MasterPetback,waist="Moonbow Belt",legs="Samnuha Tights",feet=TPfeet}
  215.  
  216. end
  217.  
  218.  
  219. -------------------------------------------------------------------------------------------------------------------
  220. -- Job-specific hooks for standard casting events.
  221. -------------------------------------------------------------------------------------------------------------------
  222.  
  223. -- Called when pet is about to perform an action
  224. function job_pet_midcast(spell, action, spellMap, eventArgs)
  225. if petWeaponskills:contains(spell.english) then
  226. classes.CustomClass = "Weaponskill"
  227. equip(sets.midcast.Pet.WeaponSkill)
  228. end
  229. end
  230.  
  231.  
  232. -------------------------------------------------------------------------------------------------------------------
  233. -- Job-specific hooks for non-casting events.
  234. -------------------------------------------------------------------------------------------------------------------
  235.  
  236. -- Called when a player gains or loses a buff.
  237. -- buff == buff gained or lost
  238. -- gain == true if the buff was gained, false if it was lost.
  239. function job_buff_change(buff, gain)
  240. if buff == 'Wind Maneuver' then
  241. handle_equipping_gear(player.status)
  242. end
  243. end
  244.  
  245. -- Called when a player gains or loses a pet.
  246. -- pet == pet gained or lost
  247. -- gain == true if the pet was gained, false if it was lost.
  248. function job_pet_change(pet, gain)
  249. update_pet_mode()
  250. end
  251.  
  252. -- Called when the pet's status changes.
  253. function job_pet_status_change(newStatus, oldStatus)
  254. if newStatus == 'Engaged' then
  255. display_pet_status()
  256. end
  257. end
  258.  
  259.  
  260. -------------------------------------------------------------------------------------------------------------------
  261. -- User code that supplements standard library decisions.
  262. -------------------------------------------------------------------------------------------------------------------
  263.  
  264. -- Called by the 'update' self-command, for common needs.
  265. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  266. function job_update(cmdParams, eventArgs)
  267. update_pet_mode()
  268. end
  269.  
  270.  
  271. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  272. function display_current_job_state(eventArgs)
  273. display_pet_status()
  274. end
  275.  
  276.  
  277. -------------------------------------------------------------------------------------------------------------------
  278. -- User self-commands.
  279. -------------------------------------------------------------------------------------------------------------------
  280.  
  281. -- Called for custom player commands.
  282. function job_self_command(cmdParams, eventArgs)
  283. if cmdParams[1] == 'maneuver' then
  284. if pet.isvalid then
  285. local man = defaultManeuvers[state.PetMode.value]
  286. if man and tonumber(cmdParams[2]) then
  287. man = man[tonumber(cmdParams[2])]
  288. end
  289.  
  290. if man then
  291. send_command('input /pet "'..man..'" <me>')
  292. end
  293. else
  294. add_to_chat(123,'No valid pet.')
  295. end
  296. end
  297. end
  298.  
  299.  
  300. -------------------------------------------------------------------------------------------------------------------
  301. -- Utility functions specific to this job.
  302. -------------------------------------------------------------------------------------------------------------------
  303.  
  304. -- Get the pet mode value based on the equipped head of the automaton.
  305. -- Returns nil if pet is not valid.
  306. function get_pet_mode()
  307. if pet.isvalid then
  308. return petModes[pet.head] or 'None'
  309. else
  310. return 'None'
  311. end
  312. end
  313.  
  314. -- Update state.PetMode, as well as functions that use it for set determination.
  315. function update_pet_mode()
  316. state.PetMode:set(get_pet_mode())
  317. update_custom_groups()
  318. end
  319.  
  320. -- Update custom groups based on the current pet.
  321. function update_custom_groups()
  322. classes.CustomIdleGroups:clear()
  323. if pet.isvalid then
  324. classes.CustomIdleGroups:append(state.PetMode.value)
  325. end
  326. end
  327.  
  328. -- Display current pet status.
  329. function display_pet_status()
  330. if pet.isvalid then
  331. local petInfoString = pet.name..' ['..pet.head..']: '..tostring(pet.status)..' TP='..tostring(pet.tp)..' HP%='..tostring(pet.hpp)
  332.  
  333. if magicPetModes:contains(state.PetMode.value) then
  334. petInfoString = petInfoString..' MP%='..tostring(pet.mpp)
  335. end
  336.  
  337. add_to_chat(122,petInfoString)
  338. end
  339. end
  340.  
  341. -- Select default macro book on initial load or subjob change.
  342. function select_default_macro_book()
  343. -- Default macro set/book
  344. if player.sub_job == 'DNC' then
  345. set_macro_page(2, 9)
  346. elseif player.sub_job == 'NIN' then
  347. set_macro_page(3, 9)
  348. elseif player.sub_job == 'THF' then
  349. set_macro_page(4, 9)
  350. else
  351. set_macro_page(1, 9)
  352. end
  353. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement